diff --git a/alib2data/src/PrimitiveRegistrator.cpp b/alib2data/src/PrimitiveRegistrator.cpp
index 61c5be8abea1a9f5a37e9118a615c3af5d7ab84f..87b0116d694bb496c8e4078d6e3306b932075314 100644
--- a/alib2data/src/PrimitiveRegistrator.cpp
+++ b/alib2data/src/PrimitiveRegistrator.cpp
@@ -15,6 +15,7 @@
 #include <registry/XmlParserRegistry.hpp>
 #include <registry/XmlContainerParserRegistry.hpp>
 
+#include <primitive/xml/Character.h>
 #include <primitive/xml/Double.h>
 #include <primitive/xml/Integer.h>
 #include <primitive/xml/Unsigned.h>
@@ -75,6 +76,7 @@ public:
 		alib::xmlApi < alib::Object >::template registerXmlWriter < alib::AnyObject < common::ranked_symbol < alib::Object, primitive::Unsigned > > > ( );
 		alib::xmlApi < alib::Object >::template registerXmlWriter < alib::AnyObject < ext::pair < unsigned int, unsigned int > > > ( );
 		alib::xmlApi < alib::Object >::template registerXmlWriter < alib::AnyObject < ext::pair < alib::Object, alib::Object > > > ( );
+		alib::xmlApi < alib::Object >::template registerXmlWriter < alib::AnyObject < ext::set < char > > > ( );
 
 	}
 };
diff --git a/alib2data/src/alphabet/xml/BarSymbol.cpp b/alib2data/src/alphabet/xml/BarSymbol.cpp
index 9ff39a5475c122081d91e22d72a6dc960349c223..329217fd919949ba0583feda980e98822f6d4347 100644
--- a/alib2data/src/alphabet/xml/BarSymbol.cpp
+++ b/alib2data/src/alphabet/xml/BarSymbol.cpp
@@ -38,10 +38,10 @@ void xmlApi < alphabet::BarSymbol >::compose ( ext::deque < sax::Token > & outpu
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alphabet::Symbol, alphabet::BarSymbol > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, alphabet::BarSymbol > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alphabet::BarSymbol > ( );
+static auto xmlRead = registration::XmlReaderRegister < alphabet::BarSymbol > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < alphabet::Symbol, alphabet::BarSymbol > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, alphabet::BarSymbol > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < alphabet::Symbol, alphabet::BarSymbol > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, alphabet::BarSymbol > ( );
 
 } /* namespace */
diff --git a/alib2data/src/alphabet/xml/BlankSymbol.cpp b/alib2data/src/alphabet/xml/BlankSymbol.cpp
index 1a5500735aff110baf701b28d88c6dd2138c60a1..5b65468eaa0182a80bd8276df4c9b33092b97096 100644
--- a/alib2data/src/alphabet/xml/BlankSymbol.cpp
+++ b/alib2data/src/alphabet/xml/BlankSymbol.cpp
@@ -38,10 +38,10 @@ void xmlApi < alphabet::BlankSymbol >::compose ( ext::deque < sax::Token > & out
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alphabet::Symbol, alphabet::BlankSymbol > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, alphabet::BlankSymbol > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alphabet::BlankSymbol > ( );
+static auto xmlRead = registration::XmlReaderRegister < alphabet::BlankSymbol > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < alphabet::Symbol, alphabet::BlankSymbol > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, alphabet::BlankSymbol > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < alphabet::Symbol, alphabet::BlankSymbol > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, alphabet::BlankSymbol > ( );
 
 } /* namespace */
diff --git a/alib2data/src/alphabet/xml/BottomOfTheStackSymbol.cpp b/alib2data/src/alphabet/xml/BottomOfTheStackSymbol.cpp
index 29f61ef2e3fed079ff8ed1bf7920a0753c8d0bd0..4452ce839753fdd350aaf28608c1ee4f7a2889ed 100644
--- a/alib2data/src/alphabet/xml/BottomOfTheStackSymbol.cpp
+++ b/alib2data/src/alphabet/xml/BottomOfTheStackSymbol.cpp
@@ -38,10 +38,10 @@ void xmlApi < alphabet::BottomOfTheStackSymbol >::compose ( ext::deque < sax::To
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alphabet::Symbol, alphabet::BottomOfTheStackSymbol > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, alphabet::BottomOfTheStackSymbol > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alphabet::BottomOfTheStackSymbol > ( );
+static auto xmlRead = registration::XmlReaderRegister < alphabet::BottomOfTheStackSymbol > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < alphabet::Symbol, alphabet::BottomOfTheStackSymbol > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, alphabet::BottomOfTheStackSymbol > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < alphabet::Symbol, alphabet::BottomOfTheStackSymbol > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, alphabet::BottomOfTheStackSymbol > ( );
 
 } /* namespace */
diff --git a/alib2data/src/alphabet/xml/EndSymbol.cpp b/alib2data/src/alphabet/xml/EndSymbol.cpp
index b0795bae427e30287a4c524c156d5a242bd95d5b..b5d1f77f29dc01454077c0320d72d52909c3ae5b 100644
--- a/alib2data/src/alphabet/xml/EndSymbol.cpp
+++ b/alib2data/src/alphabet/xml/EndSymbol.cpp
@@ -38,10 +38,10 @@ void xmlApi < alphabet::EndSymbol >::compose ( ext::deque < sax::Token > & outpu
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alphabet::Symbol, alphabet::EndSymbol > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, alphabet::EndSymbol > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alphabet::EndSymbol > ( );
+static auto xmlRead = registration::XmlReaderRegister < alphabet::EndSymbol > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < alphabet::Symbol, alphabet::EndSymbol > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, alphabet::EndSymbol > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < alphabet::Symbol, alphabet::EndSymbol > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, alphabet::EndSymbol > ( );
 
 } /* namespace */
diff --git a/alib2data/src/alphabet/xml/InitialSymbol.cpp b/alib2data/src/alphabet/xml/InitialSymbol.cpp
index 95cb331bd227bd375c0edb8a4866cf41d64b7d11..2add9c3679a65f91422ee9b9c3941b33201c10a5 100644
--- a/alib2data/src/alphabet/xml/InitialSymbol.cpp
+++ b/alib2data/src/alphabet/xml/InitialSymbol.cpp
@@ -38,10 +38,10 @@ void xmlApi < alphabet::InitialSymbol >::compose ( ext::deque < sax::Token > & o
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alphabet::Symbol, alphabet::InitialSymbol > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, alphabet::InitialSymbol > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alphabet::InitialSymbol > ( );
+static auto xmlRead = registration::XmlReaderRegister < alphabet::InitialSymbol > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < alphabet::Symbol, alphabet::InitialSymbol > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, alphabet::InitialSymbol > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < alphabet::Symbol, alphabet::InitialSymbol > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, alphabet::InitialSymbol > ( );
 
 } /* namespace */
diff --git a/alib2data/src/alphabet/xml/LabeledSymbol.cpp b/alib2data/src/alphabet/xml/LabeledSymbol.cpp
index 0fda873d08e474bb4a0a58e201619f3079234593..8e204070a4c43676a1410a6f35c4abf81c52e281 100644
--- a/alib2data/src/alphabet/xml/LabeledSymbol.cpp
+++ b/alib2data/src/alphabet/xml/LabeledSymbol.cpp
@@ -40,10 +40,10 @@ void xmlApi < alphabet::LabeledSymbol >::compose ( ext::deque < sax::Token > & o
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alphabet::Symbol, alphabet::LabeledSymbol > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, alphabet::LabeledSymbol > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alphabet::LabeledSymbol > ( );
+static auto xmlRead = registration::XmlReaderRegister < alphabet::LabeledSymbol > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < alphabet::Symbol, alphabet::LabeledSymbol > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, alphabet::LabeledSymbol > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < alphabet::Symbol, alphabet::LabeledSymbol > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, alphabet::LabeledSymbol > ( );
 
 } /* namespace */
diff --git a/alib2data/src/alphabet/xml/NonlinearVariableSymbol.cpp b/alib2data/src/alphabet/xml/NonlinearVariableSymbol.cpp
index dd6d69fbe438f4e95ac4f4d4e1793d957de22847..e6b43bd2a8071492c30926f3e54d7e754f3b4ec2 100644
--- a/alib2data/src/alphabet/xml/NonlinearVariableSymbol.cpp
+++ b/alib2data/src/alphabet/xml/NonlinearVariableSymbol.cpp
@@ -13,10 +13,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alphabet::Symbol, alphabet::NonlinearVariableSymbol < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, alphabet::NonlinearVariableSymbol < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alphabet::NonlinearVariableSymbol < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < alphabet::NonlinearVariableSymbol < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < alphabet::Symbol, alphabet::NonlinearVariableSymbol < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, alphabet::NonlinearVariableSymbol < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < alphabet::Symbol, alphabet::NonlinearVariableSymbol < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, alphabet::NonlinearVariableSymbol < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/alphabet/xml/RankedSymbol.cpp b/alib2data/src/alphabet/xml/RankedSymbol.cpp
index c3711e5fe5c5cd3a141504866598314d07e8124f..4a78e7380502a1cdb4b503f373039a16d64b28d2 100644
--- a/alib2data/src/alphabet/xml/RankedSymbol.cpp
+++ b/alib2data/src/alphabet/xml/RankedSymbol.cpp
@@ -13,10 +13,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alphabet::Symbol, alphabet::RankedSymbol < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, alphabet::RankedSymbol < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alphabet::RankedSymbol < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < alphabet::RankedSymbol < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < alphabet::Symbol, alphabet::RankedSymbol < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, alphabet::RankedSymbol < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < alphabet::Symbol, alphabet::RankedSymbol < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, alphabet::RankedSymbol < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/alphabet/xml/StartSymbol.cpp b/alib2data/src/alphabet/xml/StartSymbol.cpp
index fa4667da3d462d7ffe76454ec5d1a5b592648863..a4b964030c7fd637f3f0ced89901fc88ce79bd79 100644
--- a/alib2data/src/alphabet/xml/StartSymbol.cpp
+++ b/alib2data/src/alphabet/xml/StartSymbol.cpp
@@ -38,10 +38,10 @@ void xmlApi < alphabet::StartSymbol >::compose ( ext::deque < sax::Token > & out
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alphabet::Symbol, alphabet::StartSymbol > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, alphabet::StartSymbol > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alphabet::StartSymbol > ( );
+static auto xmlRead = registration::XmlReaderRegister < alphabet::StartSymbol > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < alphabet::Symbol, alphabet::StartSymbol > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, alphabet::StartSymbol > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < alphabet::Symbol, alphabet::StartSymbol > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, alphabet::StartSymbol > ( );
 
 } /* namespace */
diff --git a/alib2data/src/alphabet/xml/SubtreeWildcardSymbol.cpp b/alib2data/src/alphabet/xml/SubtreeWildcardSymbol.cpp
index f00b4cd37c9e18b47a8997d539b1e42a71255eff..56394400f5d92c4dfa44767c99f149427b412174 100644
--- a/alib2data/src/alphabet/xml/SubtreeWildcardSymbol.cpp
+++ b/alib2data/src/alphabet/xml/SubtreeWildcardSymbol.cpp
@@ -38,10 +38,10 @@ void xmlApi < alphabet::SubtreeWildcardSymbol >::compose ( ext::deque < sax::Tok
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alphabet::Symbol, alphabet::SubtreeWildcardSymbol > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, alphabet::SubtreeWildcardSymbol > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alphabet::SubtreeWildcardSymbol > ( );
+static auto xmlRead = registration::XmlReaderRegister < alphabet::SubtreeWildcardSymbol > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < alphabet::Symbol, alphabet::SubtreeWildcardSymbol > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, alphabet::SubtreeWildcardSymbol > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < alphabet::Symbol, alphabet::SubtreeWildcardSymbol > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, alphabet::SubtreeWildcardSymbol > ( );
 
 } /* namespace */
