From 0b267aed2903255febfe2b0c993c6e9dd983c300 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Sat, 8 Jul 2017 19:54:13 +0200
Subject: [PATCH] use registration class to unify type registration

---
 alib2common/src/container/ObjectsDeque.cpp    |  7 +-
 alib2common/src/container/ObjectsList.cpp     |  7 +-
 alib2common/src/container/ObjectsMap.cpp      |  8 +-
 alib2common/src/container/ObjectsPair.cpp     |  9 +-
 alib2common/src/container/ObjectsSet.cpp      |  7 +-
 alib2common/src/container/ObjectsTree.cpp     |  7 +-
 alib2common/src/container/ObjectsTrie.cpp     |  7 +-
 alib2common/src/container/ObjectsVector.cpp   |  7 +-
 alib2common/src/core/xmlApi.hpp               | 84 +++++++++----------
 alib2common/src/exception/CommonException.cpp |  4 +-
 alib2common/src/object/UniqueObject.cpp       |  5 +-
 alib2common/src/object/Void.cpp               |  5 +-
 alib2common/src/primitive/Bool.cpp            |  6 +-
 alib2common/src/primitive/Character.cpp       |  6 +-
 alib2common/src/primitive/Double.cpp          |  6 +-
 alib2common/src/primitive/Integer.cpp         |  6 +-
 alib2common/src/primitive/String.cpp          |  6 +-
 alib2common/src/primitive/Unsigned.cpp        |  6 +-
 alib2common/src/primitive/UnsignedLong.cpp    |  6 +-
 .../src/registration/TypeRegistration.hpp     | 21 +++++
 alib2data/src/alphabet/BarSymbol.cpp          |  6 +-
 alib2data/src/alphabet/BlankSymbol.cpp        |  6 +-
 .../src/alphabet/BottomOfTheStackSymbol.cpp   |  6 +-
 alib2data/src/alphabet/EndSymbol.cpp          |  6 +-
 alib2data/src/alphabet/InitialSymbol.cpp      |  6 +-
 alib2data/src/alphabet/LabeledSymbol.cpp      |  6 +-
 .../src/alphabet/NonlinearVariableSymbol.cpp  |  6 +-
 alib2data/src/alphabet/RankedSymbol.cpp       |  6 +-
 alib2data/src/alphabet/StartSymbol.cpp        |  6 +-
 .../src/alphabet/SubtreeWildcardSymbol.cpp    |  6 +-
 alib2data/src/alphabet/UniqueSymbol.cpp       |  6 +-
 alib2data/src/alphabet/VariablesBarSymbol.cpp |  6 +-
 alib2data/src/automaton/FSM/CompactNFA.cpp    |  6 +-
 alib2data/src/automaton/FSM/DFA.cpp           |  6 +-
 alib2data/src/automaton/FSM/EpsilonNFA.cpp    |  6 +-
 alib2data/src/automaton/FSM/ExtendedNFA.cpp   |  6 +-
 .../automaton/FSM/MultiInitialStateNFA.cpp    |  6 +-
 alib2data/src/automaton/FSM/NFA.cpp           |  6 +-
 alib2data/src/automaton/PDA/DPDA.cpp          |  6 +-
 .../src/automaton/PDA/InputDrivenDPDA.cpp     |  6 +-
 .../src/automaton/PDA/InputDrivenNPDA.cpp     |  6 +-
 alib2data/src/automaton/PDA/NPDA.cpp          |  6 +-
 alib2data/src/automaton/PDA/NPDTA.cpp         |  6 +-
 .../PDA/RealTimeHeightDeterministicDPDA.cpp   |  6 +-
 .../PDA/RealTimeHeightDeterministicNPDA.cpp   |  6 +-
 alib2data/src/automaton/PDA/SinglePopDPDA.cpp |  6 +-
 alib2data/src/automaton/PDA/SinglePopNPDA.cpp |  6 +-
 .../src/automaton/PDA/VisiblyPushdownDPDA.cpp |  6 +-
 .../src/automaton/PDA/VisiblyPushdownNPDA.cpp |  6 +-
 alib2data/src/automaton/TA/DFTA.cpp           |  6 +-
 alib2data/src/automaton/TA/NFTA.cpp           |  6 +-
 alib2data/src/automaton/TM/OneTapeDTM.cpp     |  6 +-
 alib2data/src/grammar/ContextFree/CFG.cpp     |  6 +-
 alib2data/src/grammar/ContextFree/CNF.cpp     |  6 +-
 .../grammar/ContextFree/EpsilonFreeCFG.cpp    |  6 +-
 alib2data/src/grammar/ContextFree/GNF.cpp     |  6 +-
 alib2data/src/grammar/ContextFree/LG.cpp      |  6 +-
 .../src/grammar/ContextSensitive/CSG.cpp      |  6 +-
 .../NonContractingGrammar.cpp                 |  6 +-
 alib2data/src/grammar/Regular/LeftLG.cpp      |  6 +-
 alib2data/src/grammar/Regular/LeftRG.cpp      |  6 +-
 alib2data/src/grammar/Regular/RightLG.cpp     |  6 +-
 alib2data/src/grammar/Regular/RightRG.cpp     |  6 +-
 .../ContextPreservingUnrestrictedGrammar.cpp  |  6 +-
 .../Unrestricted/UnrestrictedGrammar.cpp      |  6 +-
 .../CompressedBitParallelTreeIndex.cpp        |  3 +-
 .../indexes/arbology/FullAndLinearIndex.cpp   |  3 +-
 .../arbology/NonlinearFullAndLinearIndex.cpp  |  3 +-
 .../src/indexes/stringology/BNDMMatcher.cpp   |  3 +-
 .../indexes/stringology/BitParallelIndex.cpp  |  3 +-
 .../CompressedBitParallelIndex.cpp            |  3 +-
 .../src/indexes/stringology/PositionHeap.cpp  |  3 +-
 .../src/indexes/stringology/SuffixArray.cpp   |  3 +-
 .../src/indexes/stringology/SuffixTrie.cpp    |  3 +-
 alib2data/src/label/FailStateLabel.cpp        |  6 +-
 alib2data/src/label/FinalStateLabel.cpp       |  6 +-
 alib2data/src/label/HexavigesimalLabel.cpp    |  6 +-
 alib2data/src/label/InitialStateLabel.cpp     |  6 +-
 alib2data/src/label/ObjectLabel.cpp           |  6 +-
 alib2data/src/label/PrimitiveLabel.cpp        |  6 +-
 alib2data/src/label/UniqueLabel.cpp           |  6 +-
 alib2data/src/regexp/formal/FormalRegExp.cpp  |  6 +-
 .../src/regexp/unbounded/UnboundedRegExp.cpp  |  6 +-
 alib2data/src/rte/formal/FormalRTE.cpp        |  6 +-
 alib2data/src/string/CyclicString.cpp         |  6 +-
 alib2data/src/string/Epsilon.cpp              |  6 +-
 alib2data/src/string/LinearString.cpp         |  6 +-
 .../src/tree/ranked/PostfixRankedTree.cpp     |  8 +-
 .../PrefixRankedBarNonlinearPattern.cpp       |  8 +-
 .../tree/ranked/PrefixRankedBarPattern.cpp    |  8 +-
 .../src/tree/ranked/PrefixRankedBarTree.cpp   |  8 +-
 .../ranked/PrefixRankedNonlinearPattern.cpp   |  8 +-
 .../src/tree/ranked/PrefixRankedPattern.cpp   |  8 +-
 .../src/tree/ranked/PrefixRankedTree.cpp      |  8 +-
 .../tree/ranked/RankedNonlinearPattern.cpp    |  8 +-
 alib2data/src/tree/ranked/RankedPattern.cpp   |  8 +-
 alib2data/src/tree/ranked/RankedTree.cpp      |  8 +-
 alib2data/src/tree/unranked/PrefixBarTree.cpp |  8 +-
 .../unranked/UnrankedNonlinearPattern.cpp     |  8 +-
 .../src/tree/unranked/UnrankedPattern.cpp     |  8 +-
 alib2data/src/tree/unranked/UnrankedTree.cpp  |  8 +-
 .../directed/AdjacencyListDirectedGraph.cpp   |  6 +-
 .../directed/AdjacencyMatrixDirectedGraph.cpp |  6 +-
 .../AdjacencyListUndirectedGraph.cpp          |  6 +-
 .../AdjacencyMatrixUndirectedGraph.cpp        |  6 +-
 .../SuffixTrieTerminatingSymbol.cpp           |  4 +-
 .../src/label/LR0ItemsLabel.cpp               |  6 +-
 .../string/LinearStringTerminatingSymbol.cpp  |  6 +-
 108 files changed, 400 insertions(+), 347 deletions(-)
 create mode 100644 alib2common/src/registration/TypeRegistration.hpp

diff --git a/alib2common/src/container/ObjectsDeque.cpp b/alib2common/src/container/ObjectsDeque.cpp
index 252bcd8fcf..7d1699eeef 100644
--- a/alib2common/src/container/ObjectsDeque.cpp
+++ b/alib2common/src/container/ObjectsDeque.cpp
@@ -7,11 +7,12 @@
 
 #include "ObjectsDeque.h"
 #include "Container.h"
-#include <object/Object.h>
+
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto objectsDequeParserRegister = xmlApi < container::Container >::ParserRegister < container::ObjectsDeque < > > ();
-auto objectsDequeParserRegister2 = xmlApi < alib::Object >::ParserRegister < container::ObjectsDeque < > > ();
+auto objectsDequeType = registration::TypeRegister < container::Container, container::ObjectsDeque < > > ();
+auto objectsDequeType2 = registration::TypeRegister < alib::Object, container::ObjectsDeque < > > ();
 
 } /* namespace alib */
diff --git a/alib2common/src/container/ObjectsList.cpp b/alib2common/src/container/ObjectsList.cpp
index 03444089e9..9a63bc195e 100644
--- a/alib2common/src/container/ObjectsList.cpp
+++ b/alib2common/src/container/ObjectsList.cpp
@@ -6,12 +6,13 @@
  */
 
 #include "ObjectsList.h"
-
 #include "Container.h"
 
+#include <registration/TypeRegistration.hpp>
+
 namespace alib {
 
-auto objectsListParserRegister = xmlApi < container::Container >::ParserRegister < container::ObjectsList < > > ();
-auto objectsListParserRegister2 = xmlApi < alib::Object >::ParserRegister < container::ObjectsList < > > ();
+auto objectsListType = registration::TypeRegister < container::Container, container::ObjectsList < > > ();
+auto objectsListType2 = registration::TypeRegister < alib::Object, container::ObjectsList < > > ();
 
 } /* namespace alib */
diff --git a/alib2common/src/container/ObjectsMap.cpp b/alib2common/src/container/ObjectsMap.cpp
index e6b75bf7c1..5619bc67a9 100644
--- a/alib2common/src/container/ObjectsMap.cpp
+++ b/alib2common/src/container/ObjectsMap.cpp
@@ -6,13 +6,13 @@
  */
 
 #include "ObjectsMap.h"
-
 #include "Container.h"
-#include <core/xmlApi.hpp>
+
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto objectsMapParserRegister = xmlApi < container::Container >::ParserRegister < container::ObjectsMap < > > ( );
-auto objectsMapParserRegister2 = xmlApi < alib::Object >::ParserRegister < container::ObjectsMap < > > ( );
+auto objectsMapType = registration::TypeRegister < container::Container, container::ObjectsMap < > > ( );
+auto objectsMapType2 = registration::TypeRegister < alib::Object, container::ObjectsMap < > > ( );
 
 } /* namespace alib */
diff --git a/alib2common/src/container/ObjectsPair.cpp b/alib2common/src/container/ObjectsPair.cpp
index c647e48734..c26f9c1b0c 100644
--- a/alib2common/src/container/ObjectsPair.cpp
+++ b/alib2common/src/container/ObjectsPair.cpp
@@ -6,14 +6,13 @@
  */
 
 #include "ObjectsPair.h"
-
-
 #include "Container.h"
-#include <core/xmlApi.hpp>
+
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto objectsPairParserRegister = xmlApi < container::Container >::ParserRegister < container::ObjectsPair < > > ( );
-auto objectsPairParserRegister2 = xmlApi < alib::Object >::ParserRegister < container::ObjectsPair < > > ( );
+auto objectsPairType = registration::TypeRegister < container::Container, container::ObjectsPair < > > ( );
+auto objectsPairType2 = registration::TypeRegister < alib::Object, container::ObjectsPair < > > ( );
 
 } /* namespace alib */
diff --git a/alib2common/src/container/ObjectsSet.cpp b/alib2common/src/container/ObjectsSet.cpp
index 34d3ebc2d9..2fc45818e3 100644
--- a/alib2common/src/container/ObjectsSet.cpp
+++ b/alib2common/src/container/ObjectsSet.cpp
@@ -6,12 +6,13 @@
  */
 
 #include "ObjectsSet.h"
-
 #include "Container.h"
 
+#include <registration/TypeRegistration.hpp>
+
 namespace alib {
 
-auto objectsSetParserRegister = xmlApi < container::Container >::ParserRegister < container::ObjectsSet < > > ( );
-auto objectsSetParserRegister2 = xmlApi < alib::Object >::ParserRegister < container::ObjectsSet < > > ( );
+auto objectsSetType = registration::TypeRegister < container::Container, container::ObjectsSet < > > ( );
+auto objectsSetType2 = registration::TypeRegister < alib::Object, container::ObjectsSet < > > ( );
 
 } /* namespace alib */
diff --git a/alib2common/src/container/ObjectsTree.cpp b/alib2common/src/container/ObjectsTree.cpp
index 18a44a84c0..e132a97821 100644
--- a/alib2common/src/container/ObjectsTree.cpp
+++ b/alib2common/src/container/ObjectsTree.cpp
@@ -6,12 +6,13 @@
  */
 
 #include "ObjectsTree.h"
-
 #include "Container.h"
 
+#include <registration/TypeRegistration.hpp>
+
 namespace alib {
 
-auto objectsTreeParserRegister = xmlApi < container::Container >::ParserRegister < container::ObjectsTree < > > ( );
-auto objectsTreeParserRegister2 = xmlApi < alib::Object >::ParserRegister < container::ObjectsTree < > > ( );
+auto objectsTreeType = registration::TypeRegister < container::Container, container::ObjectsTree < > > ( );
+auto objectsTreeType2 = registration::TypeRegister < alib::Object, container::ObjectsTree < > > ( );
 
 } /* namespace alib */
