diff --git a/alib2algo/test-src/grammar/generate/GrammarGenerateUpToLength.cpp b/alib2algo/test-src/grammar/generate/GrammarGenerateUpToLength.cpp
index c06d35c5ab071f8106991c74f6b931f243b6c07c..36c351885317cbd4e2ffbb0efeca81e0bf952d14 100644
--- a/alib2algo/test-src/grammar/generate/GrammarGenerateUpToLength.cpp
+++ b/alib2algo/test-src/grammar/generate/GrammarGenerateUpToLength.cpp
@@ -1,10 +1,10 @@
 #include "GrammarGenerateUpToLength.h"
 
-#include "grammar/generate/GenerateUpToLength.h"
+#include <grammar/generate/GenerateUpToLength.h>
 
-#include "grammar/ContextFree/EpsilonFreeCFG.h"
-#include "string/LinearString.h"
-#include <string/String.h>
+#include <grammar/ContextFree/EpsilonFreeCFG.h>
+#include <string/LinearString.h>
+#include <string/string/LinearString.h>
 
 #include <factory/StringDataFactory.hpp>
 
@@ -87,7 +87,7 @@ void GrammarGenerateUpToLength::testGenerate2() {
 	strings.insert(string::LinearString < >(ext::vector<DefaultSymbolType>{b, c, d}));
 
 	for(const string::LinearString < >& str : grammar::generate::GenerateUpToLength::generate(grammar1, 3)) {
-		std::cout << factory::StringDataFactory::toString(string::String(str)) << std::endl;
+		std::cout << factory::StringDataFactory::toString ( str ) << std::endl;
 	}
 
 	CPPUNIT_ASSERT(strings == grammar::generate::GenerateUpToLength::generate(grammar1, 3));
@@ -133,7 +133,7 @@ void GrammarGenerateUpToLength::testGenerate3() {
 	strings.insert(string::LinearString < >(ext::vector<DefaultSymbolType>{b, c, d}));
 
 	for(const string::LinearString < >& str : grammar::generate::GenerateUpToLength::generate(grammar1, 3)) {
-		std::cout << factory::StringDataFactory::toString(string::String(str)) << std::endl;
+		std::cout << factory::StringDataFactory::toString ( str ) << std::endl;
 	}
 
 	CPPUNIT_ASSERT(strings == grammar::generate::GenerateUpToLength::generate(grammar1, 3));
diff --git a/alib2algo/test-src/grammar/simplify/GrammarLeftRecursionRemoverTest.cpp b/alib2algo/test-src/grammar/simplify/GrammarLeftRecursionRemoverTest.cpp
index 26124b636a6407c135da6088bb90eec3d24a4921..eec5bb9017d207532b7769cf99ea39993f142b73 100644
--- a/alib2algo/test-src/grammar/simplify/GrammarLeftRecursionRemoverTest.cpp
+++ b/alib2algo/test-src/grammar/simplify/GrammarLeftRecursionRemoverTest.cpp
@@ -6,6 +6,9 @@
 #include "grammar/ContextFree/CFG.h"
 #include "grammar/ContextFree/EpsilonFreeCFG.h"
 
+#include "grammar/string/ContextFree/CFG.h"
+#include "grammar/string/ContextFree/EpsilonFreeCFG.h"
+
 #include <factory/StringDataFactory.hpp>
 #include <common/createUnique.hpp>
 
@@ -62,7 +65,7 @@ void GrammarLeftRecursionRemoverTest::testRemoveLefRecursion2() {
 
 	DefaultSymbolType Aprimed = common::createUnique(A, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet());
 
-	std::cout << factory::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar1)) << std::endl;
+	std::cout << factory::StringDataFactory::toString ( grammar1 ) << std::endl;
 
 	grammar::EpsilonFreeCFG < > grammar2 = grammar::simplify::LeftRecursionRemover::remove(grammar1);
 
@@ -78,8 +81,8 @@ void GrammarLeftRecursionRemoverTest::testRemoveLefRecursion2() {
 	grammar3.addRule(Aprimed, {b, Aprimed});
 	grammar3.addRule(Aprimed, {b});
 
-	std::cout << factory::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar2)) << std::endl;
-	std::cout << factory::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar3)) << std::endl;
+	std::cout << factory::StringDataFactory::toString( grammar2 ) << std::endl;
+	std::cout << factory::StringDataFactory::toString( grammar3 ) << std::endl;
 
 	CPPUNIT_ASSERT(grammar2 == grammar3);
 }