diff --git a/alib2data/src/alphabet/xml/UniqueSymbol.cpp b/alib2data/src/alphabet/xml/UniqueSymbol.cpp
index 25df9ea844bdb6fc96732a4b1db74e49195a319d..6c492223f8b762012f618a73d91439e90b7d774d 100644
--- a/alib2data/src/alphabet/xml/UniqueSymbol.cpp
+++ b/alib2data/src/alphabet/xml/UniqueSymbol.cpp
@@ -45,10 +45,10 @@ void xmlApi < alphabet::UniqueSymbol >::compose ( ext::deque < sax::Token > & ou
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alphabet::Symbol, alphabet::UniqueSymbol > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, alphabet::UniqueSymbol > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alphabet::UniqueSymbol > ( );
+static auto xmlRead = registration::XmlReaderRegister < alphabet::UniqueSymbol > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < alphabet::Symbol, alphabet::UniqueSymbol > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, alphabet::UniqueSymbol > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < alphabet::Symbol, alphabet::UniqueSymbol > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, alphabet::UniqueSymbol > ( );
 
 } /* namespace */
diff --git a/alib2data/src/alphabet/xml/VariablesBarSymbol.cpp b/alib2data/src/alphabet/xml/VariablesBarSymbol.cpp
index d13c7a5007dba00a49237f564c5e5255bf8ef012..b4f3933c26b9bddbf26f65e8f758f919446edbc6 100644
--- a/alib2data/src/alphabet/xml/VariablesBarSymbol.cpp
+++ b/alib2data/src/alphabet/xml/VariablesBarSymbol.cpp
@@ -38,10 +38,10 @@ void xmlApi < alphabet::VariablesBarSymbol >::compose ( ext::deque < sax::Token
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alphabet::Symbol, alphabet::VariablesBarSymbol > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, alphabet::VariablesBarSymbol > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alphabet::VariablesBarSymbol > ( );
+static auto xmlRead = registration::XmlReaderRegister < alphabet::VariablesBarSymbol > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < alphabet::Symbol, alphabet::VariablesBarSymbol > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, alphabet::VariablesBarSymbol > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < alphabet::Symbol, alphabet::VariablesBarSymbol > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, alphabet::VariablesBarSymbol > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/FSM/CompactNFA.cpp b/alib2data/src/automaton/FSM/CompactNFA.cpp
index b619700abda2a8d953722ebaf636bba71cd7a36b..09276676e6f566d1cb878930d34ac18406ef41f0 100644
--- a/alib2data/src/automaton/FSM/CompactNFA.cpp
+++ b/alib2data/src/automaton/FSM/CompactNFA.cpp
@@ -20,11 +20,11 @@ static auto components = registration::ComponentRegister < automaton::CompactNFA
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::CompactNFA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::CompactNFA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::CompactNFA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::CompactNFA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::CompactNFA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::CompactNFA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::CompactNFA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::CompactNFA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::CompactNFA < > > ( );
 
 static auto compactNFAFromDFA = registration::CastRegister < automaton::CompactNFA < >, automaton::DFA < > > ( );
 static auto compactNFAFromNFA = registration::CastRegister < automaton::CompactNFA < >, automaton::NFA < > > ( );
diff --git a/alib2data/src/automaton/FSM/DFA.cpp b/alib2data/src/automaton/FSM/DFA.cpp
index 44ec98ba4fd58b79bdac93f0ed28592b0eb0adcd..65d3c648ff47c9cbbc8a6f39f723736c37da031f 100644
--- a/alib2data/src/automaton/FSM/DFA.cpp
+++ b/alib2data/src/automaton/FSM/DFA.cpp
@@ -16,10 +16,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::DFA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::DFA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::DFA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::DFA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::DFA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::DFA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::DFA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::DFA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::DFA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.cpp b/alib2data/src/automaton/FSM/EpsilonNFA.cpp
index 0edf050a78478d44806444c757e23062f1946847..e5777eb211787c666a35271fceed3aec17c3370c 100644
--- a/alib2data/src/automaton/FSM/EpsilonNFA.cpp
+++ b/alib2data/src/automaton/FSM/EpsilonNFA.cpp
@@ -17,11 +17,11 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::EpsilonNFA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::EpsilonNFA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::EpsilonNFA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::EpsilonNFA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::EpsilonNFA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::EpsilonNFA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::EpsilonNFA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::EpsilonNFA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::EpsilonNFA < > > ( );
 
 static auto epsilonNFAFromDFA = registration::CastRegister < automaton::EpsilonNFA < >, automaton::DFA < > > ( );
 static auto epsilonNFAFromNFA = registration::CastRegister < automaton::EpsilonNFA < >, automaton::NFA < > > ( );
diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.cpp b/alib2data/src/automaton/FSM/ExtendedNFA.cpp
index 4e15266a5182c1e66a52ecfa4c29ec0a3d076d9e..55b7bdc5b81d88b69b91ab2fb96627802d93cfe5 100644
--- a/alib2data/src/automaton/FSM/ExtendedNFA.cpp
+++ b/alib2data/src/automaton/FSM/ExtendedNFA.cpp
@@ -17,11 +17,11 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::ExtendedNFA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::ExtendedNFA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::ExtendedNFA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::ExtendedNFA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::ExtendedNFA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::ExtendedNFA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::ExtendedNFA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::ExtendedNFA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::ExtendedNFA < > > ( );
 
 static auto extendedNFAFromDFA = registration::CastRegister < automaton::ExtendedNFA < >, automaton::DFA < > > ( );
 static auto extendedNFAFromNFA = registration::CastRegister < automaton::ExtendedNFA < >, automaton::NFA < > > ( );
diff --git a/alib2data/src/automaton/FSM/MultiInitialStateNFA.cpp b/alib2data/src/automaton/FSM/MultiInitialStateNFA.cpp
index 26e4b030bf482bccf22f2a73a1a317c4ea48b9e4..f328cb7d1d06a4a87e65f730503925bfa2ea1a5b 100644
--- a/alib2data/src/automaton/FSM/MultiInitialStateNFA.cpp
+++ b/alib2data/src/automaton/FSM/MultiInitialStateNFA.cpp
@@ -17,11 +17,11 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::MultiInitialStateNFA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::MultiInitialStateNFA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::MultiInitialStateNFA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::MultiInitialStateNFA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::MultiInitialStateNFA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::MultiInitialStateNFA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::MultiInitialStateNFA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::MultiInitialStateNFA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::MultiInitialStateNFA < > > ( );
 
 static auto multiInitialStateNFAFromDFA = registration::CastRegister < automaton::MultiInitialStateNFA < >, automaton::DFA < > > ( );
 static auto multiInitialStateNFAFromNFA = registration::CastRegister < automaton::MultiInitialStateNFA < >, automaton::NFA < > > ( );
diff --git a/alib2data/src/automaton/FSM/NFA.cpp b/alib2data/src/automaton/FSM/NFA.cpp
index 904b1007819139170124ee538b8a5cd784125dfc..7fa41ec2db68d6d03e1b6c7edcd3c1f71e1e88ec 100644
--- a/alib2data/src/automaton/FSM/NFA.cpp
+++ b/alib2data/src/automaton/FSM/NFA.cpp
@@ -17,11 +17,11 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::NFA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::NFA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::NFA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::NFA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::NFA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::NFA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::NFA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::NFA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::NFA < > > ( );
 
 static auto NFAFromDFA = registration::CastRegister < automaton::NFA < >, automaton::DFA < > > ( );
 
diff --git a/alib2data/src/automaton/PDA/DPDA.cpp b/alib2data/src/automaton/PDA/DPDA.cpp
index 70fb76de736d8f970a254cab08682582fe4d673e..975460f29725168dd0b4d22561b9c10a74786de9 100644
--- a/alib2data/src/automaton/PDA/DPDA.cpp
+++ b/alib2data/src/automaton/PDA/DPDA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::DPDA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::DPDA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::DPDA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::DPDA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::DPDA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::DPDA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::DPDA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::DPDA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::DPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/PDA/InputDrivenDPDA.cpp b/alib2data/src/automaton/PDA/InputDrivenDPDA.cpp
index 01bb24cb166fbeb6656b65a8b98f35818ce59f08..9ddee9f74b7a05486e87374e525791cae4e663d1 100644
--- a/alib2data/src/automaton/PDA/InputDrivenDPDA.cpp
+++ b/alib2data/src/automaton/PDA/InputDrivenDPDA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::InputDrivenDPDA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::InputDrivenDPDA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::InputDrivenDPDA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::InputDrivenDPDA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::InputDrivenDPDA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::InputDrivenDPDA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::InputDrivenDPDA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::InputDrivenDPDA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::InputDrivenDPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/PDA/InputDrivenNPDA.cpp b/alib2data/src/automaton/PDA/InputDrivenNPDA.cpp
index ec48c6d473c409cc194e59e10f9967d862fdfb00..4aa7e7605f374b0f553067a0c61835de73c5fe60 100644
--- a/alib2data/src/automaton/PDA/InputDrivenNPDA.cpp
+++ b/alib2data/src/automaton/PDA/InputDrivenNPDA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::InputDrivenNPDA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::InputDrivenNPDA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::InputDrivenNPDA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::InputDrivenNPDA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::InputDrivenNPDA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::InputDrivenNPDA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::InputDrivenNPDA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::InputDrivenNPDA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::InputDrivenNPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/PDA/NPDA.cpp b/alib2data/src/automaton/PDA/NPDA.cpp
index ca0624b741ff91e518bfc36fb5b4c44c3dd6c49f..d70f7db6b48ee25d93a18c6d6cafc5391ef21ec2 100644
--- a/alib2data/src/automaton/PDA/NPDA.cpp
+++ b/alib2data/src/automaton/PDA/NPDA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::NPDA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::NPDA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::NPDA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::NPDA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::NPDA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::NPDA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::NPDA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::NPDA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::NPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/PDA/NPDTA.cpp b/alib2data/src/automaton/PDA/NPDTA.cpp
index d1bc3fc8951846944372fa88e62a648835dad623..f2d44b2f9cd327d2a615f5279974dd3868613574 100644
--- a/alib2data/src/automaton/PDA/NPDTA.cpp
+++ b/alib2data/src/automaton/PDA/NPDTA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::NPDTA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::NPDTA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::NPDTA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::NPDTA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::NPDTA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::NPDTA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::NPDTA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::NPDTA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::NPDTA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.cpp b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.cpp
index 31158c7e9cfdf9a4a5ba9bf6a3a7fd323342bc45..8e41ad69d00cdefa453672b7b110479fd04d69f6 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.cpp
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::RealTimeHeightDeterministicDPDA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::RealTimeHeightDeterministicDPDA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::RealTimeHeightDeterministicDPDA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::RealTimeHeightDeterministicDPDA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::RealTimeHeightDeterministicDPDA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::RealTimeHeightDeterministicDPDA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::RealTimeHeightDeterministicDPDA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::RealTimeHeightDeterministicDPDA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::RealTimeHeightDeterministicDPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.cpp b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.cpp
index 90c13731cb60a58afeb2c859b7b70e5723fd6d1e..31369bd83182bb5c10da8ed8883095443a7ada0d 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.cpp
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::RealTimeHeightDeterministicNPDA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::RealTimeHeightDeterministicNPDA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::RealTimeHeightDeterministicNPDA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::RealTimeHeightDeterministicNPDA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::RealTimeHeightDeterministicNPDA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::RealTimeHeightDeterministicNPDA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::RealTimeHeightDeterministicNPDA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::RealTimeHeightDeterministicNPDA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::RealTimeHeightDeterministicNPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/PDA/SinglePopDPDA.cpp b/alib2data/src/automaton/PDA/SinglePopDPDA.cpp
index e7641bc50c66a030a314d0048f959bbc3d870b84..ea4ac85ebd4e26a5e13725fbd883d2dd3fe07e4c 100644
--- a/alib2data/src/automaton/PDA/SinglePopDPDA.cpp
+++ b/alib2data/src/automaton/PDA/SinglePopDPDA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::SinglePopDPDA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::SinglePopDPDA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::SinglePopDPDA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::SinglePopDPDA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::SinglePopDPDA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::SinglePopDPDA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::SinglePopDPDA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::SinglePopDPDA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::SinglePopDPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/PDA/SinglePopNPDA.cpp b/alib2data/src/automaton/PDA/SinglePopNPDA.cpp
index fae7c4660bf618b075744b357ba46d599777cfd3..ff14d6b3a360fa4cbc9519c90272d2b3fb72f45a 100644
--- a/alib2data/src/automaton/PDA/SinglePopNPDA.cpp
+++ b/alib2data/src/automaton/PDA/SinglePopNPDA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::SinglePopNPDA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::SinglePopNPDA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::SinglePopNPDA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::SinglePopNPDA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::SinglePopNPDA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::SinglePopNPDA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::SinglePopNPDA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::SinglePopNPDA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::SinglePopNPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp
index c0862fb0b914293edfe2510fce13452c1a31bf29..209289822ace3dc9df798c42b3af88ae67f326f3 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::VisiblyPushdownDPDA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::VisiblyPushdownDPDA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::VisiblyPushdownDPDA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::VisiblyPushdownDPDA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::VisiblyPushdownDPDA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::VisiblyPushdownDPDA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::VisiblyPushdownDPDA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::VisiblyPushdownDPDA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::VisiblyPushdownDPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp
index de65bfeea059b2671bc53ef869e132957e59c259..5801405af1d12f541df550a07572d4a51ef250a2 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::VisiblyPushdownNPDA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::VisiblyPushdownNPDA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::VisiblyPushdownNPDA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::VisiblyPushdownNPDA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::VisiblyPushdownNPDA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::VisiblyPushdownNPDA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::VisiblyPushdownNPDA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::VisiblyPushdownNPDA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::VisiblyPushdownNPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/TA/DFTA.cpp b/alib2data/src/automaton/TA/DFTA.cpp
index e03fa9fdf7fc72d62e73a9aa2989ba9e4ac7b601..c1c4a2bb8102bfa113872e10ab9a8007c3162389 100644
--- a/alib2data/src/automaton/TA/DFTA.cpp
+++ b/alib2data/src/automaton/TA/DFTA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::DFTA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::DFTA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::DFTA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::DFTA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::DFTA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::DFTA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::DFTA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::DFTA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::DFTA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/TA/NFTA.cpp b/alib2data/src/automaton/TA/NFTA.cpp
index d634de13cf2495e9db2379ecd6bf737196456df4..c548a067276684c96c8d13168b78eb4000d14b07 100644
--- a/alib2data/src/automaton/TA/NFTA.cpp
+++ b/alib2data/src/automaton/TA/NFTA.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::NFTA < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::NFTA < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::NFTA < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::NFTA < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::NFTA < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::NFTA < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::NFTA < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::NFTA < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::NFTA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/TM/OneTapeDTM.cpp b/alib2data/src/automaton/TM/OneTapeDTM.cpp
index 403f0414f19d580dc383e65b5580e7b4fe10682b..1eecbc080792da0cd2fee15fdc2d377358eb2166 100644
--- a/alib2data/src/automaton/TM/OneTapeDTM.cpp
+++ b/alib2data/src/automaton/TM/OneTapeDTM.cpp
@@ -18,10 +18,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < automaton::OneTapeDTM < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < automaton::Automaton, automaton::OneTapeDTM < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, automaton::OneTapeDTM < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < automaton::OneTapeDTM < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < automaton::OneTapeDTM < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < automaton::Automaton, automaton::OneTapeDTM < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, automaton::OneTapeDTM < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::OneTapeDTM < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, automaton::OneTapeDTM < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/ContextFree/CFG.cpp b/alib2data/src/grammar/ContextFree/CFG.cpp
index 1b7deb9f03b2ffca2cc350c7541c93610473c385..adb0cc32d462675eb358c6516ed8546b7a381990 100644
--- a/alib2data/src/grammar/ContextFree/CFG.cpp
+++ b/alib2data/src/grammar/ContextFree/CFG.cpp
@@ -19,10 +19,10 @@ static auto CFGEpsilonFreeCFG = registration::CastRegister < grammar::CFG < >, g
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::CFG < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::CFG < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::CFG < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::CFG < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < grammar::CFG < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::CFG < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::CFG < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::CFG < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::CFG < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/ContextFree/CNF.cpp b/alib2data/src/grammar/ContextFree/CNF.cpp
index 58a9428c21dffae50fdb0a3030a372c55e7b465a..502bca01a729ec99435f4f646a7ab4a5ddcf7feb 100644
--- a/alib2data/src/grammar/ContextFree/CNF.cpp
+++ b/alib2data/src/grammar/ContextFree/CNF.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::CNF < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::CNF < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::CNF < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::CNF < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < grammar::CNF < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::CNF < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::CNF < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::CNF < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::CNF < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
index acd3beb4095debaad8a2c8d969f8aafeb3a39d61..bcaf9cbd0b6778cb4be68239080ab841f5531804 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::EpsilonFreeCFG < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::EpsilonFreeCFG < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::EpsilonFreeCFG < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::EpsilonFreeCFG < > > ( );
+static auto xmlGroup = registration::XmlReaderRegister < grammar::EpsilonFreeCFG < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::EpsilonFreeCFG < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::EpsilonFreeCFG < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::EpsilonFreeCFG < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::EpsilonFreeCFG < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/ContextFree/GNF.cpp b/alib2data/src/grammar/ContextFree/GNF.cpp
index c328a226a2f53782ca9f4190b1447d75d4686e3f..05ea71ed4c1460690fba4b465bd2f9aba3a8ce8c 100644
--- a/alib2data/src/grammar/ContextFree/GNF.cpp
+++ b/alib2data/src/grammar/ContextFree/GNF.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::GNF < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::GNF < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::GNF < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::GNF < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < grammar::GNF < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::GNF < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::GNF < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::GNF < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::GNF < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/ContextFree/LG.cpp b/alib2data/src/grammar/ContextFree/LG.cpp
index eaf5a5e9f105bc73f4b0d828af09b0ff89486920..7b709d687f056a7570563ba66eeb241c9891e74b 100644
--- a/alib2data/src/grammar/ContextFree/LG.cpp
+++ b/alib2data/src/grammar/ContextFree/LG.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::LG < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::LG < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::LG < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::LG < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < grammar::LG < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::LG < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::LG < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::LG < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::LG < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/ContextSensitive/CSG.cpp b/alib2data/src/grammar/ContextSensitive/CSG.cpp
index 6e8ea12366b7b286f2edab3f2d61ee9fcdd04bd7..95840497dc580ee53d88c5d80d677c6cadea3ff1 100644
--- a/alib2data/src/grammar/ContextSensitive/CSG.cpp
+++ b/alib2data/src/grammar/ContextSensitive/CSG.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::CSG < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::CSG < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::CSG < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::CSG < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < grammar::CSG < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::CSG < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::CSG < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::CSG < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::CSG < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp
index cf6353cfdd4a2aa5e2092ba698db6e0b7337c75d..e02e37a3aa00f490588f935185cc124fb1bc8a0d 100644
--- a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp
+++ b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::NonContractingGrammar < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::NonContractingGrammar < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::NonContractingGrammar < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::NonContractingGrammar < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < grammar::NonContractingGrammar < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::NonContractingGrammar < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::NonContractingGrammar < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::NonContractingGrammar < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::NonContractingGrammar < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/Regular/LeftLG.cpp b/alib2data/src/grammar/Regular/LeftLG.cpp
index 78cc2b4f62ec4501278abec88c2cc0f494ec1d32..34e66fe6f2d1d940c9592e4f8523a0ee0173f5cc 100644
--- a/alib2data/src/grammar/Regular/LeftLG.cpp
+++ b/alib2data/src/grammar/Regular/LeftLG.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::LeftLG < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::LeftLG < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::LeftLG < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::LeftLG < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < grammar::LeftLG < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::LeftLG < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::LeftLG < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::LeftLG < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::LeftLG < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/Regular/LeftRG.cpp b/alib2data/src/grammar/Regular/LeftRG.cpp
index 66e53dad073bfe6f1968646abf864f733d385ba1..3a548b55fb02f436a5b750d0f5cccdc26eb802bc 100644
--- a/alib2data/src/grammar/Regular/LeftRG.cpp
+++ b/alib2data/src/grammar/Regular/LeftRG.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::LeftRG < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::LeftRG < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::LeftRG < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::LeftRG < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < grammar::LeftRG < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::LeftRG < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::LeftRG < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::LeftRG < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::LeftRG < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/Regular/RightLG.cpp b/alib2data/src/grammar/Regular/RightLG.cpp
index 4fb191751f3b14747382a1ec26f049c4161ecf0b..0483ea34f70f7b036a9a71e008082d1b7385f989 100644
--- a/alib2data/src/grammar/Regular/RightLG.cpp
+++ b/alib2data/src/grammar/Regular/RightLG.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::RightLG < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::RightLG < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::RightLG < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::RightLG < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < grammar::RightLG < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::RightLG < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::RightLG < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::RightLG < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::RightLG < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/Regular/RightRG.cpp b/alib2data/src/grammar/Regular/RightRG.cpp
index 2bd6477acccdab41a40359426fe008a7425f8120..1f4d4ead26b75eb50aad9a876427c67eee64a292 100644
--- a/alib2data/src/grammar/Regular/RightRG.cpp
+++ b/alib2data/src/grammar/Regular/RightRG.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::RightRG < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::RightRG < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::RightRG < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::RightRG < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < grammar::RightRG < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::RightRG < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::RightRG < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::RightRG < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::RightRG < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp
index 42036faa95d9c5ba06cf42085e33c814392c48d0..c8e0b79af5d6bd403c3343cb1de85c15ad3d640b 100644
--- a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp
+++ b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::ContextPreservingUnrestrictedGrammar < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::ContextPreservingUnrestrictedGrammar < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::ContextPreservingUnrestrictedGrammar < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::ContextPreservingUnrestrictedGrammar < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < grammar::ContextPreservingUnrestrictedGrammar < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::ContextPreservingUnrestrictedGrammar < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::ContextPreservingUnrestrictedGrammar < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::ContextPreservingUnrestrictedGrammar < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::ContextPreservingUnrestrictedGrammar < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp
index e07dccf1cac452902d2f190dad6b0bbe90e50c76..709236ae766d18ca3b5f2b0e38484908c450c8b5 100644
--- a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp
+++ b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp
@@ -17,10 +17,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < grammar::UnrestrictedGrammar < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < grammar::Grammar, grammar::UnrestrictedGrammar < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, grammar::UnrestrictedGrammar < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < grammar::UnrestrictedGrammar < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < grammar::UnrestrictedGrammar < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < grammar::Grammar, grammar::UnrestrictedGrammar < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, grammar::UnrestrictedGrammar < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < grammar::Grammar, grammar::UnrestrictedGrammar < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, grammar::UnrestrictedGrammar < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.cpp b/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.cpp
index 57e83d0e55214c940df030a25d68642b03447dce..a4d2f1aaaa86358752051a45dfbe2b75c47d75df 100644
--- a/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.cpp
+++ b/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.cpp
@@ -14,7 +14,9 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < indexes::arbology::CompressedBitParallelTreeIndex < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, indexes::arbology::CompressedBitParallelTreeIndex < > > ( );
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, indexes::arbology::CompressedBitParallelTreeIndex < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < indexes::arbology::CompressedBitParallelTreeIndex < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < indexes::arbology::CompressedBitParallelTreeIndex < > > ( );
+
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, indexes::arbology::CompressedBitParallelTreeIndex < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/indexes/arbology/FullAndLinearIndex.cpp b/alib2data/src/indexes/arbology/FullAndLinearIndex.cpp
index c56d7f9c8d74dc7f4c7dbfc22fdc0e135e6d4ee3..4a5c9b945e65e52e6e275f24784eb5bf9b1c2a9a 100644
--- a/alib2data/src/indexes/arbology/FullAndLinearIndex.cpp
+++ b/alib2data/src/indexes/arbology/FullAndLinearIndex.cpp
@@ -14,7 +14,9 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < indexes::arbology::FullAndLinearIndex < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, indexes::arbology::FullAndLinearIndex < > > ( );
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, indexes::arbology::FullAndLinearIndex < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < indexes::arbology::FullAndLinearIndex < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < indexes::arbology::FullAndLinearIndex < > > ( );
+
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, indexes::arbology::FullAndLinearIndex < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/indexes/arbology/NonlinearCompressedBitParallelTreeIndex.cpp b/alib2data/src/indexes/arbology/NonlinearCompressedBitParallelTreeIndex.cpp
index 1c96d4b4bd657e1def815ea4fc3b113b6e0d05c4..8f43ebced933cfeedc08f4bf503032e1861366b8 100644
--- a/alib2data/src/indexes/arbology/NonlinearCompressedBitParallelTreeIndex.cpp
+++ b/alib2data/src/indexes/arbology/NonlinearCompressedBitParallelTreeIndex.cpp
@@ -14,7 +14,9 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > > ( );
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > > ( );
+
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/indexes/arbology/NonlinearFullAndLinearIndex.cpp b/alib2data/src/indexes/arbology/NonlinearFullAndLinearIndex.cpp
index d1c3caf6c2f8b3b49c5a0bc00398a981207e80f4..16875acc2b5187ad943ca36d05f52f2a319f2b0c 100644
--- a/alib2data/src/indexes/arbology/NonlinearFullAndLinearIndex.cpp
+++ b/alib2data/src/indexes/arbology/NonlinearFullAndLinearIndex.cpp
@@ -14,7 +14,9 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < indexes::arbology::NonlinearFullAndLinearIndex < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, indexes::arbology::NonlinearFullAndLinearIndex < > > ( );
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, indexes::arbology::NonlinearFullAndLinearIndex < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < indexes::arbology::NonlinearFullAndLinearIndex < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < indexes::arbology::NonlinearFullAndLinearIndex < > > ( );
+
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, indexes::arbology::NonlinearFullAndLinearIndex < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/indexes/stringology/BNDMMatcher.cpp b/alib2data/src/indexes/stringology/BNDMMatcher.cpp
index 4478c237c582fe787060f9382d899c845eb783bb..5ef1b780006708a4edb39df3639acdea6d3562e4 100644
--- a/alib2data/src/indexes/stringology/BNDMMatcher.cpp
+++ b/alib2data/src/indexes/stringology/BNDMMatcher.cpp
@@ -14,7 +14,9 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < indexes::stringology::BNDMMatcher < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, indexes::stringology::BNDMMatcher < > > ( );
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, indexes::stringology::BNDMMatcher < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < indexes::stringology::BNDMMatcher < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < indexes::stringology::BNDMMatcher < > > ( );
+
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, indexes::stringology::BNDMMatcher < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/indexes/stringology/BitParallelIndex.cpp b/alib2data/src/indexes/stringology/BitParallelIndex.cpp
index ac5e09492352230b53b54804557c51800cd9a10c..e68f56b474a795aca44cad7c5aebfe8795179d93 100644
--- a/alib2data/src/indexes/stringology/BitParallelIndex.cpp
+++ b/alib2data/src/indexes/stringology/BitParallelIndex.cpp
@@ -14,7 +14,9 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < indexes::stringology::BitParallelIndex < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, indexes::stringology::BitParallelIndex < > > ( );
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, indexes::stringology::BitParallelIndex < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < indexes::stringology::BitParallelIndex < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < indexes::stringology::BitParallelIndex < > > ( );
+
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, indexes::stringology::BitParallelIndex < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/indexes/stringology/CompressedBitParallelIndex.cpp b/alib2data/src/indexes/stringology/CompressedBitParallelIndex.cpp
index 3bb155e207d6cec067e60aecc9f7fe1409d1afb3..31c8844e413c195fff07c3079e5eb92a0f44e9ba 100644
--- a/alib2data/src/indexes/stringology/CompressedBitParallelIndex.cpp
+++ b/alib2data/src/indexes/stringology/CompressedBitParallelIndex.cpp
@@ -14,7 +14,9 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < indexes::stringology::CompressedBitParallelIndex < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, indexes::stringology::CompressedBitParallelIndex < > > ( );
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, indexes::stringology::CompressedBitParallelIndex < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < indexes::stringology::CompressedBitParallelIndex < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < indexes::stringology::CompressedBitParallelIndex < > > ( );
+
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, indexes::stringology::CompressedBitParallelIndex < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/indexes/stringology/PositionHeap.cpp b/alib2data/src/indexes/stringology/PositionHeap.cpp
index 27c7843dfc301f158ca1eefa524b88632b857fae..f7b6af56cac083bc316de2eb74cd8776b775fe57 100644
--- a/alib2data/src/indexes/stringology/PositionHeap.cpp
+++ b/alib2data/src/indexes/stringology/PositionHeap.cpp
@@ -14,7 +14,9 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < indexes::stringology::PositionHeap < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, indexes::stringology::PositionHeap < > > ( );
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, indexes::stringology::PositionHeap < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < indexes::stringology::PositionHeap < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < indexes::stringology::PositionHeap < > > ( );
+
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, indexes::stringology::PositionHeap < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/indexes/stringology/SuffixArray.cpp b/alib2data/src/indexes/stringology/SuffixArray.cpp
index 51a57f6ecb59a6a28442b3184ae92d830624464a..1acbbc4e8ec371ba070e6200b752b9665c79f30d 100644
--- a/alib2data/src/indexes/stringology/SuffixArray.cpp
+++ b/alib2data/src/indexes/stringology/SuffixArray.cpp
@@ -14,7 +14,9 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < indexes::stringology::SuffixArray < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, indexes::stringology::SuffixArray < > > ( );
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, indexes::stringology::SuffixArray < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < indexes::stringology::SuffixArray < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < indexes::stringology::SuffixArray < > > ( );
+
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, indexes::stringology::SuffixArray < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/indexes/stringology/SuffixTrie.cpp b/alib2data/src/indexes/stringology/SuffixTrie.cpp
index c6747b6d980e048345c2c2f10c91053da392fcbb..8343c0509f51b984f922c5fb5d7c0453e21a1a96 100644
--- a/alib2data/src/indexes/stringology/SuffixTrie.cpp
+++ b/alib2data/src/indexes/stringology/SuffixTrie.cpp
@@ -14,7 +14,9 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < indexes::stringology::SuffixTrie < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, indexes::stringology::SuffixTrie < > > ( );
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, indexes::stringology::SuffixTrie < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < indexes::stringology::SuffixTrie < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < indexes::stringology::SuffixTrie < > > ( );
+
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, indexes::stringology::SuffixTrie < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/label/FailStateLabel.cpp b/alib2data/src/label/FailStateLabel.cpp
index 9bd696f28990e082e91e98d33fc36d9d2fd8cc17..dbd5ae6b0d563296eacda64349310326441e277d 100644
--- a/alib2data/src/label/FailStateLabel.cpp
+++ b/alib2data/src/label/FailStateLabel.cpp
@@ -61,10 +61,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < label::FailStateLabel > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < label::Label, label::FailStateLabel > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, label::FailStateLabel > ( );
+static auto xmlWrite = registration::XmlWriterRegister < label::FailStateLabel > ( );
+static auto xmlRead = registration::XmlReaderRegister < label::FailStateLabel > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < label::Label, label::FailStateLabel > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, label::FailStateLabel > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < label::Label, label::FailStateLabel > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, label::FailStateLabel > ( );
 
 } /* namespace */
