diff --git a/alib2data/src/XmlApi.cpp b/alib2data/src/XmlApi.cpp
index a57d498705d2dbd2dbcfe44817d6ffd64aea8a47..633850c5cbf810a96c241568c859fc5d61837b6a 100644
--- a/alib2data/src/XmlApi.cpp
+++ b/alib2data/src/XmlApi.cpp
@@ -27,6 +27,12 @@
 #include "label/LabelPairLabel.h"
 #include "label/UniqueLabel.h"
 
+#include "primitive/Primitive.h"
+#include "primitive/Bool.h"
+#include "primitive/Integer.h"
+#include "primitive/String.h"
+#include "primitive/Character.h"
+
 namespace alib {
 
 const label::LabelFromXMLParser FromXMLParsers::labelParser;
diff --git a/alib2data/src/object/ObjectBase.h b/alib2data/src/object/ObjectBase.h
index 6aa7f24739ee5303f995054827ede6ffe5925414..0be8d812b4f558a331863b755771443e522f29b7 100644
--- a/alib2data/src/object/ObjectBase.h
+++ b/alib2data/src/object/ObjectBase.h
@@ -102,15 +102,7 @@ class ObjectsMap;
 
 }
 
-namespace primitive {
-
-class String;
-class Integer;
-class Character;
-class Unsigned;
-class Bool;
-
-}
+#include "../primitive/PrimitiveFeatures.h"
 
 namespace tree {
 
diff --git a/alib2data/src/primitive/Bool.h b/alib2data/src/primitive/Bool.h
index 2aa5440bb713282c1530ddb6fe5ae3b8f09af8ef..071d1d422463e0fdf4a2fbcddf76511bd0bf496d 100644
--- a/alib2data/src/primitive/Bool.h
+++ b/alib2data/src/primitive/Bool.h
@@ -8,8 +8,6 @@
 #ifndef PRIMITIVE_BOOL_H_
 #define PRIMITIVE_BOOL_H_
 
-#include <ostream>
-
 #include "PrimitiveBase.h"
 
 namespace primitive {
diff --git a/alib2data/src/primitive/Character.h b/alib2data/src/primitive/Character.h
index 80fb729afd2336318aa34b22ddf7e259f5688a25..6a9d4d8149a85be99d630351392a62205ecfd12f 100644
--- a/alib2data/src/primitive/Character.h
+++ b/alib2data/src/primitive/Character.h
@@ -8,9 +8,6 @@
 #ifndef PRIMITIVE_CHARACTER_H_
 #define PRIMITIVE_CHARACTER_H_
 
-#include <string>
-#include <ostream>
-
 #include "PrimitiveBase.h"
 
 namespace primitive {
diff --git a/alib2data/src/primitive/Integer.h b/alib2data/src/primitive/Integer.h
index f27b08c8d70fa8ce240905437a3c86967600f6a6..a9edd8f08dd94dee7eeb0014cd68438cbf05e2fb 100644
--- a/alib2data/src/primitive/Integer.h
+++ b/alib2data/src/primitive/Integer.h
@@ -8,8 +8,6 @@
 #ifndef PRIMITIVE_INTEGER_H_
 #define PRIMITIVE_INTEGER_H_
 
-#include <ostream>
-
 #include "PrimitiveBase.h"
 
 namespace primitive {
diff --git a/alib2data/src/primitive/NextPrimitive.cpp b/alib2data/src/primitive/NextPrimitive.cpp
index ee065e7b01eb0e6f12aa2ea6636c2a5f88a95b7b..dbaae49c6dfc04c2bd5f48a22bd4fa601612f958 100644
--- a/alib2data/src/primitive/NextPrimitive.cpp
+++ b/alib2data/src/primitive/NextPrimitive.cpp
@@ -6,12 +6,12 @@
  */
 
 #include "NextPrimitive.h"
+#include "Primitive.h"
 #include "Integer.h"
 #include "String.h"
 #include "Character.h"
 #include "Unsigned.h"
 #include "Bool.h"
-#include <string>
 
 namespace primitive {
 
diff --git a/alib2data/src/primitive/NextPrimitive.h b/alib2data/src/primitive/NextPrimitive.h
index aa92bda252bef6a694f213732f550f2a7dbafc88..e549dff658c0dae41e7b2c50c7cc87f621f43a80 100644
--- a/alib2data/src/primitive/NextPrimitive.h
+++ b/alib2data/src/primitive/NextPrimitive.h
@@ -8,9 +8,8 @@
 #ifndef NEXT_PRIMITIVE_H_
 #define NEXT_PRIMITIVE_H_
 
-#include <list>
-#include "Primitive.h"
-#include "../sax/Token.h"
+#include "PrimitiveFeatures.h"
+#include "PrimitiveBase.h"
 
 namespace primitive {
 
diff --git a/alib2data/src/primitive/Primitive.h b/alib2data/src/primitive/Primitive.h
index 4e11ba5f3d935efeac3647d59da89842f266f913..2a9752f9878c336ce77e39c936ddd77f5c584444 100644
--- a/alib2data/src/primitive/Primitive.h
+++ b/alib2data/src/primitive/Primitive.h
@@ -8,15 +8,26 @@
 #ifndef PRIMITIVE_H_
 #define PRIMITIVE_H_
 
-#include "../common/wrapper.hpp"
 #include "PrimitiveBase.h"
+#include "../common/wrapper.hpp"
 
 namespace primitive {
 
 /**
  * Wrapper around primitive data types.
  */
-typedef alib::wrapper<PrimitiveBase> Primitive;
+class Primitive : public alib::wrapper<PrimitiveBase> {
+public:
+	explicit Primitive(PrimitiveBase* data) : alib::wrapper<PrimitiveBase>(data) {
+	}
+
+	explicit Primitive(const PrimitiveBase& data) : alib::wrapper<PrimitiveBase>(data.clone()) {
+	}
+
+	explicit Primitive(PrimitiveBase&& data) : alib::wrapper<PrimitiveBase>(std::move(data).plunder()) {
+	}
+
+};
 
 Primitive primitiveFrom(int number);
 Primitive primitiveFrom(char character);
diff --git a/alib2data/src/primitive/PrimitiveFeatures.h b/alib2data/src/primitive/PrimitiveFeatures.h
index 2aec1a3b52f6df7002f9c5aebb3cc754577da827..3fdbc4a8d363731b4a3df43a98f584e01a878ea5 100644
--- a/alib2data/src/primitive/PrimitiveFeatures.h
+++ b/alib2data/src/primitive/PrimitiveFeatures.h
@@ -18,6 +18,14 @@ enum class FEATURES {
 	BOOL
 };
 
+class Primitive;
+
+class String;
+class Integer;
+class Character;
+class Unsigned;
+class Bool;
+
 } /* namespace primitive */
 
 #endif /* PRIMITIVE_FEATURES_H_ */
diff --git a/alib2data/src/primitive/PrimitiveFromStringLexer.h b/alib2data/src/primitive/PrimitiveFromStringLexer.h
index 035cbed24dfc51b6a326e1ea9f177ec3c8665354..5037551b472b88e22cfd6f88c552c106753d2c96 100644
--- a/alib2data/src/primitive/PrimitiveFromStringLexer.h
+++ b/alib2data/src/primitive/PrimitiveFromStringLexer.h
@@ -9,7 +9,7 @@
 #define PRIMITIVE_FROM_STRING_LEXER_H_
 
 #include <string>
-#include <sstream>
+#include <istream>
 
 namespace primitive {
 
diff --git a/alib2data/src/primitive/PrimitiveFromStringParser.cpp b/alib2data/src/primitive/PrimitiveFromStringParser.cpp
index 598952916778af1e94b01c25cf747a23b530da93..8e43db245cf54c9a63b23bddd52800b108802912 100644
--- a/alib2data/src/primitive/PrimitiveFromStringParser.cpp
+++ b/alib2data/src/primitive/PrimitiveFromStringParser.cpp
@@ -7,10 +7,10 @@
 
 #include "PrimitiveFromStringParser.h"
 #include "../exception/AlibException.h"
+#include "Primitive.h"
 #include "String.h"
 #include "Integer.h"
 #include "Character.h"
-#include <algorithm>
 
 namespace primitive {
 
diff --git a/alib2data/src/primitive/PrimitiveFromStringParser.h b/alib2data/src/primitive/PrimitiveFromStringParser.h
index 117d913970d87cc507e1e2196a79a4b6774c3cb3..b04e90589cbf0bbbc7ce23be6d3430a18d7b893b 100644
--- a/alib2data/src/primitive/PrimitiveFromStringParser.h
+++ b/alib2data/src/primitive/PrimitiveFromStringParser.h
@@ -8,12 +8,10 @@
 #ifndef PRIMITIVE_FROM_STRING_PARSER_H_
 #define PRIMITIVE_FROM_STRING_PARSER_H_
 
-#include "Primitive.h"
+#include "PrimitiveFromStringLexer.h"
 #include "PrimitiveFeatures.h"
 #include <set>
 
-#include "PrimitiveFromStringLexer.h"
-
 namespace alib {
 
 template<typename T>
diff --git a/alib2data/src/primitive/PrimitiveFromXMLParser.cpp b/alib2data/src/primitive/PrimitiveFromXMLParser.cpp
index a0e46cc877f16f7c8b3b3a4fd4f62a9ed7b9192a..68dff68c69c150e80175ce40709f9b021c5f813b 100644
--- a/alib2data/src/primitive/PrimitiveFromXMLParser.cpp
+++ b/alib2data/src/primitive/PrimitiveFromXMLParser.cpp
@@ -7,11 +7,15 @@
 
 #include "PrimitiveFromXMLParser.h"
 #include "../sax/ParserException.h"
-#include <algorithm>
-#include <string>
-
 #include "../XmlApi.hpp"
 
+#include "Primitive.h"
+#include "String.h"
+#include "Integer.h"
+#include "Character.h"
+#include "Unsigned.h"
+#include "Bool.h"
+
 namespace primitive {
 
 Primitive PrimitiveFromXMLParser::parsePrimitive(std::deque<sax::Token>::iterator& input) const {
diff --git a/alib2data/src/primitive/PrimitiveFromXMLParser.h b/alib2data/src/primitive/PrimitiveFromXMLParser.h
index 6c06cca3d95c8ab7692314b74e35bc1bded14a17..1de49e8132b3bdc3e2d191f83c515d024c96be1b 100644
--- a/alib2data/src/primitive/PrimitiveFromXMLParser.h
+++ b/alib2data/src/primitive/PrimitiveFromXMLParser.h
@@ -10,13 +10,7 @@
 
 #include "../sax/FromXMLParserHelper.h"
 #include <set>
-#include "Primitive.h"
 #include "PrimitiveFeatures.h"
-#include "String.h"
-#include "Integer.h"
-#include "Character.h"
-#include "Unsigned.h"
-#include "Bool.h"
 #include "../sax/Token.h"
 
 namespace alib {
diff --git a/alib2data/src/primitive/PrimitiveToXMLComposer.cpp b/alib2data/src/primitive/PrimitiveToXMLComposer.cpp
index 5991f919df79b25120cda89bf9ccba1f70f99797..44532e60c30c2bb4f1949fc5bd7e360b619168ce 100644
--- a/alib2data/src/primitive/PrimitiveToXMLComposer.cpp
+++ b/alib2data/src/primitive/PrimitiveToXMLComposer.cpp
@@ -6,12 +6,14 @@
  */
 
 #include "PrimitiveToXMLComposer.h"
+
+#include "../XmlApi.hpp"
+
+#include "Primitive.h"
+#include "Bool.h"
 #include "Integer.h"
 #include "String.h"
 #include "Character.h"
-#include <string>
-
-#include "../XmlApi.hpp"
 
 namespace primitive {
 
diff --git a/alib2data/src/primitive/PrimitiveToXMLComposer.h b/alib2data/src/primitive/PrimitiveToXMLComposer.h
index b7f28d8f782fae5b80c3ea4bed980801e3898486..fab4070830ad445670baf1ac000c061fab033644 100644
--- a/alib2data/src/primitive/PrimitiveToXMLComposer.h
+++ b/alib2data/src/primitive/PrimitiveToXMLComposer.h
@@ -9,7 +9,6 @@
 #define PRIMITIVE_TO_XML_COMPOSER_H_
 
 #include <deque>
-#include <string>
 #include "Primitive.h"
 #include "../sax/Token.h"
 
diff --git a/alib2data/src/primitive/String.h b/alib2data/src/primitive/String.h
index 671134632c26e1a026d2fa24c3e677dd92c95864..f69d2e72b13d13bce49fae9e270006031e7c5665 100644
--- a/alib2data/src/primitive/String.h
+++ b/alib2data/src/primitive/String.h
@@ -9,8 +9,6 @@
 #define PRIMITIVE_STRING_H_
 
 #include <string>
-#include <ostream>
-
 #include "PrimitiveBase.h"
 
 namespace primitive {
diff --git a/alib2data/src/primitive/Unsigned.h b/alib2data/src/primitive/Unsigned.h
index 6157ccd77e87a6958fe7ae0df2ddd58a3fa2d5ca..54efd8d869ba2ce3e63c689f9514132c56543c66 100644
--- a/alib2data/src/primitive/Unsigned.h
+++ b/alib2data/src/primitive/Unsigned.h
@@ -8,8 +8,6 @@
 #ifndef PRIMITIVE_UNSIGNED_H_
 #define PRIMITIVE_UNSIGNED_H_
 
-#include <ostream>
-
 #include "PrimitiveBase.h"
 
 namespace primitive {