diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp
index 7c0302a5bf58d46e4c3c6914d261c8d8db6cf47b..9c052cd3630180dc7ac6fbc8b86fd29546c0c551 100644
--- a/alib2data/src/XmlApi.cpp
+++ b/alib2data/src/XmlApi.cpp
@@ -42,7 +42,6 @@ const graph::GraphFromXMLParser FromXMLParsers::graphParser;
 const exception::ExceptionFromXMLParser FromXMLParsers::exceptionParser;
 const alib::ObjectFromXMLParser FromXMLParsers::objectParser;
 const container::ContainerFromXMLParser FromXMLParsers::containerParser;
-const primitive::PrimitiveFromXMLParser FromXMLParsers::primitiveParser;
 const tree::TreeFromXMLParser FromXMLParsers::treeParser;
 
 const label::LabelToXMLComposer ToXMLComposers::labelComposer;
@@ -55,7 +54,6 @@ const graph::GraphToXMLComposer ToXMLComposers::graphComposer;
 const alib::ObjectToXMLComposer ToXMLComposers::objectComposer;
 const exception::ExceptionToXMLComposer ToXMLComposers::exceptionComposer;
 const container::ContainerToXMLComposer ToXMLComposers::containerComposer;
-const primitive::PrimitiveToXMLComposer ToXMLComposers::primitiveComposer;
 const tree::TreeToXMLComposer ToXMLComposers::treeComposer;
 
 const ToXMLComposers ToXMLComposers::toXMLComposers;
diff --git a/alib2data/src/XmlApi.hpp b/alib2data/src/XmlApi.hpp
index 5a0b99c08e40270a6eaabf6191ef95282d18661e..09ff73acec83cbcd446a3da686bcb147b635c89e 100644
--- a/alib2data/src/XmlApi.hpp
+++ b/alib2data/src/XmlApi.hpp
@@ -28,7 +28,6 @@
 #include "graph/GraphFromXMLParser.h"
 #include "object/ObjectFromXMLParser.h"
 #include "exception/ExceptionFromXMLParser.h"
-#include "primitive/PrimitiveFromXMLParser.h"
 #include "tree/TreeFromXMLParser.h"
 #include "container/ContainerFromXMLParser.hpp"
 
@@ -41,7 +40,6 @@
 #include "graph/GraphToXMLComposer.h"
 #include "object/ObjectToXMLComposer.h"
 #include "exception/ExceptionToXMLComposer.h"
-#include "primitive/PrimitiveToXMLComposer.h"
 #include "tree/TreeToXMLComposer.h"
 #include "container/ContainerToXMLComposer.hpp"
 
@@ -755,7 +753,6 @@ public:
 	static const exception::ExceptionFromXMLParser exceptionParser;
 	static const ObjectFromXMLParser objectParser;
 	static const container::ContainerFromXMLParser containerParser;
-	static const primitive::PrimitiveFromXMLParser primitiveParser;
 	static const tree::TreeFromXMLParser treeParser;
 
 };
@@ -864,7 +861,6 @@ public:
 	static const exception::ExceptionToXMLComposer exceptionComposer;
 	static const ObjectToXMLComposer objectComposer;
 	static const container::ContainerToXMLComposer containerComposer;
-	static const primitive::PrimitiveToXMLComposer primitiveComposer;
 	static const tree::TreeToXMLComposer treeComposer;
 
 	static const ToXMLComposers toXMLComposers;
diff --git a/alib2data/src/alphabet/Symbol.h b/alib2data/src/alphabet/Symbol.h
index 4f896bac5b74180045ef987210773307d03d1954..a2bee2e591b03e38131ac8fadad60ed3abf26113 100644
--- a/alib2data/src/alphabet/Symbol.h
+++ b/alib2data/src/alphabet/Symbol.h
@@ -8,6 +8,7 @@
 #ifndef SYMBOL_H_
 #define SYMBOL_H_
 
+#include "../object/WrapperBase.h"
 #include "SymbolBase.h"
 #include "../common/wrapper.hpp"
 