diff --git a/alib2data/src/label/FinalStateLabel.cpp b/alib2data/src/label/FinalStateLabel.cpp
index eb06a27e2b440ba18a836321cf8916c132ddfbbe..6193467eaf772850dd13c75b72c2c965ed6cd9d1 100644
--- a/alib2data/src/label/FinalStateLabel.cpp
+++ b/alib2data/src/label/FinalStateLabel.cpp
@@ -60,10 +60,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < label::FinalStateLabel > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < label::Label, label::FinalStateLabel > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, label::FinalStateLabel > ( );
+static auto xmlWrite = registration::XmlWriterRegister < label::FinalStateLabel > ( );
+static auto xmlRead = registration::XmlReaderRegister < label::FinalStateLabel > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < label::Label, label::FinalStateLabel > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, label::FinalStateLabel > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < label::Label, label::FinalStateLabel > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, label::FinalStateLabel > ( );
 
 } /* namespace */
diff --git a/alib2data/src/label/HexavigesimalLabel.cpp b/alib2data/src/label/HexavigesimalLabel.cpp
index f2f84e2b928433b3cb85827a7dfdf7c2bd69fd7d..9c7775a2e174b244f3abbc9bb7e1156c831f4562 100644
--- a/alib2data/src/label/HexavigesimalLabel.cpp
+++ b/alib2data/src/label/HexavigesimalLabel.cpp
@@ -71,10 +71,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < label::HexavigesimalLabel > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < label::Label, label::HexavigesimalLabel > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, label::HexavigesimalLabel > ( );
+static auto xmlWrite = registration::XmlWriterRegister < label::HexavigesimalLabel > ( );
+static auto xmlRead = registration::XmlWriterRegister < label::HexavigesimalLabel > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < label::Label, label::HexavigesimalLabel > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, label::HexavigesimalLabel > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < label::Label, label::HexavigesimalLabel > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, label::HexavigesimalLabel > ( );
 
 } /* namespace */
