diff --git a/alib2data/src/Api.cpp b/alib2data/src/Api.cpp
index c99ee8e0a60d081dce2e9e74d889ff3cdb8cdd57..a6997c96a517ac22659e392353f817f2bfcfb060 100644
--- a/alib2data/src/Api.cpp
+++ b/alib2data/src/Api.cpp
@@ -47,6 +47,14 @@ std::list<sax::Token> api<container::ObjectsSet>::compose(const container::Objec
 	return ToXMLComposers::containerComposer.compose(data);
 }
 
+container::ObjectsVector api<container::ObjectsVector>::parse(std::list<sax::Token>& input) {
+	return FromXMLParsers::containerParser.parseObjectsVector(input);
+}
+
+std::list<sax::Token> api<container::ObjectsVector>::compose(const container::ObjectsVector& data) {
+	return ToXMLComposers::containerComposer.compose(data);
+}
+
 alib::Object api<alib::Object>::parse(std::list<sax::Token>& input) {
 	return FromXMLParsers::objectParser.parseObject(input);
 }
@@ -448,6 +456,10 @@ void ToXMLComposers::Visit(void* data, const container::ObjectsSet& container) c
 	*((std::list<sax::Token>*) data) = std::move(api<container::ObjectsSet>::compose(container));
 }
 
+void ToXMLComposers::Visit(void* data, const container::ObjectsVector& container) const {
+	*((std::list<sax::Token>*) data) = std::move(api<container::ObjectsVector>::compose(container));
+}
+
 void ToXMLComposers::Visit(void* data, const exception::AlibException& symbol) const {
 	*((std::list<sax::Token>*) data) = std::move(api<exception::AlibException>::compose(symbol));
 }
diff --git a/alib2data/src/Api.hpp b/alib2data/src/Api.hpp
index 82a59480f339baa7ffbd387cfb90e54bbf1cfa76..c9a093098e91604ced590502b27e70cf9b781957 100644
--- a/alib2data/src/Api.hpp
+++ b/alib2data/src/Api.hpp
@@ -48,6 +48,18 @@ struct api<container::ObjectsSet> {
 	static std::list<sax::Token> compose(const container::ObjectsSet& data);
 };
 