@@ -104,7 +107,7 @@ void GrammarLeftRecursionRemoverTest::testRemoveLefRecursion3() {
 
 	DefaultSymbolType Bprimed = common::createUnique(B, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet());
 
-	std::cout << factory::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar1)) << std::endl;
+	std::cout << factory::StringDataFactory::toString ( grammar1 ) << std::endl;
 
 	grammar::EpsilonFreeCFG < > grammar2 = grammar::simplify::LeftRecursionRemover::remove(grammar1);
 
@@ -121,8 +124,8 @@ void GrammarLeftRecursionRemoverTest::testRemoveLefRecursion3() {
 	grammar3.addRule(Bprimed, {a, b, Bprimed});
 	grammar3.addRule(Bprimed, {a, b});
 
-	std::cout << factory::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar2)) << std::endl;
-	std::cout << factory::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar3)) << std::endl;
+	std::cout << factory::StringDataFactory::toString ( grammar2 ) << std::endl;
+	std::cout << factory::StringDataFactory::toString ( grammar3 ) << std::endl;
 
 	CPPUNIT_ASSERT(grammar2 == grammar3);
 }
@@ -149,7 +152,7 @@ void GrammarLeftRecursionRemoverTest::testRemoveLefRecursion4() {
 	DefaultSymbolType Bprimed = common::createUnique(B, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet());
 	DefaultSymbolType Cprimed = common::createUnique(C, grammar1.getTerminalAlphabet(), grammar1.getNonterminalAlphabet());
 
-	std::cout << factory::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar1)) << std::endl;
+	std::cout << factory::StringDataFactory::toString ( grammar1 ) << std::endl;
 
 	grammar::EpsilonFreeCFG < > grammar2 = grammar::simplify::LeftRecursionRemover::remove(grammar1);
 
@@ -179,8 +182,8 @@ void GrammarLeftRecursionRemoverTest::testRemoveLefRecursion4() {
 	grammar3.addRule(Cprimed, {A, Bprimed, C, B});
 	grammar3.addRule(Cprimed, {C});
 
-	std::cout << factory::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar2)) << std::endl;
-	std::cout << factory::StringDataFactory::toString<grammar::Grammar>(grammar::Grammar(grammar3)) << std::endl;
+	std::cout << factory::StringDataFactory::toString( grammar2 ) << std::endl;
+	std::cout << factory::StringDataFactory::toString( grammar3 ) << std::endl;
 
 	CPPUNIT_ASSERT(grammar2 == grammar3);
 }
diff --git a/alib2algo/test-src/regexp/transform/RegExpDerivationTest.cpp b/alib2algo/test-src/regexp/transform/RegExpDerivationTest.cpp
index 726d9e4b6c0ed1492a05542dae82e67fcf958159..44fe7fbca112f9169dff2a3ad307b0af3d8dd42e 100644
--- a/alib2algo/test-src/regexp/transform/RegExpDerivationTest.cpp
+++ b/alib2algo/test-src/regexp/transform/RegExpDerivationTest.cpp
@@ -1,14 +1,16 @@
 #include "RegExpDerivationTest.h"
 
 #include "regexp/transform/RegExpDerivation.h"
-#include <string/String.h>
-#include <regexp/RegExp.h>
 
 #include <factory/StringDataFactory.hpp>
 #include "factory/XmlDataFactory.hpp"
+
 #include <regexp/string/UnboundedRegExp.h>
 #include <regexp/xml/UnboundedRegExp.h>
 
+#include <string/string/LinearString.h>
+#include <string/xml/LinearString.h>
+
 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( RegExpDerivationTest, "regexp" );
 CPPUNIT_TEST_SUITE_REGISTRATION( RegExpDerivationTest );
 
