diff --git a/alib2common/src/container/ContainerFeatures.h b/alib2common/src/container/ContainerFeatures.h
index 3a62620ac3f5d0f84c12d6da08712d1f30729661..5e00491d5319e0af8b8b6377406dec99bbc459e2 100644
--- a/alib2common/src/container/ContainerFeatures.h
+++ b/alib2common/src/container/ContainerFeatures.h
@@ -24,6 +24,7 @@ class ContainerBase;
 
 template < class ElementType = alib::Object >
 class ObjectsDeque;
+template < class ElementType = alib::Object >
 class ObjectsList;
 class ObjectsMap;
 class ObjectsPair;
diff --git a/alib2common/src/container/ObjectsList.cpp b/alib2common/src/container/ObjectsList.cpp
index 01f88d81048030d2c73e49a9ddf77a5fa21c6cda..03444089e9263940c32dd9a076e5e0884e1a4d6f 100644
--- a/alib2common/src/container/ObjectsList.cpp
+++ b/alib2common/src/container/ObjectsList.cpp
@@ -8,54 +8,10 @@
 #include "ObjectsList.h"
 
 #include "Container.h"
-#include <object/Object.h>
-#include <sstream>
-
-namespace container {
-
-ObjectsList::ObjectsList ( std::list < alib::Object > list ) : std::list < alib::Object > ( std::move ( list ) ) {
-}
-
-ObjectsList::ObjectsList ( ) : std::list < alib::Object > ( ) {
-}
-
-ContainerBase * ObjectsList::clone ( ) const {
-	return new ObjectsList ( * this );
-}
-
-ContainerBase * ObjectsList::plunder ( ) && {
-	return new ObjectsList ( std::move ( * this ) );
-}
-
-int ObjectsList::compare ( const ObjectsList & other ) const {
-	std::compare < std::list < alib::Object > > comp;
-
-	return comp ( static_cast < const std::list < alib::Object > > ( * this ), static_cast < const std::list < alib::Object > > ( other ) );
-}
-
-void ObjectsList::operator >>( std::ostream & os ) const {
-	os << "(ObjectsList " << static_cast < const std::list < alib::Object > > ( * this ) << ")";
-}
-
-ObjectsList::operator std::string ( ) const {
-	std::stringstream ss;
-	ss << * this;
-	return std::move ( ss ).str ( );
-}
-
-ObjectsList ObjectsList::parse ( std::deque < sax::Token >::iterator & input ) {
-	return ObjectsList ( parseRaw < alib::Object > ( input ) );
-}
-
-void ObjectsList::compose ( std::deque < sax::Token > & out ) const {
-	compose ( out, * this );
-}
-
-} /* namespace container */
 
 namespace alib {
 
-auto objectsListParserRegister = xmlApi < container::Container >::ParserRegister < container::ObjectsList > ();
-auto objectsListParserRegister2 = xmlApi < alib::Object >::ParserRegister < container::ObjectsList > ();
+auto objectsListParserRegister = xmlApi < container::Container >::ParserRegister < container::ObjectsList < > > ();
+auto objectsListParserRegister2 = xmlApi < alib::Object >::ParserRegister < container::ObjectsList < > > ();
 
 } /* namespace alib */
diff --git a/alib2common/src/container/ObjectsList.h b/alib2common/src/container/ObjectsList.h
index d482e683d85c5a1f6d935f6ea94637fa21384d9e..c6f555ee13aa02b21272bcb1f9c33c7dd14fdd68 100644
--- a/alib2common/src/container/ObjectsList.h
+++ b/alib2common/src/container/ObjectsList.h
@@ -10,9 +10,10 @@
 
 #include <list>
 #include <string>
+#include <sstream>
 
-#include <object/Object.h>
 #include "ContainerBase.h"
+#include "ContainerFeatures.h"
 
 #include <core/xmlApi.hpp>
 