+template<typename T>
+struct api<std::vector<T>> {
+	static std::vector<T> parse(std::list<sax::Token>& input);
+	static std::list<sax::Token> compose(const std::vector<T>& data);
+};
+
+template<>
+struct api<container::ObjectsVector> {
+	static container::ObjectsVector parse(std::list<sax::Token>& input);
+	static std::list<sax::Token> compose(const container::ObjectsVector& data);
+};
+
 
 template<>
 struct api<Object> {
@@ -433,6 +445,7 @@ class ToXMLComposers : public VisitableObjectBase::const_visitor_type {
 	void Visit(void*, const string::Epsilon& string) const;
 
 	void Visit(void*, const container::ObjectsSet& set) const;
+	void Visit(void*, const container::ObjectsVector& set) const;
 
 public:
 	static const label::LabelToXMLComposer labelComposer;
@@ -458,6 +471,16 @@ std::list<sax::Token> api<std::set<T>>::compose(const std::set<T>& input) {
 	return ToXMLComposers::containerComposer.compose<T>(input);
 }
 
+template<typename T>
+std::vector<T> api<std::vector<T>>::parse(std::list<sax::Token>& input) {
+	return FromXMLParsers::containerParser.parseVector<T>(input);
+}
+
+template<typename T>
+std::list<sax::Token> api<std::vector<T>>::compose(const std::vector<T>& input) {
+	return ToXMLComposers::containerComposer.compose<T>(input);
+}
+
 } /* namespace alib */
 
 #endif /* FROM_XML_PARSERS_HPP_ */
diff --git a/alib2data/src/container/ContainerBase.h b/alib2data/src/container/ContainerBase.h
index d3084c1e4be6ea1a00812f29230d4c26d239d6ff..f82d002ddb0524f0f42fb4c3131606d8b3986b80 100644
--- a/alib2data/src/container/ContainerBase.h
+++ b/alib2data/src/container/ContainerBase.h
@@ -14,7 +14,8 @@
 namespace container {
 
 typedef std::acceptor_base<
-			container::ObjectsSet
+			container::ObjectsSet,
+			container::ObjectsVector
 	> VisitableContainerBase;
 
 /**
diff --git a/alib2data/src/container/ContainerFeatures.h b/alib2data/src/container/ContainerFeatures.h
index 05e5cf6dc003776e1645fe7563857d6e84ee272c..dd827ed5abc79be8b38818093a159a922fe528be 100644
--- a/alib2data/src/container/ContainerFeatures.h
+++ b/alib2data/src/container/ContainerFeatures.h
@@ -11,7 +11,8 @@
 namespace container {
 
 enum class FEATURES {
-	SET
+	SET,
+	VECTOR
 };
 
 } /* namespace container */
diff --git a/alib2data/src/container/ContainerFromXMLParser.cpp b/alib2data/src/container/ContainerFromXMLParser.cpp
index a5643ae6ef3052ee52e21c826702d2257bf9ddd2..e9245be4cdeed3ab819a895d8434b1cdb8526e24 100644
--- a/alib2data/src/container/ContainerFromXMLParser.cpp
+++ b/alib2data/src/container/ContainerFromXMLParser.cpp
@@ -11,7 +11,7 @@
 namespace container {
 
 bool ContainerFromXMLParser::first(std::list<sax::Token>& input) const {
-	if(isToken(input, sax::Token::TokenType::START_ELEMENT, "set")) {
+	if(isToken(input, sax::Token::TokenType::START_ELEMENT, "set") || isToken(input, sax::Token::TokenType::START_ELEMENT, "vector")) {
 		return true;
 	} else {
 		return false;
@@ -19,15 +19,18 @@ bool ContainerFromXMLParser::first(std::list<sax::Token>& input) const {
 }
 
 Container ContainerFromXMLParser::parseContainer(std::list<sax::Token>& input) const {
-	return parseContainer(input, std::set<FEATURES>({FEATURES::SET}));
+	return parseContainer(input, std::set<FEATURES>({FEATURES::SET, FEATURES::VECTOR}));
 }
 
 Container ContainerFromXMLParser::parseContainer(std::list<sax::Token>& input, const std::set<FEATURES>& features) const {
 	if(isToken(input, sax::Token::TokenType::START_ELEMENT, "set")) {
 		if(!features.count(FEATURES::SET)) throw exception::AlibException();
 		return Container(parseObjectsSet(input));
+	} else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "vector")) {
+		if(!features.count(FEATURES::VECTOR)) throw exception::AlibException();
+		return Container(parseObjectsVector(input));
 	} else {
-		throw sax::ParserException(sax::Token("set", sax::Token::TokenType::START_ELEMENT), input.front());
+		throw sax::ParserException(sax::Token("set / vector", sax::Token::TokenType::START_ELEMENT), input.front());
 	}
 }
 
@@ -44,5 +47,18 @@ ObjectsSet ContainerFromXMLParser::parseObjectsSet(std::list<sax::Token>& input)
 	return set;
 }
 
+ObjectsVector ContainerFromXMLParser::parseObjectsVector(std::list<sax::Token>& input) const {
+	popToken(input, sax::Token::TokenType::START_ELEMENT, "vector");
+
+	ObjectsVector vector;
+
+	while(isTokenType(input, sax::Token::TokenType::START_ELEMENT)) {
+		vector.push_back(alib::api<alib::Object>::parse(input));
+	}
+
+	popToken(input, sax::Token::TokenType::END_ELEMENT, "vector");
+	return vector;
+}
+
 } /* namespace container */
 
diff --git a/alib2data/src/container/ContainerFromXMLParser.hpp b/alib2data/src/container/ContainerFromXMLParser.hpp
index c2277c9ad00190883b8467ce228bb483d63a318c..15da0d04fc1d165247ac2aacec07edb3947036a2 100644
--- a/alib2data/src/container/ContainerFromXMLParser.hpp
+++ b/alib2data/src/container/ContainerFromXMLParser.hpp
@@ -11,8 +11,8 @@
 #include "../sax/FromXMLParserHelper.h"
 #include "ContainerFeatures.h"
 
-#include <set>
 #include "ObjectsSet.h"
+#include "ObjectsVector.h"
 
 #include "Container.h"
 
@@ -37,6 +37,11 @@ class ContainerFromXMLParser : public sax::FromXMLParserHelper {
 
 	ObjectsSet parseObjectsSet(std::list<sax::Token>& input) const;
 
+	template<typename T>
+	std::vector<T> parseVector(std::list<sax::Token>& input) const;
+
+	ObjectsVector parseObjectsVector(std::list<sax::Token>& input) const;
+
 	template<typename T> friend class alib::api;
 
 public:
@@ -63,6 +68,20 @@ std::set<T> ContainerFromXMLParser::parseSet(std::list<sax::Token>& input) const
 	return set;
 }
 
+template<typename T>
+std::vector<T> ContainerFromXMLParser::parseVector(std::list<sax::Token>& input) const {
+	popToken(input, sax::Token::TokenType::START_ELEMENT, "vector");
+
+	std::vector<T> vector;
+
+	while(isTokenType(input, sax::Token::TokenType::START_ELEMENT)) {
+		vector.push_back(alib::api<T>::parse(input));
+	}
+
+	popToken(input, sax::Token::TokenType::END_ELEMENT, "vector");
+	return vector;
+}
+
 } /* namespace container */
 
 #endif /* CONTAINER_FROM_XML_PARSER_H_ */
diff --git a/alib2data/src/container/ContainerToXMLComposer.cpp b/alib2data/src/container/ContainerToXMLComposer.cpp
index 0f54aacce2373def3e04bf55664ceb9df28714e8..a3378f0c37a90d1c7c2b6a0cdd89005c92045783 100644
--- a/alib2data/src/container/ContainerToXMLComposer.cpp
+++ b/alib2data/src/container/ContainerToXMLComposer.cpp
@@ -33,5 +33,17 @@ std::list<sax::Token> ContainerToXMLComposer::compose(const ObjectsSet& containe
 	return out;
 }
 
+std::list<sax::Token> ContainerToXMLComposer::compose(const ObjectsVector& container) const {
+	std::list<sax::Token> out;
+	out.push_back(sax::Token("vector", sax::Token::TokenType::START_ELEMENT));
+
+	for(const alib::Object& item : container) {
+		out.splice(out.end(), alib::api<alib::Object>::compose(item));
+	}
+
+	out.push_back(sax::Token("vector", sax::Token::TokenType::END_ELEMENT));
+	return out;
+}
+
 } /* namespace container */
 
