diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp
index 716ecdc511f16a48b7454f3e51ea7ba66ced2d8c..aa44642a314e7b0903d334f79f64adbc77fd62b9 100644
--- a/alib2data/src/XmlApi.cpp
+++ b/alib2data/src/XmlApi.cpp
@@ -7,6 +7,19 @@
 
 #include "XmlApi.hpp"
 
+#include "alphabet/LabeledSymbol.h"
+#include "alphabet/BlankSymbol.h"
+#include "alphabet/BottomOfTheStackSymbol.h"
+#include "alphabet/BarSymbol.h"
+#include "alphabet/VariablesBarSymbol.h"
+#include "alphabet/StartSymbol.h"
+#include "alphabet/EndSymbol.h"
+#include "alphabet/RankedSymbol.h"
+#include "alphabet/SymbolPairSymbol.h"
+#include "alphabet/SymbolSetSymbol.h"
+#include "alphabet/SubtreeWildcardSymbol.h"
+#include "alphabet/UniqueSymbol.h"
+
 namespace alib {
 
 const label::LabelFromXMLParser FromXMLParsers::labelParser;
diff --git a/alib2data/src/alphabet/Alphabet.h b/alib2data/src/alphabet/Alphabet.h
index 0dce3a5704b3d5032f61927e69113ea5a5c763fc..806fc6bae2b5da660535c76a55a2f0b4de603b8a 100644
--- a/alib2data/src/alphabet/Alphabet.h
+++ b/alib2data/src/alphabet/Alphabet.h
@@ -8,10 +8,9 @@
 #ifndef ALPHABET_H_
 #define ALPHABET_H_
 
-#include <iostream>
 #include <set>
 
-#include "../alphabet/Symbol.h"
+#include "Symbol.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/BarSymbol.h b/alib2data/src/alphabet/BarSymbol.h
index 11cae0120c7986c94bfc8de978daa32a3ce7653e..fcb16661e2a5286e2ddcfe1cb40bbd41e1a33a24 100644
--- a/alib2data/src/alphabet/BarSymbol.h
+++ b/alib2data/src/alphabet/BarSymbol.h
@@ -8,7 +8,7 @@
 #ifndef BAR_SYMBOL_H_
 #define BAR_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/BlankSymbol.h b/alib2data/src/alphabet/BlankSymbol.h
index f404638d5113d3ca96f4bdb67251c3f636b9dfb6..36096a238d187e6744e1b586bde95a723fc3454d 100644
--- a/alib2data/src/alphabet/BlankSymbol.h
+++ b/alib2data/src/alphabet/BlankSymbol.h
@@ -8,7 +8,7 @@
 #ifndef BLANK_SYMBOL_H_
 #define BLANK_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/BottomOfTheStackSymbol.h b/alib2data/src/alphabet/BottomOfTheStackSymbol.h
index 187781882f5d86101110402bc1fad84a074e0f48..0fc54fcf27cc706ffc6874ab55c4ac44460f86e9 100644
--- a/alib2data/src/alphabet/BottomOfTheStackSymbol.h
+++ b/alib2data/src/alphabet/BottomOfTheStackSymbol.h
@@ -8,7 +8,7 @@
 #ifndef BOTTOM_OF_THE_STACK_SYMBOL_H_
 #define BOTTOM_OF_THE_STACK_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/EndSymbol.h b/alib2data/src/alphabet/EndSymbol.h
index c71c829f1ad8ed06b0a7c8eba00c25a8c94a6d92..ab6c21b4cc505b0d0574d3d095704f6092293de9 100644
--- a/alib2data/src/alphabet/EndSymbol.h
+++ b/alib2data/src/alphabet/EndSymbol.h
@@ -8,7 +8,7 @@
 #ifndef END_SYMBOL_H_
 #define END_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/LabeledSymbol.h b/alib2data/src/alphabet/LabeledSymbol.h
index 32aa076f1baae60212b7b096145e9aadca899e0f..9c5b480829c7bee17a08fcde0342e0a4ad453a0a 100644
--- a/alib2data/src/alphabet/LabeledSymbol.h
+++ b/alib2data/src/alphabet/LabeledSymbol.h
@@ -10,7 +10,6 @@
 
 #include "../label/Label.h"
 #include "SymbolBase.h"
-#include <ostream>
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/NextSymbol.h b/alib2data/src/alphabet/NextSymbol.h
index a01a5b330f3dd31220c3ba5dc4b874a86b53bdf6..9d0586fc83ef59fb9f4928791dcd2f509b3e525e 100644
--- a/alib2data/src/alphabet/NextSymbol.h
+++ b/alib2data/src/alphabet/NextSymbol.h
@@ -8,9 +8,8 @@
 #ifndef NEXT_SYMBOL_H_
 #define NEXT_SYMBOL_H_
 
-#include <list>
-#include "Symbol.h"
-#include "../sax/Token.h"
+#include "SymbolFeatures.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/RankedSymbol.h b/alib2data/src/alphabet/RankedSymbol.h
index 3d053b037d01259b70ad7fdfdafaf7f89ff852e2..387077813aef84b6f8a186dffb9806069dc47079 100644
--- a/alib2data/src/alphabet/RankedSymbol.h
+++ b/alib2data/src/alphabet/RankedSymbol.h
@@ -8,10 +8,7 @@
 #ifndef RANKED_SYMBOL_H_
 #define RANKED_SYMBOL_H_
 
-#include "../label/Label.h"
-#include "SymbolBase.h"
 #include "Symbol.h"
-#include <ostream>
 #include "../primitive/Unsigned.h"
 
 namespace alphabet {
diff --git a/alib2data/src/alphabet/StartSymbol.h b/alib2data/src/alphabet/StartSymbol.h
index 09a7d8e1cfd260075ccb76140fecddc1a8afd109..ca0631db3a86198d2d6b3cc690c27f95dd2a9ebf 100644
--- a/alib2data/src/alphabet/StartSymbol.h
+++ b/alib2data/src/alphabet/StartSymbol.h
@@ -8,7 +8,7 @@
 #ifndef START_SYMBOL_H_
 #define START_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/SubtreeWildcardSymbol.h b/alib2data/src/alphabet/SubtreeWildcardSymbol.h
index fb2094334e2f6833baa13cdee5fe31b4f8fdcc56..0c737efa12bf9c3bcce27072a3ef6ae7f8762ecd 100644
--- a/alib2data/src/alphabet/SubtreeWildcardSymbol.h
+++ b/alib2data/src/alphabet/SubtreeWildcardSymbol.h
@@ -8,7 +8,7 @@
 #ifndef SUBTREE_WILDCARD_SYMBOL_H_
 #define SUBTREE_WILDCARD_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/Symbol.h b/alib2data/src/alphabet/Symbol.h
index 12f893d68aad5331ee3addc3b4ba9219528b40ab..8b06ad97bab46143beddbdb54c74978a7f8dc8e7 100644
--- a/alib2data/src/alphabet/Symbol.h
+++ b/alib2data/src/alphabet/Symbol.h
@@ -19,7 +19,18 @@ namespace alphabet {
 /**
  * Wrapper around automata.
  */
-typedef alib::wrapper<SymbolBase> Symbol;
+class Symbol : public alib::wrapper<SymbolBase> {
+public:
+	explicit Symbol(SymbolBase* data) : alib::wrapper<SymbolBase>(data) {
+	}
+
+	explicit Symbol(const SymbolBase& data) : alib::wrapper<SymbolBase>(data.clone()) {
+	}
+
+	explicit Symbol(SymbolBase&& data) : alib::wrapper<SymbolBase>(std::move(data).plunder()) {
+	}
+
+};
 
 /**
  * Creates and adds unique state to grammar. If given state name is
diff --git a/alib2data/src/alphabet/SymbolFeatures.h b/alib2data/src/alphabet/SymbolFeatures.h
index 6b7b586b81e843ddb2748beb3c715c9f7ab2822e..65c3e03060798302fa82441e542cc159eb2b852b 100644
--- a/alib2data/src/alphabet/SymbolFeatures.h
+++ b/alib2data/src/alphabet/SymbolFeatures.h
@@ -25,6 +25,21 @@ enum class FEATURES {
 	START
 };
 
+class Symbol;
+
+class LabeledSymbol;
+class BlankSymbol;
+class BottomOfTheStackSymbol;
+class EndSymbol;
+class StartSymbol;
+class RankedSymbol;
+class BarSymbol;
+class VariablesBarSymbol;
+class SubtreeWildcardSymbol;
+class SymbolPairSymbol;
+class SymbolSetSymbol;
+class UniqueSymbol;
+
 } /* namespace alphabet */
 
 #endif /* SYMBOL_FEATURES_H_ */
diff --git a/alib2data/src/alphabet/SymbolFromStringLexer.cpp b/alib2data/src/alphabet/SymbolFromStringLexer.cpp
index e7617cfd8a40153f949ea6a088755b01c53ba588..ee9f115eba3ccf90033b62b844134ec9e614ed47 100644
--- a/alib2data/src/alphabet/SymbolFromStringLexer.cpp
+++ b/alib2data/src/alphabet/SymbolFromStringLexer.cpp
@@ -6,7 +6,6 @@
  */
 
 #include "SymbolFromStringLexer.h"
-#include "../label/LabelFromStringLexer.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/SymbolFromStringLexer.h b/alib2data/src/alphabet/SymbolFromStringLexer.h
index 49f080924a69a8fbda639e09555ef434d117b403..1130a66d44b5bc779df9f5e205e5c4a11d2fa350 100644
--- a/alib2data/src/alphabet/SymbolFromStringLexer.h
+++ b/alib2data/src/alphabet/SymbolFromStringLexer.h
@@ -9,7 +9,7 @@
 #define SYMBOL_FROM_STRING_LEXER_H_
 
 #include <string>
-#include <sstream>
+#include <istream>
 
 namespace alphabet {
 
diff --git a/alib2data/src/alphabet/SymbolFromStringParser.cpp b/alib2data/src/alphabet/SymbolFromStringParser.cpp
index e75cfc78815f48c7b9badb9ea0007541d64d1418..9972f6e58b510ff9ee7034dd305ccab9d0bd53aa 100644
--- a/alib2data/src/alphabet/SymbolFromStringParser.cpp
+++ b/alib2data/src/alphabet/SymbolFromStringParser.cpp
@@ -13,8 +13,6 @@
 #include "StartSymbol.h"
 #include "LabeledSymbol.h"
 
-#include "../label/Label.h"
-
 #include "../StringApi.hpp"
 
 namespace alphabet {
diff --git a/alib2data/src/alphabet/SymbolFromStringParser.h b/alib2data/src/alphabet/SymbolFromStringParser.h
index 5d467712a16c7ad9b245d062994e2851b39f8eaa..a8ddbbdc89930e0e0fbf2e1c19a93af23a00f54b 100644
--- a/alib2data/src/alphabet/SymbolFromStringParser.h
+++ b/alib2data/src/alphabet/SymbolFromStringParser.h
@@ -8,9 +8,9 @@
 #ifndef SYMBOL_FROM_STRING_PARSER_H_
 #define SYMBOL_FROM_STRING_PARSER_H_
 
-#include "Symbol.h"
 #include "SymbolFromStringLexer.h"
 #include "SymbolFeatures.h"
+#include <set>
 
 namespace alib {
 
diff --git a/alib2data/src/alphabet/SymbolFromXMLParser.cpp b/alib2data/src/alphabet/SymbolFromXMLParser.cpp
index 4fa0ce25799552e1439bcca199178623d7b60440..29941d4b006e0f4d316340ee4799f56a38f20419 100644
--- a/alib2data/src/alphabet/SymbolFromXMLParser.cpp
+++ b/alib2data/src/alphabet/SymbolFromXMLParser.cpp
@@ -8,10 +8,23 @@
 #include "SymbolFromXMLParser.h"
 
 #include "../sax/ParserException.h"
-#include "../label/Label.h"
 
 #include "../XmlApi.hpp"
 
+#include "Symbol.h"
+#include "BlankSymbol.h"
+#include "BottomOfTheStackSymbol.h"
+#include "EndSymbol.h"
+#include "StartSymbol.h"
+#include "LabeledSymbol.h"
+#include "RankedSymbol.h"
+#include "BarSymbol.h"
+#include "VariablesBarSymbol.h"
+#include "SubtreeWildcardSymbol.h"
+#include "SymbolPairSymbol.h"
+#include "SymbolSetSymbol.h"
+#include "UniqueSymbol.h"
+
 namespace alphabet {
 
 Symbol SymbolFromXMLParser::parseSymbol(std::deque<sax::Token>::iterator& input) const {
diff --git a/alib2data/src/alphabet/SymbolFromXMLParser.h b/alib2data/src/alphabet/SymbolFromXMLParser.h
index f21c8da768887b8b55274378fa5f8583e433d601..2c0a2eca3e5c76a2eb724cb230cb2f0cf7f257ee 100644
--- a/alib2data/src/alphabet/SymbolFromXMLParser.h
+++ b/alib2data/src/alphabet/SymbolFromXMLParser.h
@@ -9,25 +9,9 @@
 #define SYMBOL_FROM_XML_PARSER_H_
 
 #include "../sax/FromXMLParserHelper.h"
-#include <vector>
 #include <set>
-#include "Symbol.h"
 #include "SymbolFeatures.h"
 #include "../sax/Token.h"
-#include "../label/Label.h"
-
-#include "BlankSymbol.h"
-#include "BottomOfTheStackSymbol.h"
-#include "EndSymbol.h"
-#include "StartSymbol.h"
-#include "LabeledSymbol.h"
-#include "RankedSymbol.h"
-#include "BarSymbol.h"
-#include "VariablesBarSymbol.h"
-#include "SubtreeWildcardSymbol.h"
-#include "SymbolPairSymbol.h"
-#include "SymbolSetSymbol.h"
-#include "UniqueSymbol.h"
 
 namespace alib {
 
diff --git a/alib2data/src/alphabet/SymbolPairSymbol.h b/alib2data/src/alphabet/SymbolPairSymbol.h
index c0f2fa411b914044ce9ae50070dc192b42c87654..355a52d49f174f4750a00fd1c7f0130e3ae8dc5b 100644
--- a/alib2data/src/alphabet/SymbolPairSymbol.h
+++ b/alib2data/src/alphabet/SymbolPairSymbol.h
@@ -8,11 +8,7 @@
 #ifndef SYMBOL_PAIR_SYMBOL_H_
 #define SYMBOL_PAIR_SYMBOL_H_
 
-#include <string>
-#include <ostream>
-
 #include "Symbol.h"
-#include "SymbolBase.h"
 #include <pair>
 
 namespace alphabet {
diff --git a/alib2data/src/alphabet/SymbolSetSymbol.h b/alib2data/src/alphabet/SymbolSetSymbol.h
index 70286e2363bea6e09d736ce0bf792ebcfd406a39..d2fa117dac792a5710d58ee4671a86c664295ef2 100644
--- a/alib2data/src/alphabet/SymbolSetSymbol.h
+++ b/alib2data/src/alphabet/SymbolSetSymbol.h
@@ -8,11 +8,7 @@
 #ifndef SYMBOL_SET_SYMBOL_H_
 #define SYMBOL_SET_SYMBOL_H_
 
-#include <string>
-#include <ostream>
-
 #include "Symbol.h"
-#include "SymbolBase.h"
 #include <set>
 
 namespace alphabet {
diff --git a/alib2data/src/alphabet/SymbolToXMLComposer.cpp b/alib2data/src/alphabet/SymbolToXMLComposer.cpp
index b21e0b423c2ab9171c8c7d375c2f990d9b03df4d..9971cf070520c57835ee8b6b748a4e3790c33b27 100644
--- a/alib2data/src/alphabet/SymbolToXMLComposer.cpp
+++ b/alib2data/src/alphabet/SymbolToXMLComposer.cpp
@@ -9,6 +9,12 @@
 
 #include "../XmlApi.hpp"
 
+#include "LabeledSymbol.h"
+#include "RankedSymbol.h"
+#include "SymbolPairSymbol.h"
+#include "SymbolSetSymbol.h"
+#include "UniqueSymbol.h"
+
 namespace alphabet {
 
 void SymbolToXMLComposer::compose(std::deque<sax::Token>& out, const Symbol& symbol) const {
diff --git a/alib2data/src/alphabet/SymbolToXMLComposer.h b/alib2data/src/alphabet/SymbolToXMLComposer.h
index cf8701a3c112069552d6aaf6eac03f1d061634a1..fb254e4450f758f24bc84aa9feafefb2a55c0a8d 100644
--- a/alib2data/src/alphabet/SymbolToXMLComposer.h
+++ b/alib2data/src/alphabet/SymbolToXMLComposer.h
@@ -11,7 +11,6 @@
 #include <deque>
 #include "Symbol.h"
 #include "../sax/Token.h"
-#include "../label/Label.h"
 
 namespace alib {
 
diff --git a/alib2data/src/alphabet/UniqueSymbol.h b/alib2data/src/alphabet/UniqueSymbol.h
index 40a5f89b0f61cd5bf10bb72f2c93577f25e764bd..d5c85fd7cd77fccf63f150fcf9104cab98c579cb 100644
--- a/alib2data/src/alphabet/UniqueSymbol.h
+++ b/alib2data/src/alphabet/UniqueSymbol.h
@@ -8,12 +8,7 @@
 #ifndef SYMBOL_ID_SYMBOL_H_
 #define SYMBOL_ID_SYMBOL_H_
 
-#include <string>
-#include <ostream>
-
 #include "Symbol.h"
-#include "SymbolBase.h"
-#include <set>
 #include "../primitive/Integer.h"
 
 namespace alphabet {
diff --git a/alib2data/src/alphabet/VariablesBarSymbol.h b/alib2data/src/alphabet/VariablesBarSymbol.h
index f1ed01f07dc90bf1cbb135abf23116e1d95284d2..82d8367a7d0587f1ae16e6fd29b5d9edfb1b2129 100644
--- a/alib2data/src/alphabet/VariablesBarSymbol.h
+++ b/alib2data/src/alphabet/VariablesBarSymbol.h
@@ -8,7 +8,7 @@
 #ifndef VARIABLES_BAR_SYMBOL_H_
 #define VARIABLES_BAR_SYMBOL_H_
 
-#include "Symbol.h"
+#include "SymbolBase.h"
 
 namespace alphabet {
 
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index f6649b1100bc5956834dd3fae82ae6457c831c0a..7d569748672c01f5ac9537f4ee55df31816d418a 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -100,22 +100,7 @@ class Epsilon;
 
 }
 
-namespace alphabet {
-
-class StartSymbol;
-class LabeledSymbol;
-class BlankSymbol;
-class BottomOfTheStackSymbol;
-class RankedSymbol;
-class BarSymbol;
-class VariablesBarSymbol;
-class SubtreeWildcardSymbol;
-class SymbolSetSymbol;
-class SymbolPairSymbol;
-class UniqueSymbol;
-class EndSymbol;
-
-}
+#include "../alphabet/SymbolFeatures.h"
 
 namespace container {
 
diff --git a/alib2data/test-src/alphabet/SymbolTest.cpp b/alib2data/test-src/alphabet/SymbolTest.cpp
index abdec2a3cd47845efcb048ea1136a3b8300d3866..6624695729a294ccf88aa92da3511532ef3e9c42 100644
--- a/alib2data/test-src/alphabet/SymbolTest.cpp
+++ b/alib2data/test-src/alphabet/SymbolTest.cpp
@@ -7,6 +7,8 @@
 #include "alphabet/Symbol.h"
 #include "alphabet/LabeledSymbol.h"
 #include "alphabet/BlankSymbol.h"
+#include "alphabet/StartSymbol.h"
+#include "alphabet/EndSymbol.h"
 
 #include "factory/XmlDataFactory.hpp"
 #include "factory/StringDataFactory.hpp"
diff --git a/alib2data/test-src/automaton/AutomatonTest.cpp b/alib2data/test-src/automaton/AutomatonTest.cpp
index 8779db68259dc36723605742aa6e96c4c88ef2d3..4b8383a0abf3e25e15bbd804805cd5621ac4f69e 100644
--- a/alib2data/test-src/automaton/AutomatonTest.cpp
+++ b/alib2data/test-src/automaton/AutomatonTest.cpp
@@ -15,6 +15,7 @@
 #include "factory/StringDataFactory.hpp"
 
 #include "alphabet/LabeledSymbol.h"
+#include "alphabet/BottomOfTheStackSymbol.h"
 
 #include "regexp/RegExp.h"
 #include "regexp/unbounded/UnboundedRegExp.h"
diff --git a/alib2data/test-src/tree/PatternTest.cpp b/alib2data/test-src/tree/PatternTest.cpp
index d943e0b11d6bb765e288186897c2ee1a90a5647b..4af5a2369212fa97460c8b7d8987b594d1d8f863 100644
--- a/alib2data/test-src/tree/PatternTest.cpp
+++ b/alib2data/test-src/tree/PatternTest.cpp
@@ -13,7 +13,8 @@
 
 #include "alphabet/RankedSymbol.h"
 #include "alphabet/SubtreeWildcardSymbol.h"
-
+#include "alphabet/BarSymbol.h"
+#include "alphabet/VariablesBarSymbol.h"
 
 #define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y))
 
diff --git a/alib2data/test-src/tree/TreeTest.cpp b/alib2data/test-src/tree/TreeTest.cpp
index f957fe0bf4f908b09f0de4ca875082604979e4e1..698479fcfd5c34b58a264479ed017ce71bab9dcd 100644
--- a/alib2data/test-src/tree/TreeTest.cpp
+++ b/alib2data/test-src/tree/TreeTest.cpp
@@ -14,7 +14,7 @@
 
 #include "alphabet/RankedSymbol.h"
 #include "alphabet/SubtreeWildcardSymbol.h"
-
+#include "alphabet/BarSymbol.h"
 
 #define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y))