diff --git a/alib2data/src/label/InitialStateLabel.cpp b/alib2data/src/label/InitialStateLabel.cpp
index 5f5ee429b7426ae2f291c305b50512389106f1ae..297b33387a1143fceb68671712103bde469ade0e 100644
--- a/alib2data/src/label/InitialStateLabel.cpp
+++ b/alib2data/src/label/InitialStateLabel.cpp
@@ -61,10 +61,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < label::InitialStateLabel > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < label::Label, label::InitialStateLabel > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, label::InitialStateLabel > ( );
+static auto xmlWrite = registration::XmlWriterRegister < label::InitialStateLabel > ( );
+static auto xmlRead = registration::XmlReaderRegister < label::InitialStateLabel > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < label::Label, label::InitialStateLabel > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, label::InitialStateLabel > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < label::Label, label::InitialStateLabel > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, label::InitialStateLabel > ( );
 
 } /* namespace */
diff --git a/alib2data/src/label/ObjectLabel.cpp b/alib2data/src/label/ObjectLabel.cpp
index d248712cca5fd2e88e4dff51dd86ed2fc27b7092..a0a4ae860d214bbb5a2a09c5a0da6c5865205463 100644
--- a/alib2data/src/label/ObjectLabel.cpp
+++ b/alib2data/src/label/ObjectLabel.cpp
@@ -67,10 +67,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < label::ObjectLabel > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < label::Label, label::ObjectLabel > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, label::ObjectLabel > ( );
+static auto xmlWrite = registration::XmlWriterRegister < label::ObjectLabel > ( );
+static auto xmlRead = registration::XmlReaderRegister < label::ObjectLabel > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < label::Label, label::ObjectLabel > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, label::ObjectLabel > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < label::Label, label::ObjectLabel > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, label::ObjectLabel > ( );
 
 } /* namespace */