@@ -38,13 +40,11 @@ void RegExpDerivationTest::ExecSingleTest(std::string regexp_str, std::string st
     ext::deque<sax::Token> tokens = factory::XmlDataFactory::toTokens(regexp0);
     regexp::UnboundedRegExp < > regexp = factory::XmlDataFactory::fromTokens (std::move(tokens));
 
-    string::String string0 = factory::StringDataFactory::fromString ("\"" + string_str + "\"");
+    string::LinearString < > string0 = factory::StringDataFactory::fromString ("\"" + string_str + "\"");
     ext::deque<sax::Token> tokens2 = factory::XmlDataFactory::toTokens(string0);
-    string::String string1 = factory::XmlDataFactory::fromTokens (std::move(tokens2));
-
-    const string::LinearString < > & string = static_cast<const string::LinearString < >&>(string1.getData());
+    string::LinearString < > string1 = factory::XmlDataFactory::fromTokens (std::move(tokens2));
 
-    std::cout << factory::StringDataFactory::toString(regexp::RegExpDerivation::derivation(regexp, string)) << " == " << std::endl << result << std::endl << std::endl;
+    std::cout << factory::StringDataFactory::toString(regexp::RegExpDerivation::derivation(regexp, string1)) << " == " << std::endl << result << std::endl << std::endl;
 
-    CPPUNIT_ASSERT(factory::StringDataFactory::toString(regexp::RegExpDerivation::derivation(regexp, string)) == result);
+    CPPUNIT_ASSERT(factory::StringDataFactory::toString(regexp::RegExpDerivation::derivation(regexp, string1)) == result);
 }
diff --git a/alib2algo/test-src/regexp/transform/RegExpIntegralTest.cpp b/alib2algo/test-src/regexp/transform/RegExpIntegralTest.cpp
index 3df8b780d4dce7baafb3f981cf9f4e011c3c6a11..54c28f62f077094c1f8df526c51bbdecb4b7ca9b 100644
--- a/alib2algo/test-src/regexp/transform/RegExpIntegralTest.cpp
+++ b/alib2algo/test-src/regexp/transform/RegExpIntegralTest.cpp
@@ -1,12 +1,12 @@
 #include "RegExpIntegralTest.h"
 
 #include "regexp/transform/RegExpIntegral.h"
-#include <string/String.h>
-#include <regexp/RegExp.h>
 
-#include <factory/StringDataFactory.hpp>
+#include <string/string/LinearString.h>
 #include <regexp/string/UnboundedRegExp.h>
 
+#include <factory/StringDataFactory.hpp>
+
 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( RegExpIntegralTest, "regexp" );
 CPPUNIT_TEST_SUITE_REGISTRATION( RegExpIntegralTest );
 