diff --git a/alib2common/src/container/ObjectsTrie.cpp b/alib2common/src/container/ObjectsTrie.cpp
index 866e7dec42..9f3f3fbc63 100644
--- a/alib2common/src/container/ObjectsTrie.cpp
+++ b/alib2common/src/container/ObjectsTrie.cpp
@@ -6,12 +6,13 @@
  */
 
 #include "ObjectsTrie.h"
-
 #include "Container.h"
 
+#include <registration/TypeRegistration.hpp>
+
 namespace alib {
 
-auto objectsTrieParserRegister = xmlApi < container::Container >::ParserRegister < container::ObjectsTrie < > > ( );
-auto objectsTrieParserRegister2 = xmlApi < alib::Object >::ParserRegister < container::ObjectsTrie < > > ( );
+auto objectsTrieType = registration::TypeRegister < container::Container, container::ObjectsTrie < > > ( );
+auto objectsTrieType2 = registration::TypeRegister < alib::Object, container::ObjectsTrie < > > ( );
 
 } /* namespace alib */
diff --git a/alib2common/src/container/ObjectsVector.cpp b/alib2common/src/container/ObjectsVector.cpp
index 8ac252629a..dfe18abccd 100644
--- a/alib2common/src/container/ObjectsVector.cpp
+++ b/alib2common/src/container/ObjectsVector.cpp
@@ -6,12 +6,13 @@
  */
 
 #include "ObjectsVector.h"
-
 #include "Container.h"
 
+#include <registration/TypeRegistration.hpp>
+
 namespace alib {
 
-auto objectsVectorParserRegister = xmlApi < container::Container >::ParserRegister < container::ObjectsVector < > > ( );
-auto objectsVectorParserRegister2 = xmlApi < alib::Object >::ParserRegister < container::ObjectsVector < > > ( );
+auto objectsVectorType = registration::TypeRegister < container::Container, container::ObjectsVector < > > ( );
+auto objectsVectorType2 = registration::TypeRegister < alib::Object, container::ObjectsVector < > > ( );
 
 } /* namespace alib */
diff --git a/alib2common/src/core/xmlApi.hpp b/alib2common/src/core/xmlApi.hpp
index f57dd9b6b2..4f3dbdf35b 100644
--- a/alib2common/src/core/xmlApi.hpp
+++ b/alib2common/src/core/xmlApi.hpp
@@ -21,13 +21,9 @@
 #include "exception/CommonException.h"
 
 #include <global/GlobalData.h>