diff --git a/alib2data/src/label/PrimitiveLabel.cpp b/alib2data/src/label/PrimitiveLabel.cpp
index f1f1e2df19aa17a38decc3649360786e1bb4cb2a..019127a53d1688da97881a232d4604b081b3ab81 100644
--- a/alib2data/src/label/PrimitiveLabel.cpp
+++ b/alib2data/src/label/PrimitiveLabel.cpp
@@ -72,10 +72,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < label::PrimitiveLabel > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < label::Label, label::PrimitiveLabel > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, label::PrimitiveLabel > ( );
+static auto xmlWrite = registration::XmlWriterRegister < label::PrimitiveLabel > ( );
+static auto xmlRead = registration::XmlReaderRegister < label::PrimitiveLabel > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < label::Label, label::PrimitiveLabel > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, label::PrimitiveLabel > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < label::Label, label::PrimitiveLabel > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, label::PrimitiveLabel > ( );
 
 } /* namespace */
diff --git a/alib2data/src/label/UniqueLabel.cpp b/alib2data/src/label/UniqueLabel.cpp
index f51d006c7cb7607b84ff0852262cbbbdf77ff619..b01f7e25298981280ee5937f5f67ed3e335e045a 100644
--- a/alib2data/src/label/UniqueLabel.cpp
+++ b/alib2data/src/label/UniqueLabel.cpp
@@ -91,10 +91,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < label::UniqueLabel > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < label::Label, label::UniqueLabel > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, label::UniqueLabel > ( );
+static auto xmlWrite = registration::XmlWriterRegister < label::UniqueLabel > ( );
+static auto xmlRead = registration::XmlReaderRegister < label::UniqueLabel > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < label::Label, label::UniqueLabel > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, label::UniqueLabel > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < label::Label, label::UniqueLabel > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, label::UniqueLabel > ( );
 
 } /* namespace */
diff --git a/alib2data/src/regexp/formal/FormalRegExp.cpp b/alib2data/src/regexp/formal/FormalRegExp.cpp
index 0fa1f9fe0aba882b2d3b4e6a481a414c109fae52..cf091d1a3c8b25828397931c18421b2206723291 100644
--- a/alib2data/src/regexp/formal/FormalRegExp.cpp
+++ b/alib2data/src/regexp/formal/FormalRegExp.cpp
@@ -19,10 +19,10 @@ static auto formalRegExpFromUnboundedRegExp = registration::CastRegister < regex
 
 static auto valuePrinter = registration::ValuePrinterRegister < regexp::FormalRegExp < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < regexp::RegExp, regexp::FormalRegExp < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, regexp::FormalRegExp < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < regexp::FormalRegExp < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < regexp::FormalRegExp < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < regexp::RegExp, regexp::FormalRegExp < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, regexp::FormalRegExp < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < regexp::RegExp, regexp::FormalRegExp < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, regexp::FormalRegExp < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExp.cpp b/alib2data/src/regexp/unbounded/UnboundedRegExp.cpp
index 27190442ef2378b698d24dbb43fffacd6aa1f44b..c4e73ac93e3eb131997cef4179fb518fee9529c6 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExp.cpp
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExp.cpp
@@ -19,10 +19,10 @@ static auto unboundedRegExpFromFormalRegExp = registration::CastRegister < regex
 
 static auto valuePrinter = registration::ValuePrinterRegister < regexp::UnboundedRegExp < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < regexp::RegExp, regexp::UnboundedRegExp < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, regexp::UnboundedRegExp < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < regexp::UnboundedRegExp < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < regexp::UnboundedRegExp < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < regexp::RegExp, regexp::UnboundedRegExp < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, regexp::UnboundedRegExp < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < regexp::RegExp, regexp::UnboundedRegExp < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, regexp::UnboundedRegExp < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/rte/formal/FormalRTE.cpp b/alib2data/src/rte/formal/FormalRTE.cpp
index 7baa98b857cb7e7a6e012cf10ea8c46a2ea74d36..1d6a16c05a32c49d3a0d1e62cb0ff5da619d1b86 100644
--- a/alib2data/src/rte/formal/FormalRTE.cpp
+++ b/alib2data/src/rte/formal/FormalRTE.cpp
@@ -6,7 +6,7 @@
  */
 
 #include "FormalRTE.h"
-#include "../RTE.h"
+#include <rte/RTE.h>
 #include <object/Object.h>
 
 #include <registration/ValuePrinterRegistration.hpp>
@@ -16,10 +16,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < rte::FormalRTE < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < rte::RTE, rte::FormalRTE < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, rte::FormalRTE < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < rte::FormalRTE < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < rte::FormalRTE < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < rte::RTE, rte::FormalRTE < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, rte::FormalRTE < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < rte::RTE, rte::FormalRTE < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, rte::FormalRTE < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/string/xml/CyclicString.cpp b/alib2data/src/string/xml/CyclicString.cpp
index 543756a51d15b89650d926e6b42a88d5b38f2fe8..67e29d0b68005815b8537f93e2836bb7e109add4 100644
--- a/alib2data/src/string/xml/CyclicString.cpp
+++ b/alib2data/src/string/xml/CyclicString.cpp
@@ -14,10 +14,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < string::String, string::CyclicString < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, string::CyclicString < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < string::CyclicString < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < string::CyclicString < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < string::String, string::CyclicString < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, string::CyclicString < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < string::String, string::CyclicString < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, string::CyclicString < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/string/xml/Epsilon.cpp b/alib2data/src/string/xml/Epsilon.cpp
index 93dbd07e0d6d43c579dec3948e41ad2fa529c862..e4783bc2353060d0abae5781e1296ee752121ad6 100644
--- a/alib2data/src/string/xml/Epsilon.cpp
+++ b/alib2data/src/string/xml/Epsilon.cpp
@@ -14,10 +14,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < string::String, string::Epsilon < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, string::Epsilon < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < string::Epsilon < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < string::Epsilon < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < string::String, string::Epsilon < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, string::Epsilon < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < string::String, string::Epsilon < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, string::Epsilon < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/string/xml/LinearString.cpp b/alib2data/src/string/xml/LinearString.cpp
index ec909558894e5363576832a205da3321c87e7069..5caeaf2cd47e1c9ceb831d73e6053641c58237af 100644
--- a/alib2data/src/string/xml/LinearString.cpp
+++ b/alib2data/src/string/xml/LinearString.cpp
@@ -14,10 +14,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < string::String, string::LinearString < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, string::LinearString < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < string::LinearString < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < string::LinearString < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < string::String, string::LinearString < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, string::LinearString < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < string::String, string::LinearString < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, string::LinearString < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/tree/ranked/PostfixRankedTree.cpp b/alib2data/src/tree/ranked/PostfixRankedTree.cpp
index 7f19706b269812dafa7d779d9a45c627ba94b417..26066a4e61f4eed08f1a265999f76d2df0d985de 100644
--- a/alib2data/src/tree/ranked/PostfixRankedTree.cpp
+++ b/alib2data/src/tree/ranked/PostfixRankedTree.cpp
@@ -21,13 +21,12 @@ static auto components = registration::ComponentRegister < tree::PostfixRankedTr
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PostfixRankedTree < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::PostfixRankedTree < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::RankedTreeWrapper, tree::PostfixRankedTree < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::PostfixRankedTree < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::PostfixRankedTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PostfixRankedTree < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::PostfixRankedTree < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::RankedTreeWrapper, tree::PostfixRankedTree < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::PostfixRankedTree < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PostfixRankedTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::RankedTreeWrapper, tree::PostfixRankedTree < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::PostfixRankedTree < > > ( );
 
 static auto PostfixRankedTreeFromRankedTree = registration::CastRegister < tree::PostfixRankedTree < >, tree::RankedTree < > > ( );
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
index 2e437c514e5a4666829e89f1c8786818a4391378..b62822412378b82d8c27c90b8a36d87f85655915 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
@@ -21,13 +21,12 @@ static auto components = registration::ComponentRegister < tree::PrefixRankedBar
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixRankedBarNonlinearPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::PrefixRankedBarNonlinearPattern < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::RankedTreeWrapper, tree::PrefixRankedBarNonlinearPattern < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::PrefixRankedBarNonlinearPattern < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedBarNonlinearPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedBarNonlinearPattern < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::PrefixRankedBarNonlinearPattern < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::RankedTreeWrapper, tree::PrefixRankedBarNonlinearPattern < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::PrefixRankedBarNonlinearPattern < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedBarNonlinearPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::RankedTreeWrapper, tree::PrefixRankedBarNonlinearPattern < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::PrefixRankedBarNonlinearPattern < > > ( );
 
 static auto PrefixRankedBarNonlinearPatternFromRankedTree = registration::CastRegister < tree::PrefixRankedBarNonlinearPattern < >, tree::RankedTree < > > ( );
 static auto PrefixRankedBarNonlinearPatternFromRankedPattern = registration::CastRegister < tree::PrefixRankedBarNonlinearPattern < >, tree::RankedPattern < > > ( );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
index f55f7c3e1e550a38138abb0b9c711940dcc24ec5..91db74cb265f0717703f8b222d37f80f1ed5f5ce 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
@@ -21,13 +21,12 @@ static auto components = registration::ComponentRegister < tree::PrefixRankedBar
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixRankedBarPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::PrefixRankedBarPattern < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::RankedTreeWrapper, tree::PrefixRankedBarPattern < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::PrefixRankedBarPattern < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedBarPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedBarPattern < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::PrefixRankedBarPattern < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::RankedTreeWrapper, tree::PrefixRankedBarPattern < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::PrefixRankedBarPattern < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedBarPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::RankedTreeWrapper, tree::PrefixRankedBarPattern < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::PrefixRankedBarPattern < > > ( );
 
 static auto PrefixRankedBarPatternFromRankedPattern = registration::CastRegister < tree::PrefixRankedBarPattern < >, tree::RankedPattern < > > ( );
 static auto PrefixRankedBarPatternFromPrefixRankedBarTree = registration::CastRegister < tree::PrefixRankedBarPattern < >, tree::PrefixRankedBarTree < > > ( );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