@@ -25,9 +25,7 @@ void RegExpIntegralTest::testRegExpIntegral() {
 
 void RegExpIntegralTest::ExecSingleTest(std::string regexp_str, std::string string_str, std::string result) {
     regexp::UnboundedRegExp < > regexp = factory::StringDataFactory::fromString ( regexp_str );
-    string::String str = factory::StringDataFactory::fromString ( "\"" + string_str + "\"" );
-
-    const string::LinearString < > & string = static_cast < const string::LinearString < > & > ( str.getData ( ) );
+    string::LinearString < > string = factory::StringDataFactory::fromString ( "\"" + string_str + "\"" );
 
     std::cout << factory::StringDataFactory::toString(regexp::RegExpIntegral::integral(regexp, string)) << " == " << result << std::endl;
 
diff --git a/alib2data/src/automaton/Automaton.h b/alib2data/src/automaton/Automaton.h
index 59ceeb897c9771bf26a9ecf8da7613e8304f25f8..0e3dc4df433a3ef773d74a5b22eff0239283ecc3 100644
--- a/alib2data/src/automaton/Automaton.h
+++ b/alib2data/src/automaton/Automaton.h
@@ -8,21 +8,14 @@
 #ifndef AUTOMATON_H_
 #define AUTOMATON_H_
 
-#include <base/WrapperBase.hpp>
-#include "AutomatonBase.h"
+#include <type_traits>
 
 namespace automaton {
 
 /**
  * \brief Wrapper around any automaton type.
  */
-class Automaton : public base::WrapperBase < AutomatonBase > {
-	/**
-	 * Inherite constructors of base::WrapperBase < AutomatonBase >
-	 */
-	using base::WrapperBase < AutomatonBase >::WrapperBase;
-
-};
+class Automaton;
 
 template < class T >
 using SymbolTypeOfAutomaton = typename std::decay < decltype (std::declval<T>().getInputAlphabet()) >::type::value_type;
diff --git a/alib2data/src/automaton/xml/FSM/CompactNFA.cpp b/alib2data/src/automaton/xml/FSM/CompactNFA.cpp
index 494a5f29b43854923cc88f2e2ce628e5f46b87eb..6db2fc07226c1d75e5a53885672740b8c5004100 100644
--- a/alib2data/src/automaton/xml/FSM/CompactNFA.cpp
+++ b/alib2data/src/automaton/xml/FSM/CompactNFA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "CompactNFA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::CompactNFA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::CompactNFA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::CompactNFA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::CompactNFA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::CompactNFA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/FSM/DFA.cpp b/alib2data/src/automaton/xml/FSM/DFA.cpp
index 5e4b221aeb21cb9ffb3265bbba497f81f3a52386..af3fa7c940b46498276b308d93821524776281f1 100644
--- a/alib2data/src/automaton/xml/FSM/DFA.cpp
+++ b/alib2data/src/automaton/xml/FSM/DFA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "DFA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::DFA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::DFA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::DFA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::DFA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::DFA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/FSM/EpsilonNFA.cpp b/alib2data/src/automaton/xml/FSM/EpsilonNFA.cpp
index a0629ecd9801e400c098cd5dfc13a7f07c24c7d1..ddd96f849d746cec91f279412cde0f66428e4e2c 100644
--- a/alib2data/src/automaton/xml/FSM/EpsilonNFA.cpp
+++ b/alib2data/src/automaton/xml/FSM/EpsilonNFA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "EpsilonNFA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::EpsilonNFA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::EpsilonNFA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::EpsilonNFA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::EpsilonNFA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::EpsilonNFA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/FSM/ExtendedNFA.cpp b/alib2data/src/automaton/xml/FSM/ExtendedNFA.cpp
index 94554666ccd99aeee7b138e935d7cf13d3ec992b..42837fac0198e6c23f3615c62bc1c7fb3aed2066 100644
--- a/alib2data/src/automaton/xml/FSM/ExtendedNFA.cpp
+++ b/alib2data/src/automaton/xml/FSM/ExtendedNFA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "ExtendedNFA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::ExtendedNFA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::ExtendedNFA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::ExtendedNFA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::ExtendedNFA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::ExtendedNFA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/FSM/MultiInitialStateEpsilonNFA.cpp b/alib2data/src/automaton/xml/FSM/MultiInitialStateEpsilonNFA.cpp
index 2e59c648e70356875d05a7f2232fa46b8696fb9e..1316606bc6af5f9a9f581bbc0234ad760b560a87 100644
--- a/alib2data/src/automaton/xml/FSM/MultiInitialStateEpsilonNFA.cpp
+++ b/alib2data/src/automaton/xml/FSM/MultiInitialStateEpsilonNFA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "MultiInitialStateEpsilonNFA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::MultiInitialStateEpsilonNFA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::MultiInitialStateEpsilonNFA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::MultiInitialStateEpsilonNFA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::MultiInitialStateEpsilonNFA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::MultiInitialStateEpsilonNFA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/FSM/MultiInitialStateNFA.cpp b/alib2data/src/automaton/xml/FSM/MultiInitialStateNFA.cpp
index ba115fd0596b69ea657141e5599127a0b7765c24..d2a062dcc2497abd1bdf2db159d02b5b61c85e61 100644
--- a/alib2data/src/automaton/xml/FSM/MultiInitialStateNFA.cpp
+++ b/alib2data/src/automaton/xml/FSM/MultiInitialStateNFA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "MultiInitialStateNFA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::MultiInitialStateNFA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::MultiInitialStateNFA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::MultiInitialStateNFA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::MultiInitialStateNFA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::MultiInitialStateNFA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/FSM/NFA.cpp b/alib2data/src/automaton/xml/FSM/NFA.cpp
index ccb9be9263a98949eaf825911bf27e327e8ebd7c..f2877a2b7f472daf625381b1b8188065275f9e56 100644
--- a/alib2data/src/automaton/xml/FSM/NFA.cpp
+++ b/alib2data/src/automaton/xml/FSM/NFA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "NFA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::NFA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::NFA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::NFA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::NFA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::NFA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/PDA/DPDA.cpp b/alib2data/src/automaton/xml/PDA/DPDA.cpp
index 4810abfd5a7d8501c5b5b5522bdc7fd2b41b6661..75cb3824369d1f7a122a36ba5f8aea07235b9349 100644
--- a/alib2data/src/automaton/xml/PDA/DPDA.cpp
+++ b/alib2data/src/automaton/xml/PDA/DPDA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "DPDA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::DPDA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::DPDA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::DPDA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::DPDA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::DPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/PDA/InputDrivenDPDA.cpp b/alib2data/src/automaton/xml/PDA/InputDrivenDPDA.cpp
index af173af811809016ed6e08ff51728d2e9138cd8f..1f63ae366cf50386594d97c7645bd795555b9fbf 100644
--- a/alib2data/src/automaton/xml/PDA/InputDrivenDPDA.cpp
+++ b/alib2data/src/automaton/xml/PDA/InputDrivenDPDA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "InputDrivenDPDA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::InputDrivenDPDA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::InputDrivenDPDA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::InputDrivenDPDA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::InputDrivenDPDA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::InputDrivenDPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/PDA/InputDrivenNPDA.cpp b/alib2data/src/automaton/xml/PDA/InputDrivenNPDA.cpp
index 6516c331130e7279b4a0225029f8148c00a19906..6816d3054377c4d0eb5023268c9d3e6e462344b6 100644
--- a/alib2data/src/automaton/xml/PDA/InputDrivenNPDA.cpp
+++ b/alib2data/src/automaton/xml/PDA/InputDrivenNPDA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "InputDrivenNPDA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::InputDrivenNPDA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::InputDrivenNPDA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::InputDrivenNPDA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::InputDrivenNPDA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::InputDrivenNPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/PDA/NPDA.cpp b/alib2data/src/automaton/xml/PDA/NPDA.cpp
index 52f6431c7ff1cdc50ee6a1ebfdebfe28ed066b7e..8acf2891213ba3e5354e0ec7c00c9b038bb1389b 100644
--- a/alib2data/src/automaton/xml/PDA/NPDA.cpp
+++ b/alib2data/src/automaton/xml/PDA/NPDA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "NPDA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::NPDA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::NPDA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::NPDA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::NPDA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::NPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/PDA/NPDTA.cpp b/alib2data/src/automaton/xml/PDA/NPDTA.cpp
index b854540f52433629a73af86d30c801b5f70c673c..bfe8fee01e9374a03614d4395b7ce1ccdb4db9de 100644
--- a/alib2data/src/automaton/xml/PDA/NPDTA.cpp
+++ b/alib2data/src/automaton/xml/PDA/NPDTA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "NPDTA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::NPDTA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::NPDTA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::NPDTA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::NPDTA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::NPDTA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/PDA/RealTimeHeightDeterministicDPDA.cpp b/alib2data/src/automaton/xml/PDA/RealTimeHeightDeterministicDPDA.cpp
index fadda2739a67eb659cb4e780f570c82f720ad9d2..9e5f890451da5287cb0509b00e27b15d16ca7786 100644
--- a/alib2data/src/automaton/xml/PDA/RealTimeHeightDeterministicDPDA.cpp
+++ b/alib2data/src/automaton/xml/PDA/RealTimeHeightDeterministicDPDA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "RealTimeHeightDeterministicDPDA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::RealTimeHeightDeterministicDPDA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::RealTimeHeightDeterministicDPDA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::RealTimeHeightDeterministicDPDA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::RealTimeHeightDeterministicDPDA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::RealTimeHeightDeterministicDPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/PDA/RealTimeHeightDeterministicNPDA.cpp b/alib2data/src/automaton/xml/PDA/RealTimeHeightDeterministicNPDA.cpp
index 488c9831e015ded4f772f6fc6d49b56449efd525..7b787f85b6882a68e7260d8c84a22245c3823bfd 100644
--- a/alib2data/src/automaton/xml/PDA/RealTimeHeightDeterministicNPDA.cpp
+++ b/alib2data/src/automaton/xml/PDA/RealTimeHeightDeterministicNPDA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "RealTimeHeightDeterministicNPDA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::RealTimeHeightDeterministicNPDA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::RealTimeHeightDeterministicNPDA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::RealTimeHeightDeterministicNPDA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::RealTimeHeightDeterministicNPDA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::RealTimeHeightDeterministicNPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/PDA/SinglePopDPDA.cpp b/alib2data/src/automaton/xml/PDA/SinglePopDPDA.cpp
index f45ed52b797cb4ac44084bdce1a992f08f7ac683..12c062b4918b3402aff97989570943cdd9dc164a 100644
--- a/alib2data/src/automaton/xml/PDA/SinglePopDPDA.cpp
+++ b/alib2data/src/automaton/xml/PDA/SinglePopDPDA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "SinglePopDPDA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::SinglePopDPDA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::SinglePopDPDA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::SinglePopDPDA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::SinglePopDPDA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::SinglePopDPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/PDA/SinglePopNPDA.cpp b/alib2data/src/automaton/xml/PDA/SinglePopNPDA.cpp
index a6d858975a24613b30611f730cdabcc5dee40e48..5490f119930593c241fa511fb2f837e41cda937a 100644
--- a/alib2data/src/automaton/xml/PDA/SinglePopNPDA.cpp
+++ b/alib2data/src/automaton/xml/PDA/SinglePopNPDA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "SinglePopNPDA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::SinglePopNPDA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::SinglePopNPDA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::SinglePopNPDA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::SinglePopNPDA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::SinglePopNPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/PDA/VisiblyPushdownDPDA.cpp b/alib2data/src/automaton/xml/PDA/VisiblyPushdownDPDA.cpp
index 850d62c103ccf96fef57d0c9d1dae37b2f1bc327..2894ecdde321da0d9e38d683dadea06df19e86d0 100644
--- a/alib2data/src/automaton/xml/PDA/VisiblyPushdownDPDA.cpp
+++ b/alib2data/src/automaton/xml/PDA/VisiblyPushdownDPDA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "VisiblyPushdownDPDA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::VisiblyPushdownDPDA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::VisiblyPushdownDPDA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::VisiblyPushdownDPDA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::VisiblyPushdownDPDA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::VisiblyPushdownDPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/PDA/VisiblyPushdownNPDA.cpp b/alib2data/src/automaton/xml/PDA/VisiblyPushdownNPDA.cpp
index e46ac9eb3a7ffa17b7443be6ea8d5ee2b1684b5b..1ae885b5c0d9ab1f6aa5a59fe25c9bd7cdbf1d6f 100644
--- a/alib2data/src/automaton/xml/PDA/VisiblyPushdownNPDA.cpp
+++ b/alib2data/src/automaton/xml/PDA/VisiblyPushdownNPDA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "VisiblyPushdownNPDA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::VisiblyPushdownNPDA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::VisiblyPushdownNPDA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::VisiblyPushdownNPDA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::VisiblyPushdownNPDA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::VisiblyPushdownNPDA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/TA/DFTA.cpp b/alib2data/src/automaton/xml/TA/DFTA.cpp
index 4139df7ab22d5682f66d94ff2727e81f33b67b33..e4eaa5184f800b1ad02b154a0566cf8bd817ccbc 100644
--- a/alib2data/src/automaton/xml/TA/DFTA.cpp
+++ b/alib2data/src/automaton/xml/TA/DFTA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "DFTA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::DFTA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::DFTA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::DFTA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::DFTA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::DFTA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/TA/NFTA.cpp b/alib2data/src/automaton/xml/TA/NFTA.cpp
index f85fdf047937ab143d21a54dd26a80a3b9584aa9..acf757131117425f501dfadf4e32addce51e1613 100644
--- a/alib2data/src/automaton/xml/TA/NFTA.cpp
+++ b/alib2data/src/automaton/xml/TA/NFTA.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "NFTA.h"
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -16,7 +15,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::NFTA < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::NFTA < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::NFTA < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::NFTA < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::NFTA < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/automaton/xml/TM/OneTapeDTM.cpp b/alib2data/src/automaton/xml/TM/OneTapeDTM.cpp
index 662db3b034180182002d1670b7c7f433f4528249..7ece1cd02befc9100e6bc3536d80ec9db8d71383 100644
--- a/alib2data/src/automaton/xml/TM/OneTapeDTM.cpp
+++ b/alib2data/src/automaton/xml/TM/OneTapeDTM.cpp
@@ -7,7 +7,6 @@
 
 #include "OneTapeDTM.h"
 
-#include <automaton/Automaton.h>
 #include <object/Object.h>
 
 #include <registration/XmlRegistration.hpp>
@@ -17,7 +16,6 @@ namespace {
 static auto xmlWrite = registration::XmlWriterRegister < automaton::OneTapeDTM < > > ( );
 static auto xmlRead = registration::XmlReaderRegister < automaton::OneTapeDTM < > > ( );
 
-static auto xmlGroup1 = registration::XmlRegisterTypeInGroup < automaton::Automaton, automaton::OneTapeDTM < > > ( );
-static auto xmlGroup2 = registration::XmlRegisterTypeInGroup < object::Object, automaton::OneTapeDTM < > > ( );
+static auto xmlGroup = registration::XmlRegisterTypeInGroup < object::Object, automaton::OneTapeDTM < > > ( );
 
 } /* namespace */