@@ -22,9 +23,10 @@ namespace container {
  * Basic container from which are derived all other containers.
  * Contains reason why the container occured.
  */
-class ObjectsList : public std::list < alib::Object >, public ContainerBase {
+template < class ElementType >
+class ObjectsList : public std::list < ElementType >, public ContainerBase {
 public:
-	explicit ObjectsList ( std::list < alib::Object > );
+	explicit ObjectsList ( std::list < ElementType > );
 	explicit ObjectsList ( );
 
 	virtual ContainerBase * clone ( ) const;
@@ -50,35 +52,80 @@ public:
 	}
 
 	static ObjectsList parse ( std::deque < sax::Token >::iterator & input );
-	template < class T >
-	static std::list < T > parseRaw ( std::deque < sax::Token >::iterator & input );
+	static std::list < ElementType > parseRaw ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
-	template < class T >
-	static void compose ( std::deque < sax::Token > & out, const std::list < T > & input );
+	static void compose ( std::deque < sax::Token > & out, const std::list < ElementType > & input );
 };
 
-template < class T >
-std::list < T > ObjectsList::parseRaw ( std::deque < sax::Token >::iterator & input ) {
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, ObjectsList::getXmlTagName() );
+template < class ElementType >
+ObjectsList < ElementType >::ObjectsList ( std::list < ElementType > list ) : std::list < ElementType > ( std::move ( list ) ) {
+}
+
+template < class ElementType >
+ObjectsList < ElementType >::ObjectsList ( ) : std::list < ElementType > ( ) {
+}
+
+template < class ElementType >
+ContainerBase * ObjectsList < ElementType >::clone ( ) const {
+	return new ObjectsList ( * this );
+}
+
+template < class ElementType >
+ContainerBase * ObjectsList < ElementType >::plunder ( ) && {
+	return new ObjectsList ( std::move ( * this ) );
+}
+
+template < class ElementType >
+int ObjectsList < ElementType >::compare ( const ObjectsList & other ) const {
+	std::compare < std::list < ElementType > > comp;
+
+	return comp ( static_cast < const std::list < ElementType > > ( * this ), static_cast < const std::list < ElementType > > ( other ) );
+}
+
+template < class ElementType >
+void ObjectsList < ElementType >::operator >>( std::ostream & os ) const {
+	os << "(ObjectsList " << static_cast < const std::list < ElementType > > ( * this ) << ")";
+}
+
+template < class ElementType >
+ObjectsList < ElementType >::operator std::string ( ) const {
+	std::stringstream ss;
+	ss << * this;
+	return std::move ( ss ).str ( );
+}
+
+template < class ElementType >
+ObjectsList < ElementType > ObjectsList < ElementType >::parse ( std::deque < sax::Token >::iterator & input ) {
+	return ObjectsList < ElementType > ( parseRaw ( input ) );
+}
+
+template < class ElementType >
+void ObjectsList < ElementType >::compose ( std::deque < sax::Token > & out ) const {
+	compose ( out, * this );
+}
+
+template < class ElementType >
+std::list < ElementType > ObjectsList < ElementType >::parseRaw ( std::deque < sax::Token >::iterator & input ) {
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::START_ELEMENT, ObjectsList < >::getXmlTagName() );
 
-	std::list < T > list;
+	std::list < ElementType > list;
 
 	while ( sax::FromXMLParserHelper::isTokenType ( input, sax::Token::TokenType::START_ELEMENT ) )
-		list.push_back ( alib::xmlApi < T >::parse ( input ) );
+		list.push_back ( alib::xmlApi < ElementType >::parse ( input ) );
 
-	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, ObjectsList::getXmlTagName() );
+	sax::FromXMLParserHelper::popToken ( input, sax::Token::TokenType::END_ELEMENT, ObjectsList < >::getXmlTagName() );
 	return list;
 }
 
-template < class T >
-void ObjectsList::compose ( std::deque < sax::Token > & out, const std::list < T > & input ) {
-	out.emplace_back ( ObjectsList::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
+template < class ElementType >
+void ObjectsList < ElementType >::compose ( std::deque < sax::Token > & out, const std::list < ElementType > & input ) {
+	out.emplace_back ( ObjectsList < >::getXmlTagName(), sax::Token::TokenType::START_ELEMENT );
 
-	for ( const T & item : input )
-		alib::xmlApi < T >::compose ( out, item );
+	for ( const ElementType & item : input )
+		alib::xmlApi < ElementType >::compose ( out, item );
 
-	out.emplace_back ( ObjectsList::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
+	out.emplace_back ( ObjectsList < >::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
 } /* namespace container */
@@ -94,17 +141,17 @@ struct xmlApi < std::list < T > > {
 
 template < typename T >
 std::list < T > xmlApi < std::list < T > >::parse ( std::deque < sax::Token >::iterator & input ) {
-	return container::ObjectsList::parseRaw < T > ( input );
+	return container::ObjectsList < T >::parseRaw ( input );
 }
 
 template < typename T >
 bool xmlApi < std::list < T > >::first ( const std::deque < sax::Token >::const_iterator & input ) {
-	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, container::ObjectsList::getXmlTagName() );
+	return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, container::ObjectsList < >::getXmlTagName() );
 }
 
 template < typename T >
 void xmlApi < std::list < T > >::compose ( std::deque < sax::Token > & output, const std::list < T > & input ) {
-	return container::ObjectsList::compose < T > ( output, input );
+	return container::ObjectsList < T >::compose ( output, input );
 }
 
 } /* namespace alib */