index 3b1be68f57448e7562a458e51a5206c812653f49..1353de9931de76dc050c47c31d554a7d862e4280 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
@@ -21,13 +21,12 @@ static auto components = registration::ComponentRegister < tree::PrefixRankedBar
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixRankedBarTree < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::PrefixRankedBarTree < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::RankedTreeWrapper, tree::PrefixRankedBarTree < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::PrefixRankedBarTree < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedBarTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedBarTree < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::PrefixRankedBarTree < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::RankedTreeWrapper, tree::PrefixRankedBarTree < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::PrefixRankedBarTree < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedBarTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::RankedTreeWrapper, tree::PrefixRankedBarTree < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::PrefixRankedBarTree < > > ( );
 
 static auto PrefixRankedBarTreeFromRankedTree = registration::CastRegister < tree::PrefixRankedBarTree < >, tree::RankedTree < > > ( );
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
index 4f3736eed1bf1868bc6e33d2144643aa9492aa4e..3ac01a2e323b4bdf176352007b41eb0328252771 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
@@ -21,13 +21,12 @@ static auto components = registration::ComponentRegister < tree::PrefixRankedNon
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixRankedNonlinearPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::PrefixRankedNonlinearPattern < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::RankedTreeWrapper, tree::PrefixRankedNonlinearPattern < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::PrefixRankedNonlinearPattern < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedNonlinearPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedNonlinearPattern < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::PrefixRankedNonlinearPattern < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::RankedTreeWrapper, tree::PrefixRankedNonlinearPattern < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::PrefixRankedNonlinearPattern < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedNonlinearPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::RankedTreeWrapper, tree::PrefixRankedNonlinearPattern < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::PrefixRankedNonlinearPattern < > > ( );
 
 static auto PrefixRankedNonlinearPatternFromRankedTree = registration::CastRegister < tree::PrefixRankedNonlinearPattern < >, tree::RankedTree < > > ( );
 static auto PrefixRankedNonlinearPatternFromRankedPattern = registration::CastRegister < tree::PrefixRankedNonlinearPattern < >, tree::RankedPattern < > > ( );
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
index a287ac685460de1d22fc10bd8fdfb1e6d3df7e53..285815c5f559d1ad34d9ee74d4a07281337f0509 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
@@ -21,13 +21,12 @@ static auto components = registration::ComponentRegister < tree::PrefixRankedPat
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixRankedPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::PrefixRankedPattern < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::RankedTreeWrapper, tree::PrefixRankedPattern < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::PrefixRankedPattern < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedPattern < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::PrefixRankedPattern < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::RankedTreeWrapper, tree::PrefixRankedPattern < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::PrefixRankedPattern < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::RankedTreeWrapper, tree::PrefixRankedPattern < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::PrefixRankedPattern < > > ( );
 
 static auto PrefixRankedPatternFromRankedPattern = registration::CastRegister < tree::PrefixRankedPattern < >, tree::RankedPattern < > > ( );
 static auto PrefixRankedPatternFromPrefixRankedTree = registration::CastRegister < tree::PrefixRankedPattern < >, tree::PrefixRankedTree < > > ( );
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.cpp b/alib2data/src/tree/ranked/PrefixRankedTree.cpp
index a702ad3b53b22b1c488653d75fb60c088855081b..831b355cb613b6490991fad1b5d1bf7fa0ac1b94 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.cpp
@@ -21,13 +21,12 @@ static auto components = registration::ComponentRegister < tree::PrefixRankedTre
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixRankedTree < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::PrefixRankedTree < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::RankedTreeWrapper, tree::PrefixRankedTree < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::PrefixRankedTree < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixRankedTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixRankedTree < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::PrefixRankedTree < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::RankedTreeWrapper, tree::PrefixRankedTree < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::PrefixRankedTree < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixRankedTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::RankedTreeWrapper, tree::PrefixRankedTree < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::PrefixRankedTree < > > ( );
 
 static auto PrefixRankedTreeFromRankedTree = registration::CastRegister < tree::PrefixRankedTree < >, tree::RankedTree < > > ( );
 
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
index 00897e27cba7128e1db5e6029d7137d6c17ba80d..66d23f38fbfc8ec09dccb9c083755f2761abdcc0 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
@@ -21,12 +21,11 @@ static auto components = registration::ComponentRegister < tree::RankedNonlinear
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::RankedNonlinearPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::RankedNonlinearPattern < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::RankedTreeWrapper, tree::RankedNonlinearPattern < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::RankedNonlinearPattern < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::RankedNonlinearPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::RankedNonlinearPattern < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::RankedNonlinearPattern < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::RankedTreeWrapper, tree::RankedNonlinearPattern < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::RankedNonlinearPattern < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::RankedNonlinearPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::RankedTreeWrapper, tree::RankedNonlinearPattern < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::RankedNonlinearPattern < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/tree/ranked/RankedPattern.cpp b/alib2data/src/tree/ranked/RankedPattern.cpp
index 5e32d6c5fcec1ca8a242ffab1b5caf1363cfc65a..ce25d87d6d3878838c01e41dd3a5bbbdab6c0177 100644
--- a/alib2data/src/tree/ranked/RankedPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedPattern.cpp
@@ -21,13 +21,12 @@ static auto components = registration::ComponentRegister < tree::RankedPattern <
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::RankedPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::RankedPattern < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::RankedTreeWrapper, tree::RankedPattern < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::RankedPattern < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::RankedPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::RankedPattern < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::RankedPattern < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::RankedTreeWrapper, tree::RankedPattern < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::RankedPattern < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::RankedPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::RankedTreeWrapper, tree::RankedPattern < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::RankedPattern < > > ( );
 
 static auto RankedPatternFromUnrankedPattern = registration::CastRegister < tree::RankedPattern < >, tree::UnrankedPattern < > > ( );
 
diff --git a/alib2data/src/tree/ranked/RankedTree.cpp b/alib2data/src/tree/ranked/RankedTree.cpp
index e940a9cdad567f2eebf0ec2f84d73a12f94f3ad3..1012c30e693defa307fae0e9b3458993caba2151 100644
--- a/alib2data/src/tree/ranked/RankedTree.cpp
+++ b/alib2data/src/tree/ranked/RankedTree.cpp
@@ -21,13 +21,12 @@ static auto components = registration::ComponentRegister < tree::RankedTree < >
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::RankedTree < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::RankedTree < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::RankedTreeWrapper, tree::RankedTree < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::RankedTree < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::RankedTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::RankedTree < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::RankedTree < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::RankedTreeWrapper, tree::RankedTree < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::RankedTree < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::RankedTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::RankedTreeWrapper, tree::RankedTree < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::RankedTree < > > ( );
 
 static auto RankedTreeFromUnrankedTree = registration::CastRegister < tree::RankedTree < >, tree::UnrankedTree < > > ( );
 static auto RankedTreeFromPostfixRankedTree = registration::CastRegister < tree::RankedTree < >, tree::PostfixRankedTree < > > ( );
diff --git a/alib2data/src/tree/unranked/PrefixBarTree.cpp b/alib2data/src/tree/unranked/PrefixBarTree.cpp
index a60f10301cebe8c52d8f299d397b76986ddf7406..ae0d9fada20c17fa80aed3fe45d5c494ccc25ad1 100644
--- a/alib2data/src/tree/unranked/PrefixBarTree.cpp
+++ b/alib2data/src/tree/unranked/PrefixBarTree.cpp
@@ -21,13 +21,12 @@ static auto components = registration::ComponentRegister < tree::PrefixBarTree <
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::PrefixBarTree < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::PrefixBarTree < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::UnrankedTreeWrapper, tree::PrefixBarTree < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::PrefixBarTree < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::PrefixBarTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::PrefixBarTree < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::PrefixBarTree < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::UnrankedTreeWrapper, tree::PrefixBarTree < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::PrefixBarTree < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::PrefixBarTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::UnrankedTreeWrapper, tree::PrefixBarTree < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::PrefixBarTree < > > ( );
 
 static auto PrefixBarTreeFromUnrankedTree = registration::CastRegister < tree::PrefixBarTree < >, tree::UnrankedTree < > > ( );
 
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
index 10580f9635222ba4ed2f4add1eae54d0117b90de..ddc1ed920fd2c810860264414d99ee10436905b6 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
@@ -21,12 +21,11 @@ static auto components = registration::ComponentRegister < tree::UnrankedNonline
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::UnrankedNonlinearPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::UnrankedNonlinearPattern < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::UnrankedTreeWrapper, tree::UnrankedNonlinearPattern < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::UnrankedNonlinearPattern < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::UnrankedNonlinearPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::UnrankedNonlinearPattern < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::UnrankedNonlinearPattern < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::UnrankedTreeWrapper, tree::UnrankedNonlinearPattern < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::UnrankedNonlinearPattern < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::UnrankedNonlinearPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::UnrankedTreeWrapper, tree::UnrankedNonlinearPattern < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::UnrankedNonlinearPattern < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.cpp b/alib2data/src/tree/unranked/UnrankedPattern.cpp
index 8f772bed8b5f21d6803f92afa634e7e0941244f8..5481748d7db1b34bfbb64ab3cbef0e7499f640b4 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedPattern.cpp
@@ -21,13 +21,12 @@ static auto components = registration::ComponentRegister < tree::UnrankedPattern
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::UnrankedPattern < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::UnrankedPattern < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::UnrankedTreeWrapper, tree::UnrankedPattern < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::UnrankedPattern < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::UnrankedPattern < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::UnrankedPattern < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::UnrankedPattern < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::UnrankedTreeWrapper, tree::UnrankedPattern < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::UnrankedPattern < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::UnrankedPattern < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::UnrankedTreeWrapper, tree::UnrankedPattern < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::UnrankedPattern < > > ( );
 
 static auto UnrankedPatternFromRankedPattern = registration::CastRegister < tree::UnrankedPattern < >, tree::RankedPattern < > > ( );
 
diff --git a/alib2data/src/tree/unranked/UnrankedTree.cpp b/alib2data/src/tree/unranked/UnrankedTree.cpp
index 206b40041a2964570b2117f8634d1b3c8e4531d0..0a3d53b20d0cc158f267a18e2bd9deee9e83a5f2 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.cpp
+++ b/alib2data/src/tree/unranked/UnrankedTree.cpp
@@ -21,13 +21,12 @@ static auto components = registration::ComponentRegister < tree::UnrankedTree <
 
 static auto valuePrinter = registration::ValuePrinterRegister < tree::UnrankedTree < > > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < tree::Tree, tree::UnrankedTree < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < tree::UnrankedTreeWrapper, tree::UnrankedTree < > > ( );
-static auto xmlWrite3 = registration::XmlWriterRegister < alib::Object, tree::UnrankedTree < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < tree::UnrankedTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < tree::UnrankedTree < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < tree::Tree, tree::UnrankedTree < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < tree::UnrankedTreeWrapper, tree::UnrankedTree < > > ( );
-static auto xmlReaded3 = registration::XmlReaderRegister < alib::Object, tree::UnrankedTree < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < tree::Tree, tree::UnrankedTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < tree::UnrankedTreeWrapper, tree::UnrankedTree < > > ( );
+static auto xmlGroup3 = registration::XmlRegisterTypeInGroup < alib::Object, tree::UnrankedTree < > > ( );
 
 static auto UnrankedTreeFromRankedTree = registration::CastRegister < tree::UnrankedTree < >, tree::RankedTree < > > ( );
 
diff --git a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp
index 42d16571dc3c0eb5ea6537c43748191e531297d3..9567105146a9306b66c40befc91810f3565d7e08 100644
--- a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp
@@ -329,10 +329,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < graph::AdjacencyListDirectedGraph > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < graph::Graph, graph::AdjacencyListDirectedGraph > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, graph::AdjacencyListDirectedGraph > ( );
+static auto xmlWrite = registration::XmlWriterRegister < graph::AdjacencyListDirectedGraph > ( );
+static auto xmlRead = registration::XmlReaderRegister < graph::AdjacencyListDirectedGraph > ( );
 
-static auto xmlReaded = registration::XmlReaderRegister < graph::Graph, graph::AdjacencyListDirectedGraph > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, graph::AdjacencyListDirectedGraph > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < graph::Graph, graph::AdjacencyListDirectedGraph > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, graph::AdjacencyListDirectedGraph > ( );
 
 } /* namespace */
diff --git a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp
index 8155ff2dffa7e30ca26aa587b1fee39bf87c46c8..c77c3ee5f5d22076d5194c583aa7165c309bd36f 100644
--- a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp
@@ -330,10 +330,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < graph::AdjacencyMatrixDirectedGraph > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < graph::Graph, graph::AdjacencyMatrixDirectedGraph > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, graph::AdjacencyMatrixDirectedGraph > ( );
+static auto xmlWrite = registration::XmlWriterRegister < graph::AdjacencyMatrixDirectedGraph > ( );
+static auto xmlRead = registration::XmlReaderRegister < graph::AdjacencyMatrixDirectedGraph > ( );
 
