diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp
index efe35c7289be380376c3918762964eb90cd013b7..effa2b099a1921120647d4de29db5fdf3a96cd3a 100644
--- a/alib2data/src/XmlApi.cpp
+++ b/alib2data/src/XmlApi.cpp
@@ -41,6 +41,26 @@
 #include "string/LinearString.h"
 #include "string/Epsilon.h"
 
+#include "automaton/FSM/EpsilonNFA.h"
+#include "automaton/FSM/NFA.h"
+#include "automaton/FSM/MultiInitialStateNFA.h"
+#include "automaton/FSM/DFA.h"
+#include "automaton/FSM/CompactNFA.h"
+#include "automaton/FSM/ExtendedNFA.h"
+#include "automaton/PDA/DPDA.h"
+#include "automaton/PDA/SinglePopDPDA.h"
+#include "automaton/PDA/InputDrivenDPDA.h"
+#include "automaton/PDA/InputDrivenNPDA.h"
+#include "automaton/PDA/VisiblyPushdownDPDA.h"
+#include "automaton/PDA/VisiblyPushdownNPDA.h"
+#include "automaton/PDA/RealTimeHeightDeterministicDPDA.h"
+#include "automaton/PDA/RealTimeHeightDeterministicNPDA.h"
+#include "automaton/PDA/NPDA.h"
+#include "automaton/PDA/SinglePopNPDA.h"
+#include "automaton/TM/OneTapeDTM.h"
+#include "automaton/TA/DFTA.h"
+#include "automaton/TA/NFTA.h"
+
 namespace alib {
 
 const label::LabelFromXMLParser FromXMLParsers::labelParser;
diff --git a/alib2data/src/automaton/Automaton.cpp b/alib2data/src/automaton/Automaton.cpp
index 69604ea7132d3e12535fa9b6bbcb83f93d48b94e..005b22ebb7e354ad3aa524f9852ea6c82edd83c0 100644
--- a/alib2data/src/automaton/Automaton.cpp
+++ b/alib2data/src/automaton/Automaton.cpp
@@ -7,7 +7,6 @@
 
 #include "Automaton.h"
 #include "../label/NextLabel.h"
-#include "../label/Label.h"
 #include <climits>
 #include "AutomatonException.h"
 
diff --git a/alib2data/src/automaton/Automaton.h b/alib2data/src/automaton/Automaton.h
index c34cde4f5692ed82faa620031e817d2fda5154ba..e48e3c5a559c534f7253bf72470ef5e5670826a7 100644
--- a/alib2data/src/automaton/Automaton.h
+++ b/alib2data/src/automaton/Automaton.h
@@ -13,14 +13,24 @@
 
 #include "common/State.h"
 #include <set>
-#include <string>
 
 namespace automaton {
 
 /**
  * Wrapper around automata.
  */
-typedef alib::wrapper<AutomatonBase> Automaton;
+class Automaton : public alib::wrapper<AutomatonBase> {
+public:
+	explicit Automaton(AutomatonBase* data) : alib::wrapper<AutomatonBase>(data) {
+	}
+
+	explicit Automaton(const AutomatonBase& data) : alib::wrapper<AutomatonBase>(data.clone()) {
+	}
+
+	explicit Automaton(AutomatonBase&& data) : alib::wrapper<AutomatonBase>(std::move(data).plunder()) {
+	}
+
+};
 
 State createUniqueState(State base, const std::set<State>& other);
 
diff --git a/alib2data/src/automaton/AutomatonClasses.h b/alib2data/src/automaton/AutomatonClasses.h
new file mode 100644
index 0000000000000000000000000000000000000000..064b6d8ba75160b5d62ed9c06cc6bc8bdc9cdd1e
--- /dev/null
+++ b/alib2data/src/automaton/AutomatonClasses.h
@@ -0,0 +1,31 @@
+/*
+ * AutomatonClasses.h
+ *
+ *  Created on: Jun 19, 2014
+ *      Author: Jan Travnicek
+ */
+
+#ifndef AUTOMATON_CLASSES_H_
+#define AUTOMATON_CLASSES_H_
+
+#include "FSM/EpsilonNFA.h"
+#include "FSM/NFA.h"
+#include "FSM/MultiInitialStateNFA.h"
+#include "FSM/DFA.h"
+#include "FSM/CompactNFA.h"
+#include "FSM/ExtendedNFA.h"
+#include "PDA/DPDA.h"
+#include "PDA/SinglePopDPDA.h"
+#include "PDA/InputDrivenDPDA.h"
+#include "PDA/InputDrivenNPDA.h"
+#include "PDA/VisiblyPushdownDPDA.h"
+#include "PDA/VisiblyPushdownNPDA.h"
+#include "PDA/RealTimeHeightDeterministicDPDA.h"
+#include "PDA/RealTimeHeightDeterministicNPDA.h"
+#include "PDA/NPDA.h"
+#include "PDA/SinglePopNPDA.h"
+#include "TM/OneTapeDTM.h"
+#include "TA/DFTA.h"
+#include "TA/NFTA.h"
+
+#endif /* AUTOMATON_CLASSES_H_ */
diff --git a/alib2data/src/automaton/AutomatonFeatures.h b/alib2data/src/automaton/AutomatonFeatures.h
index c695337eae98efae92a39553023f799c042df075..2981c4bf32689b7b6debe2e8b81e951a267e0cc3 100644
--- a/alib2data/src/automaton/AutomatonFeatures.h
+++ b/alib2data/src/automaton/AutomatonFeatures.h
@@ -32,6 +32,28 @@ enum class FEATURES {
 	NFTA
 };
 
+class Automaton;
+
+class EpsilonNFA;
+class NFA;
+class MultiInitialStateNFA;
+class DFA;
+class CompactNFA;
+class ExtendedNFA;
+class DPDA;
+class SinglePopDPDA;
+class InputDrivenDPDA;
+class InputDrivenNPDA;
+class VisiblyPushdownDPDA;
+class VisiblyPushdownNPDA;
+class RealTimeHeightDeterministicDPDA;
+class RealTimeHeightDeterministicNPDA;
+class NPDA;
+class SinglePopNPDA;
+class OneTapeDTM;
+class DFTA;
+class NFTA;
+
 } /* namespace automaton */
 
 #endif /* AUTOMATON_FEATURES_H_ */
diff --git a/alib2data/src/automaton/AutomatonFromStringLexer.cpp b/alib2data/src/automaton/AutomatonFromStringLexer.cpp
index 974028c2b0853aec6f3ee5609d95a94977f0b495..083032151b74eefa97a5507bd7f7024c8847212f 100644
--- a/alib2data/src/automaton/AutomatonFromStringLexer.cpp
+++ b/alib2data/src/automaton/AutomatonFromStringLexer.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "AutomatonFromStringLexer.h"
-#include <istream>
 
 namespace automaton {
 
diff --git a/alib2data/src/automaton/AutomatonFromStringLexer.h b/alib2data/src/automaton/AutomatonFromStringLexer.h
index 32f14d4bb20b554c95082c15809de4c5ef18e90c..a4416fab65387c93d4f6c3964ff3788c4bf982b4 100644
--- a/alib2data/src/automaton/AutomatonFromStringLexer.h
+++ b/alib2data/src/automaton/AutomatonFromStringLexer.h
@@ -9,7 +9,7 @@
 #define AUTOMATON_FROM_STRING_LEXER_H_
 
 #include <string>
-#include <sstream>
+#include <istream>
 
 namespace automaton {
 
diff --git a/alib2data/src/automaton/AutomatonFromStringParser.h b/alib2data/src/automaton/AutomatonFromStringParser.h
index a58e5a913b02bb534ebfa34bbb77faa00e1b97f0..7a6fbb5a5868d9bd235ae24a39803b4160d1da93 100644
--- a/alib2data/src/automaton/AutomatonFromStringParser.h
+++ b/alib2data/src/automaton/AutomatonFromStringParser.h
@@ -10,7 +10,6 @@
 
 #include "AutomatonFromStringLexer.h"
 
-#include "Automaton.h"
 #include "AutomatonFeatures.h"
 #include "common/State.h"
 
diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.cpp b/alib2data/src/automaton/AutomatonFromXMLParser.cpp
index 7ccea32d8751557e88313b20dce11df5ea8bce38..6005709e06dde7c2af7ab81f757ee2ecd24ad4a5 100644
--- a/alib2data/src/automaton/AutomatonFromXMLParser.cpp
+++ b/alib2data/src/automaton/AutomatonFromXMLParser.cpp
@@ -6,13 +6,12 @@
  */
 
 #include "AutomatonFromXMLParser.h"
-
 #include "../sax/ParserException.h"
-#include "../alphabet/BlankSymbol.h"
-#include "../label/Label.h"
-
 #include "../XmlApi.hpp"
 
+#include "Automaton.h"
+#include "AutomatonClasses.h"
+
 namespace automaton {
 
 Automaton AutomatonFromXMLParser::parseAutomaton(std::deque<sax::Token>::iterator& input) const {
diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.h b/alib2data/src/automaton/AutomatonFromXMLParser.h
index ab036ce2659678855a65c6843094219de8bb9ed2..f625ba9d9bdbaf5d8f888726ae7fa65cc75f90f9 100644
--- a/alib2data/src/automaton/AutomatonFromXMLParser.h
+++ b/alib2data/src/automaton/AutomatonFromXMLParser.h
@@ -9,32 +9,14 @@
 #define AUTOMATON_FROM_XML_PARSER_H_
 
 #include "../sax/FromXMLParserHelper.h"
-#include "Automaton.h"
-#include "AutomatonFeatures.h"
-#include "FSM/EpsilonNFA.h"
-#include "FSM/NFA.h"
-#include "FSM/MultiInitialStateNFA.h"
-#include "FSM/DFA.h"
-#include "FSM/CompactNFA.h"
-#include "FSM/ExtendedNFA.h"
-#include "PDA/DPDA.h"
-#include "PDA/SinglePopDPDA.h"
-#include "PDA/InputDrivenDPDA.h"
-#include "PDA/InputDrivenNPDA.h"
-#include "PDA/VisiblyPushdownDPDA.h"
-#include "PDA/VisiblyPushdownNPDA.h"
-#include "PDA/RealTimeHeightDeterministicDPDA.h"
-#include "PDA/RealTimeHeightDeterministicNPDA.h"
-#include "PDA/NPDA.h"
-#include "PDA/SinglePopNPDA.h"
-#include "TM/OneTapeDTM.h"
-#include "TA/DFTA.h"
-#include "TA/NFTA.h"
-
-#include <deque>
 #include <set>
+#include <vector>
 #include <variant>
-#include "../sax/Token.h"
+#include "AutomatonFeatures.h"
+
+#include "common/State.h"
+#include "common/Shift.h"
+#include "../regexp/RegExp.h"
 
 namespace alib {
 
diff --git a/alib2data/src/automaton/AutomatonToStringComposer.cpp b/alib2data/src/automaton/AutomatonToStringComposer.cpp
index 2023d4cd6e6cd41c7ef4fef397be8b907a07b634..a662bcb6d3033e0957d20cfc9dc836f3588a0e52 100644
--- a/alib2data/src/automaton/AutomatonToStringComposer.cpp
+++ b/alib2data/src/automaton/AutomatonToStringComposer.cpp
@@ -7,6 +7,10 @@
 
 #include "AutomatonToStringComposer.h"
 #include "../exception/AlibException.h"
+#include "FSM/DFA.h"
+#include "FSM/NFA.h"
+#include "FSM/MultiInitialStateNFA.h"
+#include "FSM/EpsilonNFA.h"
 
 #include "../StringApi.hpp"
 
diff --git a/alib2data/src/automaton/AutomatonToStringComposer.h b/alib2data/src/automaton/AutomatonToStringComposer.h
index ef2199529769b3e6f19b0591380cd996c418df87..2aa049527fae83c12111c6788eda4a3f13b72f95 100644
--- a/alib2data/src/automaton/AutomatonToStringComposer.h
+++ b/alib2data/src/automaton/AutomatonToStringComposer.h
@@ -10,10 +10,6 @@
 
 #include <ostream>
 #include "Automaton.h"
-#include "FSM/DFA.h"
-#include "FSM/NFA.h"
-#include "FSM/MultiInitialStateNFA.h"
-#include "FSM/EpsilonNFA.h"
 
 namespace automaton {
 
diff --git a/alib2data/src/automaton/AutomatonToXMLComposer.cpp b/alib2data/src/automaton/AutomatonToXMLComposer.cpp
index 2030103543c1f452782e70167c49fa3116770ca6..af9978167d421fa80ad974f312d1a0e3c78ae124 100644
--- a/alib2data/src/automaton/AutomatonToXMLComposer.cpp
+++ b/alib2data/src/automaton/AutomatonToXMLComposer.cpp
@@ -6,10 +6,11 @@
  */
 
 #include "AutomatonToXMLComposer.h"
-#include "../alphabet/BlankSymbol.h"
 
 #include "../XmlApi.hpp"
 
+#include "AutomatonClasses.h"
+
 namespace automaton {
 
 void AutomatonToXMLComposer::composeStates(std::deque<sax::Token>& out, const std::set<State>& states) const {
diff --git a/alib2data/src/automaton/AutomatonToXMLComposer.h b/alib2data/src/automaton/AutomatonToXMLComposer.h
index a3f94727dcf9cc4919711291e8facf0ecdc18e68..39ce199a2ba9eb7d51f395e245ed1ef65e5b96f9 100644
--- a/alib2data/src/automaton/AutomatonToXMLComposer.h
+++ b/alib2data/src/automaton/AutomatonToXMLComposer.h
@@ -10,25 +10,15 @@
 
 #include <string>
 #include <deque>
+#include <vector>
+#include <set>
+#include <variant>
 #include "Automaton.h"
-#include "FSM/EpsilonNFA.h"
-#include "FSM/MultiInitialStateNFA.h"
-#include "FSM/NFA.h"
-#include "FSM/DFA.h"
-#include "FSM/CompactNFA.h"
-#include "FSM/ExtendedNFA.h"
-#include "PDA/InputDrivenDPDA.h"
-#include "PDA/InputDrivenNPDA.h"
-#include "PDA/VisiblyPushdownDPDA.h"
-#include "PDA/VisiblyPushdownNPDA.h"
-#include "PDA/RealTimeHeightDeterministicDPDA.h"
-#include "PDA/RealTimeHeightDeterministicNPDA.h"
-#include "PDA/NPDA.h"
-#include "PDA/SinglePopNPDA.h"
-#include "TM/OneTapeDTM.h"
-#include "TA/NFTA.h"
 #include "../sax/Token.h"
 
+#include "common/Shift.h"
+#include "../regexp/RegExp.h"
+
 namespace alib {
 
 template<typename T>
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index bcc057c1fc29f8ec08966ce88a56ba389b56b238..85cbe3c850e732fc4fdf9115bdae5da0a6bf9b8c 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -17,30 +17,7 @@
 
 #include "ObjectFeatures.h"
 #include "../exception/ExceptionFeatures.h"
-
-namespace automaton {
-
-class DFA;
-class NFA;
-class MultiInitialStateNFA;
-class EpsilonNFA;
-class CompactNFA;
-class ExtendedNFA;
-class DPDA;
-class SinglePopDPDA;
-class InputDrivenDPDA;
-class VisiblyPushdownDPDA;
-class RealTimeHeightDeterministicDPDA;
-class NPDA;
-class SinglePopNPDA;
-class InputDrivenNPDA;
-class VisiblyPushdownNPDA;
-class RealTimeHeightDeterministicNPDA;
-class OneTapeDTM;
-class DFTA;
-class NFTA;
-
-}
+#include "../automaton/AutomatonFeatures.h"
 
 namespace grammar {