diff --git a/alib2data/src/container/ContainerToXMLComposer.hpp b/alib2data/src/container/ContainerToXMLComposer.hpp
index 74eb8341f61df8616f1607b0914dde064767da13..7e0a5e31f8b7ab6d41a4876ed4bc5069299ef7f9 100644
--- a/alib2data/src/container/ContainerToXMLComposer.hpp
+++ b/alib2data/src/container/ContainerToXMLComposer.hpp
@@ -9,11 +9,11 @@
 #define CONTAINER_TO_XML_COMPOSER_H_
 
 #include <list>
-#include <set>
 #include "../sax/Token.h"
 
 #include "Container.h"
 #include "ObjectsSet.h"
+#include "ObjectsVector.h"
 
 namespace alib {
 
@@ -47,6 +47,12 @@ class ContainerToXMLComposer {
 
 	std::list<sax::Token> compose(const ObjectsSet& container) const;
 
+
+	template<typename T>
+	std::list<sax::Token> compose(const std::vector<T>& container) const;
+
+	std::list<sax::Token> compose(const ObjectsVector& container) const;
+
 	template<typename T> friend class alib::api;
 };
 
@@ -69,6 +75,19 @@ std::list<sax::Token> ContainerToXMLComposer::compose(const std::set<T>& contain
 	return out;
 }
 
+template<typename T>
+std::list<sax::Token> ContainerToXMLComposer::compose(const std::vector<T>& container) const {
+	std::list<sax::Token> out;
+	out.push_back(sax::Token("vectort", sax::Token::TokenType::START_ELEMENT));
+
+	for(const T& item : container) {
+		out.splice(out.end(), alib::api<T>::compose(item));
+	}
+
+	out.push_back(sax::Token("vector", sax::Token::TokenType::END_ELEMENT));
+	return out;
+}
+
 } /* namespace container */
 
 #endif /* CONTAINER_TO_XML_COMPOSER_H_ */
diff --git a/alib2data/src/container/ObjectsSet.h b/alib2data/src/container/ObjectsSet.h
index 54a67004d221aba69cc1240f3b78802c3964e5d0..7aadcb917a7c9817a3a5bae6b1653c956d8e0df7 100644
--- a/alib2data/src/container/ObjectsSet.h
+++ b/alib2data/src/container/ObjectsSet.h
@@ -5,8 +5,8 @@
  * Author: Jan Travnicek
  */
 
-#ifndef SET_H_
-#define SET_H_
+#ifndef OBJECTS_SET_H_
+#define OBJECTS_SET_H_
 
 #include <set>
 #include <string>
@@ -44,4 +44,4 @@ public:
 
 } /* namespace container */
 