-static auto xmlReaded = registration::XmlReaderRegister < graph::Graph, graph::AdjacencyMatrixDirectedGraph > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, graph::AdjacencyMatrixDirectedGraph > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < graph::Graph, graph::AdjacencyMatrixDirectedGraph > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, graph::AdjacencyMatrixDirectedGraph > ( );
 
 } /* namespace */
diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp
index f3e5fdbb96e64154d52ab92973be99ec853d258c..609043d040bbd42a5a209bf28e6184768854080a 100644
--- a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp
@@ -258,10 +258,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < graph::AdjacencyMatrixUndirectedGraph > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < graph::Graph, graph::AdjacencyMatrixUndirectedGraph > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, graph::AdjacencyMatrixUndirectedGraph > ( );
+static auto xmlWrite = registration::XmlWriterRegister < graph::AdjacencyMatrixUndirectedGraph > ( );
+static auto xmlRead = registration::XmlReaderRegister < graph::AdjacencyMatrixUndirectedGraph > ( );
 
-static auto xmlReaded = registration::XmlReaderRegister < graph::Graph, graph::AdjacencyMatrixUndirectedGraph > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, graph::AdjacencyMatrixUndirectedGraph > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < graph::Graph, graph::AdjacencyMatrixUndirectedGraph > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, graph::AdjacencyMatrixUndirectedGraph > ( );
 
 } /* namespace */
diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp
index 8c759f73f9bbacb02bb835bf2e086c1c08931f7a..4a5b4910b7d94ea1bca3024bc250b724e05777f1 100644
--- a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp
@@ -272,10 +272,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < graph::AdjacencyListUndirectedGraph > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < graph::Graph, graph::AdjacencyListUndirectedGraph > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, graph::AdjacencyListUndirectedGraph > ( );
+static auto xmlWrite = registration::XmlWriterRegister < graph::AdjacencyListUndirectedGraph > ( );
+static auto xmlRead = registration::XmlReaderRegister < graph::AdjacencyListUndirectedGraph > ( );
 
-static auto xmlReaded = registration::XmlReaderRegister < graph::Graph, graph::AdjacencyListUndirectedGraph > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, graph::AdjacencyListUndirectedGraph > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < graph::Graph, graph::AdjacencyListUndirectedGraph > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, graph::AdjacencyListUndirectedGraph > ( );
 
 } /* namespace */
diff --git a/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp b/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp
index 7c89ebe73ff41e82a14a961a56f5184d96805874..96e8c2b1ff55477189852ea0465f253fad6a30ff 100644
--- a/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp
+++ b/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp
@@ -157,7 +157,9 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < indexes::SuffixTrieTerminatingSymbol > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, indexes::SuffixTrieTerminatingSymbol > ( );
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, indexes::SuffixTrieTerminatingSymbol > ( );
+static auto xmlWrite = registration::XmlWriterRegister < indexes::SuffixTrieTerminatingSymbol > ( );
+static auto xmlRead = registration::XmlReaderRegister < indexes::SuffixTrieTerminatingSymbol > ( );
+
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, indexes::SuffixTrieTerminatingSymbol > ( );
 
 } /* namespace */
diff --git a/alib2data_experimental/src/label/LR0ItemsLabel.cpp b/alib2data_experimental/src/label/LR0ItemsLabel.cpp
index 6b4935e8ad39458af55fd4e4e3d6c6c4d3988cd9..5e45d088e72d94e2c82371e5877fe24be6cbea03 100644
--- a/alib2data_experimental/src/label/LR0ItemsLabel.cpp
+++ b/alib2data_experimental/src/label/LR0ItemsLabel.cpp
@@ -86,10 +86,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < label::LR0ItemsLabel > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < label::Label, label::LR0ItemsLabel > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, label::LR0ItemsLabel > ( );
+static auto xmlWrite = registration::XmlWriterRegister < label::LR0ItemsLabel > ( );
+static auto xmlRead = registration::XmlReaderRegister < label::LR0ItemsLabel > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < label::Label, label::LR0ItemsLabel > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, label::LR0ItemsLabel > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < label::Label, label::LR0ItemsLabel > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, label::LR0ItemsLabel > ( );
 
 } /* namespace */