@@ -19,7 +20,7 @@ namespace alphabet {
 /**
  * Wrapper around automata.
  */
-class Symbol : public alib::wrapper<SymbolBase> {
+class Symbol : public alib::wrapper<SymbolBase>, public alib::WrapperBase {
 	using alib::wrapper<SymbolBase>::wrapper;
 };
 
diff --git a/alib2data/src/automaton/Automaton.h b/alib2data/src/automaton/Automaton.h
index c62bba56f3386f7c51a666832c11c00bb9437bcc..a9fb106268c268f86785ba0cec8cc9fd088ae534 100644
--- a/alib2data/src/automaton/Automaton.h
+++ b/alib2data/src/automaton/Automaton.h
@@ -8,6 +8,7 @@
 #ifndef AUTOMATON_H_
 #define AUTOMATON_H_
 
+#include "../object/WrapperBase.h"
 #include "AutomatonBase.h"
 #include "../common/wrapper.hpp"
 
@@ -19,7 +20,7 @@ namespace automaton {
 /**
  * Wrapper around automata.
  */
-class Automaton : public alib::wrapper<AutomatonBase> {
+class Automaton : public alib::wrapper<AutomatonBase>, public alib::WrapperBase {
 	using alib::wrapper<AutomatonBase>::wrapper;
 };
 
diff --git a/alib2data/src/container/Container.h b/alib2data/src/container/Container.h
index e2a45addf53baebd104aa6cc785381ef00e7de80..178e2d1a2901146632593958b3bb05a4c770c8db 100644
--- a/alib2data/src/container/Container.h
+++ b/alib2data/src/container/Container.h
@@ -8,6 +8,7 @@
 #ifndef CONTAINER_H_
 #define CONTAINER_H_
 
+#include "../object/WrapperBase.h"
 #include "ContainerBase.h"
 #include "../common/wrapper.hpp"
 
@@ -16,7 +17,7 @@ namespace container {
 /**
  * Wrapper around containers.
  */
-class Container : public alib::wrapper<ContainerBase> {
+class Container : public alib::wrapper<ContainerBase>, public alib::WrapperBase {
 	using alib::wrapper<ContainerBase>::wrapper;
 };
 
diff --git a/alib2data/src/grammar/Grammar.h b/alib2data/src/grammar/Grammar.h
index f91343fd2643c493e5ca5c24d934e086d371d65d..c82c35a66cf28cf8bf6d69feb31642aa9c76ecda 100644
--- a/alib2data/src/grammar/Grammar.h
+++ b/alib2data/src/grammar/Grammar.h
@@ -8,6 +8,7 @@
 #ifndef GRAMMAR_H_
 #define GRAMMAR_H_
 
+#include "../object/WrapperBase.h"
 #include "GrammarBase.h"
 #include "../common/wrapper.hpp"
 
@@ -16,7 +17,7 @@ namespace grammar {
 /**
  * Wrapper around grammars.
  */
-class Grammar : public alib::wrapper<GrammarBase> {
+class Grammar : public alib::wrapper<GrammarBase>, public alib::WrapperBase {
 	using alib::wrapper<GrammarBase>::wrapper;
 };
 
diff --git a/alib2data/src/graph/Graph.h b/alib2data/src/graph/Graph.h
index 66f43a9d149b41b8505a181137c7bb1f5433ae05..71596a11fe00f8c41902f506980cab236c8e0566 100644
--- a/alib2data/src/graph/Graph.h
+++ b/alib2data/src/graph/Graph.h
@@ -8,13 +8,14 @@
 #ifndef GRAPH_H_
 #define GRAPH_H_
 
+#include "../object/WrapperBase.h"
 #include "GraphBase.h"
 #include "../common/wrapper.hpp"
 
 namespace graph {
 
 // Wrapper around graphs.
-class Graph : public alib::wrapper<GraphBase> {
+class Graph : public alib::wrapper<GraphBase>, public alib::WrapperBase {
 	using alib::wrapper<GraphBase>::wrapper;
 };
 
diff --git a/alib2data/src/label/Label.h b/alib2data/src/label/Label.h
index 5e670b3a631c7c5b8b6a32499b72eb4c57b69949..0a9b7b66a275a3be17c8be3df2699d3f317534cb 100644
--- a/alib2data/src/label/Label.h
+++ b/alib2data/src/label/Label.h
@@ -8,6 +8,7 @@
 #ifndef LABEL_H_
 #define LABEL_H_
 
+#include "../object/WrapperBase.h"
 #include "LabelBase.h"
 #include "../common/wrapper.hpp"
 
@@ -16,7 +17,7 @@ namespace label {
 /**
  * Wrapper around automata.
  */
-class Label : public alib::wrapper<LabelBase> {
+class Label : public alib::wrapper<LabelBase>, public alib::WrapperBase {
 	using alib::wrapper<LabelBase>::wrapper;
 };
 
diff --git a/alib2data/src/object/Object.h b/alib2data/src/object/Object.h
index 33a5293b525ea1a61869e7f06fb0e3c311e8bade..1d53280f0be56185b2131bad908836130ac3bd51 100644
--- a/alib2data/src/object/Object.h
+++ b/alib2data/src/object/Object.h
@@ -8,6 +8,7 @@
 #ifndef OBJECT_H_
 #define OBJECT_H_
 
+#include "../object/WrapperBase.h"
 #include "ObjectBase.h"
 #include "../common/wrapper.hpp"
 
@@ -16,7 +17,7 @@ namespace alib {
 /**
  * Wrapper around object.
  */
-class Object : public alib::wrapper<ObjectBase> {
+class Object : public alib::wrapper<ObjectBase>, public alib::WrapperBase {
 	using alib::wrapper<ObjectBase>::wrapper;
 };
 
diff --git a/alib2data/src/object/ObjectFromXMLParser.cpp b/alib2data/src/object/ObjectFromXMLParser.cpp
index e9575438b2eee90f8b2d6aadcabeb9a8eeb8d5b9..e5b57594a9065f7b6a1dccb856bc8b2559651c1c 100644
--- a/alib2data/src/object/ObjectFromXMLParser.cpp
+++ b/alib2data/src/object/ObjectFromXMLParser.cpp
@@ -25,43 +25,43 @@
 namespace alib {
 
 Object ObjectFromXMLParser::parseObject(std::deque<sax::Token>::iterator& input) const {
-	if(alib::FromXMLParsers::symbolParser.first(input)) {
+	if(alib::xmlApi<alphabet::Symbol>::first(input)) {
 		alphabet::Symbol symbol = alib::xmlApi<alphabet::Symbol>::parse(input);
 		Object res(std::move(symbol.getData()));
 		return res;
-	} else if(alib::FromXMLParsers::exceptionParser.first(input)) {
+	} else if(alib::xmlApi<exception::AlibException>::first(input)) {
 		exception::AlibException exception = alib::xmlApi<exception::AlibException>::parse(input);
 		Object res(std::move(exception));
 		return res;
-	} else if(alib::FromXMLParsers::labelParser.first(input)) {
+	} else if(alib::xmlApi<label::Label>::first(input)) {
 		label::Label label = alib::xmlApi<label::Label>::parse(input);
 		Object res(std::move(label.getData()));
 		return res;
-	} else if(alib::FromXMLParsers::regexpParser.first(input)) {
+	} else if(alib::xmlApi<regexp::RegExp>::first(input)) {
 		regexp::RegExp regexp = alib::xmlApi<regexp::RegExp>::parse(input);
 		Object res(std::move(regexp.getData()));
 		return res;
-	} else if(alib::FromXMLParsers::stringParser.first(input)) {
+	} else if(alib::xmlApi<string::String>::first(input)) {
 		string::String string = alib::xmlApi<string::String>::parse(input);
 		Object res(std::move(string.getData()));
 		return res;
-	} else if(alib::FromXMLParsers::automatonParser.first(input)) {
+	} else if(alib::xmlApi<automaton::Automaton>::first(input)) {
 		automaton::Automaton automaton = alib::xmlApi<automaton::Automaton>::parse(input);
 		Object res(std::move(automaton.getData()));
 		return res;
-	} else if(alib::FromXMLParsers::grammarParser.first(input)) {
+	} else if(alib::xmlApi<grammar::Grammar>::first(input)) {
 		grammar::Grammar grammar = alib::xmlApi<grammar::Grammar>::parse(input);
 		Object res(std::move(grammar.getData()));
 		return res;
-	} else if(alib::FromXMLParsers::containerParser.first(input)) {
+	} else if(alib::xmlApi<container::Container>::first(input)) {
 		container::Container container = alib::xmlApi<container::Container>::parse(input);
 		Object res(std::move(container.getData()));
 		return res;
-	} else if(alib::FromXMLParsers::primitiveParser.first(input)) {
+	} else if(alib::xmlApi<primitive::Primitive>::first(input)) {
 		primitive::Primitive primitive = alib::xmlApi<primitive::Primitive>::parse(input);
 		Object res(std::move(primitive.getData()));
 		return res;
-	} else if(alib::FromXMLParsers::treeParser.first(input)) {
+	} else if(alib::xmlApi<tree::Tree>::first(input)) {
 		tree::Tree tree = alib::xmlApi<tree::Tree>::parse(input);
 		Object res(std::move(tree.getData()));
 		return res;
diff --git a/alib2data/src/primitive/Primitive.h b/alib2data/src/primitive/Primitive.h
index 91f0c2b0c377c601fd12f303a8120d397350ba16..e8787c3be9fcc63700ee1e52969302eef63e0f2d 100644
--- a/alib2data/src/primitive/Primitive.h
+++ b/alib2data/src/primitive/Primitive.h
@@ -17,7 +17,7 @@ namespace primitive {
 /**
  * Wrapper around primitive data types.
  */
-class Primitive : public alib::wrapper<PrimitiveBase>, alib::WrapperBase {
+class Primitive : public alib::wrapper<PrimitiveBase>, public alib::WrapperBase {
 	using alib::wrapper<PrimitiveBase>::wrapper;
 };
 
diff --git a/alib2data/src/primitive/PrimitiveFromXMLParser.cpp b/alib2data/src/primitive/PrimitiveFromXMLParser.cpp
deleted file mode 100644
index b1c3ee452fbdfab5627c7969ad326f22993ba65d..0000000000000000000000000000000000000000
--- a/alib2data/src/primitive/PrimitiveFromXMLParser.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * PrimitiveFromXMLParser.cpp
- *
- *  Created on: Nov 23, 2013
- *      Author: Jan Travnicek
- */
-
-#include "PrimitiveFromXMLParser.h"
-#include "../sax/ParserException.h"
-#include "../XmlApi.hpp"
-
-#include "Primitive.h"
-#include "PrimitiveClasses.h"
-
-namespace primitive {
-
-Primitive PrimitiveFromXMLParser::parsePrimitive(std::deque<sax::Token>::iterator& input) const {
-	return parsePrimitive(input, std::set<FEATURES>({FEATURES::STRING, FEATURES::CHAR, FEATURES::INTEGER, FEATURES::UNSIGNED, FEATURES::BOOL}));
-}
-
-Primitive PrimitiveFromXMLParser::parsePrimitive(std::deque<sax::Token>::iterator& input, const std::set<FEATURES>& features) const {
-	if(alib::xmlApi<Integer>::first(input)) {
-		if(!features.count(FEATURES::INTEGER)) throw exception::AlibException();
-		return Primitive(Integer::parse(input));
-	} else if(alib::xmlApi<String>::first(input)) {
-		if(!features.count(FEATURES::STRING)) throw exception::AlibException();
-		return Primitive(String::parse(input));
-	} else if(alib::xmlApi<Character>::first(input)) {
-		if(!features.count(FEATURES::CHAR)) throw exception::AlibException();
-		return Primitive(Character::parse(input));
-	} else if(alib::xmlApi<Unsigned>::first(input)) {
-		if(!features.count(FEATURES::UNSIGNED)) throw exception::AlibException();
-		return Primitive(Unsigned::parse(input));
-	} else if(alib::xmlApi<Bool>::first(input)) {
-		if(!features.count(FEATURES::BOOL)) throw exception::AlibException();
-		return Primitive(Bool::parse(input));
-	} else {
-		throw sax::ParserException(sax::Token("Integer, String, Character, Unsigned, Bool", sax::Token::TokenType::START_ELEMENT), *input);
-	}
-}
-
-bool PrimitiveFromXMLParser::first(const std::deque<sax::Token>::const_iterator& input) const {
-	if(alib::xmlApi<Integer>::first(input) || alib::xmlApi<String>::first(input) || alib::xmlApi<Character>::first(input) || alib::xmlApi<Unsigned>::first(input) || alib::xmlApi<Bool>::first(input)) {
-		return true;
-	} else {
-		return false;
-	}
-}
-
-} /* namespace primitive */
diff --git a/alib2data/src/primitive/PrimitiveFromXMLParser.h b/alib2data/src/primitive/PrimitiveFromXMLParser.h
deleted file mode 100644
index a0cadb5d30c3caebbb5fcef890f547c2d3c4ab85..0000000000000000000000000000000000000000
--- a/alib2data/src/primitive/PrimitiveFromXMLParser.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * PrimitiveFromXMLParser.h
- *
- *  Created on: Nov 23, 2013
- *      Author: Jan Travnicek
- */
-
-#ifndef PRIMITIVE_FROM_XML_PARSER_H_
-#define PRIMITIVE_FROM_XML_PARSER_H_
-
-#include "../sax/FromXMLParserHelper.h"
-#include <set>
-#include "PrimitiveFeatures.h"
-#include "../XmlApiBase.h"
-
-namespace primitive {
-
-/**
- * Parser used to transform sequence of xml tokens to internal representation of Primitive.
- */
-class PrimitiveFromXMLParser : public sax::FromXMLParserHelper {
-public:
-	PrimitiveFromXMLParser() {}
-
-private:
-	Primitive parsePrimitive(std::deque<sax::Token>::iterator& input, const std::set<FEATURES>&) const;
-	Primitive parsePrimitive(std::deque<sax::Token>::iterator& input) const;
-
-	template<typename T, typename Enable> friend struct alib::xmlApi;
-public:
-	bool first(const std::deque<sax::Token>::const_iterator& input) const;
-};
-
-} /* namespace primitive */
-
-#endif /* PRIMITIVE_FROM_XML_PARSER_H_ */
diff --git a/alib2data/src/primitive/PrimitiveToXMLComposer.cpp b/alib2data/src/primitive/PrimitiveToXMLComposer.cpp
deleted file mode 100644
index a5c97057cc4f02feb6c778dd3d3a270ee8e01509..0000000000000000000000000000000000000000
--- a/alib2data/src/primitive/PrimitiveToXMLComposer.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * PrimitiveToXMLComposer.cpp
- *
- *  Created on: Nov 23, 2013
- *      Author: Jan Travnicek
- */
-
-#include "PrimitiveToXMLComposer.h"
-
-#include "../XmlApi.hpp"
-
-#include "Primitive.h"
-#include "PrimitiveClasses.h"
-
-namespace primitive {
-
-void PrimitiveToXMLComposer::compose(std::deque<sax::Token>& out, const Primitive& primitive) const {
-	primitive.getData().Accept((void*) &out, alib::ToXMLComposers::toXMLComposers);
-}
-
-void PrimitiveToXMLComposer::compose(std::deque<sax::Token>& out, const PrimitiveBase& primitive) const {
-	primitive.Accept((void*) &out, alib::ToXMLComposers::toXMLComposers);
-}
-
-} /* namespace primitive */
diff --git a/alib2data/src/primitive/PrimitiveToXMLComposer.h b/alib2data/src/primitive/PrimitiveToXMLComposer.h
deleted file mode 100644
index 5a89e6cdde85c1b5a7ff98e05caa87999f63dd76..0000000000000000000000000000000000000000
--- a/alib2data/src/primitive/PrimitiveToXMLComposer.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * PrimitiveToXMLComposer.h
- *
- *  Created on: Nov 23, 2013
- *      Author: Jan Travnciek
- */
-
-#ifndef PRIMITIVE_TO_XML_COMPOSER_H_
-#define PRIMITIVE_TO_XML_COMPOSER_H_
-
-#include <deque>
-#include "PrimitiveFeatures.h"
-#include "../sax/Token.h"
-#include "../XmlApiBase.h"
-
-namespace primitive {
-
-/**
- * This class contains methods to print XML representation of string to the output stream.
- */
-class PrimitiveToXMLComposer {
-public:
-	PrimitiveToXMLComposer() {}
-
-private:
-	/**
-	 * Prints XML representation of String to the output stream.
-	 * @param string String to print
-	 * @param out output stream to which print the String
-	 */
-	void compose(std::deque<sax::Token>& out, const PrimitiveBase& primitive) const;
-
-	/**
-	 * Prints XML representation of String to the output stream.
-	 * @param string String to print
-	 * @param out output stream to which print the String
-	 */
-	void compose(std::deque<sax::Token>& out, const Primitive& primitive) const;
-
-	template<typename T, typename Enable> friend struct alib::xmlApi;
-};
-
-} /* namespace primitive */
-
-#endif /* PRIMITIVE_TO_XML_COMPOSER_H_ */
diff --git a/alib2data/src/regexp/RegExp.h b/alib2data/src/regexp/RegExp.h
index bc9105261b9383eb0b1f2327d84ad330287c1dd1..2be1c82596b064a983aa7ea023a12457288d2573 100644
--- a/alib2data/src/regexp/RegExp.h
+++ b/alib2data/src/regexp/RegExp.h
@@ -8,6 +8,7 @@
 #ifndef REG_EXP_H_
 #define REG_EXP_H_
 
+#include "../object/WrapperBase.h"
 #include "../common/wrapper.hpp"
 #include "RegExpBase.h"
 
@@ -20,7 +21,7 @@ namespace regexp {
 /**
  * Wrapper around automata.
  */
-class RegExp : public alib::wrapper<RegExpBase> {
+class RegExp : public alib::wrapper<RegExpBase>, public alib::WrapperBase {
 	using alib::wrapper<RegExpBase>::wrapper;
 };
 
diff --git a/alib2data/src/string/String.h b/alib2data/src/string/String.h
index f5f80df9d0545ab0d6dcb94ff8576eb33a253177..3bb3f5d7aaadeb21b95b96c7c441f832d43e3fcd 100644
--- a/alib2data/src/string/String.h
+++ b/alib2data/src/string/String.h
@@ -8,6 +8,7 @@
 #ifndef STRING_H_
 #define STRING_H_
 
+#include "../object/WrapperBase.h"
 #include "StringBase.h"
 #include "../common/wrapper.hpp"
 
@@ -16,7 +17,7 @@ namespace string {
 /**
  * Wrapper around strings.
  */
-class String : public alib::wrapper<StringBase> {
+class String : public alib::wrapper<StringBase>, public alib::WrapperBase {
 	using alib::wrapper<StringBase>::wrapper;
 };
 
diff --git a/alib2data/src/tree/Tree.h b/alib2data/src/tree/Tree.h
index 5bc8fe6f6b2f7f0d62685b8d2809555d9c7ee146..02dec346e55bb2933dc63e2f9eaad2a2ebb5328c 100644
--- a/alib2data/src/tree/Tree.h
+++ b/alib2data/src/tree/Tree.h
@@ -8,6 +8,7 @@
 #ifndef TREE_H_
 #define TREE_H_
 
+#include "../object/WrapperBase.h"
 #include "TreeBase.h"
 #include "../common/wrapper.hpp"
 
@@ -16,7 +17,7 @@ namespace tree {
 /**
  * Wrapper around tree.
  */
-class Tree : public alib::wrapper<TreeBase> {
+class Tree : public alib::wrapper<TreeBase>, public alib::WrapperBase {
 	using alib::wrapper<TreeBase>::wrapper;
 };