diff --git a/acast2/src/cast/GrammarCastVisitor.cpp b/acast2/src/cast/GrammarCastVisitor.cpp
index 295ceb6d7774573d9a4c8f07ee290cd48f8c6a36..3b03a0d720fd8500786e24b0a05f1fc4a498dcad 100644
--- a/acast2/src/cast/GrammarCastVisitor.cpp
+++ b/acast2/src/cast/GrammarCastVisitor.cpp
@@ -6,6 +6,8 @@
  */
 
 #include "GrammarCastVisitor.h"
+#include "grammar/GrammarClasses.h"
+
 #include "../CastVisitorBase.hpp"
 
 typedef cast_base_helper< grammar::VisitableGrammarBase::const_visitor_type, grammar::GrammarBase, alib::GrammarTypes, grammar::Grammar, alib::GrammarTypes > GrammarCastVisitorType;
diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp
index 18409148ce0d0c01cd59afc4ca64f26dc4413f6e..5c1f6c80dda6b0700568d1934957344f3baac944 100644
--- a/alib2data/src/XmlApi.cpp
+++ b/alib2data/src/XmlApi.cpp
@@ -15,6 +15,7 @@
 #include "string/StringClasses.h"
 #include "automaton/AutomatonClasses.h"
 #include "container/ContainerClasses.h"
