diff --git a/alib2abstraction/src/registry/AlgorithmRegistry.cpp b/alib2abstraction/src/registry/AlgorithmRegistry.cpp
index bbed26725573a75efec1e4b7035e2e6d5d096007..605930c7fc55df5a16c487d82a7e9f8337da5172 100644
--- a/alib2abstraction/src/registry/AlgorithmRegistry.cpp
+++ b/alib2abstraction/src/registry/AlgorithmRegistry.cpp
@@ -12,6 +12,11 @@
 
 namespace abstraction {
 
+ext::map < ext::pair < std::string, ext::vector < std::string > >, ext::list < ext::tuple < AlgorithmCategories::AlgorithmCategory, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < AlgorithmRegistry::Entry > > > > > & AlgorithmRegistry::getEntries ( ) {
+	static ext::map < ext::pair < std::string, ext::vector < std::string > >, ext::list < ext::tuple < AlgorithmCategories::AlgorithmCategory, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > > algorithmGroups;
+	return algorithmGroups;
+}
+
 bool AlgorithmRegistry::isRegistered ( const std::string & algorithm, const ext::vector < std::string > & templateParams, AlgorithmCategories::AlgorithmCategory category, const ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > > & params ) {
 	auto & group = getEntries ( ) [ ext::make_pair ( algorithm, templateParams ) ];
 
diff --git a/alib2abstraction/src/registry/AlgorithmRegistry.hpp b/alib2abstraction/src/registry/AlgorithmRegistry.hpp
index 2c3f453930e10a1dac1b129d85d7edd410b55638..18683a0de273769bf9b3b31f02dafa361649c624 100644
--- a/alib2abstraction/src/registry/AlgorithmRegistry.hpp
+++ b/alib2abstraction/src/registry/AlgorithmRegistry.hpp
@@ -78,10 +78,7 @@ class AlgorithmRegistry {
 		virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override;
 	};
 
-	static ext::map < ext::pair < std::string, ext::vector < std::string > >, ext::list < ext::tuple < AlgorithmCategories::AlgorithmCategory, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > > & getEntries ( ) {
-		static ext::map < ext::pair < std::string, ext::vector < std::string > >, ext::list < ext::tuple < AlgorithmCategories::AlgorithmCategory, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > > algorithmGroups;
-		return algorithmGroups;
-	};
+	static ext::map < ext::pair < std::string, ext::vector < std::string > >, ext::list < ext::tuple < AlgorithmCategories::AlgorithmCategory, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier >, std::string > >, ext::pair < ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, std::shared_ptr < Entry > > > > > & getEntries ( );
 
 	enum class MatchType {
 		EXACT,
diff --git a/alib2abstraction/src/registry/CastRegistry.cpp b/alib2abstraction/src/registry/CastRegistry.cpp
index 53c19198ccd4cf51a16b96521cd99d560885a63c..47f670ccd8f7d19913c6bb709bb48665a6b2013c 100644
--- a/alib2abstraction/src/registry/CastRegistry.cpp
+++ b/alib2abstraction/src/registry/CastRegistry.cpp
@@ -11,6 +11,11 @@
 
 namespace abstraction {
 
+ext::map < std::pair < std::string, std::string >, std::unique_ptr < CastRegistry::Entry > > & CastRegistry::getEntries ( ) {
+	static ext::map < std::pair < std::string, std::string >, std::unique_ptr < Entry > > casts;
+	return casts;
+}
+
 std::shared_ptr < abstraction::OperationAbstraction > CastRegistry::getAbstraction ( const std::string & target, const std::string & param ) {
 	auto entry = getEntries ( ).end ( );
 	for ( auto iter = getEntries ( ).begin ( ); iter != getEntries ( ).end ( ); ++ iter )
diff --git a/alib2abstraction/src/registry/CastRegistry.hpp b/alib2abstraction/src/registry/CastRegistry.hpp
index c99e8e0e03ee4ca8b4da66a8015192eb0779d332..40bc9ccd603cf8d3632617716e89f43d47a52827 100644
--- a/alib2abstraction/src/registry/CastRegistry.hpp
+++ b/alib2abstraction/src/registry/CastRegistry.hpp
@@ -47,10 +47,7 @@ class CastRegistry {
 		virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override;
 	};
 
-	static ext::map < std::pair < std::string, std::string >, std::unique_ptr < Entry > > & getEntries ( ) {
-		static ext::map < std::pair < std::string, std::string >, std::unique_ptr < Entry > > casts;
-		return casts;
-	};
+	static ext::map < std::pair < std::string, std::string >, std::unique_ptr < Entry > > & getEntries ( );
 
 public:
 	static void unregisterCast ( std::string target, std::string param ) {
diff --git a/alib2abstraction/src/registry/ContainerRegistry.cpp b/alib2abstraction/src/registry/ContainerRegistry.cpp
index e5f0b55cac884b11c66b328bb7e8535d313f3ae9..3afccd87cab3ed361dfba02bb2e5fc4c88969e2d 100644
--- a/alib2abstraction/src/registry/ContainerRegistry.cpp
+++ b/alib2abstraction/src/registry/ContainerRegistry.cpp
@@ -11,6 +11,11 @@
 
 namespace abstraction {
 
+ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < ContainerRegistry::Entry > > > > & ContainerRegistry::getEntries ( ) {
+	static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > containerGroups;
+	return containerGroups;
+}
+
 bool ContainerRegistry::hasAbstraction ( const std::string & container ) {
 	return getEntries ( ).count ( container );
 }
diff --git a/alib2abstraction/src/registry/ContainerRegistry.hpp b/alib2abstraction/src/registry/ContainerRegistry.hpp
index c923a329dbe643053de509128846543c5a0bdaf9..b49fc5510d9b548990fbefc0858ae8832c34db77 100644
--- a/alib2abstraction/src/registry/ContainerRegistry.hpp
+++ b/alib2abstraction/src/registry/ContainerRegistry.hpp
@@ -39,10 +39,7 @@ class ContainerRegistry {
 		}
 	};
 
-	static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > & getEntries ( ) {
-		static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > containerGroups;
-		return containerGroups;
-	};
+	static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > & getEntries ( );
 
 public:
 	static void unregisterSet ( std::string param ) {
diff --git a/alib2abstraction/src/registry/ImmediateRegistry.cpp b/alib2abstraction/src/registry/ImmediateRegistry.cpp
index 94426babbd60f0e56e8cd9aef4aa9c125194c9b1..ad26da2e80b2283e0dd4ef41614e66df3a39ca27 100644
--- a/alib2abstraction/src/registry/ImmediateRegistry.cpp
+++ b/alib2abstraction/src/registry/ImmediateRegistry.cpp
@@ -9,6 +9,11 @@
 
 namespace abstraction {
 
+ext::map < std::string, std::unique_ptr < ImmediateRegistry::Entry > > & ImmediateRegistry::getEntries ( ) {
+	static ext::map < std::string, std::unique_ptr < Entry > > fileWriters;
+	return fileWriters;
+}
+
 std::shared_ptr < abstraction::OperationAbstraction > ImmediateRegistry::getAbstraction ( const std::string & result, std::string value ) {
 	auto res = getEntries ( ).find ( result );
 	if ( res == getEntries ( ).end ( ) )
diff --git a/alib2abstraction/src/registry/ImmediateRegistry.hpp b/alib2abstraction/src/registry/ImmediateRegistry.hpp
index d20e4137965bbc8452f22260ee713b9f64343fc7..63b0ab4f4ecce4844fc59d5e9ca097ce266edc3d 100644
--- a/alib2abstraction/src/registry/ImmediateRegistry.hpp
+++ b/alib2abstraction/src/registry/ImmediateRegistry.hpp
@@ -39,10 +39,7 @@ class ImmediateRegistry {
 		virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( std::string value ) const override;
 	};
 
-	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) {
-		static ext::map < std::string, std::unique_ptr < Entry > > fileWriters;
-		return fileWriters;
-	}
+	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( );
 
 public:
 	static void unregisterImmediate ( std::string result ) {
diff --git a/alib2abstraction/src/registry/NormalizeRegistry.cpp b/alib2abstraction/src/registry/NormalizeRegistry.cpp
index 048fda2d42bede274b4235641538795112b187be..dd8353d58803a46974aa6335e17df8aad134c483 100644
--- a/alib2abstraction/src/registry/NormalizeRegistry.cpp
+++ b/alib2abstraction/src/registry/NormalizeRegistry.cpp
@@ -9,6 +9,11 @@
 
 namespace abstraction {
 
+ext::map < std::string, std::list < std::unique_ptr < NormalizeRegistry::Entry > > > & NormalizeRegistry::getEntries ( ) {
+	static ext::map < std::string, std::list < std::unique_ptr < Entry > > > entries;
+	return entries;
+}
+
 std::shared_ptr < abstraction::OperationAbstraction > NormalizeRegistry::getAbstraction ( const std::string & param ) {
 	auto res = getEntries ( ).find ( param );
 	if ( res == getEntries ( ).end ( ) || res->second.size ( ) == 0 )
diff --git a/alib2abstraction/src/registry/NormalizeRegistry.hpp b/alib2abstraction/src/registry/NormalizeRegistry.hpp
index 7d8365e4eba21b170d8975e3b4f7ed779be994eb..782d357ed3fc117317ac8fce648f0fdcd96fd5bc 100644
--- a/alib2abstraction/src/registry/NormalizeRegistry.hpp
+++ b/alib2abstraction/src/registry/NormalizeRegistry.hpp
@@ -42,10 +42,7 @@ class NormalizeRegistry {
 		virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override;
 	};
 
-	static ext::map < std::string, std::list < std::unique_ptr < Entry > > > & getEntries ( ) {
-		static ext::map < std::string, std::list < std::unique_ptr < Entry > > > entries;
-		return entries;
-	}
+	static ext::map < std::string, std::list < std::unique_ptr < Entry > > > & getEntries ( );
 
 public:
 	template < class ParamType >
diff --git a/alib2abstraction/src/registry/ValuePrinterRegistry.cpp b/alib2abstraction/src/registry/ValuePrinterRegistry.cpp
index e0789d7ad314664629928aa5f088f4045f370d3d..93868482cb1d5349598daf31c886041781c9d3ef 100644
--- a/alib2abstraction/src/registry/ValuePrinterRegistry.cpp
+++ b/alib2abstraction/src/registry/ValuePrinterRegistry.cpp
@@ -9,6 +9,11 @@
 
 namespace abstraction {
 
+ext::map < std::string, std::unique_ptr < ValuePrinterRegistry::Entry > > & ValuePrinterRegistry::getEntries ( ) {
+	static ext::map < std::string, std::unique_ptr < Entry > > fileWriters;
+	return fileWriters;
+}
+
 std::shared_ptr < abstraction::OperationAbstraction > ValuePrinterRegistry::getAbstraction ( const std::string & param, std::ostream & os ) {
 	auto res = getEntries ( ).find ( param );
 	if ( res == getEntries ( ).end ( ) )
diff --git a/alib2abstraction/src/registry/ValuePrinterRegistry.hpp b/alib2abstraction/src/registry/ValuePrinterRegistry.hpp
index 9563dc7606a97db3252f72e8ab102afcfb23e568..56bce0bbcb5da3812361ba70ecad7e7480c8e59d 100644
--- a/alib2abstraction/src/registry/ValuePrinterRegistry.hpp
+++ b/alib2abstraction/src/registry/ValuePrinterRegistry.hpp
@@ -39,10 +39,7 @@ class ValuePrinterRegistry {
 		virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( std::ostream & os ) const override;
 	};
 
-	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) {
-		static ext::map < std::string, std::unique_ptr < Entry > > fileWriters;
-		return fileWriters;
-	}
+	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( );
 
 public:
 	static void unregisterValuePrinter ( std::string param ) {
diff --git a/alib2raw/src/registry/RawReaderRegistry.cpp b/alib2raw/src/registry/RawReaderRegistry.cpp
index 2f46c32bd110a473fbc0cab8e825957fad0b22cc..804427355337ab1e18046f8cd64503cfd8912179 100644
--- a/alib2raw/src/registry/RawReaderRegistry.cpp
+++ b/alib2raw/src/registry/RawReaderRegistry.cpp
@@ -11,6 +11,11 @@
 
 namespace abstraction {
 
+ext::map < std::string, std::unique_ptr < RawReaderRegistry::Entry > > & RawReaderRegistry::getEntries ( ) {
+	static ext::map < std::string, std::unique_ptr < Entry > > readers;
+	return readers;
+}
+
 std::shared_ptr < abstraction::OperationAbstraction > RawReaderRegistry::getAbstraction ( const std::string & type ) {
 	for ( const std::pair < const std::string, std::unique_ptr < Entry > > & entry : getEntries ( ) ) {
 		if ( ext::is_same_type ( entry.first, type ) )
diff --git a/alib2raw/src/registry/RawReaderRegistry.hpp b/alib2raw/src/registry/RawReaderRegistry.hpp
index 2714eb86cfdd1b045377ed21d359313a0b6b85af..a02b9e5bb72c1a7f5fcdfd91845116e9903d3f46 100644
--- a/alib2raw/src/registry/RawReaderRegistry.hpp
+++ b/alib2raw/src/registry/RawReaderRegistry.hpp
@@ -36,10 +36,7 @@ class RawReaderRegistry {
 		}
 	};
 
-	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) {
-		static ext::map < std::string, std::unique_ptr < Entry > > readers;
-		return readers;
-	}
+	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( );
 
 public:
 	static void unregisterRawReader ( std::string type ) {
diff --git a/alib2raw/src/registry/RawWriterRegistry.cpp b/alib2raw/src/registry/RawWriterRegistry.cpp
index 293044399802a81ee971e69f081727cfa406d4da..94eb942eb181b4b208e746a6810a63a25d9e313b 100644
--- a/alib2raw/src/registry/RawWriterRegistry.cpp
+++ b/alib2raw/src/registry/RawWriterRegistry.cpp
@@ -9,6 +9,11 @@
 
 namespace abstraction {
 
+ext::map < std::string, std::unique_ptr < RawWriterRegistry::Entry > > & RawWriterRegistry::getEntries ( ) {
+	static ext::map < std::string, std::unique_ptr < Entry > > writers;
+	return writers;
+}
+
 std::shared_ptr < abstraction::OperationAbstraction > RawWriterRegistry::getAbstraction ( const std::string & param ) {
 	auto type = getEntries ( ).find ( param );
 	if ( type == getEntries ( ).end ( ) )
diff --git a/alib2raw/src/registry/RawWriterRegistry.hpp b/alib2raw/src/registry/RawWriterRegistry.hpp
index e4f48da19d23adb4c71db03871b598bafda09649..180a216ba9e3703a4c5a01a99a2e11115a11d153 100644
--- a/alib2raw/src/registry/RawWriterRegistry.hpp
+++ b/alib2raw/src/registry/RawWriterRegistry.hpp
@@ -39,10 +39,7 @@ class RawWriterRegistry {
 		virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override;
 	};
 
-	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) {
-		static ext::map < std::string, std::unique_ptr < Entry > > writers;
-		return writers;
-	}
+	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( );
 
 public:
 	static void unregisterRawWriter ( std::string param ) {
diff --git a/alib2str/src/core/stringApi.cpp b/alib2str/src/core/stringApi.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a97ac87448cb8b194d20e53a4b5318549ed18110
--- /dev/null
+++ b/alib2str/src/core/stringApi.cpp
@@ -0,0 +1,17 @@
+#include "stringApi.hpp"
+
+namespace core {
+
+ext::map < std::string, std::unique_ptr < stringApi < object::Object >::GroupWriter > > & stringApi < object::Object >::composeFunctions ( ) {
+	static ext::map < std::string, std::unique_ptr < GroupWriter > > res;
+
+	return res;
+}
+
+ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < stringApi < object::Object >::GroupReader > > > & stringApi < object::Object >::parseFunctions ( ) {
+	static ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < GroupReader > > > res;
+
+	return res;
+}
+
+} /* namespace core */
diff --git a/alib2str/src/core/stringApi.hpp b/alib2str/src/core/stringApi.hpp
index 759cba8f141ce4da575d74e3a16e2f203088d113..b47b0c4abbb02e544ce576e94e5930e8a09e27c2 100644
--- a/alib2str/src/core/stringApi.hpp
+++ b/alib2str/src/core/stringApi.hpp
@@ -9,7 +9,7 @@
 #define STRING_API_HPP_
 
 #include <alib/functional>
-#include <alib/deque>
+#include <alib/list>
 #include <alib/map>
 #include <alib/string>
 #include <alib/memory>
@@ -29,7 +29,7 @@ struct stringApi;
 
 template < >
 struct stringApi < object::Object > {
-private:
+public:
 	class GroupReader {
 	public:
 		virtual object::Object parse ( std::istream & input ) = 0;
@@ -38,11 +38,8 @@ private:
 		}
 	};
 
-	static ext::deque < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < GroupReader > > > & parseFunctions ( ) {
-		static ext::deque < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < GroupReader > > > res;
-
-		return res;
-	}
+private:
+	static ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < GroupReader > > > & parseFunctions ( );
 
 	template < class Type >
 	class ReaderRegister : public GroupReader {
@@ -54,6 +51,7 @@ private:
 		}
 	};
 
+public:
 	class GroupWriter {
 	public:
 		virtual void compose ( std::ostream & output, const object::Object & group ) = 0;
@@ -62,11 +60,8 @@ private:
 		}
 	};
 
-	static ext::map < std::string, std::unique_ptr < GroupWriter > > & composeFunctions ( ) {
-		static ext::map < std::string, std::unique_ptr < GroupWriter > > res;
-
-		return res;
-	}
+private:
+	static ext::map < std::string, std::unique_ptr < GroupWriter > > & composeFunctions ( );
 
 	template < class Type >
 	class WriterRegister : public GroupWriter {
diff --git a/alib2str/src/registry/StringReaderRegistry.cpp b/alib2str/src/registry/StringReaderRegistry.cpp
index e69c58d26d837da9d65265d3effba351d72846a3..d3d37836333875f9b79eed2c42c05cd124f7359e 100644
--- a/alib2str/src/registry/StringReaderRegistry.cpp
+++ b/alib2str/src/registry/StringReaderRegistry.cpp
@@ -9,13 +9,18 @@
 
 namespace abstraction {
 
+ext::map < std::string, ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < StringReaderRegistry::Entry > > > > & StringReaderRegistry::getEntries ( ) {
+	static ext::map < std::string, ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > > > readers;
+	return readers;
+}
+
 std::shared_ptr < abstraction::OperationAbstraction > StringReaderRegistry::getAbstraction ( const std::string & group, const std::string & str ) {
 	std::stringstream ss ( str );
 	while ( isspace ( ss.peek ( ) ) )
 		ss.get ( );
 
-	auto lambda = [ & ] ( const std::pair < const std::string, std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > > & entry ) {
-		return entry.second.first ( ss );
+	auto lambda = [ & ] ( const std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > & entry ) {
+		return entry.first ( ss );
 	};
 
 	const auto & entryIterator = getEntries ( ).find ( group );
@@ -26,14 +31,14 @@ std::shared_ptr < abstraction::OperationAbstraction > StringReaderRegistry::getA
 
 	int pos = ss.tellg();
 
-	typename ext::map < std::string, std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > >::const_iterator callback = find_if ( entries.begin ( ), entries.end ( ), lambda );
+	typename ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > >::const_iterator callback = find_if ( entries.begin ( ), entries.end ( ), lambda );
 	if ( callback == entries.end ( ) )
 		throw exception::CommonException ( "No callback handling input found." );
 
 	if ( pos != ss.tellg ( ) )
 		throw exception::CommonException ( "First function of registered callback moved the stream." );
 
-	return callback->second.second->getAbstraction ( );
+	return callback->second->getAbstraction ( );
 }
 
 } /* namespace abstraction */
diff --git a/alib2str/src/registry/StringReaderRegistry.hpp b/alib2str/src/registry/StringReaderRegistry.hpp
index 688572360bb21fe07e816a64c7ae96ecb76a3b2f..b8feb2f1c133853a50e7ba3d1d4612b34cb4ab02 100644
--- a/alib2str/src/registry/StringReaderRegistry.hpp
+++ b/alib2str/src/registry/StringReaderRegistry.hpp
@@ -19,6 +19,7 @@
 namespace abstraction {
 
 class StringReaderRegistry {
+public:
 	class Entry {
 	public:
 		virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const = 0;
@@ -27,6 +28,7 @@ class StringReaderRegistry {
 		}
 	};
 
+private:
 	template < class Return >
 	class EntryImpl : public Entry {
 	public:
@@ -39,27 +41,23 @@ class StringReaderRegistry {
 		virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override;
 	};
 
-	static ext::map < std::string, ext::map < std::string, std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > > > & getEntries ( ) {
-		static ext::map < std::string, ext::map < std::string, std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > > > readers;
-		return readers;
-	}
+	static ext::map < std::string, ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > > > & getEntries ( );
 
 public:
-	template < class Group, class ReturnType >
-	static void unregisterStringReader ( ) {
+	template < class Group >
+	static void unregisterStringReader ( ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > >::const_iterator iter ) {
 		std::string group = ext::to_string < Group > ( );
-		std::string returnType = ext::to_string < ReturnType > ( );
 
-		getEntries ( ) [ group ].erase ( returnType );
+		getEntries ( ) [ group ].erase ( iter );
 	}
 
 	template < class Group, class ReturnType >
-	static void registerStringReader ( ) {
+	static ext::list < std::pair < std::function < bool ( std::istream & ) >, std::unique_ptr < Entry > > >::const_iterator registerStringReader ( ) {
 		std::string group = ext::to_string < Group > ( );
 		std::string returnType = ext::to_string < ReturnType > ( );
 
-		if ( ! getEntries ( ) [ group ].insert ( std::make_pair ( std::move ( returnType ), std::make_pair ( core::stringApi < ReturnType >::first, std::unique_ptr < Entry > ( new EntryImpl < ReturnType > ( ) ) ) ) ).second )
-			throw std::invalid_argument ( "Entry " + returnType + " already registered in " + group + "." );
+		auto & entry = getEntries ( ) [ group ];
+		return entry.insert ( entry.end ( ), std::make_pair ( core::stringApi < ReturnType >::first, std::unique_ptr < Entry > ( new EntryImpl < ReturnType > ( ) ) ) );
 	}
 
 	static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & group, const std::string & data );
diff --git a/alib2str/src/registry/StringWriterRegistry.cpp b/alib2str/src/registry/StringWriterRegistry.cpp
index cfc22761ecbd4a2900e23af6451cfebe710e9386..99ef936ad9d62ccbb1794d43f022e256252c360b 100644
--- a/alib2str/src/registry/StringWriterRegistry.cpp
+++ b/alib2str/src/registry/StringWriterRegistry.cpp
@@ -9,6 +9,11 @@
 
 namespace abstraction {
 
+ext::map < std::string, std::unique_ptr < StringWriterRegistry::Entry > > & StringWriterRegistry::getEntries ( ) {
+	static ext::map < std::string, std::unique_ptr < Entry > > writers;
+	return writers;
+}
+
 std::shared_ptr < abstraction::OperationAbstraction > StringWriterRegistry::getAbstraction ( const std::string & param ) {
 	auto type = getEntries ( ).find ( param );
 	if ( type == getEntries ( ).end ( ) )
diff --git a/alib2str/src/registry/StringWriterRegistry.hpp b/alib2str/src/registry/StringWriterRegistry.hpp
index 9e4ff0573fd38af9be5975635dc713914677702c..26e97e4e87b053df17560aa99956a0517753e780 100644
--- a/alib2str/src/registry/StringWriterRegistry.hpp
+++ b/alib2str/src/registry/StringWriterRegistry.hpp
@@ -40,10 +40,7 @@ class StringWriterRegistry {
 		virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override;
 	};
 
-	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) {
-		static ext::map < std::string, std::unique_ptr < Entry > > writers;
-		return writers;
-	}
+	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( );
 
 public:
 	static void unregisterStringWriter ( std::string param ) {
diff --git a/alib2xml/src/core/xmlApi.cpp b/alib2xml/src/core/xmlApi.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a24de68f9f8a251032b9434a4b87ef404c84f215
--- /dev/null
+++ b/alib2xml/src/core/xmlApi.cpp
@@ -0,0 +1,17 @@
+#include "xmlApi.hpp"
+
+namespace core {
+
+ext::map < std::string, std::unique_ptr < xmlApi < object::Object >::GroupParser > > & xmlApi < object::Object >::parseFunctions ( ) {
+	static ext::map < std::string, std::unique_ptr < GroupParser > > res;
+
+	return res;
+}
+
+ext::map < std::string, std::unique_ptr < xmlApi < object::Object >::GroupComposer > > & xmlApi < object::Object >::composeFunctions ( ) {
+	static ext::map < std::string, std::unique_ptr < GroupComposer > > res;
+
+	return res;
+}
+
+} /* namespace core */
diff --git a/alib2xml/src/core/xmlApi.hpp b/alib2xml/src/core/xmlApi.hpp
index af6104cca674f7694d9a80413cfaaee2a703c992..270ca501c868ba7d6b481829977a00b90c771832 100644
--- a/alib2xml/src/core/xmlApi.hpp
+++ b/alib2xml/src/core/xmlApi.hpp
@@ -70,11 +70,7 @@ private:
 		virtual ~GroupParser ( ) noexcept = default;
 	};
 
-	static ext::map < std::string, std::unique_ptr < GroupParser > > & parseFunctions ( ) {
-		static ext::map < std::string, std::unique_ptr < GroupParser > > res;
-
-		return res;
-	}
+	static ext::map < std::string, std::unique_ptr < GroupParser > > & parseFunctions ( );
 
 	template < class Type >
 	class ParserRegister : public GroupParser {
@@ -92,11 +88,7 @@ private:
 		virtual ~GroupComposer( ) noexcept = default;
 	};
 
-	static ext::map < std::string, std::unique_ptr < GroupComposer > > & composeFunctions ( ) {
-		static ext::map < std::string, std::unique_ptr < GroupComposer > > res;
-
-		return res;
-	}
+	static ext::map < std::string, std::unique_ptr < GroupComposer > > & composeFunctions ( );
 
 	template < class Type >
 	class ComposerRegister : public GroupComposer {
diff --git a/alib2xml/src/registry/XmlComposerRegistry.cpp b/alib2xml/src/registry/XmlComposerRegistry.cpp
index 320267c699256ae909abbed22ee9f77127c2162b..ad298fc61eb9d254143a44200e466b138cbf790d 100644
--- a/alib2xml/src/registry/XmlComposerRegistry.cpp
+++ b/alib2xml/src/registry/XmlComposerRegistry.cpp
@@ -9,6 +9,11 @@
 
 namespace abstraction {
 
+ext::map < std::string, std::unique_ptr < XmlComposerRegistry::Entry > > & XmlComposerRegistry::getEntries ( ) {
+	static ext::map < std::string, std::unique_ptr < Entry > > fileWriters;
+	return fileWriters;
+}
+
 std::shared_ptr < abstraction::OperationAbstraction > XmlComposerRegistry::getAbstraction ( const std::string & param ) {
 	auto res = getEntries ( ).find ( param );
 	if ( res == getEntries ( ).end ( ) )
diff --git a/alib2xml/src/registry/XmlComposerRegistry.hpp b/alib2xml/src/registry/XmlComposerRegistry.hpp
index 3ef67205fa3049e50e850d01384e6afd7c6b303a..6ca9c697778ddd0c8b7ab105ee3b92b5390f429d 100644
--- a/alib2xml/src/registry/XmlComposerRegistry.hpp
+++ b/alib2xml/src/registry/XmlComposerRegistry.hpp
@@ -40,10 +40,7 @@ class XmlComposerRegistry {
 		virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override;
 	};
 
-	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) {
-		static ext::map < std::string, std::unique_ptr < Entry > > fileWriters;
-		return fileWriters;
-	}
+	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( );
 
 public:
 	static void unregisterXmlComposer ( std::string param ) {
diff --git a/alib2xml/src/registry/XmlContainerParserRegistry.cpp b/alib2xml/src/registry/XmlContainerParserRegistry.cpp
index 9aab4578a890e6334c8ad36039aaef77500c01e9..51f557c5a16964e402c3e56579253c5f62292f1d 100644
--- a/alib2xml/src/registry/XmlContainerParserRegistry.cpp
+++ b/alib2xml/src/registry/XmlContainerParserRegistry.cpp
@@ -10,6 +10,11 @@
 
 namespace abstraction {
 
+ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < XmlContainerParserRegistry::Entry > > > > & XmlContainerParserRegistry::getEntries ( ) {
+	static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > containerGroups;
+	return containerGroups;
+}
+
 bool XmlContainerParserRegistry::hasAbstraction ( const std::string & container ) {
 	return getEntries ( ).count ( container );
 }
diff --git a/alib2xml/src/registry/XmlContainerParserRegistry.hpp b/alib2xml/src/registry/XmlContainerParserRegistry.hpp
index e13b4bb4d175a02621b31f2a332bcf91cf15aca6..4bc2e54bf15728e23e3bc330d9d9add991a8edf5 100644
--- a/alib2xml/src/registry/XmlContainerParserRegistry.hpp
+++ b/alib2xml/src/registry/XmlContainerParserRegistry.hpp
@@ -39,10 +39,7 @@ class XmlContainerParserRegistry {
 		}
 	};
 
-	static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > & getEntries ( ) {
-		static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > containerGroups;
-		return containerGroups;
-	};
+	static ext::map < std::string, ext::list < ext::pair < std::string, std::shared_ptr < Entry > > > > & getEntries ( );
 
 public:
 	static void unregisterSet ( std::string param ) {
diff --git a/alib2xml/src/registry/XmlParserRegistry.cpp b/alib2xml/src/registry/XmlParserRegistry.cpp
index 7eb4cff9f20d18d908c6587780c74bed43dd9ac1..5ecc00d1de9523addab8591196c93fb869d9655d 100644
--- a/alib2xml/src/registry/XmlParserRegistry.cpp
+++ b/alib2xml/src/registry/XmlParserRegistry.cpp
@@ -9,6 +9,11 @@
 
 namespace abstraction {
 
+ext::map < std::string, std::unique_ptr < XmlParserRegistry::Entry > > & XmlParserRegistry::getEntries ( ) {
+	static ext::map < std::string, std::unique_ptr < Entry > > parsers;
+	return parsers;
+}
+
 std::shared_ptr < abstraction::OperationAbstraction > XmlParserRegistry::getAbstraction ( const std::string & typeName ) {
 	auto type = getEntries ( ).find ( typeName );
 	if ( type == getEntries ( ).end ( ) )
diff --git a/alib2xml/src/registry/XmlParserRegistry.hpp b/alib2xml/src/registry/XmlParserRegistry.hpp
index e920e20b193c2ec411c28dda53c879d27c61d409..22c470628aad3fe5c8615b6006522ccf0eb5632e 100644
--- a/alib2xml/src/registry/XmlParserRegistry.hpp
+++ b/alib2xml/src/registry/XmlParserRegistry.hpp
@@ -39,10 +39,7 @@ class XmlParserRegistry {
 		virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override;
 	};
 
-	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( ) {
-		static ext::map < std::string, std::unique_ptr < Entry > > parsers;
-		return parsers;
-	}
+	static ext::map < std::string, std::unique_ptr < Entry > > & getEntries ( );
 
 public:
 	static void unregisterXmlParser ( std::string result ) {