diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp
index 21a28d361ed292c1f14934e7e082987793b5c993..41a741a47fd6437ca5c7c58b527ba158ee31d0f7 100644
--- a/alib2data/src/XmlApi.cpp
+++ b/alib2data/src/XmlApi.cpp
@@ -7,17 +7,27 @@
 
 #include "XmlApi.hpp"
 
+#include "alphabet/Symbol.h"
 #include "alphabet/SymbolClasses.h"
+#include "label/Label.h"
 #include "label/LabelClasses.h"
+#include "primitive/Primitive.h"
 #include "primitive/PrimitiveClasses.h"
 #include "object/ObjectClasses.h"
 #include "exception/ExceptionClasses.h"
+#include "string/String.h"
 #include "string/StringClasses.h"
+#include "automaton/Automaton.h"
 #include "automaton/AutomatonClasses.h"
+#include "container/Container.h"
 #include "container/ContainerClasses.h"
+#include "grammar/Grammar.h"
 #include "grammar/GrammarClasses.h"
+#include "regexp/RegExp.h"
 #include "regexp/RegExpClasses.h"
+#include "tree/Tree.h"
 #include "tree/TreeClasses.h"
+#include "graph/Graph.h"
 #include "graph/GraphClasses.h"
 
 namespace alib {
diff --git a/alib2data/src/alphabet/SymbolFeatures.h b/alib2data/src/alphabet/SymbolFeatures.h
index 65c3e03060798302fa82441e542cc159eb2b852b..6d6ff7cb6bdb32626f640355f1899f5bb3c6f1a4 100644
--- a/alib2data/src/alphabet/SymbolFeatures.h
+++ b/alib2data/src/alphabet/SymbolFeatures.h
@@ -26,6 +26,7 @@ enum class FEATURES {
 };
 
 class Symbol;
+class SymbolBase;
 
 class LabeledSymbol;
 class BlankSymbol;
diff --git a/alib2data/src/alphabet/SymbolToXMLComposer.h b/alib2data/src/alphabet/SymbolToXMLComposer.h
index fb254e4450f758f24bc84aa9feafefb2a55c0a8d..6dedb4ad587f9e66c28a0b9255f363ee39000315 100644
--- a/alib2data/src/alphabet/SymbolToXMLComposer.h
+++ b/alib2data/src/alphabet/SymbolToXMLComposer.h
@@ -9,7 +9,7 @@
 #define SYMBOL_TO_XML_COMPOSER_H_
 
 #include <deque>
-#include "Symbol.h"
+#include "SymbolFeatures.h"
 #include "../sax/Token.h"
 
 namespace alib {
diff --git a/alib2data/src/automaton/AutomatonFeatures.h b/alib2data/src/automaton/AutomatonFeatures.h
index 2981c4bf32689b7b6debe2e8b81e951a267e0cc3..83cb35dce053d098d4ff44345d83fc15317ab53a 100644
--- a/alib2data/src/automaton/AutomatonFeatures.h
+++ b/alib2data/src/automaton/AutomatonFeatures.h
@@ -33,6 +33,9 @@ enum class FEATURES {
 };
 
 class Automaton;
+class AutomatonBase;
+class State;
+enum class Shift;
 
 class EpsilonNFA;
 class NFA;
diff --git a/alib2data/src/automaton/AutomatonFromStringParser.h b/alib2data/src/automaton/AutomatonFromStringParser.h
index 7a6fbb5a5868d9bd235ae24a39803b4160d1da93..717e0cc51779381693e05abc9f0398a20d973c21 100644
--- a/alib2data/src/automaton/AutomatonFromStringParser.h
+++ b/alib2data/src/automaton/AutomatonFromStringParser.h
@@ -11,11 +11,13 @@
 #include "AutomatonFromStringLexer.h"
 
 #include "AutomatonFeatures.h"
-#include "common/State.h"
+#include "../string/StringFeatures.h"
+#include "../alphabet/SymbolFeatures.h"
 
+#include <set>
+#include <vector>
 #include <tuple>
 #include <variant>
-#include "../string/Epsilon.h"
 
 namespace alib {
 
diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.cpp b/alib2data/src/automaton/AutomatonFromXMLParser.cpp
index 6005709e06dde7c2af7ab81f757ee2ecd24ad4a5..7efdfcd348e7c0c10d578a173a64690c8c45ad36 100644
--- a/alib2data/src/automaton/AutomatonFromXMLParser.cpp
+++ b/alib2data/src/automaton/AutomatonFromXMLParser.cpp
@@ -997,11 +997,11 @@ Shift AutomatonFromXMLParser::parseTransitionShift(std::deque<sax::Token>::itera
 
 	popToken(input, sax::Token::TokenType::START_ELEMENT, "shift");
 	if (isToken(input, sax::Token::TokenType::CHARACTER, "left")) {
-		shift = LEFT;
+		shift = Shift::LEFT;
 	} else if (isToken(input, sax::Token::TokenType::CHARACTER, "right")) {
-		shift = RIGHT;
+		shift = Shift::RIGHT;
 	} else if (isToken(input, sax::Token::TokenType::CHARACTER, "none")) {
-		shift = NONE;
+		shift = Shift::NONE;
 	} else {
 		throw sax::ParserException(sax::Token("", sax::Token::TokenType::CHARACTER), *input);
 	}
diff --git a/alib2data/src/automaton/AutomatonFromXMLParser.h b/alib2data/src/automaton/AutomatonFromXMLParser.h
index f625ba9d9bdbaf5d8f888726ae7fa65cc75f90f9..9d000c0d810bade9f281ed86c6c3f09905c924c8 100644
--- a/alib2data/src/automaton/AutomatonFromXMLParser.h
+++ b/alib2data/src/automaton/AutomatonFromXMLParser.h
@@ -13,10 +13,9 @@
 #include <vector>
 #include <variant>
 #include "AutomatonFeatures.h"
-
-#include "common/State.h"
-#include "common/Shift.h"
-#include "../regexp/RegExp.h"
+#include "../regexp/RegExpFeatures.h"
+#include "../alphabet/SymbolFeatures.h"
+#include "../string/StringFeatures.h"
 
 namespace alib {
 
diff --git a/alib2data/src/automaton/AutomatonToXMLComposer.cpp b/alib2data/src/automaton/AutomatonToXMLComposer.cpp
index af9978167d421fa80ad974f312d1a0e3c78ae124..f6b192c73d425a9874544d5d6276e769fd9cdead 100644
--- a/alib2data/src/automaton/AutomatonToXMLComposer.cpp
+++ b/alib2data/src/automaton/AutomatonToXMLComposer.cpp
@@ -9,6 +9,7 @@
 
 #include "../XmlApi.hpp"
 
+#include "Automaton.h"
 #include "AutomatonClasses.h"
 
 namespace automaton {
@@ -576,9 +577,9 @@ void AutomatonToXMLComposer::composeTransitionFrom(std::deque<sax::Token>& out,
 	out.emplace_back(sax::Token("from", sax::Token::TokenType::END_ELEMENT));
 }
 
-void AutomatonToXMLComposer::composeTransitionShift(std::deque<sax::Token>& out, const Shift shift) const {
+void AutomatonToXMLComposer::composeTransitionShift(std::deque<sax::Token>& out, Shift shift) const {
 	out.emplace_back("shift", sax::Token::TokenType::START_ELEMENT);
-	out.emplace_back(SHIFT_NAMES [shift], sax::Token::TokenType::CHARACTER);
+	out.emplace_back(SHIFT_NAMES [shiftToInt(shift)], sax::Token::TokenType::CHARACTER);
 	out.emplace_back("shift", sax::Token::TokenType::END_ELEMENT);
 }
 
diff --git a/alib2data/src/automaton/AutomatonToXMLComposer.h b/alib2data/src/automaton/AutomatonToXMLComposer.h
index 39ce199a2ba9eb7d51f395e245ed1ef65e5b96f9..313c67e395f5662f29fb62ad5372a71fdb4e9448 100644
--- a/alib2data/src/automaton/AutomatonToXMLComposer.h
+++ b/alib2data/src/automaton/AutomatonToXMLComposer.h
@@ -13,12 +13,12 @@
 #include <vector>
 #include <set>
 #include <variant>
-#include "Automaton.h"
+#include "AutomatonFeatures.h"
+#include "../regexp/RegExpFeatures.h"
+#include "../alphabet/SymbolFeatures.h"
+#include "../string/StringFeatures.h"
 #include "../sax/Token.h"
 
-#include "common/Shift.h"
-#include "../regexp/RegExp.h"
-
 namespace alib {
 
 template<typename T>
@@ -77,7 +77,7 @@ private:
 	void composeTransitionTo(std::deque<sax::Token>&, const State& state) const;
 	void composeTransitionFrom(std::deque<sax::Token>&, const State& state) const;
 	void composeTransitionFrom(std::deque<sax::Token>&, const std::vector<State> & states) const;
-	void composeTransitionShift(std::deque<sax::Token>&, const Shift shift) const;
+	void composeTransitionShift(std::deque<sax::Token>&, Shift shift) const;
 	void composeTransitionPop(std::deque<sax::Token>&, const std::vector<alphabet::Symbol>& symbols) const;
 	void composeTransitionSinglePop(std::deque<sax::Token>&, const alphabet::Symbol& symbol) const;
 	void composeTransitionPush(std::deque<sax::Token>&, const std::vector<alphabet::Symbol>& symbols) const;
diff --git a/alib2data/src/automaton/common/Shift.cpp b/alib2data/src/automaton/common/Shift.cpp
index 8ca3a6be4ba9df86d42cf874e13a997f092e84bf..fbc79dad58f8241726ea43d503860f270f8a14b5 100644
--- a/alib2data/src/automaton/common/Shift.cpp
+++ b/alib2data/src/automaton/common/Shift.cpp
@@ -11,4 +11,37 @@ namespace automaton {
 
 std::string SHIFT_NAMES[] = {"LEFT", "RIGHT", "NONE", "NOT_SET" };
 
+int shiftToInt(const automaton::Shift& shift) {
+	switch(shift) {
+	case automaton::Shift::LEFT:
+		return 0;
+	case automaton::Shift::RIGHT:
+		return 1;
+	case automaton::Shift::NONE:
+		return 2;
+	case automaton::Shift::NOT_SET:
+		return 3;
+	}
+	return 3;
+}
+
+automaton::Shift intToShift(int value) {
+	switch(value) {
+	case 0:
+		return automaton::Shift::LEFT;
+	case 1:
+		return automaton::Shift::RIGHT;
+	case 2:
+		return automaton::Shift::NONE;
+	case 3:
+		return automaton::Shift::NOT_SET;
+	}
+	return automaton::Shift::NOT_SET;
+}
+
+std::ostream& operator<<(std::ostream& out, const automaton::Shift&) {
+
+	return out;
+}
+
 } /* namepsace automaton */
diff --git a/alib2data/src/automaton/common/Shift.h b/alib2data/src/automaton/common/Shift.h
index 9bd37b10f1868c0b7a98b24806c1191b4f2c03b0..5f9c033bf5fdd8c1c0a2fbf86f10b4988a958b11 100644
--- a/alib2data/src/automaton/common/Shift.h
+++ b/alib2data/src/automaton/common/Shift.h
@@ -16,12 +16,17 @@ namespace automaton {
 /**
  * Represent movement of the reading head in the Turing machine.
  */
-enum Shift {
+enum class Shift {
 	LEFT, RIGHT, NONE, NOT_SET
 };
 
+int shiftToInt(const automaton::Shift& shift);
+automaton::Shift intToShift(int value);
+
 extern std::string SHIFT_NAMES[4];
 
+std::ostream& operator<<(std::ostream& out, const automaton::Shift&);
+
 } /* namespace automaton */
 
 namespace std {
@@ -29,7 +34,7 @@ namespace std {
 template<>
 struct compare<automaton::Shift> {
 	int operator()(const automaton::Shift& first, const automaton::Shift& second) {
-		return first - second;
+		 return automaton::shiftToInt(first) - automaton::shiftToInt(second);
 	}
 };
 
diff --git a/alib2data/src/container/ContainerFeatures.h b/alib2data/src/container/ContainerFeatures.h
index 49a1a35f4117c09a96504c629fc45a6e651f2924..b98acd20480ffa4314417fb60f82f0ce0c7366fa 100644
--- a/alib2data/src/container/ContainerFeatures.h
+++ b/alib2data/src/container/ContainerFeatures.h
@@ -18,6 +18,7 @@ enum class FEATURES {
 };
 
 class Container;
+class ContainerBase;
 
 class ObjectsSet;
 class ObjectsVector;
diff --git a/alib2data/src/container/ContainerToXMLComposer.cpp b/alib2data/src/container/ContainerToXMLComposer.cpp
index c8d9f65915eeac56abf2f32ec4fe82428957bdf1..d7dc9c31161c7bafc60dcf93905f7f989af7d75c 100644
--- a/alib2data/src/container/ContainerToXMLComposer.cpp
+++ b/alib2data/src/container/ContainerToXMLComposer.cpp
@@ -9,6 +9,7 @@
 
 #include "../XmlApi.hpp"
 
+#include "Container.h"
 #include "ContainerClasses.h"
 
 namespace container {
diff --git a/alib2data/src/container/ContainerToXMLComposer.hpp b/alib2data/src/container/ContainerToXMLComposer.hpp
index 7214b89ee0a7a962720ad510a56258a23c20eedb..07502e1b53bcefa2652477bbbfb8c76eaad3a244 100644
--- a/alib2data/src/container/ContainerToXMLComposer.hpp
+++ b/alib2data/src/container/ContainerToXMLComposer.hpp
@@ -9,7 +9,7 @@
 #define CONTAINER_TO_XML_COMPOSER_H_
 
 #include <deque>
-#include "Container.h"
+#include "ContainerFeatures.h"
 #include <variant>
 #include <set>
 #include <vector>
diff --git a/alib2data/src/exception/ExceptionToXMLComposer.h b/alib2data/src/exception/ExceptionToXMLComposer.h
index a8529ab0ff1949dfc5089e0da024d7aa8c533742..611085e8136e4bc3e564e155896860842ceb57de 100644
--- a/alib2data/src/exception/ExceptionToXMLComposer.h
+++ b/alib2data/src/exception/ExceptionToXMLComposer.h
@@ -9,7 +9,7 @@
 #define EXCEPTION_TO_XML_COMPOSER_H_
 
 #include <deque>
-#include "AlibException.h"
+#include "ExceptionFeatures.h"
 #include "../sax/Token.h"
 
 namespace alib {
diff --git a/alib2data/src/grammar/GrammarFeatures.h b/alib2data/src/grammar/GrammarFeatures.h
index 4533db988b2af174386d6e630635b8c72cefc5cb..919b3d2cd95379a04a6f54d3475b4d64054d36af 100644
--- a/alib2data/src/grammar/GrammarFeatures.h
+++ b/alib2data/src/grammar/GrammarFeatures.h
@@ -27,6 +27,7 @@ enum class FEATURES {
 };
 
 class Grammar;
+class GrammarBase;
 
 class LeftLG;
 class LeftRG;
diff --git a/alib2data/src/grammar/GrammarFromXMLParser.h b/alib2data/src/grammar/GrammarFromXMLParser.h
index 30eb28e887d53686bdbdadd4631a160a6921415d..9919933bbe377b5259c0094191cf432caf61846b 100644
--- a/alib2data/src/grammar/GrammarFromXMLParser.h
+++ b/alib2data/src/grammar/GrammarFromXMLParser.h
@@ -14,7 +14,7 @@
 #include <variant>
 #include <vector>
 #include "GrammarFeatures.h"
-#include "../alphabet/Symbol.h"
+#include "../alphabet/SymbolFeatures.h"
 
 namespace alib {
 
diff --git a/alib2data/src/grammar/GrammarToXMLComposer.cpp b/alib2data/src/grammar/GrammarToXMLComposer.cpp
index 7785030f4ea695464479c0476c06305727d78616..38df7374cef142993830b4f53ce9211a60997291 100644
--- a/alib2data/src/grammar/GrammarToXMLComposer.cpp
+++ b/alib2data/src/grammar/GrammarToXMLComposer.cpp
@@ -9,6 +9,7 @@
 
 #include "../XmlApi.hpp"
 
+#include "Grammar.h"
 #include "GrammarClasses.h"
 
 namespace grammar {
diff --git a/alib2data/src/grammar/GrammarToXMLComposer.h b/alib2data/src/grammar/GrammarToXMLComposer.h
index b48f971fe56b9ce2d00e456349ecce9a8d416ab1..7d90a1adcdd2e7fc1ea029cba4ef2028d21c96a4 100644
--- a/alib2data/src/grammar/GrammarToXMLComposer.h
+++ b/alib2data/src/grammar/GrammarToXMLComposer.h
@@ -15,7 +15,8 @@
 #include <map>
 #include <set>
 #include <variant>
-#include "Grammar.h"
+#include "GrammarFeatures.h"
+#include "../alphabet/SymbolFeatures.h"
 #include "../sax/Token.h"
 
 namespace alib {
diff --git a/alib2data/src/graph/GraphFeatures.h b/alib2data/src/graph/GraphFeatures.h
index 0a5e5e8f7734553dfe650f201cccd65870863493..20924e0a5aa128929a3b9cd336ca5590c8c327e8 100644
--- a/alib2data/src/graph/GraphFeatures.h
+++ b/alib2data/src/graph/GraphFeatures.h
@@ -16,9 +16,15 @@ enum class FEATURES {
 };
 
 class Graph;
+class GraphBase;
+
+class Node;
+enum class REPRESENTATION;
 
 class DirectedGraph;
+class DirectedEdge;
 class UndirectedGraph;
+class UndirectedEdge;
 
 } // namespace graph
 
diff --git a/alib2data/src/graph/GraphFromXMLParser.h b/alib2data/src/graph/GraphFromXMLParser.h
index 877154b5b672c48c7bcf0f3698285ffed7272a21..bb415006a7527781a3e67bc0b6367c19ce6a810b 100644
--- a/alib2data/src/graph/GraphFromXMLParser.h
+++ b/alib2data/src/graph/GraphFromXMLParser.h
@@ -10,9 +10,7 @@
 
 #include "../sax/FromXMLParserHelper.h"
 #include "GraphFeatures.h"
-#include "common/Node.h"
-#include "../alphabet/Symbol.h"
-#include "GraphRepresentation.h"
+#include "../alphabet/SymbolFeatures.h"
 
 namespace alib {
 
diff --git a/alib2data/src/graph/GraphToXMLComposer.cpp b/alib2data/src/graph/GraphToXMLComposer.cpp
index af4e64f09c751f850daabf5bcc496af4440d3d82..3dc0210634ec5732e114524b1b93d2750e40d257 100644
--- a/alib2data/src/graph/GraphToXMLComposer.cpp
+++ b/alib2data/src/graph/GraphToXMLComposer.cpp
@@ -9,6 +9,7 @@
 #include "../XmlApi.hpp"
 
 #include "GraphRepresentation.h"
+#include "Graph.h"
 #include "GraphClasses.h"
 
 namespace graph {
diff --git a/alib2data/src/graph/GraphToXMLComposer.h b/alib2data/src/graph/GraphToXMLComposer.h
index a7a3411f77071997f26f08de9a07aaac72d660bf..1e7c1b136ea0445247f1feaf7ad55d2b22937743 100644
--- a/alib2data/src/graph/GraphToXMLComposer.h
+++ b/alib2data/src/graph/GraphToXMLComposer.h
@@ -11,7 +11,7 @@
 #include <set>
 #include <deque>
 
-#include "Graph.h"
+#include "GraphFeatures.h"
 #include "common/GraphElement.h"
 #include "../sax/Token.h"
 
diff --git a/alib2data/src/label/LabelFeatures.h b/alib2data/src/label/LabelFeatures.h
index 8f6721c75722a7b482a937836e22d585fbe80ff3..33eb238f4450fa83ffd3744a37c2eac01ce40d18 100644
--- a/alib2data/src/label/LabelFeatures.h
+++ b/alib2data/src/label/LabelFeatures.h
@@ -20,6 +20,7 @@ enum class FEATURES {
 };
 
 class Label;
+class LabelBase;
 
 class PrimitiveLabel;
 class HexavigesimalLabel;
diff --git a/alib2data/src/label/LabelToXMLComposer.cpp b/alib2data/src/label/LabelToXMLComposer.cpp
index c316f6033c1a6b0792f5d7cacdd1e489b32b6c40..dbd0a3ed8176eecdcdadee6c35dd4e51d7ee6373 100644
--- a/alib2data/src/label/LabelToXMLComposer.cpp
+++ b/alib2data/src/label/LabelToXMLComposer.cpp
@@ -9,6 +9,7 @@
 
 #include "../XmlApi.hpp"
 
+#include "Label.h"
 #include "LabelClasses.h"
 
 namespace label {
diff --git a/alib2data/src/label/LabelToXMLComposer.h b/alib2data/src/label/LabelToXMLComposer.h
index d3cc0d1ff74803f7656a71a3a0f1d39b3ac8b04d..868d103d8849663d2be280065e1f60a17956b04e 100644
--- a/alib2data/src/label/LabelToXMLComposer.h
+++ b/alib2data/src/label/LabelToXMLComposer.h
@@ -9,7 +9,7 @@
 #define LABEL_TO_XML_COMPOSER_H_
 
 #include <deque>
-#include "Label.h"
+#include "LabelFeatures.h"
 #include "../sax/Token.h"
 
 namespace alib {
diff --git a/alib2data/src/object/ObjectFeatures.h b/alib2data/src/object/ObjectFeatures.h
index a0361a23c16f2913a1f7b6521b8a6dd0eeb6b56a..a57aa1f84321b9efed48d3fa7d87bb318886d285 100644
--- a/alib2data/src/object/ObjectFeatures.h
+++ b/alib2data/src/object/ObjectFeatures.h
@@ -15,6 +15,7 @@ enum class FEATURES {
 };
 
 class Object;
+class ObjectBase;
 
 class Void;
 
diff --git a/alib2data/src/object/ObjectFromXMLParser.cpp b/alib2data/src/object/ObjectFromXMLParser.cpp
index 38b2cef5584b453f1b3a49ccf30b98d6ddb9a7f2..e9575438b2eee90f8b2d6aadcabeb9a8eeb8d5b9 100644
--- a/alib2data/src/object/ObjectFromXMLParser.cpp
+++ b/alib2data/src/object/ObjectFromXMLParser.cpp
@@ -12,6 +12,16 @@
 #include "Object.h"
 #include "ObjectClasses.h"
 
+#include "../alphabet/Symbol.h"
+#include "../automaton/Automaton.h"
+#include "../container/Container.h"
+#include "../grammar/Grammar.h"
+#include "../label/Label.h"
+#include "../primitive/Primitive.h"
+#include "../regexp/RegExp.h"
+#include "../string/String.h"
+#include "../tree/Tree.h"
+
 namespace alib {
 
 Object ObjectFromXMLParser::parseObject(std::deque<sax::Token>::iterator& input) const {
diff --git a/alib2data/src/object/ObjectToXMLComposer.h b/alib2data/src/object/ObjectToXMLComposer.h
index a00e3917d9932a0ae9c8ea28de36377dad96be94..a6ff6ee3376d5cf5418c32d7ee66908e7611a324 100644
--- a/alib2data/src/object/ObjectToXMLComposer.h
+++ b/alib2data/src/object/ObjectToXMLComposer.h
@@ -9,7 +9,7 @@
 #define OBJECT_TO_XML_COMPOSER_H_
 
 #include <deque>
-#include "Object.h"
+#include "ObjectFeatures.h"
 #include "../sax/Token.h"
 
 namespace alib {
diff --git a/alib2data/src/primitive/PrimitiveFeatures.h b/alib2data/src/primitive/PrimitiveFeatures.h
index 3fdbc4a8d363731b4a3df43a98f584e01a878ea5..e66479e7a78aef43f2497a5f6273d433ad1b0275 100644
--- a/alib2data/src/primitive/PrimitiveFeatures.h
+++ b/alib2data/src/primitive/PrimitiveFeatures.h
@@ -19,6 +19,7 @@ enum class FEATURES {
 };
 
 class Primitive;
+class PrimitiveBase;
 
 class String;
 class Integer;
diff --git a/alib2data/src/primitive/PrimitiveToXMLComposer.h b/alib2data/src/primitive/PrimitiveToXMLComposer.h
index fab4070830ad445670baf1ac000c061fab033644..328c533fe63a3aeef59f07aa2349dd1bf62e9135 100644
--- a/alib2data/src/primitive/PrimitiveToXMLComposer.h
+++ b/alib2data/src/primitive/PrimitiveToXMLComposer.h
@@ -9,7 +9,7 @@
 #define PRIMITIVE_TO_XML_COMPOSER_H_
 
 #include <deque>
-#include "Primitive.h"
+#include "PrimitiveFeatures.h"
 #include "../sax/Token.h"
 
 namespace alib {
diff --git a/alib2data/src/regexp/RegExpFeatures.h b/alib2data/src/regexp/RegExpFeatures.h
index 71d3d5e6875bc81f021b127c8394c59741d79c87..cd1c24f8fa4e3c681f46a13721ded931fd9794f0 100644
--- a/alib2data/src/regexp/RegExpFeatures.h
+++ b/alib2data/src/regexp/RegExpFeatures.h
@@ -16,6 +16,7 @@ enum class FEATURES {
 };
 
 class RegExp;
+class RegExpBase;
 
 class UnboundedRegExp;
 
diff --git a/alib2data/src/regexp/RegExpToXMLComposer.cpp b/alib2data/src/regexp/RegExpToXMLComposer.cpp
index 3d76f2705075588f38fecc225f333f27bb3c65c9..d9b6ccb8c2cd60936f82ffa07dc9f0787679c1ce 100644
--- a/alib2data/src/regexp/RegExpToXMLComposer.cpp
+++ b/alib2data/src/regexp/RegExpToXMLComposer.cpp
@@ -8,6 +8,7 @@
 #include "RegExpToXMLComposer.h"
 #include "../XmlApi.hpp"
 
+#include "RegExp.h"
 #include "RegExpClasses.h"
 
 #include "unbounded/UnboundedRegExpElements.h"
diff --git a/alib2data/src/regexp/RegExpToXMLComposer.h b/alib2data/src/regexp/RegExpToXMLComposer.h
index 314cf322efa796a3207fc83d21fb813b7c322489..00b98c422ea88c8c4ff3363c75b566f5ec620e45 100644
--- a/alib2data/src/regexp/RegExpToXMLComposer.h
+++ b/alib2data/src/regexp/RegExpToXMLComposer.h
@@ -9,7 +9,7 @@
 #define REG_EXP_TO_XML_COMPOSER_H_
 
 #include <deque>
-#include "RegExp.h"
+#include "RegExpFeatures.h"
 #include "unbounded/UnboundedRegExpElement.h"
 #include "formal/FormalRegExpElement.h"
 #include "../sax/Token.h"
diff --git a/alib2data/src/string/StringFeatures.h b/alib2data/src/string/StringFeatures.h
index c1f954e132d7c1145176aa6f64ccd982b8734573..e8187b712a59b8820f7a5e0b593903807ce6a6e8 100644
--- a/alib2data/src/string/StringFeatures.h
+++ b/alib2data/src/string/StringFeatures.h
@@ -17,6 +17,7 @@ enum class FEATURES {
 };
 
 class String;
+class StringBase;
 
 class Epsilon;
 class LinearString;
diff --git a/alib2data/src/string/StringFromXMLParser.h b/alib2data/src/string/StringFromXMLParser.h
index 0903832daa73424c0fce4c5ea44eefe34416dbd2..78e655c6fe067c6db5a95a3e019a8dbae336eab7 100644
--- a/alib2data/src/string/StringFromXMLParser.h
+++ b/alib2data/src/string/StringFromXMLParser.h
@@ -12,7 +12,7 @@
 #include <vector>
 #include <set>
 #include "StringFeatures.h"
-#include "../alphabet/Symbol.h"
+#include "../alphabet/SymbolFeatures.h"
 
 namespace alib {
 
diff --git a/alib2data/src/string/StringToXMLComposer.cpp b/alib2data/src/string/StringToXMLComposer.cpp
index 23dd1f74e45f8a90e062a9a62de9e12f4b707e76..7508195a1f6c7cd87406e11001401f8c46995069 100644
--- a/alib2data/src/string/StringToXMLComposer.cpp
+++ b/alib2data/src/string/StringToXMLComposer.cpp
@@ -8,6 +8,7 @@
 #include "StringToXMLComposer.h"
 #include "../XmlApi.hpp"
 
+#include "String.h"
 #include "StringClasses.h"
 
 namespace string {
diff --git a/alib2data/src/string/StringToXMLComposer.h b/alib2data/src/string/StringToXMLComposer.h
index aba820c43797e57908970e252f93ca530a06f6d0..6c4ab396ba718b3eacc9ee26728f016a2733bf1f 100644
--- a/alib2data/src/string/StringToXMLComposer.h
+++ b/alib2data/src/string/StringToXMLComposer.h
@@ -9,7 +9,7 @@
 #define STRING_TO_XML_COMPOSER_H_
 
 #include <deque>
-#include "String.h"
+#include "StringFeatures.h"
 #include "../sax/Token.h"
 
 namespace alib {
diff --git a/alib2data/src/tree/TreeFeatures.h b/alib2data/src/tree/TreeFeatures.h
index ebc94bef348a1f72903ac1b3412d12055937bfb4..8c7e94ac7b63080d5fee745db896723d7699d87f 100644
--- a/alib2data/src/tree/TreeFeatures.h
+++ b/alib2data/src/tree/TreeFeatures.h
@@ -22,6 +22,7 @@ enum class FEATURES {
 };
 
 class Tree;
+class TreeBase;
 
 class RankedTree;
 class RankedPattern;
diff --git a/alib2data/src/tree/TreeFromXMLParser.h b/alib2data/src/tree/TreeFromXMLParser.h
index 5131a5be765f0708ba5fe5566622534e1709b791..3b14bffcecf469f058a5727a0726f0228b6fdb39 100644
--- a/alib2data/src/tree/TreeFromXMLParser.h
+++ b/alib2data/src/tree/TreeFromXMLParser.h
@@ -15,7 +15,7 @@
 #include <variant>
 #include <vector>
 
-#include "../alphabet/Symbol.h"
+#include "../alphabet/SymbolFeatures.h"
 
 namespace alib {
 
diff --git a/alib2data/src/tree/TreeToXMLComposer.cpp b/alib2data/src/tree/TreeToXMLComposer.cpp
index 340f2d439baa8b5e5088414b59ea07afac883e8d..ba1b5e4cdac26503f3d3908f8ce73b39a617c6c6 100644
--- a/alib2data/src/tree/TreeToXMLComposer.cpp
+++ b/alib2data/src/tree/TreeToXMLComposer.cpp
@@ -7,6 +7,7 @@
 
 #include "TreeToXMLComposer.h"
 #include "../XmlApi.hpp"
+#include "Tree.h"
 #include "TreeClasses.h"
 
 namespace tree {
diff --git a/alib2data/src/tree/TreeToXMLComposer.h b/alib2data/src/tree/TreeToXMLComposer.h
index c807678c58bdb48ae684c859d5179a31dcc69957..4204168175982a70fd9d46b420928c36bd576305 100644
--- a/alib2data/src/tree/TreeToXMLComposer.h
+++ b/alib2data/src/tree/TreeToXMLComposer.h
@@ -9,7 +9,8 @@
 #define TREE_TO_XML_COMPOSER_H_
 
 #include <deque>
-#include "Tree.h"
+#include "TreeFeatures.h"
+#include "../alphabet/SymbolFeatures.h"
 #include "../sax/Token.h"
 #include <set>
 
diff --git a/astat2/src/AutomataSettings.h b/astat2/src/AutomataSettings.h
index 3e39f9596a1a2cbcbdd94d1b9bb75def51a55eed..97b59fe0d7bbd73bab3ac0d769dda039978d5fa1 100644
--- a/astat2/src/AutomataSettings.h
+++ b/astat2/src/AutomataSettings.h
@@ -1,5 +1,5 @@
 /*
- * Settings.h
+ * AutomataSettings.h
  *
  *  Created on: 26. 3. 2014
  *	  Author: Jan Travnicek
@@ -18,4 +18,4 @@ struct AutomataSettings {
 	PrintingOptions transitions;
 };
 
-#endif /* __AUTOMATA_SETTINGS_H_ */
+#endif /* __AUTOMATA_SETTINGS_H__ */
diff --git a/astat2/src/GrammarSettings.h b/astat2/src/GrammarSettings.h
new file mode 100644
index 0000000000000000000000000000000000000000..ece01e5b7a53658fcbd099fd9322b3b997413d71
--- /dev/null
+++ b/astat2/src/GrammarSettings.h
@@ -0,0 +1,20 @@
+/*
+ * GrammarSettings.h
+ *
+ *  Created on: 26. 3. 2014
+ *	  Author: Jan Travnicek
+ */
+
+#ifndef __GRAMMAR_SETTINGS_H__
+#define __GRAMMAR_SETTINGS_H__
+
+#include "PrintingOptions.h"
+
+struct GrammarSettings {
+	PrintingOptions nonterminals;
+	PrintingOptions terminals;
+	PrintingOptions initialNonterminal;
+	PrintingOptions rules;
+};
+
+#endif /* __GRAMMAR_SETTINGS_H__ */
diff --git a/astat2/src/GrammarStat.h b/astat2/src/GrammarStat.h
new file mode 100644
index 0000000000000000000000000000000000000000..690dbbab8f09470df92d53589439f8fe166acac1
--- /dev/null
+++ b/astat2/src/GrammarStat.h
@@ -0,0 +1,16 @@
+/*
+ * GrammarStat.h
+ *
+ *  Created on: 20. 9. 2014
+ *	  Author: Jan Travnicek
+ */
+
+#ifndef GRAMMAR_STAT_H_
+#define GRAMMAR_STAT_H_
+
+#include "grammar/Grammar.h"
+
+#include "GrammarSettings.h"
+
+
+#endif /* GRAMMAR_STAT_H_ */
diff --git a/astat2/src/RegExpSettings.h b/astat2/src/RegExpSettings.h
new file mode 100644
index 0000000000000000000000000000000000000000..6c888c86ffb001eb702daceb426612bea4689a6c
--- /dev/null
+++ b/astat2/src/RegExpSettings.h
@@ -0,0 +1,18 @@
+/*
+ * RegExpSettings.h
+ *
+ *  Created on: 26. 3. 2014
+ *	  Author: Jan Travnicek
+ */
+
+#ifndef __REG_EXP_SETTINGS_H__
+#define __REG_EXP_SETTINGS_H__
+
+#include "PrintingOptions.h"
+
+struct RegExpSettings {
+	PrintingOptions nodes;
+	PrintingOptions alphabet;
+};
+
+#endif /* __REG_EXP_SETTINGS_H__ */
diff --git a/astat2/src/RegExpStat.h b/astat2/src/RegExpStat.h
new file mode 100644
index 0000000000000000000000000000000000000000..be57cf81e5e495bbe4a937dae79aea40a3fe8da9
--- /dev/null
+++ b/astat2/src/RegExpStat.h
@@ -0,0 +1,16 @@
+/*
+ * RegExpStat.h
+ *
+ *  Created on: 20. 9. 2014
+ *	  Author: Jan Travnicek
+ */
+
+#ifndef REG_EXP_STATS_H_
+#define REG_EXP_STATS_H_
+
+#include "regexp/RegExp.h"
+
+#include "RegExpSettings.h"
+
+
+#endif /* REG_EXP_STATS_H_ */
diff --git a/astat2/src/astat.cpp b/astat2/src/astat.cpp
index 9e40a770befc63393199c0e91efa1898e1176485..0570db9ed967b4e89107657b6bf8afc46cd985c0 100644
--- a/astat2/src/astat.cpp
+++ b/astat2/src/astat.cpp
@@ -11,10 +11,9 @@
 #include <factory/XmlDataFactory.hpp>
 #include <exception/AlibException.h>
 
-#include "AutomataSettings.h"
 #include "AutomataStat.h"
-
-#include "SetSettings.h"
+#include "GrammarStat.h"
+#include "RegExpStat.h"
 #include "SetStat.h"
 
 PrintingOptions translatePrintingOptions(std::string value) {