+#include "grammar/GrammarClasses.h"
 
 namespace alib {
 
diff --git a/alib2data/src/grammar/ContextFree/CFG.cpp b/alib2data/src/grammar/ContextFree/CFG.cpp
index 4944b190e1b22c143a49284b089a58866513ebd1..7162f89776a340e9c6bdc6a8a0ffb9ef0aaaefdd 100644
--- a/alib2data/src/grammar/ContextFree/CFG.cpp
+++ b/alib2data/src/grammar/ContextFree/CFG.cpp
@@ -8,6 +8,7 @@
 #include "CFG.h"
 #include "../GrammarException.h"
 #include <algorithm>
+#include <sstream>
 
 #include "../../alphabet/Symbol.h"
 
diff --git a/alib2data/src/grammar/ContextFree/CFG.h b/alib2data/src/grammar/ContextFree/CFG.h
index 61816d597df493413d0fba77b7c7ea41ed686ce3..55ee73ea94c02e4ea1de0e35df8149b1a80340ad 100644
--- a/alib2data/src/grammar/ContextFree/CFG.h
+++ b/alib2data/src/grammar/ContextFree/CFG.h
@@ -11,7 +11,6 @@
 #include "../GrammarBase.h"
 #include <map>
 #include <vector>
-#include <sstream>
 #include "../common/TerminalNonterminalAlphabetInitialSymbol.h"
 
 namespace grammar {
diff --git a/alib2data/src/grammar/ContextFree/CNF.cpp b/alib2data/src/grammar/ContextFree/CNF.cpp
index 628a472912cbbb2e60a25f8eefe847660a88ab5d..875c4b960ca83958821f10ee261003f335495a1e 100644
--- a/alib2data/src/grammar/ContextFree/CNF.cpp
+++ b/alib2data/src/grammar/ContextFree/CNF.cpp
@@ -8,6 +8,7 @@
 #include "CNF.h"
 #include "../GrammarException.h"
 #include <algorithm>
+#include <sstream>
 
 #include "../../alphabet/Symbol.h"
 
diff --git a/alib2data/src/grammar/ContextFree/CNF.h b/alib2data/src/grammar/ContextFree/CNF.h
index 9c68f2bdf0897ac29e338c95cf9f9b5d3f97a362..49111365669141437f04641fdc03cf804b5fa039 100644
--- a/alib2data/src/grammar/ContextFree/CNF.h
+++ b/alib2data/src/grammar/ContextFree/CNF.h
@@ -11,7 +11,6 @@
 #include "../GrammarBase.h"
 #include <map>
 #include <vector>
-#include <sstream>
 #include <variant>
 #include "../common/TerminalNonterminalAlphabetInitialSymbol.h"
 
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
index 920354915052bb834acab9e44e4b7b7ca0372185..0df67d4f80d82fa55442b2a347a2f75961abe190 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
@@ -8,6 +8,7 @@
 #include "EpsilonFreeCFG.h"
 #include "../GrammarException.h"
 #include <algorithm>
+#include <sstream>
 
 #include "../../alphabet/Symbol.h"
 
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
index 901f307ef2e059146fc03a06c71c363e101fdbf1..8a7589b80db729925a58f26704693d2a96e58cb1 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
@@ -11,7 +11,6 @@
 #include "../GrammarBase.h"
 #include <map>
 #include <vector>
-#include <sstream>
 #include "../common/TerminalNonterminalAlphabetInitialSymbol.h"
 
 namespace grammar {
diff --git a/alib2data/src/grammar/ContextFree/GNF.cpp b/alib2data/src/grammar/ContextFree/GNF.cpp
index fa6330790764d7d430cbecbaa2e989ec3f55ebca..ce821d8e23ab2e02b15014a544ed0afa0c7871f7 100644
--- a/alib2data/src/grammar/ContextFree/GNF.cpp
+++ b/alib2data/src/grammar/ContextFree/GNF.cpp
@@ -8,6 +8,7 @@
 #include "GNF.h"
 #include "../GrammarException.h"
 #include <algorithm>
+#include <sstream>
 
 #include "../../alphabet/Symbol.h"
 
diff --git a/alib2data/src/grammar/ContextFree/GNF.h b/alib2data/src/grammar/ContextFree/GNF.h
index 3ecaf3607ed14b7070708f5188b290d1a959887d..c693249bd99fc9f286329c930e44ba0849ab8424 100644
--- a/alib2data/src/grammar/ContextFree/GNF.h
+++ b/alib2data/src/grammar/ContextFree/GNF.h
@@ -11,7 +11,6 @@
 #include "../GrammarBase.h"
 #include <map>
 #include <vector>
-#include <sstream>
 #include "../common/TerminalNonterminalAlphabetInitialSymbol.h"
 
 namespace grammar {
diff --git a/alib2data/src/grammar/ContextFree/LG.cpp b/alib2data/src/grammar/ContextFree/LG.cpp
index 0e193a764ee90e8944b326845980e01d2790136d..e5ed22a382cc498ff04ea2b7056968a950866056 100644
--- a/alib2data/src/grammar/ContextFree/LG.cpp
+++ b/alib2data/src/grammar/ContextFree/LG.cpp
@@ -8,6 +8,7 @@
 #include "LG.h"
 #include "../GrammarException.h"
 #include <algorithm>
+#include <sstream>
 
 #include "../../alphabet/Symbol.h"
 
diff --git a/alib2data/src/grammar/ContextFree/LG.h b/alib2data/src/grammar/ContextFree/LG.h
index 7b95823e1e58b6765e2f78c5beca9b630e82a501..400426173e6e2773c1495e4b89c1880a51d89748 100644
--- a/alib2data/src/grammar/ContextFree/LG.h
+++ b/alib2data/src/grammar/ContextFree/LG.h
@@ -12,7 +12,6 @@
 #include <map>
 #include <tuple>
 #include <vector>
-#include <sstream>
 #include <variant>
 #include "../common/TerminalNonterminalAlphabetInitialSymbol.h"
 
diff --git a/alib2data/src/grammar/Grammar.h b/alib2data/src/grammar/Grammar.h
index 4e26f7b034f2a077d47a5fc90db4c44eb84c6265..bfdeecc9431d9f1795ae9df78f3d99b1c9bb6af4 100644
--- a/alib2data/src/grammar/Grammar.h
+++ b/alib2data/src/grammar/Grammar.h
@@ -14,9 +14,20 @@
 namespace grammar {
 
 /**
- * Wrapper around automata.
+ * Wrapper around grammars.
  */
-typedef alib::wrapper<GrammarBase> Grammar;
+class Grammar : public alib::wrapper<GrammarBase> {
+public:
+	explicit Grammar(GrammarBase* data) : alib::wrapper<GrammarBase>(data) {
+	}
+
+	explicit Grammar(const GrammarBase& data) : alib::wrapper<GrammarBase>(data.clone()) {
+	}
+
+	explicit Grammar(GrammarBase&& data) : alib::wrapper<GrammarBase>(std::move(data).plunder()) {
+	}
+
+};
 
 } /* namespace grammar */
 
diff --git a/alib2data/src/grammar/GrammarClasses.h b/alib2data/src/grammar/GrammarClasses.h
new file mode 100644
index 0000000000000000000000000000000000000000..06dd80e08f52d786f3441c37819eaa18f2df1c5f
--- /dev/null
+++ b/alib2data/src/grammar/GrammarClasses.h
@@ -0,0 +1,28 @@
+/*
+ * GrammarClasses.h
+ *
+ *  Created on: Jun 19, 2014
+ *      Author: Jan Travnicek
+ */
+
+#ifndef GRAMMAR_CLASSES_H_
+#define GRAMMAR_CLASSES_H_
+
+#include "Regular/RightRG.h"
+#include "Regular/LeftRG.h"
+#include "Regular/RightLG.h"
+#include "Regular/LeftLG.h"
+
+#include "ContextFree/LG.h"
+#include "ContextFree/CFG.h"
+#include "ContextFree/EpsilonFreeCFG.h"
+#include "ContextFree/GNF.h"
+#include "ContextFree/CNF.h"
+
+#include "ContextSensitive/CSG.h"
+#include "ContextSensitive/NonContractingGrammar.h"
+
+#include "Unrestricted/ContextPreservingUnrestrictedGrammar.h"
+#include "Unrestricted/UnrestrictedGrammar.h"
+
+#endif /* GRAMMAR_CLASSES_H_ */
diff --git a/alib2data/src/grammar/GrammarFeatures.h b/alib2data/src/grammar/GrammarFeatures.h
index 4387ca0793608305d8c6e007ed516a3cb10953fd..4533db988b2af174386d6e630635b8c72cefc5cb 100644
--- a/alib2data/src/grammar/GrammarFeatures.h
+++ b/alib2data/src/grammar/GrammarFeatures.h
@@ -26,6 +26,22 @@ enum class FEATURES {
 	UNRESTRICTED_GRAMMAR
 };
 
+class Grammar;
+
+class LeftLG;
+class LeftRG;
+class RightLG;
+class RightRG;
+class LG;
+class CFG;
+class EpsilonFreeCFG;
+class CNF;
+class GNF;
+class CSG;
+class NonContractingGrammar;
+class ContextPreservingUnrestrictedGrammar;
+class UnrestrictedGrammar;
+
 } /* namespace grammar */
 
 #endif /* GRAMMAR_FEATURES_H_ */
diff --git a/alib2data/src/grammar/GrammarFromStringLexer.cpp b/alib2data/src/grammar/GrammarFromStringLexer.cpp
index 23c22495e885457194b642d3ff191f93c6a25a19..aa68a0f8f686ac16dfcd8273588df63b71a76975 100644
--- a/alib2data/src/grammar/GrammarFromStringLexer.cpp
+++ b/alib2data/src/grammar/GrammarFromStringLexer.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "GrammarFromStringLexer.h"
-#include <istream>
 
 namespace grammar {
 
diff --git a/alib2data/src/grammar/GrammarFromStringLexer.h b/alib2data/src/grammar/GrammarFromStringLexer.h
index 6043b3353c52bfe7d3294bfd56847ca02f658696..351ce84b9e59c0a209f4a01e50f6768414583b1f 100644
--- a/alib2data/src/grammar/GrammarFromStringLexer.h
+++ b/alib2data/src/grammar/GrammarFromStringLexer.h
@@ -9,7 +9,7 @@
 #define GRAMMAR_FROM_STRING_LEXER_H_
 
 #include <string>
-#include <sstream>
+#include <istream>
 
 namespace grammar {
 
diff --git a/alib2data/src/grammar/GrammarFromStringParser.cpp b/alib2data/src/grammar/GrammarFromStringParser.cpp
index fd67483e42b62c97d72c3520f1a1245c3f0236dd..78897a8fec498f9b6fb791118711cd85fcdce388 100644
--- a/alib2data/src/grammar/GrammarFromStringParser.cpp
+++ b/alib2data/src/grammar/GrammarFromStringParser.cpp
@@ -9,22 +9,7 @@
 
 #include "../exception/AlibException.h"
 
-#include "Regular/RightRG.h"
-#include "Regular/LeftRG.h"
-#include "Regular/RightLG.h"
-#include "Regular/LeftLG.h"
-
-#include "ContextFree/LG.h"
-#include "ContextFree/CFG.h"
-#include "ContextFree/EpsilonFreeCFG.h"
-#include "ContextFree/GNF.h"
-#include "ContextFree/CNF.h"
-
-#include "ContextSensitive/CSG.h"
-#include "ContextSensitive/NonContractingGrammar.h"
-
-#include "Unrestricted/ContextPreservingUnrestrictedGrammar.h"
-#include "Unrestricted/UnrestrictedGrammar.h"
+#include "GrammarClasses.h"
 
 #include "../StringApi.hpp"
 
diff --git a/alib2data/src/grammar/GrammarFromStringParser.h b/alib2data/src/grammar/GrammarFromStringParser.h
index dc070dfa3b10bfcb4488f82308003fdbd538a050..3c78e817d3ab1e14d0b21782f1cb19b6f98b981b 100644
--- a/alib2data/src/grammar/GrammarFromStringParser.h
+++ b/alib2data/src/grammar/GrammarFromStringParser.h
@@ -9,7 +9,6 @@
 #define GRAMMAR_FROM_STRING_PARSER_H_
 
 #include "GrammarFromStringLexer.h"
-#include "Grammar.h"
 #include "GrammarFeatures.h"
 #include "../alphabet/Symbol.h"
 #include <set>
diff --git a/alib2data/src/grammar/GrammarFromXMLParser.cpp b/alib2data/src/grammar/GrammarFromXMLParser.cpp
index 43849203e95bb49a7697de5513e90e5a985e543c..54214f11d3183aa3132e68f08be5cb687e4e0879 100644
--- a/alib2data/src/grammar/GrammarFromXMLParser.cpp
+++ b/alib2data/src/grammar/GrammarFromXMLParser.cpp
@@ -6,12 +6,12 @@
  */
 
 #include "GrammarFromXMLParser.h"
-
 #include "../sax/ParserException.h"
-#include "../alphabet/LabeledSymbol.h"
-
 #include "../XmlApi.hpp"
 
+#include "Grammar.h"
+#include "GrammarClasses.h"
+
 namespace grammar {
 
 Grammar GrammarFromXMLParser::parseGrammar(std::deque<sax::Token>::iterator& input) const {
diff --git a/alib2data/src/grammar/GrammarFromXMLParser.h b/alib2data/src/grammar/GrammarFromXMLParser.h
index 23527cb9d242dab7ce517ab379c0e351a9d9edde..30eb28e887d53686bdbdadd4631a160a6921415d 100644
--- a/alib2data/src/grammar/GrammarFromXMLParser.h
+++ b/alib2data/src/grammar/GrammarFromXMLParser.h
@@ -9,26 +9,12 @@
 #define GRAMMAR_FROM_XML_PARSER_H_
 
 #include "../sax/FromXMLParserHelper.h"
-#include "Grammar.h"
-#include "GrammarFeatures.h"
-#include "Regular/LeftLG.h"
-#include "Regular/LeftRG.h"
-#include "Regular/RightLG.h"
-#include "Regular/RightRG.h"
-#include "ContextFree/LG.h"
-#include "ContextFree/CFG.h"
-#include "ContextFree/EpsilonFreeCFG.h"
-#include "ContextFree/CNF.h"
-#include "ContextFree/GNF.h"
-#include "ContextSensitive/CSG.h"
-#include "ContextSensitive/NonContractingGrammar.h"
-#include "Unrestricted/ContextPreservingUnrestrictedGrammar.h"
-#include "Unrestricted/UnrestrictedGrammar.h"
-
 #include <deque>
 #include <set>
 #include <variant>
-#include "../sax/Token.h"
+#include <vector>
+#include "GrammarFeatures.h"
+#include "../alphabet/Symbol.h"
 
 namespace alib {
 
diff --git a/alib2data/src/grammar/GrammarToStringComposer.cpp b/alib2data/src/grammar/GrammarToStringComposer.cpp
index f106f61f4d905ca8dfba20114859a96fe4984b74..3f4bbaa0aede0454f12b4164784a85e970f42434 100644
--- a/alib2data/src/grammar/GrammarToStringComposer.cpp
+++ b/alib2data/src/grammar/GrammarToStringComposer.cpp
@@ -1,23 +1,12 @@
-#include "GrammarToStringComposer.h"
-#include <sstream>
-
-#include "Regular/RightRG.h"
-#include "Regular/RightLG.h"
-#include "Regular/LeftRG.h"
-#include "Regular/LeftLG.h"
-
-#include "ContextFree/CFG.h"
-#include "ContextFree/EpsilonFreeCFG.h"
-#include "ContextFree/LG.h"
-#include "ContextFree/CNF.h"
-#include "ContextFree/GNF.h"
-
-#include "ContextSensitive/CSG.h"
-#include "ContextSensitive/NonContractingGrammar.h"
-
-#include "Unrestricted/ContextPreservingUnrestrictedGrammar.h"
-#include "Unrestricted/UnrestrictedGrammar.h"
+/*
+ * GrammarToStringComposer.cpp
+ *
+ *  Created on: Nov 23, 2013
+ *      Author: Jan Travnicek
+ */
 
+#include "GrammarToStringComposer.h"
+#include "GrammarClasses.h"
 #include "../StringApi.hpp"
 
 namespace grammar {
diff --git a/alib2data/src/grammar/GrammarToStringComposer.h b/alib2data/src/grammar/GrammarToStringComposer.h
index 5c092076d4d2bbae1b78d962286054fa6a916c26..ad353fe16af2fc5a03bf9cfd467a52198426298a 100644
--- a/alib2data/src/grammar/GrammarToStringComposer.h
+++ b/alib2data/src/grammar/GrammarToStringComposer.h
@@ -1,13 +1,9 @@
 #ifndef GRAMMAR_TO_STRING_COMPOSER_H_
 #define GRAMMAR_TO_STRING_COMPOSER_H_
 
-#include <iostream>
+#include <ostream>
 #include "Grammar.h"
 
-#include <map>
-#include <list>
-#include <set>
-
 namespace grammar {
 
 class GrammarToStringComposer : public VisitableGrammarBase::const_visitor_type {
diff --git a/alib2data/src/grammar/GrammarToXMLComposer.cpp b/alib2data/src/grammar/GrammarToXMLComposer.cpp
index 0cde5b137d7b523ea8342f56bc7fcb03fb9efced..7785030f4ea695464479c0476c06305727d78616 100644
--- a/alib2data/src/grammar/GrammarToXMLComposer.cpp
+++ b/alib2data/src/grammar/GrammarToXMLComposer.cpp
@@ -6,10 +6,11 @@
  */
 
 #include "GrammarToXMLComposer.h"
-#include "../alphabet/BlankSymbol.h"
 
 #include "../XmlApi.hpp"
 
+#include "GrammarClasses.h"
+
 namespace grammar {
 
 void GrammarToXMLComposer::compose(std::deque<sax::Token>& out, const GrammarBase& grammar) const {
diff --git a/alib2data/src/grammar/GrammarToXMLComposer.h b/alib2data/src/grammar/GrammarToXMLComposer.h
index 6481191f08249798ac97dbd30fd3193b2a9647e2..b48f971fe56b9ce2d00e456349ecce9a8d416ab1 100644
--- a/alib2data/src/grammar/GrammarToXMLComposer.h
+++ b/alib2data/src/grammar/GrammarToXMLComposer.h
@@ -10,20 +10,12 @@
 
 #include <string>
 #include <deque>
+#include <vector>
+#include <tuple>
+#include <map>
+#include <set>
+#include <variant>
 #include "Grammar.h"
-#include "Regular/LeftLG.h"
-#include "Regular/LeftRG.h"
-#include "Regular/RightLG.h"
-#include "Regular/RightRG.h"
-#include "ContextFree/LG.h"
-#include "ContextFree/CFG.h"
-#include "ContextFree/EpsilonFreeCFG.h"
-#include "ContextFree/CNF.h"
-#include "ContextFree/GNF.h"
-#include "ContextSensitive/CSG.h"
-#include "ContextSensitive/NonContractingGrammar.h"
-#include "Unrestricted/ContextPreservingUnrestrictedGrammar.h"
-#include "Unrestricted/UnrestrictedGrammar.h"
 #include "../sax/Token.h"
 
 namespace alib {
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index f700b5bcd0810db822ecd444be8cf28044e4a48b..24ca799a4f0d9ca0180003977dcb998a8374ae13 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -18,24 +18,7 @@
 #include "ObjectFeatures.h"
 #include "../exception/ExceptionFeatures.h"
 #include "../automaton/AutomatonFeatures.h"
-
-namespace grammar {
-
-class LeftLG;
-class LeftRG;
-class RightLG;
-class RightRG;
-class LG;
-class CFG;
-class EpsilonFreeCFG;
-class CNF;
-class GNF;
-class CSG;
-class NonContractingGrammar;
-class ContextPreservingUnrestrictedGrammar;
-class UnrestrictedGrammar;
-
-}
+#include "../grammar/GrammarFeatures.h"
 
 namespace graph {
 
diff --git a/alib2data/test-src/grammar/GrammarTest.cpp b/alib2data/test-src/grammar/GrammarTest.cpp
index a905842685e7334d85d42174e063512737f9749d..4fec2c3b82b059daef6cf9f8353d633f86789379 100644
--- a/alib2data/test-src/grammar/GrammarTest.cpp
+++ b/alib2data/test-src/grammar/GrammarTest.cpp
@@ -5,6 +5,19 @@
 #include "sax/SaxComposeInterface.h"
 
 #include "grammar/Unrestricted/UnrestrictedGrammar.h"
+#include "grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h"
+
+#include "grammar/Regular/RightRG.h"
+#include "grammar/Regular/RightLG.h"
+
+#include "grammar/ContextFree/LG.h"
+#include "grammar/ContextFree/EpsilonFreeCFG.h"
+#include "grammar/ContextFree/CFG.h"
+#include "grammar/ContextFree/CNF.h"
+#include "grammar/ContextFree/GNF.h"
+
+#include "grammar/ContextSensitive/CSG.h"
+#include "grammar/ContextSensitive/NonContractingGrammar.h"
 
 #include "factory/XmlDataFactory.hpp"
 #include "factory/StringDataFactory.hpp"