diff --git a/alib2data_experimental/src/string/LinearStringTerminatingSymbol.cpp b/alib2data_experimental/src/string/LinearStringTerminatingSymbol.cpp
index 57e0789a572bedbc4c85209a092d2e603a65ba8c..48c599a036056940c841eb2d01c75ec1a1549c4a 100644
--- a/alib2data_experimental/src/string/LinearStringTerminatingSymbol.cpp
+++ b/alib2data_experimental/src/string/LinearStringTerminatingSymbol.cpp
@@ -142,10 +142,10 @@ namespace {
 
 static auto valuePrinter = registration::ValuePrinterRegister < string::LinearStringTerminatingSymbol > ( );
 
-static auto xmlWrite = registration::XmlWriterRegister < string::String, string::LinearStringTerminatingSymbol > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, string::LinearStringTerminatingSymbol > ( );
+static auto xmlWrite = registration::XmlWriterRegister < string::LinearStringTerminatingSymbol > ( );
+static auto xmlRead = registration::XmlReaderRegister < string::LinearStringTerminatingSymbol > ( );
 
-static auto xmlReaded = registration::XmlReaderRegister < string::String, string::LinearStringTerminatingSymbol > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, string::LinearStringTerminatingSymbol > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < string::String, string::LinearStringTerminatingSymbol > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, string::LinearStringTerminatingSymbol > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/container/xml/ObjectsDeque.cpp b/alib2xml/src/container/xml/ObjectsDeque.cpp
index 6dd9fe831d4bb3307a97d39b17aa3a1a27a0e487..46a884d2017c5ee8e111857b26b2a5c67cd5967d 100644
--- a/alib2xml/src/container/xml/ObjectsDeque.cpp
+++ b/alib2xml/src/container/xml/ObjectsDeque.cpp
@@ -12,10 +12,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < container::Container, container::ObjectsDeque < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, container::ObjectsDeque < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < container::ObjectsDeque < > > ( );
+static auto xmlReader = registration::XmlReaderRegister < container::ObjectsDeque < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < container::Container, container::ObjectsDeque < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, container::ObjectsDeque < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < container::Container, container::ObjectsDeque < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, container::ObjectsDeque < > > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/container/xml/ObjectsList.cpp b/alib2xml/src/container/xml/ObjectsList.cpp
index ba4a8cd90137c50a80a9095ad2210c252eead0ec..408d743acb6d60db0ad1e808b79fcf9da63784a3 100644
--- a/alib2xml/src/container/xml/ObjectsList.cpp
+++ b/alib2xml/src/container/xml/ObjectsList.cpp
@@ -12,10 +12,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < container::Container, container::ObjectsList < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, container::ObjectsList < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < container::ObjectsList < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < container::ObjectsList < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < container::Container, container::ObjectsList < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, container::ObjectsList < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < container::Container, container::ObjectsList < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, container::ObjectsList < > > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/container/xml/ObjectsMap.cpp b/alib2xml/src/container/xml/ObjectsMap.cpp
index 6d674a32727d119365cc2eebe147402b046e881e..cc3e30e1ffb10bd3477bf0866b70dacb397deda7 100644
--- a/alib2xml/src/container/xml/ObjectsMap.cpp
+++ b/alib2xml/src/container/xml/ObjectsMap.cpp
@@ -12,10 +12,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < container::Container, container::ObjectsMap < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, container::ObjectsMap < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < container::ObjectsMap < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < container::ObjectsMap < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < container::Container, container::ObjectsMap < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, container::ObjectsMap < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < container::Container, container::ObjectsMap < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, container::ObjectsMap < > > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/container/xml/ObjectsPair.cpp b/alib2xml/src/container/xml/ObjectsPair.cpp
index b7d4f95ddff705f23b82d07dbbca6d21e7b53f05..f80768e9f897b8567eb7f422ecd74eb768d30d45 100644
--- a/alib2xml/src/container/xml/ObjectsPair.cpp
+++ b/alib2xml/src/container/xml/ObjectsPair.cpp
@@ -12,10 +12,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < container::Container, container::ObjectsPair < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, container::ObjectsPair < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < container::ObjectsPair < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < container::ObjectsPair < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < container::Container, container::ObjectsPair < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, container::ObjectsPair < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < container::Container, container::ObjectsPair < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, container::ObjectsPair < > > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/container/xml/ObjectsSet.cpp b/alib2xml/src/container/xml/ObjectsSet.cpp
index dd110114d24f21a5477c61842d86a15432569ed7..7d7464474d8950c022951cebd2b49ae8cc79e6d7 100644
--- a/alib2xml/src/container/xml/ObjectsSet.cpp
+++ b/alib2xml/src/container/xml/ObjectsSet.cpp
@@ -13,10 +13,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < container::Container, container::ObjectsSet < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, container::ObjectsSet < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < container::ObjectsSet < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < container::ObjectsSet < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < container::Container, container::ObjectsSet < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, container::ObjectsSet < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < container::Container, container::ObjectsSet < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, container::ObjectsSet < > > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/container/xml/ObjectsTree.cpp b/alib2xml/src/container/xml/ObjectsTree.cpp
index e415511eb4ff5a8e92aeffa6fe01f1ef9fa8df8d..0ff874851af35b9a945f00314ff1803c36ed07ef 100644
--- a/alib2xml/src/container/xml/ObjectsTree.cpp
+++ b/alib2xml/src/container/xml/ObjectsTree.cpp
@@ -13,10 +13,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < container::Container, container::ObjectsTree < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, container::ObjectsTree < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < container::ObjectsTree < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < container::ObjectsTree < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < container::Container, container::ObjectsTree < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, container::ObjectsTree < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < container::Container, container::ObjectsTree < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, container::ObjectsTree < > > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/container/xml/ObjectsTrie.cpp b/alib2xml/src/container/xml/ObjectsTrie.cpp
index 11f4fe94c20e6a6151cfc836f1756dfad0090cd7..0ec051cc83889d9cb12cee20067801f13dcd3b9b 100644
--- a/alib2xml/src/container/xml/ObjectsTrie.cpp
+++ b/alib2xml/src/container/xml/ObjectsTrie.cpp
@@ -12,10 +12,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < container::Container, container::ObjectsTrie < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, container::ObjectsTrie < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < container::ObjectsTrie < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < container::ObjectsTrie < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < container::Container, container::ObjectsTrie < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, container::ObjectsTrie < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < container::Container, container::ObjectsTrie < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, container::ObjectsTrie < > > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/container/xml/ObjectsVector.cpp b/alib2xml/src/container/xml/ObjectsVector.cpp
index becaf5eca115cd80628ac0d4e989bdb1c6cfa92d..7f4c60d304d72f6c3bb2dd13dcdc3364ed186c2a 100644
--- a/alib2xml/src/container/xml/ObjectsVector.cpp
+++ b/alib2xml/src/container/xml/ObjectsVector.cpp
@@ -12,10 +12,10 @@
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < container::Container, container::ObjectsVector < > > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, container::ObjectsVector < > > ( );
+static auto xmlWrite = registration::XmlWriterRegister < container::ObjectsVector < > > ( );
+static auto xmlRead = registration::XmlReaderRegister < container::ObjectsVector < > > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < container::Container, container::ObjectsVector < > > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, container::ObjectsVector < > > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < container::Container, container::ObjectsVector < > > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, container::ObjectsVector < > > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/exception/xml/CommonException.cpp b/alib2xml/src/exception/xml/CommonException.cpp
index 0e9637858f4dfbf8747447ddbfec2e824b3a92d2..000ad0d59940ba7d4fc1832399d8cba3909a28d6 100644
--- a/alib2xml/src/exception/xml/CommonException.cpp
+++ b/alib2xml/src/exception/xml/CommonException.cpp
@@ -67,8 +67,9 @@ void xmlApi < exception::CommonException >::compose ( ext::deque < sax::Token >
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, exception::CommonException > ( );
+static auto xmlWrite = registration::XmlWriterRegister < exception::CommonException > ( );
+static auto xmlRead = registration::XmlReaderRegister < exception::CommonException > ( );
 
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, exception::CommonException > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, exception::CommonException > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/object/xml/AnyObject.cpp b/alib2xml/src/object/xml/AnyObject.cpp
deleted file mode 100644
index f5643207c80db6ac796d582ad659228ded999e49..0000000000000000000000000000000000000000
--- a/alib2xml/src/object/xml/AnyObject.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * AnyObject.cpp
- *
- *  Created on: 18. 9. 2015
- *      Author: Jan Travnicek
- */
-
-#include "AnyObject.h"
-#include <container/xml/ObjectsSet.h>
-#include <primitive/xml/Character.h>
-
-#include <registration/XmlRegistration.hpp>
-
-namespace {
-
-static auto anyObjectSetXmlWriterRegister = registration::XmlWriterRegister < alib::Object, alib::AnyObject < ext::set < char > > > ( );
-
-} /* namespace */
diff --git a/alib2xml/src/object/xml/UniqueObject.cpp b/alib2xml/src/object/xml/UniqueObject.cpp
index 1ac1dee210d37ed92cdd7c2512bca3e6662369b4..f067bb23222a525ecafc826acee7958c8935044f 100644
--- a/alib2xml/src/object/xml/UniqueObject.cpp
+++ b/alib2xml/src/object/xml/UniqueObject.cpp
@@ -44,8 +44,9 @@ void xmlApi < alib::UniqueObject >::compose ( ext::deque < sax::Token > & output
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, alib::UniqueObject > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alib::UniqueObject > ( );
+static auto xmlRead = registration::XmlReaderRegister < alib::UniqueObject > ( );
 
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, alib::UniqueObject > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, alib::UniqueObject > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/object/xml/Void.cpp b/alib2xml/src/object/xml/Void.cpp
index ceaa338d804fb2cae564c74d772cdf75c26660d5..f72f285d4bfbaf7fceedccd79d5a78bd4e02c35a 100644
--- a/alib2xml/src/object/xml/Void.cpp
+++ b/alib2xml/src/object/xml/Void.cpp
@@ -53,8 +53,9 @@ void xmlApi < alib::Void >::compose ( ext::deque < sax::Token > & output, const
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < alib::Object, alib::Void > ( );
+static auto xmlWrite = registration::XmlWriterRegister < alib::Void > ( );
+static auto xmlRead = registration::XmlReaderRegister < alib::Void > ( );
 
-static auto xmlReaded = registration::XmlReaderRegister < alib::Object, alib::Void > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < alib::Object, alib::Void > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/primitive/xml/Bool.cpp b/alib2xml/src/primitive/xml/Bool.cpp
index 376995448107520ecc4fc111eab969489b0ff3fe..bfb35eba7fc8f29578fdd2593a35cb861839ac78 100644
--- a/alib2xml/src/primitive/xml/Bool.cpp
+++ b/alib2xml/src/primitive/xml/Bool.cpp
@@ -68,10 +68,10 @@ void xmlApi < primitive::Bool >::compose ( ext::deque < sax::Token > & output, c
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < primitive::Primitive, primitive::Bool > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, primitive::Bool > ( );
+static auto xmlWrite = registration::XmlWriterRegister < primitive::Bool > ( );
+static auto xmlRead = registration::XmlReaderRegister < primitive::Bool > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < primitive::Primitive, primitive::Bool > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, primitive::Bool > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < primitive::Primitive, primitive::Bool > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, primitive::Bool > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/primitive/xml/Character.cpp b/alib2xml/src/primitive/xml/Character.cpp
index f1744e64b469a12b28b6536fcf6f19efbf7acbb5..057b0713d9e963aa63f1baa4b9a2b1b7583d0227 100644
--- a/alib2xml/src/primitive/xml/Character.cpp
+++ b/alib2xml/src/primitive/xml/Character.cpp
@@ -56,10 +56,10 @@ void xmlApi < primitive::Character >::compose ( ext::deque < sax::Token > & outp
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < primitive::Primitive, primitive::Character > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, primitive::Character > ( );
+static auto xmlWrite = registration::XmlWriterRegister < primitive::Character > ( );
+static auto xmlRead = registration::XmlReaderRegister < primitive::Character > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < primitive::Primitive, primitive::Character > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, primitive::Character > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < primitive::Primitive, primitive::Character > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, primitive::Character > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/primitive/xml/Double.cpp b/alib2xml/src/primitive/xml/Double.cpp
index ecbc997ddea879f4638252be392170c566e43850..18b246b99b0c2ecf90d7dc6d828a0d4309c798a7 100644
--- a/alib2xml/src/primitive/xml/Double.cpp
+++ b/alib2xml/src/primitive/xml/Double.cpp
@@ -56,10 +56,10 @@ void xmlApi < primitive::Double >::compose ( ext::deque < sax::Token > & output,
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < primitive::Primitive, primitive::Double > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, primitive::Double > ( );
+static auto xmlWrite = registration::XmlWriterRegister < primitive::Double > ( );
+static auto xmlRead = registration::XmlReaderRegister < primitive::Double > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < primitive::Primitive, primitive::Double > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, primitive::Double > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < primitive::Primitive, primitive::Double > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, primitive::Double > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/primitive/xml/Integer.cpp b/alib2xml/src/primitive/xml/Integer.cpp
index e47ff0c546d70d80081b69a3fced97f2cb70b6f9..11c321709b53b6980ffc5350ed39349de1c064d6 100644
--- a/alib2xml/src/primitive/xml/Integer.cpp
+++ b/alib2xml/src/primitive/xml/Integer.cpp
@@ -56,10 +56,10 @@ void xmlApi < primitive::Integer >::compose ( ext::deque < sax::Token > & output
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < primitive::Primitive, primitive::Integer > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, primitive::Integer > ( );
+static auto xmlWrite = registration::XmlWriterRegister < primitive::Integer > ( );
+static auto xmlRead = registration::XmlReaderRegister < primitive::Integer > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < primitive::Primitive, primitive::Integer > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, primitive::Integer > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < primitive::Primitive, primitive::Integer > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, primitive::Integer > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/primitive/xml/String.cpp b/alib2xml/src/primitive/xml/String.cpp
index 0e3e69e1e06f598e05a0f29f9b82fec69ec7db3d..bb70f3eb5c021425647481475cc88ed4b2f71b8f 100644
--- a/alib2xml/src/primitive/xml/String.cpp
+++ b/alib2xml/src/primitive/xml/String.cpp
@@ -58,10 +58,10 @@ void xmlApi < primitive::String >::compose ( ext::deque < sax::Token > & output,
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < primitive::Primitive, primitive::String > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, primitive::String > ( );
+static auto xmlWrite = registration::XmlWriterRegister < primitive::String > ( );
+static auto xmlRead = registration::XmlReaderRegister < primitive::String > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < primitive::Primitive, primitive::String > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, primitive::String > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < primitive::Primitive, primitive::String > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, primitive::String > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/primitive/xml/Unsigned.cpp b/alib2xml/src/primitive/xml/Unsigned.cpp
index 2e6d42550a456cd78b081ed0f0a1981a22445e94..b8685cc15517289b236bbfdb28439a0b16636d70 100644
--- a/alib2xml/src/primitive/xml/Unsigned.cpp
+++ b/alib2xml/src/primitive/xml/Unsigned.cpp
@@ -56,10 +56,10 @@ void xmlApi < primitive::Unsigned >::compose ( ext::deque < sax::Token > & outpu
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < primitive::Primitive, primitive::Unsigned > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, primitive::Unsigned > ( );
+static auto xmlWrite = registration::XmlWriterRegister < primitive::Unsigned > ( );
+static auto xmlRead = registration::XmlReaderRegister < primitive::Unsigned > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < primitive::Primitive, primitive::Unsigned > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, primitive::Unsigned > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < primitive::Primitive, primitive::Unsigned > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, primitive::Unsigned > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/primitive/xml/UnsignedLong.cpp b/alib2xml/src/primitive/xml/UnsignedLong.cpp
index 047626a62ec652eb7019094bededf3071edeeff8..c7cce8e5db9d34eda8b23adf53693dc138ba93cb 100644
--- a/alib2xml/src/primitive/xml/UnsignedLong.cpp
+++ b/alib2xml/src/primitive/xml/UnsignedLong.cpp
@@ -56,10 +56,10 @@ void xmlApi < primitive::UnsignedLong >::compose ( ext::deque < sax::Token > & o
 
 namespace {
 
-static auto xmlWrite = registration::XmlWriterRegister < primitive::Primitive, primitive::UnsignedLong > ( );
-static auto xmlWrite2 = registration::XmlWriterRegister < alib::Object, primitive::UnsignedLong > ( );
+static auto xmlWrite = registration::XmlWriterRegister < primitive::UnsignedLong > ( );
+static auto xmlRead = registration::XmlReaderRegister < primitive::UnsignedLong > ( );
 
-static auto xmlReader = registration::XmlReaderRegister < primitive::Primitive, primitive::UnsignedLong > ( );
-static auto xmlReaded2 = registration::XmlReaderRegister < alib::Object, primitive::UnsignedLong > ( );
+static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < primitive::Primitive, primitive::UnsignedLong > ( );
+static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < alib::Object, primitive::UnsignedLong > ( );
 
 } /* namespace */
diff --git a/alib2xml/src/registration/XmlRegistration.hpp b/alib2xml/src/registration/XmlRegistration.hpp
index e29ad335f42abc7b32a126cb92e4d170441abb42..c213b5e84f9ed04a9c63f6c26a0a91d89608d050 100644
--- a/alib2xml/src/registration/XmlRegistration.hpp
+++ b/alib2xml/src/registration/XmlRegistration.hpp
@@ -32,28 +32,33 @@ public:
 
 namespace registration {
 
-template < class Group, class Type >
+template < class Type >
 class XmlReaderRegister {
 public:
 	XmlReaderRegister ( ) {
-		alib::xmlApi < Group >::template registerXmlReader < Type > ( );
-
 		abstraction::XmlParserRegistry::registerXmlParser < Type > ( );
 		abstraction::AlgorithmRegistry::registerWrapper < xml::Parse, ext::deque < sax::Token > && > ( xml::Parse::abstractionFromTokens, std::array < std::string, 1 > { { "arg0" } } );
 	}
 };
 
-template < class Group, class Type >
+template < class Type >
 class XmlWriterRegister {
 public:
 	XmlWriterRegister ( ) {
-		alib::xmlApi < Group >::template registerXmlWriter < Type > ( );
-
 		abstraction::XmlComposerRegistry::registerXmlComposer < Type > ( );
 		abstraction::AlgorithmRegistry::registerWrapper < xml::Compose, const Type & > ( xml::Compose::abstractionFromType, std::array < std::string, 1 > { { "arg0" } } );
 	}
 };
 
+template < class Group, class Type >
+class XmlRegisterTypeInGroup {
+public:
+	XmlRegisterTypeInGroup ( ) {
+		alib::xmlApi < Group >::template registerXmlReader < Type > ( );
+		alib::xmlApi < Group >::template registerXmlWriter < Type > ( );
+	}
+};
+
 } /* namespace registration */
 
 #endif // _XML_REGISTRATION_HPP_