-#endif /* SET_H_ */
+#endif /* OBJECTS_SET_H_ */
diff --git a/alib2data/src/container/ObjectsVector.cpp b/alib2data/src/container/ObjectsVector.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d8105a41d2f1885184cf6388b93828972ccd27e0
--- /dev/null
+++ b/alib2data/src/container/ObjectsVector.cpp
@@ -0,0 +1,55 @@
+/*
+ * Set.cpp
+ *
+ * Created on: Apr 1, 2013
+ * Author: Jan Travnicek
+ */
+
+#include "ObjectsVector.h"
+#include "../std/vector.hpp"
+
+#include <cstdlib>
+#include <iostream>
+#include <sstream>
+
+namespace container {
+
+ContainerBase* ObjectsVector::clone() const {
+	return new ObjectsVector(*this);
+}
+
+ContainerBase* ObjectsVector::plunder() && {
+	return new ObjectsVector(std::move(*this));
+}
+
+bool ObjectsVector::operator==(const ObjectBase& other) const {
+	return other == *this;
+}
+
+bool ObjectsVector::operator<(const ObjectBase& other) const {
+	return other > *this;
+}
+
+bool ObjectsVector::operator>(const ObjectBase& other) const {
+	return other < *this;
+}
+
+bool ObjectsVector::operator==(const ObjectsVector& other) const {
+	return static_cast<const std::vector<alib::Object>>(*this) == static_cast<const std::vector<alib::Object>>(other);
+}
+
+bool ObjectsVector::operator<(const ObjectsVector& other) const {
+	return static_cast<const std::vector<alib::Object>>(*this) < static_cast<const std::vector<alib::Object>>(other);
+}
+
+void ObjectsVector::operator>>(std::ostream& os) const {
+	os << *this;
+}
+
+ObjectsVector::operator std::string() const {
+	std::stringstream ss;
+	ss << *this;
+	return std::move(ss).str();
+}
+
+} /* namespace container */
diff --git a/alib2data/src/container/ObjectsVector.h b/alib2data/src/container/ObjectsVector.h
new file mode 100644
index 0000000000000000000000000000000000000000..4396d458e6536ec3413f04437238c5cad49745b8
--- /dev/null
+++ b/alib2data/src/container/ObjectsVector.h
@@ -0,0 +1,47 @@
+/*
+ * Set.h
+ *
+ * Created on: Apr 1, 2013
+ * Author: Jan Travnicek
+ */
+
+#ifndef OBJECTS_VECTOR_H_
+#define OBJECTS_VECTOR_H_
+
+#include <vector>
+#include <string>
+
+#include "../object/Object.h"
+#include "ContainerBase.h"
+
+namespace container {
+
+/**
+ * Basic container from which are derived all other containers.
+ * Contains reason why the container occured.
+ */
+class ObjectsVector : public std::vector<alib::Object>, public std::acceptor<ObjectsVector, VisitableContainerBase, std::acceptor<ObjectsVector, alib::VisitableObjectBase, ContainerBase> > {
+public:
+	virtual ContainerBase* clone() const;
+	
+	virtual ContainerBase* plunder() &&;
+
+	virtual bool operator>(const alib::ObjectBase& other) const;
+	virtual bool operator==(const alib::ObjectBase& other) const;
+	virtual bool operator<(const alib::ObjectBase& other) const;
+
+	virtual bool operator==(const ObjectsVector& other) const;
+	virtual bool operator<(const ObjectsVector& other) const;
+
+	virtual void operator>>(std::ostream& os) const;
+
+	virtual operator std::string() const;
+
+	virtual int selfTypeId() const {
+		return typeId(*this);
+	}
+};
+
+} /* namespace container */
+
+#endif /* OBJECTS_VECTOR_H_ */
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index ceaf184d492374810931ea5efb237778096ab967..4e4b29d68707ea266c939a1d329dddc99a780388 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -91,6 +91,7 @@ class EndSymbol;
 namespace container {
 
 class ObjectsSet;
+class ObjectsVector;
 
 }
 
@@ -104,7 +105,7 @@ typedef std::acceptor_base<
 			regexp::UnboundedRegExp, regexp::FormalRegExp,
 			string::Epsilon, string::LinearString, string::CyclicString,
 			alphabet::LabeledSymbol, alphabet::BlankSymbol, alphabet::BottomOfTheStackSymbol, alphabet::EndSymbol,
-			container::ObjectsSet
+			container::ObjectsSet, container::ObjectsVector
 	> VisitableObjectBase;
 
 class ObjectBase :
@@ -117,7 +118,7 @@ class ObjectBase :
 			regexp::UnboundedRegExp, regexp::FormalRegExp,
 			string::Epsilon, string::LinearString, string::CyclicString,
 			alphabet::LabeledSymbol, alphabet::BlankSymbol, alphabet::BottomOfTheStackSymbol, alphabet::EndSymbol,
-			container::ObjectsSet
+			container::ObjectsSet, container::ObjectsVector
 	>, public VisitableObjectBase {
 };