-#include <introspection/DataTypes.hpp>
 
 namespace alib {
 
-template < typename T, typename Enable = void >
-struct xmlApi { };
-
 class xmlApiInputContext : public std::deque < sax::Token >::iterator {
 	template < typename T, typename Enable >
 	friend struct xmlApi;
@@ -80,37 +76,49 @@ public:
 
 };
 
+template < typename T, typename Enable = void >
+struct xmlApi { };
+
+template < typename Type >
+struct xmlApi < Type, typename std::enable_if < std::is_base_of < ObjectBase, Type >::value >::type > {
+	static Type parse ( std::deque < sax::Token >::iterator & input ) {
+		return Type::parse ( input );
+	}
+
+	static bool first ( const std::deque < sax::Token >::const_iterator & input ) {
+		return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName() );
+	}
+
+	static std::string xmlTagName ( ) {
+		return Type::getXmlTagName();
+	}
+
+	static void compose ( std::deque < sax::Token > & output, const Type & data ) {
+		data.compose ( output );
+	}
+
+};
+
 template < typename Group >
 struct xmlApi < Group, typename std::enable_if < std::is_base_of < WrapperBaseBase, Group >::value >::type > {
-	class ParserRegisterBase {
+private:
+	class GroupParser {
 	public:
 		virtual Group parse ( std::deque < sax::Token >::iterator & input ) = 0;
 	};
 
-	static std::map < std::string, typename xmlApi < Group >::ParserRegisterBase * > & parseFunctions ( ) {
-		static std::map < std::string, typename xmlApi < Group >::ParserRegisterBase * > res;
+	static std::map < std::string, typename xmlApi < Group >::GroupParser * > & parseFunctions ( ) {
+		static std::map < std::string, typename xmlApi < Group >::GroupParser * > res;
 
 		return res;
 	}
 
-public:
 	template < class Type >
-	class ParserRegister : public ParserRegisterBase {
+	class ParserRegister : public GroupParser {
 		std::function < Type ( std::deque < sax::Token >::iterator & ) > parseFunction;
 
 	public:
 		ParserRegister( ) : parseFunction ( Type::parse ) {
-			bool res = parseFunctions ( ).insert ( std::make_pair ( Type::getXmlTagName(), this ) ).second;
-			if ( ! res ) {
-				std::string groupName = std::type_name < Group > ( );
-				std::string typeName = std::type_name < Type > ( );
-
-				throw::exception::CommonException ( "Parse callback of " + typeName + " already registered in group " + groupName + "." );
-			}
-
-			// maybe not so good since empty group may not be created but at least it does not polute the code of datatypes
-			introspection::DataTypes::registerTypeInGroup < Type, Group > ( );
-			introspection::DataTypes::registerGroup < Group > ( );
 		}
 
 		virtual Group parse ( std::deque < sax::Token >::iterator & input ) {
@@ -119,6 +127,18 @@ public:
 
 	};
 
+public:
+	template < class Type >
+	static void registerType ( ) {
+		bool res = parseFunctions ( ).insert ( std::make_pair ( xmlApi < Type >::xmlTagName(), new ParserRegister < Type > ( ) ) ).second;
+		if ( ! res ) {
+			std::string groupName = std::type_name < Group > ( );
+			std::string typeName = std::type_name < Type > ( );
+
+			throw::exception::CommonException ( "Parse callback of " + typeName + " already registered in group " + groupName + "." );
+		}
+	}
+
 	static Group parse ( std::deque < sax::Token >::iterator & data ) {
 		xmlApiInputContext & input = ( xmlApiInputContext & ) data;
 		sax::FromXMLParserHelper::skipAttributes ( input, sax::Token::TokenType::START_ELEMENT );
@@ -139,7 +159,7 @@ public:
 
 			return * ( ( Group * ) elem->second );
 		} else {
-			typename std::map < std::string, ParserRegisterBase * >::iterator callback = parseFunctions ( ).find ( tagName );
+			typename std::map < std::string, GroupParser * >::iterator callback = parseFunctions ( ).find ( tagName );
 
 			if ( callback == parseFunctions ( ).end ( ) ) throw exception::CommonException ( "Parse callback for " + tagName + " tag not registered." );
 
@@ -166,7 +186,7 @@ public:
 
 		if ( tagName == "Ref" ) return true;
 
-		typename std::map < std::string, ParserRegisterBase * >::iterator callback = parseFunctions ( ).find ( tagName );
+		typename std::map < std::string, GroupParser * >::iterator callback = parseFunctions ( ).find ( tagName );
 
 		if ( callback == parseFunctions ( ).end ( ) ) return false;
 
@@ -214,26 +234,6 @@ public:
 
 };
 
-template < typename Type >
-struct xmlApi < Type, typename std::enable_if < std::is_base_of < ObjectBase, Type >::value >::type > {
-	static Type parse ( std::deque < sax::Token >::iterator & input ) {
-		return Type::parse ( input );
-	}
-
-	static bool first ( const std::deque < sax::Token >::const_iterator & input ) {
-		return sax::FromXMLParserHelper::isToken ( input, sax::Token::TokenType::START_ELEMENT, xmlTagName() );
-	}
-
-	static std::string xmlTagName ( ) {
-		return Type::getXmlTagName();
-	}
-
-	static void compose ( std::deque < sax::Token > & output, const Type & data ) {
-		data.compose ( output );
-	}
-
-};
-
 } /* namespace alib */
 
 #endif /* XML_API_HPP_ */
diff --git a/alib2common/src/exception/CommonException.cpp b/alib2common/src/exception/CommonException.cpp
index 42227afaec..329b18f71d 100644
--- a/alib2common/src/exception/CommonException.cpp
+++ b/alib2common/src/exception/CommonException.cpp
@@ -13,6 +13,8 @@
 #include "../object/UniqueObject.h"
 #include "../global/GlobalData.h"
 
+#include <registration/TypeRegistration.hpp>
+
 #ifdef DEBUG
 	#include "../debug/simpleStacktrace.h"
 #endif
@@ -124,6 +126,6 @@ alib::ObjectBase* CommonException::inc() && {
 
 namespace alib {
 
-auto alibExceptionParserRegister2 = xmlApi<alib::Object>::ParserRegister<exception::CommonException>();
+auto alibExceptionType = registration::TypeRegister<alib::Object, exception::CommonException>();
 
 } /* namespace alib */
diff --git a/alib2common/src/object/UniqueObject.cpp b/alib2common/src/object/UniqueObject.cpp
index ad42257781..c8c8597974 100644
--- a/alib2common/src/object/UniqueObject.cpp
+++ b/alib2common/src/object/UniqueObject.cpp
@@ -8,7 +8,8 @@
 #include "UniqueObject.h"
 #include <sstream>
 #include <sax/FromXMLParserHelper.h>
-#include <core/xmlApi.hpp>
+
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
@@ -83,6 +84,6 @@ ObjectBase* UniqueObject::inc() && {
 
 namespace alib {
 
-auto uniqueSymbolParserRegister2 = xmlApi<alib::Object>::ParserRegister<alib::UniqueObject>();
+auto uniqueSymbolType2 = registration::TypeRegister < alib::Object, alib::UniqueObject > ();
 
 } /* namespace alib */
diff --git a/alib2common/src/object/Void.cpp b/alib2common/src/object/Void.cpp
index 4a9850c379..82c9515b5d 100644
--- a/alib2common/src/object/Void.cpp
+++ b/alib2common/src/object/Void.cpp
@@ -8,9 +8,10 @@
 #include "Void.h"
 #include "../sax/FromXMLParserHelper.h"
 #include "Object.h"
-#include "../core/xmlApi.hpp"
 #include "UniqueObject.h"
 
+#include <registration/TypeRegistration.hpp>
+
 namespace alib {
 
 Void::Void() {
@@ -70,7 +71,7 @@ void xmlApi<void>::compose(std::deque<sax::Token>& output) {
 	output.emplace_back(Void::getXmlTagName(), sax::Token::TokenType::END_ELEMENT);
 }
 
-auto voidParserRegister = xmlApi<alib::Object>::ParserRegister<alib::Void>();
+auto voidType = registration::TypeRegister < alib::Object, alib::Void > ();
 
 } /* namespace alib */
 
diff --git a/alib2common/src/primitive/Bool.cpp b/alib2common/src/primitive/Bool.cpp
index 3bcf20c114..ac2513e84d 100644
--- a/alib2common/src/primitive/Bool.cpp
+++ b/alib2common/src/primitive/Bool.cpp
@@ -11,6 +11,8 @@
 #include "Primitive.h"
 #include <object/Object.h>
 
+#include <registration/TypeRegistration.hpp>
+
 namespace primitive {
 
 Bool::Bool(bool data) : m_data(data) {
@@ -105,7 +107,7 @@ void xmlApi<bool>::compose(std::deque<sax::Token>& output, bool data) {
 	primitive::Bool::compose(output, data);
 }
 
-auto boolParserRegister = xmlApi<primitive::Primitive>::ParserRegister<primitive::Bool>();
-auto boolParserRegister2 = xmlApi<alib::Object>::ParserRegister<primitive::Bool>();
+auto boolType = registration::TypeRegister < primitive::Primitive, primitive::Bool > ();
+auto boolType2 = registration::TypeRegister < alib::Object, primitive::Bool > ();
 
 } /* namespace alib */
diff --git a/alib2common/src/primitive/Character.cpp b/alib2common/src/primitive/Character.cpp
index 297ced502f..de5d9244a5 100644
--- a/alib2common/src/primitive/Character.cpp
+++ b/alib2common/src/primitive/Character.cpp
@@ -10,6 +10,8 @@
 #include "Primitive.h"
 #include <object/Object.h>
 
+#include <registration/TypeRegistration.hpp>
+
 namespace primitive {
 
 Character::Character(char data) : m_data(data) {
@@ -94,8 +96,8 @@ void xmlApi<char>::compose(std::deque<sax::Token>& output, char data) {
 	primitive::Character::compose(output, data);
 }
 
-auto characterParserRegister = xmlApi<primitive::Primitive>::ParserRegister<primitive::Character>();
-auto characterParserRegister2 = xmlApi<alib::Object>::ParserRegister<primitive::Character>();
+auto characterType = registration::TypeRegister < primitive::Primitive, primitive::Character > ();
+auto characterType2 = registration::TypeRegister < alib::Object, primitive::Character > ();
 
 } /* namespace alib */
 
diff --git a/alib2common/src/primitive/Double.cpp b/alib2common/src/primitive/Double.cpp
index 3acb1e041f..80f17cc3b2 100644
--- a/alib2common/src/primitive/Double.cpp
+++ b/alib2common/src/primitive/Double.cpp
@@ -10,6 +10,8 @@
 #include "Primitive.h"
 #include <object/Object.h>
 
+#include <registration/TypeRegistration.hpp>
+
 namespace primitive {
 
 Double::Double(double data) : m_data(data) {
@@ -99,8 +101,8 @@ void xmlApi<double>::compose(std::deque<sax::Token>& output, double data) {
 	primitive::Double::compose(output, data);
 }
 
-auto doubleParserRegister = xmlApi<primitive::Primitive>::ParserRegister<primitive::Double>();
-auto doubleParserRegister2 = xmlApi<alib::Object>::ParserRegister<primitive::Double>();
+auto doubleType = registration::TypeRegister < primitive::Primitive, primitive::Double > ();
+auto doubleType2 = registration::TypeRegister < alib::Object, primitive::Double > ();
 
 } /* namespace alib */
 
diff --git a/alib2common/src/primitive/Integer.cpp b/alib2common/src/primitive/Integer.cpp
index 89b960661d..d20f868996 100644
--- a/alib2common/src/primitive/Integer.cpp
+++ b/alib2common/src/primitive/Integer.cpp
@@ -10,6 +10,8 @@
 #include "Primitive.h"
 #include <object/Object.h>
 
+#include <registration/TypeRegistration.hpp>
+
 namespace primitive {
 
 Integer::Integer(int data) : m_data(data) {
@@ -94,8 +96,8 @@ void xmlApi<int>::compose(std::deque<sax::Token>& output, int data) {
 	primitive::Integer::compose(output, data);
 }
 
-auto integerParserRegister = xmlApi<primitive::Primitive>::ParserRegister<primitive::Integer>();
-auto integerParserRegister2 = xmlApi<alib::Object>::ParserRegister<primitive::Integer>();
+auto integerType = registration::TypeRegister < primitive::Primitive, primitive::Integer > ();
+auto integerType2 = registration::TypeRegister < alib::Object, primitive::Integer > ();
 
 } /* namespace alib */
 
diff --git a/alib2common/src/primitive/String.cpp b/alib2common/src/primitive/String.cpp
index 0799334fd7..223bc4061c 100644
--- a/alib2common/src/primitive/String.cpp
+++ b/alib2common/src/primitive/String.cpp
@@ -10,6 +10,8 @@
 #include "Primitive.h"
 #include <object/Object.h>
 
+#include <registration/TypeRegistration.hpp>
+
 namespace primitive {
 
 String::String(std::string data) : m_data(std::move(data)) {
@@ -97,8 +99,8 @@ void xmlApi<std::string>::compose(std::deque<sax::Token>& output, std::string da
 	primitive::String::compose(output, data);
 }
 
-auto stringParserRegister = xmlApi<primitive::Primitive>::ParserRegister<primitive::String>();
-auto stringParserRegister2 = xmlApi<alib::Object>::ParserRegister<primitive::String>();
+auto stringType = registration::TypeRegister < primitive::Primitive, primitive::String > ();
+auto stringType2 = registration::TypeRegister < alib::Object, primitive::String > ();
 
 } /* namespace alib */
 
diff --git a/alib2common/src/primitive/Unsigned.cpp b/alib2common/src/primitive/Unsigned.cpp
index 0b0f02eb56..2eff2fd218 100644
--- a/alib2common/src/primitive/Unsigned.cpp
+++ b/alib2common/src/primitive/Unsigned.cpp
@@ -10,6 +10,8 @@
 #include "Primitive.h"
 #include <object/Object.h>
 
+#include <registration/TypeRegistration.hpp>
+
 namespace primitive {
 
 Unsigned::Unsigned(unsigned data) : m_data(data) {
@@ -98,8 +100,8 @@ void xmlApi<unsigned>::compose(std::deque<sax::Token>& output, unsigned data) {
 	primitive::Unsigned::compose(output, data);
 }
 
-auto unsignedParserRegister = xmlApi<primitive::Primitive>::ParserRegister<primitive::Unsigned>();
-auto unsignedParserRegister2 = xmlApi<alib::Object>::ParserRegister<primitive::Unsigned>();
+auto unsignedType = registration::TypeRegister < primitive::Primitive, primitive::Unsigned > ();
+auto unsignedType2 = registration::TypeRegister < alib::Object, primitive::Unsigned > ();
 
 } /* namespace alib */
 
diff --git a/alib2common/src/primitive/UnsignedLong.cpp b/alib2common/src/primitive/UnsignedLong.cpp
index 0fed03b14f..154b5bbc10 100644
--- a/alib2common/src/primitive/UnsignedLong.cpp
+++ b/alib2common/src/primitive/UnsignedLong.cpp
@@ -10,6 +10,8 @@
 #include "Primitive.h"
 #include <object/Object.h>
 
+#include <registration/TypeRegistration.hpp>
+
 namespace primitive {
 
 UnsignedLong::UnsignedLong(unsigned long data) : m_data(data) {
@@ -94,8 +96,8 @@ void xmlApi<unsigned long>::compose(std::deque<sax::Token>& output, unsigned lon
 	primitive::UnsignedLong::compose(output, data);
 }
 
-auto unsignedLongParserRegister = xmlApi<primitive::Primitive>::ParserRegister<primitive::UnsignedLong>();
-auto unsignedLongParserRegister2 = xmlApi<alib::Object>::ParserRegister<primitive::UnsignedLong>();
+auto unsignedLongType = registration::TypeRegister < primitive::Primitive, primitive::UnsignedLong > ();
+auto unsignedLongType2 = registration::TypeRegister < alib::Object, primitive::UnsignedLong > ();
 
 } /* namespace alib */
 
diff --git a/alib2common/src/registration/TypeRegistration.hpp b/alib2common/src/registration/TypeRegistration.hpp
new file mode 100644
index 0000000000..00042d31f1
--- /dev/null
+++ b/alib2common/src/registration/TypeRegistration.hpp
@@ -0,0 +1,21 @@
+#ifndef _TYPE_REGISTRATION_HPP_
+#define _TYPE_REGISTRATION_HPP_
+
+#include <core/xmlApi.hpp>
+#include <introspection/DataTypes.hpp>
+
+namespace registration {
+
+template < class Group, class Type >
+class TypeRegister {
+public:
+	TypeRegister ( ) {
+		alib::xmlApi < Group >::template registerType < Type > ( );
+		introspection::DataTypes::registerTypeInGroup < Type, Group > ( );
+		introspection::DataTypes::registerGroup < Group > ( );
+	}
+};
+
+} /* namespace registration */
+
+#endif // _TYPE_REGISTRATION_HPP_
diff --git a/alib2data/src/alphabet/BarSymbol.cpp b/alib2data/src/alphabet/BarSymbol.cpp
index d18bfb07b5..8da1d499cb 100644
--- a/alib2data/src/alphabet/BarSymbol.cpp
+++ b/alib2data/src/alphabet/BarSymbol.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Symbol.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueSymbol.h"
 
 namespace alphabet {
@@ -57,7 +57,7 @@ SymbolBase* BarSymbol::inc() && {
 
 namespace alib {
 
-auto barSymbolParserRegister = xmlApi<alphabet::Symbol>::ParserRegister<alphabet::BarSymbol>();
-auto barSymbolParserRegister2 = xmlApi<alib::Object>::ParserRegister<alphabet::BarSymbol>();
+auto barSymbolType = registration::TypeRegister < alphabet::Symbol, alphabet::BarSymbol > ();
+auto barSymbolType2 = registration::TypeRegister < alib::Object, alphabet::BarSymbol > ();
 
 } /* namespace alib */
diff --git a/alib2data/src/alphabet/BlankSymbol.cpp b/alib2data/src/alphabet/BlankSymbol.cpp
index 2551a6b65e..b9fce512de 100644
--- a/alib2data/src/alphabet/BlankSymbol.cpp
+++ b/alib2data/src/alphabet/BlankSymbol.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Symbol.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueSymbol.h"
 
 namespace alphabet {
@@ -57,7 +57,7 @@ SymbolBase* BlankSymbol::inc() && {
 
 namespace alib {
 
-auto blankSymbolParserRegister = xmlApi<alphabet::Symbol>::ParserRegister<alphabet::BlankSymbol>();
-auto blankSymbolParserRegister2 = xmlApi<alib::Object>::ParserRegister<alphabet::BlankSymbol>();
+auto blankSymbolType = registration::TypeRegister < alphabet::Symbol, alphabet::BlankSymbol > ();
+auto blankSymbolType2 = registration::TypeRegister < alib::Object, alphabet::BlankSymbol > ();
 
 } /* namespace alib */
diff --git a/alib2data/src/alphabet/BottomOfTheStackSymbol.cpp b/alib2data/src/alphabet/BottomOfTheStackSymbol.cpp
index ec403cd907..c81b076815 100644
--- a/alib2data/src/alphabet/BottomOfTheStackSymbol.cpp
+++ b/alib2data/src/alphabet/BottomOfTheStackSymbol.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Symbol.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueSymbol.h"
 
 namespace alphabet {
@@ -58,7 +58,7 @@ SymbolBase* BottomOfTheStackSymbol::inc() && {
 
 namespace alib {
 
-auto bottomOfTheStackSymbolParserRegister = xmlApi<alphabet::Symbol>::ParserRegister<alphabet::BottomOfTheStackSymbol>();
-auto bottomOfTheStackSymbolParserRegister2 = xmlApi<alib::Object>::ParserRegister<alphabet::BottomOfTheStackSymbol>();
+auto bottomOfTheStackSymbolType = registration::TypeRegister < alphabet::Symbol, alphabet::BottomOfTheStackSymbol > ();
+auto bottomOfTheStackSymbolType2 = registration::TypeRegister < alib::Object, alphabet::BottomOfTheStackSymbol > ();
 
 } /* namespace alib */
diff --git a/alib2data/src/alphabet/EndSymbol.cpp b/alib2data/src/alphabet/EndSymbol.cpp
index 74fab90d2f..0140143ca7 100644
--- a/alib2data/src/alphabet/EndSymbol.cpp
+++ b/alib2data/src/alphabet/EndSymbol.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Symbol.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueSymbol.h"
 
 namespace alphabet {
@@ -57,7 +57,7 @@ SymbolBase* EndSymbol::inc() && {
 
 namespace alib {
 
-auto endSymbolParserRegister = xmlApi<alphabet::Symbol>::ParserRegister<alphabet::EndSymbol>();
-auto endSymbolParserRegister2 = xmlApi<alib::Object>::ParserRegister<alphabet::EndSymbol>();
+auto endSymbolType = registration::TypeRegister < alphabet::Symbol, alphabet::EndSymbol > ();
+auto endSymbolType2 = registration::TypeRegister < alib::Object, alphabet::EndSymbol > ();
 
 } /* namespace alib */
diff --git a/alib2data/src/alphabet/InitialSymbol.cpp b/alib2data/src/alphabet/InitialSymbol.cpp
index 16a32d941d..e4d690cd80 100644
--- a/alib2data/src/alphabet/InitialSymbol.cpp
+++ b/alib2data/src/alphabet/InitialSymbol.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Symbol.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueSymbol.h"
 
 namespace alphabet {
@@ -57,7 +57,7 @@ SymbolBase* InitialSymbol::inc() && {
 
 namespace alib {
 
-auto initialStateParserRegister = xmlApi<alphabet::Symbol>::ParserRegister<alphabet::InitialSymbol>();
-auto initialStateParserRegister2 = xmlApi<alib::Object>::ParserRegister<alphabet::InitialSymbol>();
+auto initialStateType = registration::TypeRegister < alphabet::Symbol, alphabet::InitialSymbol > ();
+auto initialStateType2 = registration::TypeRegister < alib::Object, alphabet::InitialSymbol > ();
 
 } /* namespace alib */
diff --git a/alib2data/src/alphabet/LabeledSymbol.cpp b/alib2data/src/alphabet/LabeledSymbol.cpp
index e84759fef8..fab8dfaeeb 100644
--- a/alib2data/src/alphabet/LabeledSymbol.cpp
+++ b/alib2data/src/alphabet/LabeledSymbol.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Symbol.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alphabet {
 
@@ -79,7 +79,7 @@ SymbolBase* LabeledSymbol::inc() && {
 
 namespace alib {
 
-auto labeledSymbolParserRegister = xmlApi<alphabet::Symbol>::ParserRegister<alphabet::LabeledSymbol>();
-auto labeledSymbolParserRegister2 = xmlApi<alib::Object>::ParserRegister<alphabet::LabeledSymbol>();
+auto labeledSymbolType = registration::TypeRegister < alphabet::Symbol, alphabet::LabeledSymbol > ();
+auto labeledSymbolType2 = registration::TypeRegister < alib::Object, alphabet::LabeledSymbol > ();
 
 } /* namespace alib */
diff --git a/alib2data/src/alphabet/NonlinearVariableSymbol.cpp b/alib2data/src/alphabet/NonlinearVariableSymbol.cpp
index b2e025120f..a6864b65b6 100644
--- a/alib2data/src/alphabet/NonlinearVariableSymbol.cpp
+++ b/alib2data/src/alphabet/NonlinearVariableSymbol.cpp
@@ -8,11 +8,11 @@
 #include "NonlinearVariableSymbol.h"
 #include "Symbol.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto nonlinearVariableSymbolParserRegister = xmlApi < alphabet::Symbol >::ParserRegister < alphabet::NonlinearVariableSymbol < > > ( );
-auto nonlinearVariableSymbolParserRegister2 = xmlApi < alib::Object >::ParserRegister < alphabet::NonlinearVariableSymbol < > > ( );
+auto nonlinearVariableSymbolType = registration::TypeRegister < alphabet::Symbol, alphabet::NonlinearVariableSymbol < > > ( );
+auto nonlinearVariableSymbolType2 = registration::TypeRegister < alib::Object, alphabet::NonlinearVariableSymbol < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/alphabet/RankedSymbol.cpp b/alib2data/src/alphabet/RankedSymbol.cpp
index a312a7452b..002b577858 100644
--- a/alib2data/src/alphabet/RankedSymbol.cpp
+++ b/alib2data/src/alphabet/RankedSymbol.cpp
@@ -7,11 +7,11 @@
 
 #include "RankedSymbol.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto rankedSymbolParserRegister = xmlApi<alphabet::Symbol>::ParserRegister<alphabet::RankedSymbol < > >();
-auto rankedSymbolParserRegister2 = xmlApi<alib::Object>::ParserRegister<alphabet::RankedSymbol < > >();
+auto rankedSymbolType = registration::TypeRegister < alphabet::Symbol, alphabet::RankedSymbol < > > ();
+auto rankedSymbolType2 = registration::TypeRegister < alib::Object, alphabet::RankedSymbol < > > ();
 
 } /* namespace alib */
diff --git a/alib2data/src/alphabet/StartSymbol.cpp b/alib2data/src/alphabet/StartSymbol.cpp
index 64c3525af8..ea257039ca 100644
--- a/alib2data/src/alphabet/StartSymbol.cpp
+++ b/alib2data/src/alphabet/StartSymbol.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Symbol.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueSymbol.h"
 
 namespace alphabet {
@@ -57,7 +57,7 @@ SymbolBase* StartSymbol::inc() && {
 
 namespace alib {
 
-auto startSymbolParserRegister = xmlApi<alphabet::Symbol>::ParserRegister<alphabet::StartSymbol>();
-auto startSymbolParserRegister2 = xmlApi<alib::Object>::ParserRegister<alphabet::StartSymbol>();
+auto startSymbolType = registration::TypeRegister < alphabet::Symbol, alphabet::StartSymbol > ();
+auto startSymbolType2 = registration::TypeRegister < alib::Object, alphabet::StartSymbol > ();
 
 } /* namespace alib */
diff --git a/alib2data/src/alphabet/SubtreeWildcardSymbol.cpp b/alib2data/src/alphabet/SubtreeWildcardSymbol.cpp
index bc7e63b7cc..5eccfae951 100644
--- a/alib2data/src/alphabet/SubtreeWildcardSymbol.cpp
+++ b/alib2data/src/alphabet/SubtreeWildcardSymbol.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Symbol.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueSymbol.h"
 
 namespace alphabet {
@@ -57,7 +57,7 @@ SymbolBase* SubtreeWildcardSymbol::inc() && {
 
 namespace alib {
 
-auto subtreeWildcardSymbolParserRegister = xmlApi<alphabet::Symbol>::ParserRegister<alphabet::SubtreeWildcardSymbol>();
-auto subtreeWildcardSymbolParserRegister2 = xmlApi<alib::Object>::ParserRegister<alphabet::SubtreeWildcardSymbol>();
+auto subtreeWildcardSymbolType = registration::TypeRegister < alphabet::Symbol, alphabet::SubtreeWildcardSymbol > ();
+auto subtreeWildcardSymbolType2 = registration::TypeRegister < alib::Object, alphabet::SubtreeWildcardSymbol > ();
 
 } /* namespace alib */
diff --git a/alib2data/src/alphabet/UniqueSymbol.cpp b/alib2data/src/alphabet/UniqueSymbol.cpp
index 85aa4edfd0..8952695e39 100644
--- a/alib2data/src/alphabet/UniqueSymbol.cpp
+++ b/alib2data/src/alphabet/UniqueSymbol.cpp
@@ -10,7 +10,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Symbol.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alphabet {
 
@@ -85,7 +85,7 @@ SymbolBase* UniqueSymbol::inc() && {
 
 namespace alib {
 
-auto uniqueSymbolParserRegister = xmlApi<alphabet::Symbol>::ParserRegister<alphabet::UniqueSymbol>();
-auto uniqueSymbolParserRegister2 = xmlApi<alib::Object>::ParserRegister<alphabet::UniqueSymbol>();
+auto uniqueSymbolType = registration::TypeRegister < alphabet::Symbol, alphabet::UniqueSymbol > ();
+auto uniqueSymbolType2 = registration::TypeRegister < alib::Object, alphabet::UniqueSymbol > ();
 
 } /* namespace alib */
diff --git a/alib2data/src/alphabet/VariablesBarSymbol.cpp b/alib2data/src/alphabet/VariablesBarSymbol.cpp
index 97f583978e..d2d0f8dd40 100644
--- a/alib2data/src/alphabet/VariablesBarSymbol.cpp
+++ b/alib2data/src/alphabet/VariablesBarSymbol.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Symbol.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueSymbol.h"
 
 namespace alphabet {
@@ -57,7 +57,7 @@ SymbolBase * VariablesBarSymbol::inc ( ) && {
 
 namespace alib {
 
-auto variablesBarSymbolParserRegister = xmlApi < alphabet::Symbol >::ParserRegister < alphabet::VariablesBarSymbol > ();
-auto variablesBarSymbolParserRegister2 = xmlApi < alib::Object >::ParserRegister < alphabet::VariablesBarSymbol > ();
+auto variablesBarSymbolType = registration::TypeRegister < alphabet::Symbol, alphabet::VariablesBarSymbol > ();
+auto variablesBarSymbolType2 = registration::TypeRegister < alib::Object, alphabet::VariablesBarSymbol > ();
 
 } /* namespace alib */
diff --git a/alib2data/src/automaton/FSM/CompactNFA.cpp b/alib2data/src/automaton/FSM/CompactNFA.cpp
index 1415738c66..29975eac55 100644
--- a/alib2data/src/automaton/FSM/CompactNFA.cpp
+++ b/alib2data/src/automaton/FSM/CompactNFA.cpp
@@ -8,7 +8,7 @@
 #include "CompactNFA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 #include <core/castApi.hpp>
 
@@ -18,8 +18,8 @@ namespace automaton {
 
 namespace alib {
 
-auto compactNFAParserRegister = xmlApi < automaton::Automaton >::ParserRegister < automaton::CompactNFA < > > ( );
-auto compactNFAParserRegister2 = xmlApi < alib::Object >::ParserRegister < automaton::CompactNFA < > > ( );
+auto compactNFAType = registration::TypeRegister < automaton::Automaton, automaton::CompactNFA < > > ( );
+auto compactNFAType2 = registration::TypeRegister < alib::Object, automaton::CompactNFA < > > ( );
 
 auto CompactNFAFromDFA = castApi::CastRegister < automaton::CompactNFA < >, automaton::DFA < > > ( );
 auto CompactNFAFromNFA = castApi::CastRegister < automaton::CompactNFA < >, automaton::NFA < > > ( );
diff --git a/alib2data/src/automaton/FSM/DFA.cpp b/alib2data/src/automaton/FSM/DFA.cpp
index a55370658d..bf0baab933 100644
--- a/alib2data/src/automaton/FSM/DFA.cpp
+++ b/alib2data/src/automaton/FSM/DFA.cpp
@@ -8,11 +8,11 @@
 #include "DFA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto DFAParserRegister = xmlApi < automaton::Automaton >::ParserRegister < automaton::DFA<> > ( );
-auto DFAParserRegister2 = xmlApi < alib::Object >::ParserRegister < automaton::DFA<> > ( );
+auto DFAType = registration::TypeRegister < automaton::Automaton, automaton::DFA < > > ( );
+auto DFAType2 = registration::TypeRegister < alib::Object, automaton::DFA < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.cpp b/alib2data/src/automaton/FSM/EpsilonNFA.cpp
index 42c130800e..8eb2a1cb8f 100644
--- a/alib2data/src/automaton/FSM/EpsilonNFA.cpp
+++ b/alib2data/src/automaton/FSM/EpsilonNFA.cpp
@@ -8,14 +8,14 @@
 #include "EpsilonNFA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto epsilonNFAParserRegister = xmlApi < automaton::Automaton >::ParserRegister < automaton::EpsilonNFA < > > ( );
-auto epsilonNFAParserRegister2 = xmlApi < alib::Object >::ParserRegister < automaton::EpsilonNFA < > > ( );
+auto epsilonNFAType = registration::TypeRegister < automaton::Automaton, automaton::EpsilonNFA < > > ( );
+auto epsilonNFAType2 = registration::TypeRegister < alib::Object, automaton::EpsilonNFA < > > ( );
 
 auto EpsilonNFAFromDFA = castApi::CastRegister < automaton::EpsilonNFA < >, automaton::DFA < > > ( );
 auto EpsilonNFAFromNFA = castApi::CastRegister < automaton::EpsilonNFA < >, automaton::NFA < > > ( );
diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.cpp b/alib2data/src/automaton/FSM/ExtendedNFA.cpp
index 6e777e0172..ade894859e 100644
--- a/alib2data/src/automaton/FSM/ExtendedNFA.cpp
+++ b/alib2data/src/automaton/FSM/ExtendedNFA.cpp
@@ -8,14 +8,14 @@
 #include "ExtendedNFA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto extendedNFAParserRegister = xmlApi < automaton::Automaton >::ParserRegister < automaton::ExtendedNFA < > > ( );
-auto extendedNFAParserRegister2 = xmlApi < alib::Object >::ParserRegister < automaton::ExtendedNFA < > > ( );
+auto extendedNFAType = registration::TypeRegister < automaton::Automaton, automaton::ExtendedNFA < > > ( );
+auto extendedNFAType2 = registration::TypeRegister < alib::Object, automaton::ExtendedNFA < > > ( );
 
 auto ExtendedNFAFromDFA = castApi::CastRegister < automaton::ExtendedNFA < >, automaton::DFA < > > ( );
 auto ExtendedNFAFromNFA = castApi::CastRegister < automaton::ExtendedNFA < >, automaton::NFA < > > ( );
diff --git a/alib2data/src/automaton/FSM/MultiInitialStateNFA.cpp b/alib2data/src/automaton/FSM/MultiInitialStateNFA.cpp
index 81efbccbb1..0eabd35e7d 100644
--- a/alib2data/src/automaton/FSM/MultiInitialStateNFA.cpp
+++ b/alib2data/src/automaton/FSM/MultiInitialStateNFA.cpp
@@ -8,14 +8,14 @@
 #include "MultiInitialStateNFA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto multiInitialStateNFAParserRegister = xmlApi < automaton::Automaton >::ParserRegister < automaton::MultiInitialStateNFA < > > ( );
-auto multiInitialStateNFAParserRegister2 = xmlApi < alib::Object >::ParserRegister < automaton::MultiInitialStateNFA < > > ( );
+auto multiInitialStateNFAType = registration::TypeRegister < automaton::Automaton, automaton::MultiInitialStateNFA < > > ( );
+auto multiInitialStateNFAType2 = registration::TypeRegister < alib::Object, automaton::MultiInitialStateNFA < > > ( );
 
 auto MultiInitialStateNFAFromDFA = castApi::CastRegister < automaton::MultiInitialStateNFA < >, automaton::DFA < > > ( );
 auto MultiInitialStateNFAFromNFA = castApi::CastRegister < automaton::MultiInitialStateNFA < >, automaton::NFA < > > ( );
diff --git a/alib2data/src/automaton/FSM/NFA.cpp b/alib2data/src/automaton/FSM/NFA.cpp
index 16891d8841..bf24cca718 100644
--- a/alib2data/src/automaton/FSM/NFA.cpp
+++ b/alib2data/src/automaton/FSM/NFA.cpp
@@ -8,14 +8,14 @@
 #include "NFA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto NFAParserRegister = xmlApi < automaton::Automaton >::ParserRegister < automaton::NFA < > > ( );
-auto NFAParserRegister2 = xmlApi < alib::Object >::ParserRegister < automaton::NFA < > > ( );
+auto NFAType = registration::TypeRegister < automaton::Automaton, automaton::NFA < > > ( );
+auto NFAType2 = registration::TypeRegister < alib::Object, automaton::NFA < > > ( );
 
 auto NFAFromDFA = castApi::CastRegister < automaton::NFA < >, automaton::DFA < > > ( );
 auto NFACastBinder = castApi::CastPoolStringBinder < automaton::NFA < > > ( automaton::NFA < >::getXmlTagName() );
diff --git a/alib2data/src/automaton/PDA/DPDA.cpp b/alib2data/src/automaton/PDA/DPDA.cpp
index 85fecdc13a..aaba74d9f8 100644
--- a/alib2data/src/automaton/PDA/DPDA.cpp
+++ b/alib2data/src/automaton/PDA/DPDA.cpp
@@ -8,13 +8,13 @@
 #include "DPDA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto DPDAParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::DPDA < > >();
-auto DPDAParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::DPDA < > >();
+auto DPDAType = registration::TypeRegister < automaton::Automaton, automaton::DPDA < > > ( );
+auto DPDAType2 = registration::TypeRegister < alib::Object, automaton::DPDA < > > ( );
 
 auto DPDACastBinder = castApi::CastPoolStringBinder<automaton::DPDA < > >(automaton::DPDA < >::getXmlTagName());
 
diff --git a/alib2data/src/automaton/PDA/InputDrivenDPDA.cpp b/alib2data/src/automaton/PDA/InputDrivenDPDA.cpp
index c02aa33af9..1cab6fb2b9 100644
--- a/alib2data/src/automaton/PDA/InputDrivenDPDA.cpp
+++ b/alib2data/src/automaton/PDA/InputDrivenDPDA.cpp
@@ -8,11 +8,11 @@
 #include "InputDrivenDPDA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto inputDivenDPDAParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::InputDrivenDPDA < > >();
-auto inputDivenDPDAParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::InputDrivenDPDA< > >();
+auto inputDivenDPDAType = registration::TypeRegister < automaton::Automaton, automaton::InputDrivenDPDA < > > ( );
+auto inputDivenDPDAType2 = registration::TypeRegister < alib::Object, automaton::InputDrivenDPDA< > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/automaton/PDA/InputDrivenNPDA.cpp b/alib2data/src/automaton/PDA/InputDrivenNPDA.cpp
index f7bc0ed046..f2714b19c1 100644
--- a/alib2data/src/automaton/PDA/InputDrivenNPDA.cpp
+++ b/alib2data/src/automaton/PDA/InputDrivenNPDA.cpp
@@ -8,11 +8,11 @@
 #include "InputDrivenNPDA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto inputDrivenNPDAParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::InputDrivenNPDA < > >();
-auto inputDrivenNPDAParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::InputDrivenNPDA < > >();
+auto inputDrivenNPDAType = registration::TypeRegister < automaton::Automaton, automaton::InputDrivenNPDA < > > ( );
+auto inputDrivenNPDAType2 = registration::TypeRegister < alib::Object, automaton::InputDrivenNPDA < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/automaton/PDA/NPDA.cpp b/alib2data/src/automaton/PDA/NPDA.cpp
index 9d6ef19205..9115fef9fd 100644
--- a/alib2data/src/automaton/PDA/NPDA.cpp
+++ b/alib2data/src/automaton/PDA/NPDA.cpp
@@ -8,13 +8,13 @@
 #include "NPDA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto NPDAParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::NPDA < > >();
-auto NPDAParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::NPDA < > >();
+auto NPDAType = registration::TypeRegister < automaton::Automaton, automaton::NPDA < > > ( );
+auto NPDAType2 = registration::TypeRegister < alib::Object, automaton::NPDA < > > ( );
 
 auto NPDACastBinder = castApi::CastPoolStringBinder<automaton::NPDA < > >(automaton::NPDA < >::getXmlTagName());
 
diff --git a/alib2data/src/automaton/PDA/NPDTA.cpp b/alib2data/src/automaton/PDA/NPDTA.cpp
index c719ec8441..47e80d8d34 100644
--- a/alib2data/src/automaton/PDA/NPDTA.cpp
+++ b/alib2data/src/automaton/PDA/NPDTA.cpp
@@ -8,13 +8,13 @@
 #include "NPDTA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto NPDTAParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::NPDTA < > >();
-auto NPDTAParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::NPDTA < > >();
+auto NPDTAType = registration::TypeRegister < automaton::Automaton, automaton::NPDTA < > > ( );
+auto NPDTAType2 = registration::TypeRegister < alib::Object, automaton::NPDTA < > > ( );
 
 auto NPDTACastBinder = castApi::CastPoolStringBinder<automaton::NPDTA < > >(automaton::NPDTA < >::getXmlTagName());
 
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.cpp b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.cpp
index f22653780c..e82f6b04a6 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.cpp
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.cpp
@@ -8,13 +8,13 @@
 #include "RealTimeHeightDeterministicDPDA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto realTimeHeightDeterministicDPDAParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::RealTimeHeightDeterministicDPDA < > >();
-auto realTimeHeightDeterministicDPDAParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::RealTimeHeightDeterministicDPDA < > >();
+auto realTimeHeightDeterministicDPDAType = registration::TypeRegister < automaton::Automaton, automaton::RealTimeHeightDeterministicDPDA < > > ( );
+auto realTimeHeightDeterministicDPDAType2 = registration::TypeRegister < alib::Object, automaton::RealTimeHeightDeterministicDPDA < > > ( );
 
 auto RealTimeHeightDeterministicDPDACastBinder = castApi::CastPoolStringBinder<automaton::RealTimeHeightDeterministicDPDA < > >(automaton::RealTimeHeightDeterministicDPDA < >::getXmlTagName());
 
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.cpp b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.cpp
index 6c597e2504..9f7d4e0d81 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.cpp
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.cpp
@@ -8,13 +8,13 @@
 #include "RealTimeHeightDeterministicNPDA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto realTimeHeightDeterministicNPDAParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::RealTimeHeightDeterministicNPDA < > >();
-auto realTimeHeightDeterministicNPDAParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::RealTimeHeightDeterministicNPDA < > >();
+auto realTimeHeightDeterministicNPDAType = registration::TypeRegister < automaton::Automaton, automaton::RealTimeHeightDeterministicNPDA < > > ( );
+auto realTimeHeightDeterministicNPDAType2 = registration::TypeRegister < alib::Object, automaton::RealTimeHeightDeterministicNPDA < > > ( );
 
 auto RealTimeHeightDeterministicNPDACastBinder = castApi::CastPoolStringBinder<automaton::RealTimeHeightDeterministicNPDA < > >(automaton::RealTimeHeightDeterministicNPDA < >::getXmlTagName());
 
diff --git a/alib2data/src/automaton/PDA/SinglePopDPDA.cpp b/alib2data/src/automaton/PDA/SinglePopDPDA.cpp
index 208b27151f..e8440e9ded 100644
--- a/alib2data/src/automaton/PDA/SinglePopDPDA.cpp
+++ b/alib2data/src/automaton/PDA/SinglePopDPDA.cpp
@@ -8,11 +8,11 @@
 #include "SinglePopDPDA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto singlePopDPDAParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::SinglePopDPDA < > >();
-auto singlePopDPDAParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::SinglePopDPDA < > >();
+auto singlePopDPDAType = registration::TypeRegister < automaton::Automaton, automaton::SinglePopDPDA < > > ( );
+auto singlePopDPDAType2 = registration::TypeRegister < alib::Object, automaton::SinglePopDPDA < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/automaton/PDA/SinglePopNPDA.cpp b/alib2data/src/automaton/PDA/SinglePopNPDA.cpp
index 81994ff143..b7df303ddd 100644
--- a/alib2data/src/automaton/PDA/SinglePopNPDA.cpp
+++ b/alib2data/src/automaton/PDA/SinglePopNPDA.cpp
@@ -8,11 +8,11 @@
 #include "SinglePopNPDA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto singlePopNPDAParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::SinglePopNPDA < > >();
-auto singlePopNPDAParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::SinglePopNPDA < > >();
+auto singlePopNPDAType = registration::TypeRegister < automaton::Automaton, automaton::SinglePopNPDA < > > ( );
+auto singlePopNPDAType2 = registration::TypeRegister < alib::Object, automaton::SinglePopNPDA < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp
index effd1c68c1..3703339b85 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp
@@ -8,11 +8,11 @@
 #include "VisiblyPushdownDPDA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto visiblyPushdownDPDAParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::VisiblyPushdownDPDA < > >();
-auto visiblyPushdownDPDAParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::VisiblyPushdownDPDA < > >();
+auto visiblyPushdownDPDAType = registration::TypeRegister < automaton::Automaton, automaton::VisiblyPushdownDPDA < > > ( );
+auto visiblyPushdownDPDAType2 = registration::TypeRegister < alib::Object, automaton::VisiblyPushdownDPDA < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp
index ed7b30d1f5..d1f444e4ba 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp
@@ -8,11 +8,11 @@
 #include "VisiblyPushdownNPDA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto visiblyPushdownNPDAParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::VisiblyPushdownNPDA < > >();
-auto visiblyPushdownNPDAParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::VisiblyPushdownNPDA < > >();
+auto visiblyPushdownNPDAType = registration::TypeRegister < automaton::Automaton, automaton::VisiblyPushdownNPDA < > > ( );
+auto visiblyPushdownNPDAType2 = registration::TypeRegister < alib::Object, automaton::VisiblyPushdownNPDA < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/automaton/TA/DFTA.cpp b/alib2data/src/automaton/TA/DFTA.cpp
index 2c670f4c28..6c262c1532 100644
--- a/alib2data/src/automaton/TA/DFTA.cpp
+++ b/alib2data/src/automaton/TA/DFTA.cpp
@@ -8,11 +8,11 @@
 #include "DFTA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto DFTAParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::DFTA < > >();
-auto DFTAParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::DFTA < > >();
+auto DFTAType = registration::TypeRegister < automaton::Automaton, automaton::DFTA < > > ( );
+auto DFTAType2 = registration::TypeRegister < alib::Object, automaton::DFTA < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/automaton/TA/NFTA.cpp b/alib2data/src/automaton/TA/NFTA.cpp
index 813cb3491c..253c1c7331 100644
--- a/alib2data/src/automaton/TA/NFTA.cpp
+++ b/alib2data/src/automaton/TA/NFTA.cpp
@@ -8,11 +8,11 @@
 #include "NFTA.h"
 #include "../Automaton.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto NFTAParserRegister = xmlApi < automaton::Automaton >::ParserRegister < automaton::NFTA < > > ( );
-auto NFTAParserRegister2 = xmlApi < alib::Object >::ParserRegister < automaton::NFTA < > > ( );
+auto NFTAType = registration::TypeRegister < automaton::Automaton, automaton::NFTA < > > ( );
+auto NFTAType2 = registration::TypeRegister < alib::Object, automaton::NFTA < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/automaton/TM/OneTapeDTM.cpp b/alib2data/src/automaton/TM/OneTapeDTM.cpp
index 482957cc9e..79c899276b 100644
--- a/alib2data/src/automaton/TM/OneTapeDTM.cpp
+++ b/alib2data/src/automaton/TM/OneTapeDTM.cpp
@@ -9,11 +9,11 @@
 
 #include <automaton/Automaton.h>
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto oneTapeDTMParserRegister = xmlApi<automaton::Automaton>::ParserRegister<automaton::OneTapeDTM<>>();
-auto oneTapeDTMParserRegister2 = xmlApi<alib::Object>::ParserRegister<automaton::OneTapeDTM<>>();
+auto oneTapeDTMType = registration::TypeRegister < automaton::Automaton, automaton::OneTapeDTM < > > ( );
+auto oneTapeDTMType2 = registration::TypeRegister < alib::Object, automaton::OneTapeDTM < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/grammar/ContextFree/CFG.cpp b/alib2data/src/grammar/ContextFree/CFG.cpp
index c862634920..3a4dce0d19 100644
--- a/alib2data/src/grammar/ContextFree/CFG.cpp
+++ b/alib2data/src/grammar/ContextFree/CFG.cpp
@@ -8,14 +8,14 @@
 #include "CFG.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto CFGParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::CFG < > > ( );
-auto CFGParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::CFG < > > ( );
+auto CFGType = registration::TypeRegister < grammar::Grammar, grammar::CFG < > > ( );
+auto CFGType2 = registration::TypeRegister < alib::Object, grammar::CFG < > > ( );
 
 auto CFGEpsilonFreeCFG = castApi::CastRegister < grammar::CFG < >, grammar::EpsilonFreeCFG < > > ( );
 auto CFGCastBinder = castApi::CastPoolStringBinder < grammar::CFG < > > ( grammar::CFG < >::getXmlTagName() );
diff --git a/alib2data/src/grammar/ContextFree/CNF.cpp b/alib2data/src/grammar/ContextFree/CNF.cpp
index 611d2d630c..ef42116d29 100644
--- a/alib2data/src/grammar/ContextFree/CNF.cpp
+++ b/alib2data/src/grammar/ContextFree/CNF.cpp
@@ -8,11 +8,11 @@
 #include "CNF.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto CNFParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::CNF < > > ( );
-auto CNFParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::CNF < > > ( );
+auto CNFType = registration::TypeRegister < grammar::Grammar, grammar::CNF < > > ( );
+auto CNFType2 = registration::TypeRegister < alib::Object, grammar::CNF < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
index 33ebc9b764..3a55d65bcd 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
@@ -8,11 +8,11 @@
 #include "EpsilonFreeCFG.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto EpsilonFreeCFGParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::EpsilonFreeCFG < > > ( );
-auto EpsilonFreeCFGParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::EpsilonFreeCFG < > > ( );
+auto EpsilonFreeCFGType = registration::TypeRegister < grammar::Grammar, grammar::EpsilonFreeCFG < > > ( );
+auto EpsilonFreeCFGType2 = registration::TypeRegister < alib::Object, grammar::EpsilonFreeCFG < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/grammar/ContextFree/GNF.cpp b/alib2data/src/grammar/ContextFree/GNF.cpp
index 2c2884abef..145c445ebf 100644
--- a/alib2data/src/grammar/ContextFree/GNF.cpp
+++ b/alib2data/src/grammar/ContextFree/GNF.cpp
@@ -8,11 +8,11 @@
 #include "GNF.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto GNFParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::GNF < > > ( );
-auto GNFParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::GNF < > > ( );
+auto GNFType = registration::TypeRegister < grammar::Grammar, grammar::GNF < > > ( );
+auto GNFType2 = registration::TypeRegister < alib::Object, grammar::GNF < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/grammar/ContextFree/LG.cpp b/alib2data/src/grammar/ContextFree/LG.cpp
index 3cc651951a..2dccbd20fb 100644
--- a/alib2data/src/grammar/ContextFree/LG.cpp
+++ b/alib2data/src/grammar/ContextFree/LG.cpp
@@ -8,11 +8,11 @@
 #include "LG.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto LGParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::LG < > > ( );
-auto LGParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::LG < > > ( );
+auto LGType = registration::TypeRegister < grammar::Grammar, grammar::LG < > > ( );
+auto LGType2 = registration::TypeRegister < alib::Object, grammar::LG < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/grammar/ContextSensitive/CSG.cpp b/alib2data/src/grammar/ContextSensitive/CSG.cpp
index 572c415853..2d00cd7b37 100644
--- a/alib2data/src/grammar/ContextSensitive/CSG.cpp
+++ b/alib2data/src/grammar/ContextSensitive/CSG.cpp
@@ -8,11 +8,11 @@
 #include "CSG.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto CSGParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::CSG < > > ( );
-auto CSGParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::CSG < > > ( );
+auto CSGType = registration::TypeRegister < grammar::Grammar, grammar::CSG < > > ( );
+auto CSGType2 = registration::TypeRegister < alib::Object, grammar::CSG < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp
index 881fc4cff7..8635fed192 100644
--- a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp
+++ b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp
@@ -8,11 +8,11 @@
 #include "NonContractingGrammar.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto nonContractingGrammarParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::NonContractingGrammar < > > ( );
-auto nonContractingGrammarParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::NonContractingGrammar < > > ( );
+auto nonContractingGrammarType = registration::TypeRegister < grammar::Grammar, grammar::NonContractingGrammar < > > ( );
+auto nonContractingGrammarType2 = registration::TypeRegister < alib::Object, grammar::NonContractingGrammar < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/grammar/Regular/LeftLG.cpp b/alib2data/src/grammar/Regular/LeftLG.cpp
index 9e707e9301..3565fd0756 100644
--- a/alib2data/src/grammar/Regular/LeftLG.cpp
+++ b/alib2data/src/grammar/Regular/LeftLG.cpp
@@ -8,11 +8,11 @@
 #include "LeftLG.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto LeftLGParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::LeftLG < > > ( );
-auto LeftLGParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::LeftLG < > > ( );
+auto LeftLGType = registration::TypeRegister < grammar::Grammar, grammar::LeftLG < > > ( );
+auto LeftLGType2 = registration::TypeRegister < alib::Object, grammar::LeftLG < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/grammar/Regular/LeftRG.cpp b/alib2data/src/grammar/Regular/LeftRG.cpp
index 1eff5bcac7..93674133c7 100644
--- a/alib2data/src/grammar/Regular/LeftRG.cpp
+++ b/alib2data/src/grammar/Regular/LeftRG.cpp
@@ -8,11 +8,11 @@
 #include "LeftRG.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto LeftRGParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::LeftRG < > > ( );
-auto LeftRGParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::LeftRG < > > ( );
+auto LeftRGType = registration::TypeRegister < grammar::Grammar, grammar::LeftRG < > > ( );
+auto LeftRGType2 = registration::TypeRegister < alib::Object, grammar::LeftRG < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/grammar/Regular/RightLG.cpp b/alib2data/src/grammar/Regular/RightLG.cpp
index 95ba0886a9..703ac95adc 100644
--- a/alib2data/src/grammar/Regular/RightLG.cpp
+++ b/alib2data/src/grammar/Regular/RightLG.cpp
@@ -8,11 +8,11 @@
 #include "RightLG.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto RightLGParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::RightLG < > > ( );
-auto RightLGParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::RightLG < > > ( );
+auto RightLGType = registration::TypeRegister < grammar::Grammar, grammar::RightLG < > > ( );
+auto RightLGType2 = registration::TypeRegister < alib::Object, grammar::RightLG < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/grammar/Regular/RightRG.cpp b/alib2data/src/grammar/Regular/RightRG.cpp
index 45884e7a25..1c4246e101 100644
--- a/alib2data/src/grammar/Regular/RightRG.cpp
+++ b/alib2data/src/grammar/Regular/RightRG.cpp
@@ -8,11 +8,11 @@
 #include "RightRG.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto RightRGParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::RightRG < > > ( );
-auto RightRGParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::RightRG < > > ( );
+auto RightRGType = registration::TypeRegister < grammar::Grammar, grammar::RightRG < > > ( );
+auto RightRGType2 = registration::TypeRegister < alib::Object, grammar::RightRG < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp
index 53e74b2e88..76481e532e 100644
--- a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp
+++ b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp
@@ -8,11 +8,11 @@
 #include "ContextPreservingUnrestrictedGrammar.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto ContextPreservingUnrestrictedGrammarParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::ContextPreservingUnrestrictedGrammar < > > ( );
-auto ContextPreservingUnrestrictedGrammarParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::ContextPreservingUnrestrictedGrammar < > > ( );
+auto ContextPreservingUnrestrictedGrammarType = registration::TypeRegister < grammar::Grammar, grammar::ContextPreservingUnrestrictedGrammar < > > ( );
+auto ContextPreservingUnrestrictedGrammarType2 = registration::TypeRegister < alib::Object, grammar::ContextPreservingUnrestrictedGrammar < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp
index 29c29a37f1..a4f8deb173 100644
--- a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp
+++ b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp
@@ -8,11 +8,11 @@
 #include "UnrestrictedGrammar.h"
 #include "../Grammar.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto UnrestrictedGrammarParserRegister = xmlApi < grammar::Grammar >::ParserRegister < grammar::UnrestrictedGrammar < > > ( );
-auto UnrestrictedGrammarParserRegister2 = xmlApi < alib::Object >::ParserRegister < grammar::UnrestrictedGrammar < > > ( );
+auto UnrestrictedGrammarType = registration::TypeRegister < grammar::Grammar, grammar::UnrestrictedGrammar < > > ( );
+auto UnrestrictedGrammarType2 = registration::TypeRegister < alib::Object, grammar::UnrestrictedGrammar < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.cpp b/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.cpp
index 1a9cd05af0..72166173b6 100644
--- a/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.cpp
+++ b/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.cpp
@@ -6,9 +6,10 @@
  */
 
 #include "CompressedBitParallelTreeIndex.h"
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto arbologyCompressedBitParallelIndexParserRegister = xmlApi < alib::Object >::ParserRegister < indexes::arbology::CompressedBitParallelTreeIndex < > > ( );
+auto arbologyCompressedBitParallelIndexType = registration::TypeRegister < alib::Object, indexes::arbology::CompressedBitParallelTreeIndex < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/indexes/arbology/FullAndLinearIndex.cpp b/alib2data/src/indexes/arbology/FullAndLinearIndex.cpp
index ec593e1bcc..2f57df5ae3 100644
--- a/alib2data/src/indexes/arbology/FullAndLinearIndex.cpp
+++ b/alib2data/src/indexes/arbology/FullAndLinearIndex.cpp
@@ -6,9 +6,10 @@
  */
 
 #include "FullAndLinearIndex.h"
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto arbologyFullAndLinearIndexParserRegister = xmlApi < alib::Object >::ParserRegister < indexes::arbology::FullAndLinearIndex < > > ( );
+auto arbologyFullAndLinearIndexType = registration::TypeRegister < alib::Object, indexes::arbology::FullAndLinearIndex < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/indexes/arbology/NonlinearFullAndLinearIndex.cpp b/alib2data/src/indexes/arbology/NonlinearFullAndLinearIndex.cpp
index 83aef508f4..3a7e8653bf 100644
--- a/alib2data/src/indexes/arbology/NonlinearFullAndLinearIndex.cpp
+++ b/alib2data/src/indexes/arbology/NonlinearFullAndLinearIndex.cpp
@@ -6,9 +6,10 @@
  */
 
 #include "NonlinearFullAndLinearIndex.h"
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto arbologyNonlinearFullAndLinearIndexParserRegister = xmlApi < alib::Object >::ParserRegister < indexes::arbology::NonlinearFullAndLinearIndex < > > ( );
+auto arbologyNonlinearFullAndLinearIndexType = registration::TypeRegister < alib::Object, indexes::arbology::NonlinearFullAndLinearIndex < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/indexes/stringology/BNDMMatcher.cpp b/alib2data/src/indexes/stringology/BNDMMatcher.cpp
index 091929d0e4..f5085ca019 100644
--- a/alib2data/src/indexes/stringology/BNDMMatcher.cpp
+++ b/alib2data/src/indexes/stringology/BNDMMatcher.cpp
@@ -6,9 +6,10 @@
  */
 
 #include "BNDMMatcher.h"
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto bndmMatcherParserRegister = xmlApi < alib::Object >::ParserRegister < indexes::stringology::BNDMMatcher < > > ( );
+auto bndmMatcherType = registration::TypeRegister < alib::Object, indexes::stringology::BNDMMatcher < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/indexes/stringology/BitParallelIndex.cpp b/alib2data/src/indexes/stringology/BitParallelIndex.cpp
index 150aa89b2d..3d251feca8 100644
--- a/alib2data/src/indexes/stringology/BitParallelIndex.cpp
+++ b/alib2data/src/indexes/stringology/BitParallelIndex.cpp
@@ -6,9 +6,10 @@
  */
 
 #include "BitParallelIndex.h"
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto bitParallelIndexParserRegister = xmlApi < alib::Object >::ParserRegister < indexes::stringology::BitParallelIndex < > > ( );
+auto bitParallelIndexType = registration::TypeRegister < alib::Object, indexes::stringology::BitParallelIndex < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/indexes/stringology/CompressedBitParallelIndex.cpp b/alib2data/src/indexes/stringology/CompressedBitParallelIndex.cpp
index c33b2e224c..78a68de240 100644
--- a/alib2data/src/indexes/stringology/CompressedBitParallelIndex.cpp
+++ b/alib2data/src/indexes/stringology/CompressedBitParallelIndex.cpp
@@ -6,9 +6,10 @@
  */
 
 #include "CompressedBitParallelIndex.h"
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto compressedBitParallelIndexParserRegister = xmlApi < alib::Object >::ParserRegister < indexes::stringology::CompressedBitParallelIndex < > > ( );
+auto compressedBitParallelIndexType = registration::TypeRegister < alib::Object, indexes::stringology::CompressedBitParallelIndex < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/indexes/stringology/PositionHeap.cpp b/alib2data/src/indexes/stringology/PositionHeap.cpp
index 0b973aca0a..fd86a59a6b 100644
--- a/alib2data/src/indexes/stringology/PositionHeap.cpp
+++ b/alib2data/src/indexes/stringology/PositionHeap.cpp
@@ -6,9 +6,10 @@
  */
 
 #include "PositionHeap.h"
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto positionHeapParserRegister = xmlApi < alib::Object >::ParserRegister < indexes::stringology::PositionHeap < > > ( );
+auto positionHeapType = registration::TypeRegister < alib::Object, indexes::stringology::PositionHeap < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/indexes/stringology/SuffixArray.cpp b/alib2data/src/indexes/stringology/SuffixArray.cpp
index 6da125bfb0..d2013865d1 100644
--- a/alib2data/src/indexes/stringology/SuffixArray.cpp
+++ b/alib2data/src/indexes/stringology/SuffixArray.cpp
@@ -6,9 +6,10 @@
  */
 
 #include "SuffixArray.h"
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto suffixArrayParserRegister = xmlApi < alib::Object >::ParserRegister < indexes::stringology::SuffixArray < > > ( );
+auto suffixArrayType = registration::TypeRegister < alib::Object, indexes::stringology::SuffixArray < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/indexes/stringology/SuffixTrie.cpp b/alib2data/src/indexes/stringology/SuffixTrie.cpp
index 16dea4cef0..be93ae7a17 100644
--- a/alib2data/src/indexes/stringology/SuffixTrie.cpp
+++ b/alib2data/src/indexes/stringology/SuffixTrie.cpp
@@ -6,9 +6,10 @@
  */
 
 #include "SuffixTrie.h"
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto suffixTrieParserRegister = xmlApi < alib::Object >::ParserRegister < indexes::stringology::SuffixTrie < > > ( );
+auto suffixTrieType = registration::TypeRegister < alib::Object, indexes::stringology::SuffixTrie < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/label/FailStateLabel.cpp b/alib2data/src/label/FailStateLabel.cpp
index b68fa76dc0..78af83e895 100644
--- a/alib2data/src/label/FailStateLabel.cpp
+++ b/alib2data/src/label/FailStateLabel.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Label.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueLabel.h"
 
 namespace label {
@@ -57,7 +57,7 @@ LabelBase* FailStateLabel::inc() && {
 
 namespace alib {
 
-auto failStateLabelParserRegister = xmlApi<label::Label>::ParserRegister<label::FailStateLabel>();
-auto failStateLabelParserRegister2 = xmlApi<alib::Object>::ParserRegister<label::FailStateLabel>();
+auto failStateLabelType = registration::TypeRegister < label::Label, label::FailStateLabel > ( );
+auto failStateLabelType2 = registration::TypeRegister < alib::Object, label::FailStateLabel > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/label/FinalStateLabel.cpp b/alib2data/src/label/FinalStateLabel.cpp
index 69b6a35f39..7397f2ff34 100644
--- a/alib2data/src/label/FinalStateLabel.cpp
+++ b/alib2data/src/label/FinalStateLabel.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Label.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueLabel.h"
 
 namespace label {
@@ -57,7 +57,7 @@ LabelBase* FinalStateLabel::inc() && {
 
 namespace alib {
 
-auto finalStateLabelParserRegister = xmlApi<label::Label>::ParserRegister<label::FinalStateLabel>();
-auto finalStateLabelParserRegister2 = xmlApi<alib::Object>::ParserRegister<label::FinalStateLabel>();
+auto finalStateLabelType = registration::TypeRegister < label::Label, label::FinalStateLabel > ( );
+auto finalStateLabelType2 = registration::TypeRegister < alib::Object, label::FinalStateLabel > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/label/HexavigesimalLabel.cpp b/alib2data/src/label/HexavigesimalLabel.cpp
index 106cce5d7a..560afce384 100644
--- a/alib2data/src/label/HexavigesimalLabel.cpp
+++ b/alib2data/src/label/HexavigesimalLabel.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Label.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace label {
 
@@ -67,7 +67,7 @@ LabelBase* HexavigesimalLabel::inc() && {
 
 namespace alib {
 
-auto hexavigesimalLabelParserRegister = xmlApi<label::Label>::ParserRegister<label::HexavigesimalLabel>();
-auto hexavigesimalLabelParserRegister2 = xmlApi<alib::Object>::ParserRegister<label::HexavigesimalLabel>();
+auto hexavigesimalLabelType = registration::TypeRegister < label::Label, label::HexavigesimalLabel > ( );
+auto hexavigesimalLabelType2 = registration::TypeRegister < alib::Object, label::HexavigesimalLabel > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/label/InitialStateLabel.cpp b/alib2data/src/label/InitialStateLabel.cpp
index 3e668edd0d..2c529dcb83 100644
--- a/alib2data/src/label/InitialStateLabel.cpp
+++ b/alib2data/src/label/InitialStateLabel.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Label.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueLabel.h"
 
 namespace label {
@@ -57,7 +57,7 @@ LabelBase* InitialStateLabel::inc() && {
 
 namespace alib {
 
-auto initialStateLabelParserRegister = xmlApi<label::Label>::ParserRegister<label::InitialStateLabel>();
-auto initialStateLabelParserRegister2 = xmlApi<alib::Object>::ParserRegister<label::InitialStateLabel>();
+auto initialStateLabelType = registration::TypeRegister < label::Label, label::InitialStateLabel > ( );
+auto initialStateLabelType2 = registration::TypeRegister < alib::Object, label::InitialStateLabel > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/label/ObjectLabel.cpp b/alib2data/src/label/ObjectLabel.cpp
index 67de15198d..88dbeebf49 100644
--- a/alib2data/src/label/ObjectLabel.cpp
+++ b/alib2data/src/label/ObjectLabel.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Label.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueLabel.h"
 
 namespace label {
@@ -63,7 +63,7 @@ LabelBase* ObjectLabel::inc() && {
 
 namespace alib {
 
-auto objectLabelParserRegister = xmlApi<label::Label>::ParserRegister<label::ObjectLabel>();
-auto objectLabelParserRegister2 = xmlApi<alib::Object>::ParserRegister<label::ObjectLabel>();
+auto objectLabelType = registration::TypeRegister < label::Label, label::ObjectLabel > ( );
+auto objectLabelType2 = registration::TypeRegister < alib::Object, label::ObjectLabel > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/label/PrimitiveLabel.cpp b/alib2data/src/label/PrimitiveLabel.cpp
index 281e544ee1..1a4efa6969 100644
--- a/alib2data/src/label/PrimitiveLabel.cpp
+++ b/alib2data/src/label/PrimitiveLabel.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Label.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include "UniqueLabel.h"
 
 namespace label {
@@ -68,7 +68,7 @@ LabelBase* PrimitiveLabel::inc() && {
 
 namespace alib {
 
-auto primitiveLabelParserRegister = xmlApi<label::Label>::ParserRegister<label::PrimitiveLabel>();
-auto primitiveLabelParserRegister2 = xmlApi<alib::Object>::ParserRegister<label::PrimitiveLabel>();
+auto primitiveLabelType = registration::TypeRegister < label::Label, label::PrimitiveLabel > ( );
+auto primitiveLabelType2 = registration::TypeRegister < alib::Object, label::PrimitiveLabel > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/label/UniqueLabel.cpp b/alib2data/src/label/UniqueLabel.cpp
index 6839764cb7..a2f63ed8f1 100644
--- a/alib2data/src/label/UniqueLabel.cpp
+++ b/alib2data/src/label/UniqueLabel.cpp
@@ -10,7 +10,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include "Label.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace label {
 
@@ -85,7 +85,7 @@ LabelBase* UniqueLabel::inc() && {
 
 namespace alib {
 
-auto uniqueLabelParserRegister = xmlApi<label::Label>::ParserRegister<label::UniqueLabel>();
-auto uniqueLabelParserRegister2 = xmlApi<alib::Object>::ParserRegister<label::UniqueLabel>();
+auto uniqueLabelType = registration::TypeRegister < label::Label, label::UniqueLabel > ( );
+auto uniqueLabelType2 = registration::TypeRegister < alib::Object, label::UniqueLabel > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/regexp/formal/FormalRegExp.cpp b/alib2data/src/regexp/formal/FormalRegExp.cpp
index 7a64ab1482..94a7e8b51e 100644
--- a/alib2data/src/regexp/formal/FormalRegExp.cpp
+++ b/alib2data/src/regexp/formal/FormalRegExp.cpp
@@ -8,14 +8,14 @@
 #include "FormalRegExp.h"
 #include "../RegExp.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto formalRegExpParserRegister = xmlApi < regexp::RegExp >::ParserRegister < regexp::FormalRegExp < > > ( );
-auto formalRegExpParserRegister2 = xmlApi < alib::Object >::ParserRegister < regexp::FormalRegExp < > > ( );
+auto formalRegExpType = registration::TypeRegister < regexp::RegExp, regexp::FormalRegExp < > > ( );
+auto formalRegExpType2 = registration::TypeRegister < alib::Object, regexp::FormalRegExp < > > ( );
 
 auto FormalRegExpFromUnboundedRegExp = castApi::CastRegister < regexp::FormalRegExp < >, regexp::UnboundedRegExp < > > ( );
 auto FormalRegExpCastBinder = castApi::CastPoolStringBinder < regexp::FormalRegExp < > > ( regexp::FormalRegExp < >::getXmlTagName() );
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExp.cpp b/alib2data/src/regexp/unbounded/UnboundedRegExp.cpp
index afe48d961a..2cc259f294 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExp.cpp
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExp.cpp
@@ -8,13 +8,13 @@
 #include "UnboundedRegExp.h"
 #include "../RegExp.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto unboundedRegExpParserRegister = xmlApi < regexp::RegExp >::ParserRegister < regexp::UnboundedRegExp < > > ( );
-auto unboundedRegExpParserRegister2 = xmlApi < alib::Object >::ParserRegister < regexp::UnboundedRegExp < > > ( );
+auto unboundedRegExpType = registration::TypeRegister < regexp::RegExp, regexp::UnboundedRegExp < > > ( );
+auto unboundedRegExpType2 = registration::TypeRegister < alib::Object, regexp::UnboundedRegExp < > > ( );
 
 auto UnboundedRegExpFromFormalRegExp = castApi::CastRegister < regexp::UnboundedRegExp < >, regexp::FormalRegExp < > > ( );
 auto UnboundedRegExpCastBinder = castApi::CastPoolStringBinder < regexp::UnboundedRegExp < > > ( regexp::UnboundedRegExp < >::getXmlTagName() );
diff --git a/alib2data/src/rte/formal/FormalRTE.cpp b/alib2data/src/rte/formal/FormalRTE.cpp
index 3ddb5f98f4..879420b1b7 100644
--- a/alib2data/src/rte/formal/FormalRTE.cpp
+++ b/alib2data/src/rte/formal/FormalRTE.cpp
@@ -7,14 +7,14 @@
 
 #include "FormalRTE.h"
 #include "../RTE.h"
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 #include <object/Object.h>
 
 namespace alib {
 
-auto formalRTEParserRegister = xmlApi < rte::RTE >::ParserRegister < rte::FormalRTE < > > ( );
-auto formalRTEParserRegister2 = xmlApi < alib::Object >::ParserRegister < rte::FormalRTE < > > ( );
+auto formalRTEType = registration::TypeRegister < rte::RTE, rte::FormalRTE < > > ( );
+auto formalRTEType2 = registration::TypeRegister < alib::Object, rte::FormalRTE < > > ( );
 
 auto FormalRTECastBinder = castApi::CastPoolStringBinder < rte::FormalRTE < > > ( rte::FormalRTE < >::getXmlTagName ( ) );
 
diff --git a/alib2data/src/string/CyclicString.cpp b/alib2data/src/string/CyclicString.cpp
index 5e74b56505..701efc9a1f 100644
--- a/alib2data/src/string/CyclicString.cpp
+++ b/alib2data/src/string/CyclicString.cpp
@@ -8,13 +8,13 @@
 #include "CyclicString.h"
 #include "String.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto cyclicStringParserRegister = xmlApi<string::String>::ParserRegister<string::CyclicString < > >();
-auto cyclicStringParserRegister2 = xmlApi<alib::Object>::ParserRegister<string::CyclicString < > >();
+auto cyclicStringType = registration::TypeRegister < string::String, string::CyclicString < > > ();
+auto cyclicStringType2 = registration::TypeRegister < alib::Object, string::CyclicString < > > ();
 
 auto CyclicStringFromEpsilon = castApi::CastRegister<string::CyclicString < >, string::Epsilon < > >();
 auto CyclicStringCastBinder = castApi::CastPoolStringBinder<string::CyclicString < > >(string::CyclicString < >::getXmlTagName());
diff --git a/alib2data/src/string/Epsilon.cpp b/alib2data/src/string/Epsilon.cpp
index 74122568d3..3defbc43d1 100644
--- a/alib2data/src/string/Epsilon.cpp
+++ b/alib2data/src/string/Epsilon.cpp
@@ -9,11 +9,11 @@
 
 #include "String.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 
 namespace alib {
 
-auto epsilonParserRegister = xmlApi<string::String>::ParserRegister<string::Epsilon < > >();
-auto epsilonParserRegister2 = xmlApi<alib::Object>::ParserRegister<string::Epsilon < > >();
+auto epsilonType = registration::TypeRegister < string::String, string::Epsilon < > > ();
+auto epsilonType2 = registration::TypeRegister < alib::Object, string::Epsilon < > > ();
 
 } /* namespace alib */
diff --git a/alib2data/src/string/LinearString.cpp b/alib2data/src/string/LinearString.cpp
index 843aae4867..f5ef9ab65c 100644
--- a/alib2data/src/string/LinearString.cpp
+++ b/alib2data/src/string/LinearString.cpp
@@ -9,13 +9,13 @@
 
 #include "String.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto linearStringParserRegister = xmlApi < string::String >::ParserRegister < string::LinearString < > > ();
-auto linearStringParserRegister2 = xmlApi < alib::Object >::ParserRegister < string::LinearString < > > ();
+auto linearStringType = registration::TypeRegister < string::String, string::LinearString < > > ( );
+auto linearStringType2 = registration::TypeRegister < alib::Object, string::LinearString < > > ( );
 
 auto LinearStringFromEpsilon = castApi::CastRegister < string::LinearString < >, string::Epsilon < > > ( );
 auto LinearStringFromPrefixBarTree = castApi::CastRegister < string::LinearString < >, tree::PrefixBarTree < > > ( );
diff --git a/alib2data/src/tree/ranked/PostfixRankedTree.cpp b/alib2data/src/tree/ranked/PostfixRankedTree.cpp
index 37559b0ea1..c9f608d7a7 100644
--- a/alib2data/src/tree/ranked/PostfixRankedTree.cpp
+++ b/alib2data/src/tree/ranked/PostfixRankedTree.cpp
@@ -9,14 +9,14 @@
 #include "../Tree.h"
 #include "../RankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto postfixRankedTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PostfixRankedTree < > > ( );
-auto postfixRankedTreeParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PostfixRankedTree < > > ( );
-auto postfixRankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PostfixRankedTree < > > ( );
+auto postfixRankedTreeType = registration::TypeRegister < ::tree::Tree, ::tree::PostfixRankedTree < > > ( );
+auto postfixRankedTreeType2 = registration::TypeRegister < ::tree::RankedTreeWrapper, ::tree::PostfixRankedTree < > > ( );
+auto postfixRankedTreeType3 = registration::TypeRegister < alib::Object, ::tree::PostfixRankedTree < > > ( );
 
 auto PostfixRankedTreeFromRankedTree = castApi::CastRegister < ::tree::PostfixRankedTree < >, ::tree::RankedTree < > > ( );
 auto PostfixRankedTreeCastBinder = castApi::CastPoolStringBinder < ::tree::PostfixRankedTree < > > ( ::tree::PostfixRankedTree < >::getXmlTagName ( ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
index eb0ff1e9d4..2eb97c178b 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
@@ -9,14 +9,14 @@
 #include "../Tree.h"
 #include "../RankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto prefixRankedBarNonlinearPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedBarNonlinearPattern < > > ( );
-auto prefixRankedBarNonlinearPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedBarNonlinearPattern < > > ( );
-auto prefixRankedBarNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedBarNonlinearPattern < > > ( );
+auto prefixRankedBarNonlinearPatternType = registration::TypeRegister < ::tree::Tree, ::tree::PrefixRankedBarNonlinearPattern < > > ( );
+auto prefixRankedBarNonlinearPatternType2 = registration::TypeRegister < ::tree::RankedTreeWrapper, ::tree::PrefixRankedBarNonlinearPattern < > > ( );
+auto prefixRankedBarNonlinearPatternType3 = registration::TypeRegister < alib::Object, ::tree::PrefixRankedBarNonlinearPattern < > > ( );
 
 auto PrefixRankedBarNonlinearPatternFromRankedTree = castApi::CastRegister < ::tree::PrefixRankedBarNonlinearPattern < >, ::tree::RankedTree < > > ( );
 auto PrefixRankedBarNonlinearPatternFromRankedPattern = castApi::CastRegister < ::tree::PrefixRankedBarNonlinearPattern < >, ::tree::RankedPattern < > > ( );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
index 9c70251b31..02709d7a91 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
@@ -9,14 +9,14 @@
 #include "../Tree.h"
 #include "../RankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto prefixRankedBarPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedBarPattern < > > ();
-auto prefixRankedBarPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedBarPattern < > > ();
-auto prefixRankedBarPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedBarPattern < > > ();
+auto prefixRankedBarPatternType = registration::TypeRegister < ::tree::Tree, ::tree::PrefixRankedBarPattern < > > ( );
+auto prefixRankedBarPatternType2 = registration::TypeRegister < ::tree::RankedTreeWrapper, ::tree::PrefixRankedBarPattern < > > ( );
+auto prefixRankedBarPatternType3 = registration::TypeRegister < alib::Object, ::tree::PrefixRankedBarPattern < > > ( );
 
 auto PrefixRankedBarPatternFromRankedPattern = castApi::CastRegister < ::tree::PrefixRankedBarPattern < >, ::tree::RankedPattern < > > ( );
 auto PrefixRankedBarPatternFromPrefixRankedBarTree = castApi::CastRegister < ::tree::PrefixRankedBarPattern < >, ::tree::PrefixRankedBarTree < > > ( );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
index 2f7916cd46..ca194a4270 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
@@ -9,14 +9,14 @@
 #include "../Tree.h"
 #include "../RankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto prefixRankedBarTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedBarTree < > > ();
-auto prefixRankedBarTreeParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedBarTree < > > ();
-auto prefixRankedBarTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedBarTree < > > ();
+auto prefixRankedBarTreeType = registration::TypeRegister < ::tree::Tree, ::tree::PrefixRankedBarTree < > > ( );
+auto prefixRankedBarTreeType2 = registration::TypeRegister < ::tree::RankedTreeWrapper, ::tree::PrefixRankedBarTree < > > ( );
+auto prefixRankedBarTreeType3 = registration::TypeRegister < alib::Object, ::tree::PrefixRankedBarTree < > > ( );
 
 auto PrefixRankedBarTreeFromRankedTree = castApi::CastRegister < ::tree::PrefixRankedBarTree < >, ::tree::RankedTree < > > ( );
 auto PrefixRankedBarTreeCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedBarTree < > > ( ::tree::PrefixRankedBarTree < >::getXmlTagName() );
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
index b5caaf11bb..b4b2ef800f 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
@@ -9,14 +9,14 @@
 #include "../Tree.h"
 #include "../RankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto prefixRankedNonlinearPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedNonlinearPattern < > > ( );
-auto prefixRankedNonlinearPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedNonlinearPattern < > > ( );
-auto prefixRankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedNonlinearPattern < > > ( );
+auto prefixRankedNonlinearPatternType = registration::TypeRegister < ::tree::Tree, ::tree::PrefixRankedNonlinearPattern < > > ( );
+auto prefixRankedNonlinearPatternType2 = registration::TypeRegister < ::tree::RankedTreeWrapper, ::tree::PrefixRankedNonlinearPattern < > > ( );
+auto prefixRankedNonlinearPatternType3 = registration::TypeRegister < alib::Object, ::tree::PrefixRankedNonlinearPattern < > > ( );
 
 auto PrefixRankedNonlinearPatternFromRankedTree = castApi::CastRegister < ::tree::PrefixRankedNonlinearPattern < >, ::tree::RankedTree < > > ( );
 auto PrefixRankedNonlinearPatternFromRankedPattern = castApi::CastRegister < ::tree::PrefixRankedNonlinearPattern < >, ::tree::RankedPattern < > > ( );
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
index e9d0ef70dd..f1a913c09b 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
@@ -9,14 +9,14 @@
 #include "../Tree.h"
 #include "../RankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto prefixRankedPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedPattern < > > ();
-auto prefixRankedPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedPattern < > > ();
-auto prefixRankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedPattern < > > ();
+auto prefixRankedPatternType = registration::TypeRegister < ::tree::Tree, ::tree::PrefixRankedPattern < > > ( );
+auto prefixRankedPatternType2 = registration::TypeRegister < ::tree::RankedTreeWrapper, ::tree::PrefixRankedPattern < > > ( );
+auto prefixRankedPatternType3 = registration::TypeRegister < alib::Object, ::tree::PrefixRankedPattern < > > ( );
 
 auto PrefixRankedPatternFromRankedPattern = castApi::CastRegister < ::tree::PrefixRankedPattern < >, ::tree::RankedPattern < > > ( );
 auto PrefixRankedPatternFromPrefixRankedTree = castApi::CastRegister < ::tree::PrefixRankedPattern < >, ::tree::PrefixRankedTree < > > ( );
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.cpp b/alib2data/src/tree/ranked/PrefixRankedTree.cpp
index a5d2ba61bb..2baa29fe68 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.cpp
@@ -9,14 +9,14 @@
 #include "../Tree.h"
 #include "../RankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto prefixRankedTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedTree < > > ();
-auto prefixRankedTreeParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedTree < > > ();
-auto prefixRankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedTree < > > ();
+auto prefixRankedTreeType = registration::TypeRegister < ::tree::Tree, ::tree::PrefixRankedTree < > > ( );
+auto prefixRankedTreeType2 = registration::TypeRegister < ::tree::RankedTreeWrapper, ::tree::PrefixRankedTree < > > ( );
+auto prefixRankedTreeType3 = registration::TypeRegister < alib::Object, ::tree::PrefixRankedTree < > > ( );
 
 auto PrefixRankedTreeFromRankedTree = castApi::CastRegister < ::tree::PrefixRankedTree < > , ::tree::RankedTree < > > ( );
 auto PrefixRankedTreeCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedTree < > > ( ::tree::PrefixRankedTree < >::getXmlTagName() );
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
index 8295592ef4..ba11e59d4c 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
@@ -9,13 +9,13 @@
 #include "../Tree.h"
 #include "../RankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto RankedNonlinearPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::RankedNonlinearPattern < > > ( );
-auto RankedNonlinearPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::RankedNonlinearPattern < > > ( );
-auto RankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::RankedNonlinearPattern < > > ( );
+auto RankedNonlinearPatternType = registration::TypeRegister < ::tree::Tree, ::tree::RankedNonlinearPattern < > > ( );
+auto RankedNonlinearPatternType2 = registration::TypeRegister < ::tree::RankedTreeWrapper, ::tree::RankedNonlinearPattern < > > ( );
+auto RankedNonlinearPatternType3 = registration::TypeRegister < alib::Object, ::tree::RankedNonlinearPattern < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/RankedPattern.cpp b/alib2data/src/tree/ranked/RankedPattern.cpp
index bc0f2b82f2..6b616e5365 100644
--- a/alib2data/src/tree/ranked/RankedPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedPattern.cpp
@@ -9,14 +9,14 @@
 #include "../Tree.h"
 #include "../RankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto rankedPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::RankedPattern < > > ();
-auto rankedPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::RankedPattern < > > ();
-auto rankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::RankedPattern < > > ();
+auto rankedPatternType = registration::TypeRegister < ::tree::Tree, ::tree::RankedPattern < > > ( );
+auto rankedPatternType2 = registration::TypeRegister < ::tree::RankedTreeWrapper, ::tree::RankedPattern < > > ( );
+auto rankedPatternType3 = registration::TypeRegister < alib::Object, ::tree::RankedPattern < > > ( );
 
 auto RankedPatternFromUnrankedPattern = castApi::CastRegister < ::tree::RankedPattern < >, ::tree::UnrankedPattern < > > ( );
 auto RankedPatternCastBinder = castApi::CastPoolStringBinder < ::tree::RankedPattern < > > ( ::tree::RankedPattern < >::getXmlTagName() );
diff --git a/alib2data/src/tree/ranked/RankedTree.cpp b/alib2data/src/tree/ranked/RankedTree.cpp
index 2da2063c6d..7898070f5a 100644
--- a/alib2data/src/tree/ranked/RankedTree.cpp
+++ b/alib2data/src/tree/ranked/RankedTree.cpp
@@ -9,14 +9,14 @@
 #include "../Tree.h"
 #include "../RankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto rankedTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::RankedTree < > > ();
-auto rankedTreeParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::RankedTree < > > ();
-auto rankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::RankedTree < > > ();
+auto rankedTreeType = registration::TypeRegister < ::tree::Tree, ::tree::RankedTree < > > ( );
+auto rankedTreeType2 = registration::TypeRegister < ::tree::RankedTreeWrapper, ::tree::RankedTree < > > ( );
+auto rankedTreeType3 = registration::TypeRegister < alib::Object, ::tree::RankedTree < > > ( );
 
 auto RankedTreeFromUnrankedTree = castApi::CastRegister < ::tree::RankedTree < >, ::tree::UnrankedTree < > > ( );
 auto RankedTreeFromPostfixRankedTree = castApi::CastRegister < ::tree::RankedTree < >, ::tree::PostfixRankedTree < > > ( );
diff --git a/alib2data/src/tree/unranked/PrefixBarTree.cpp b/alib2data/src/tree/unranked/PrefixBarTree.cpp
index 83a9f82f8b..9d4eb3b812 100644
--- a/alib2data/src/tree/unranked/PrefixBarTree.cpp
+++ b/alib2data/src/tree/unranked/PrefixBarTree.cpp
@@ -9,14 +9,14 @@
 #include "../Tree.h"
 #include "../UnrankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto prefixBarTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixBarTree < > > ( );
-auto prefixBarTreeParserRegister2 = xmlApi < tree::UnrankedTreeWrapper >::ParserRegister < tree::PrefixBarTree < > > ( );
-auto prefixBarTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixBarTree < > > ( );
+auto prefixBarTreeType = registration::TypeRegister < tree::Tree, tree::PrefixBarTree < > > ( );
+auto prefixBarTreeType2 = registration::TypeRegister < tree::UnrankedTreeWrapper, tree::PrefixBarTree < > > ( );
+auto prefixBarTreeType3 = registration::TypeRegister < alib::Object, tree::PrefixBarTree < > > ( );
 
 auto PrefixBarTreeFromUnrankedTree = castApi::CastRegister < tree::PrefixBarTree < > , tree::UnrankedTree < > > ( );
 auto PrefixBarTreeCastBinder = castApi::CastPoolStringBinder < tree::PrefixBarTree < > > ( tree::PrefixBarTree < >::getXmlTagName() );
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
index 8a5a88a346..7aa205bae6 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
@@ -9,13 +9,13 @@
 #include "../Tree.h"
 #include "../UnrankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto UnrankedNonlinearPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::UnrankedNonlinearPattern < > > ( );
-auto UnrankedNonlinearPatternParserRegister2 = xmlApi < ::tree::UnrankedTreeWrapper >::ParserRegister < ::tree::UnrankedNonlinearPattern < > > ( );
-auto UnrankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::UnrankedNonlinearPattern < > > ( );
+auto UnrankedNonlinearPatternType = registration::TypeRegister < ::tree::Tree, ::tree::UnrankedNonlinearPattern < > > ( );
+auto UnrankedNonlinearPatternType2 = registration::TypeRegister < ::tree::UnrankedTreeWrapper, ::tree::UnrankedNonlinearPattern < > > ( );
+auto UnrankedNonlinearPatternType3 = registration::TypeRegister < alib::Object, ::tree::UnrankedNonlinearPattern < > > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.cpp b/alib2data/src/tree/unranked/UnrankedPattern.cpp
index 4dd19bca35..a6d32a2915 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedPattern.cpp
@@ -9,14 +9,14 @@
 #include "../Tree.h"
 #include "../UnrankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto unrankedPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::UnrankedPattern < > > ( );
-auto unrankedPatternParserRegister2 = xmlApi < ::tree::UnrankedTreeWrapper >::ParserRegister < ::tree::UnrankedPattern < > > ( );
-auto unrankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::UnrankedPattern < > > ( );
+auto unrankedPatternType = registration::TypeRegister < ::tree::Tree, ::tree::UnrankedPattern < > > ( );
+auto unrankedPatternType2 = registration::TypeRegister < ::tree::UnrankedTreeWrapper, ::tree::UnrankedPattern < > > ( );
+auto unrankedPatternType3 = registration::TypeRegister < alib::Object, ::tree::UnrankedPattern < > > ( );
 
 auto UnrankedPatternFromRankedPattern = castApi::CastRegister < ::tree::UnrankedPattern < >, ::tree::RankedPattern < > > ( );
 auto UnrankedPatternCastBinder = castApi::CastPoolStringBinder < ::tree::UnrankedPattern < > > ( ::tree::UnrankedPattern < >::getXmlTagName() );
diff --git a/alib2data/src/tree/unranked/UnrankedTree.cpp b/alib2data/src/tree/unranked/UnrankedTree.cpp
index e01aee4d89..ae2172109a 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.cpp
+++ b/alib2data/src/tree/unranked/UnrankedTree.cpp
@@ -9,14 +9,14 @@
 #include "../Tree.h"
 #include "../UnrankedTreeWrapper.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 
 namespace alib {
 
-auto unrankedTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::UnrankedTree < > > ( );
-auto unrankedTreeParserRegister2 = xmlApi < ::tree::UnrankedTreeWrapper >::ParserRegister < ::tree::UnrankedTree < > > ( );
-auto unrankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::UnrankedTree < > > ( );
+auto unrankedTreeType = registration::TypeRegister < ::tree::Tree, ::tree::UnrankedTree < > > ( );
+auto unrankedTreeType2 = registration::TypeRegister < ::tree::UnrankedTreeWrapper, ::tree::UnrankedTree < > > ( );
+auto unrankedTreeType3 = registration::TypeRegister < alib::Object, ::tree::UnrankedTree < > > ( );
 
 auto UnrankedTreeFromRankedTree = castApi::CastRegister < ::tree::UnrankedTree < >, ::tree::RankedTree < > > ( );
 auto UnrankedTreeCastBinder = castApi::CastPoolStringBinder < ::tree::UnrankedTree < > > ( ::tree::UnrankedTree < >::getXmlTagName() );
diff --git a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp
index 9c386470ee..c1d319631a 100644
--- a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp
@@ -11,7 +11,7 @@
 #include <compare>
 
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include "../common/GraphFromXMLParser.h"
@@ -326,7 +326,7 @@ alib::ObjectBase* AdjacencyListDirectedGraph::inc() && {
 
 namespace alib {
 
-auto adjListDirGraphParserRegister  = xmlApi<graph::Graph>::ParserRegister<graph::AdjacencyListDirectedGraph>();
-auto adjListDirGraphParserRegister2 = xmlApi<alib::Object>::ParserRegister<graph::AdjacencyListDirectedGraph>();
+auto adjListDirGraphType  = registration::TypeRegister < graph::Graph, graph::AdjacencyListDirectedGraph > ();
+auto adjListDirGraphType2 = registration::TypeRegister < alib::Object, graph::AdjacencyListDirectedGraph > ();
 
 } /* namespace alib */
diff --git a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp
index 6caf427762..8daefd71f1 100644
--- a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp
@@ -11,7 +11,7 @@
 #include <compare>
 
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include "../common/GraphFromXMLParser.h"
@@ -327,7 +327,7 @@ alib::ObjectBase* AdjacencyMatrixDirectedGraph::inc() && {
 
 namespace alib {
 
-auto adjMatDirGraphParserRegister  = xmlApi<graph::Graph>::ParserRegister<graph::AdjacencyMatrixDirectedGraph>();
-auto adjMatDirGraphParserRegister2 = xmlApi<alib::Object>::ParserRegister<graph::AdjacencyMatrixDirectedGraph>();
+auto adjMatDirGraphType  = registration::TypeRegister < graph::Graph, graph::AdjacencyMatrixDirectedGraph > ();
+auto adjMatDirGraphType2 = registration::TypeRegister < alib::Object, graph::AdjacencyMatrixDirectedGraph > ();
 
 } /* namespace alib */
diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp
index a135a4c31e..3c6b29c827 100644
--- a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp
@@ -11,7 +11,7 @@
 #include <compare>
 
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include "../common/GraphFromXMLParser.h"
@@ -256,7 +256,7 @@ alib::ObjectBase* AdjacencyListUndirectedGraph::inc() && {
 
 namespace alib {
 
-auto adjListUndirGraphParserRegister  = xmlApi<graph::Graph>::ParserRegister<graph::AdjacencyListUndirectedGraph>();
-auto adjListUndirGraphParserRegister2 = xmlApi<alib::Object>::ParserRegister<graph::AdjacencyListUndirectedGraph>();
+auto adjListUndirGraphType  = registration::TypeRegister < graph::Graph, graph::AdjacencyListUndirectedGraph > ();
+auto adjListUndirGraphType2 = registration::TypeRegister < alib::Object, graph::AdjacencyListUndirectedGraph > ();
 
 } /* namespace alib */
diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp
index 9a491f9588..6b33111624 100644
--- a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp
@@ -11,7 +11,7 @@
 #include <compare>
 
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <sax/FromXMLParserHelper.h>
 #include <object/UniqueObject.h>
 #include "../common/GraphFromXMLParser.h"
@@ -269,7 +269,7 @@ alib::ObjectBase* AdjacencyMatrixUndirectedGraph::inc() && {
 
 namespace alib {
 
-auto adjMatUndirGraphParserRegister  = xmlApi<graph::Graph>::ParserRegister<graph::AdjacencyMatrixUndirectedGraph>();
-auto adjMatUndirGraphParserRegister2 = xmlApi<alib::Object>::ParserRegister<graph::AdjacencyMatrixUndirectedGraph>();
+auto adjMatUndirGraphType  = registration::TypeRegister < graph::Graph, graph::AdjacencyMatrixUndirectedGraph > ();
+auto adjMatUndirGraphType2 = registration::TypeRegister < alib::Object, graph::AdjacencyMatrixUndirectedGraph > ();
 
 } /* namespace alib */
diff --git a/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp b/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp
index 11a2fd3c34..f2f1bdff32 100644
--- a/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp
+++ b/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp
@@ -16,7 +16,7 @@
 #include "../common/IndexFromXMLParser.h"
 #include "../common/IndexToXMLComposer.h"
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <object/UniqueObject.h>
 
 namespace indexes {
@@ -139,6 +139,6 @@ alib::ObjectBase* SuffixTrieTerminatingSymbol::inc() && {
 
 namespace alib {
 
-auto suffixTreeTerminatingSymbolParserRegister = xmlApi < alib::Object >::ParserRegister < indexes::SuffixTrieTerminatingSymbol > ( );
+auto suffixTreeTerminatingSymbolType = registration::TypeRegister < alib::Object, indexes::SuffixTrieTerminatingSymbol > ( );
 
 } /* namespace alib */
diff --git a/alib2data_experimental/src/label/LR0ItemsLabel.cpp b/alib2data_experimental/src/label/LR0ItemsLabel.cpp
index 06fdc47725..021bec7c8c 100644
--- a/alib2data_experimental/src/label/LR0ItemsLabel.cpp
+++ b/alib2data_experimental/src/label/LR0ItemsLabel.cpp
@@ -9,7 +9,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include <label/Label.h>
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <label/UniqueLabel.h>
 #include <container/ObjectsMap.h>
 #include <container/ObjectsSet.h>
@@ -77,7 +77,7 @@ LabelBase* LR0ItemsLabel::inc ( ) && {
 
 namespace alib {
 
-auto lr0ItemsLabelParserRegister = xmlApi < label::Label > ::ParserRegister < label::LR0ItemsLabel > ( );
-auto lr0ItemsLabelParserRegister2 = xmlApi < alib::Object > ::ParserRegister < label::LR0ItemsLabel > ( );
+auto lr0ItemsLabelType = registration::TypeRegister < label::Label, label::LR0ItemsLabel > ( );
+auto lr0ItemsLabelType2 = registration::TypeRegister < alib::Object, label::LR0ItemsLabel > ( );
 
 } /* namespace alib */
diff --git a/alib2data_experimental/src/string/LinearStringTerminatingSymbol.cpp b/alib2data_experimental/src/string/LinearStringTerminatingSymbol.cpp
index 49311ea7d4..018cc143ee 100644
--- a/alib2data_experimental/src/string/LinearStringTerminatingSymbol.cpp
+++ b/alib2data_experimental/src/string/LinearStringTerminatingSymbol.cpp
@@ -17,7 +17,7 @@
 #include <string/common/StringToXMLComposer.h>
 #include <string/String.h>
 #include <object/Object.h>
-#include <core/xmlApi.hpp>
+#include <registration/TypeRegistration.hpp>
 #include <core/castApi.hpp>
 #include <object/UniqueObject.h>
 
@@ -125,7 +125,7 @@ alib::ObjectBase* LinearStringTerminatingSymbol::inc() && {
 
 namespace alib {
 
-auto linearStringTerminatingSymbolParserRegister = xmlApi < string::String >::ParserRegister < string::LinearStringTerminatingSymbol > ();
-auto linearStringTerminatingSymbolParserRegister2 = xmlApi < alib::Object >::ParserRegister < string::LinearStringTerminatingSymbol > ();
+auto linearStringTerminatingSymbolType = registration::TypeRegister < string::String, string::LinearStringTerminatingSymbol > ( );
+auto linearStringTerminatingSymbolType2 = registration::TypeRegister < alib::Object, string::LinearStringTerminatingSymbol > ( );
 
 } /* namespace alib */
-- 
GitLab