From f16da90adeb28d6a55dbe0567dd58fe3066e764d Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Sat, 19 Nov 2016 21:00:42 +0100
Subject: [PATCH] allow inc on all datatypes

---
 alib2common/src/container/ObjectsDeque.h             |  8 ++++++++
 alib2common/src/container/ObjectsList.h              |  8 ++++++++
 alib2common/src/container/ObjectsMap.h               |  8 ++++++++
 alib2common/src/container/ObjectsPair.h              |  8 ++++++++
 alib2common/src/container/ObjectsSet.h               |  8 ++++++++
 alib2common/src/container/ObjectsTree.h              |  8 ++++++++
 alib2common/src/container/ObjectsVector.h            |  8 ++++++++
 alib2common/src/exception/CommonException.cpp        |  5 +++++
 alib2common/src/exception/CommonException.h          |  2 ++
 alib2common/src/object/Object.cpp                    |  4 ++++
 alib2common/src/object/Object.h                      |  2 ++
 alib2common/src/object/ObjectBase.h                  |  2 ++
 alib2common/src/object/Void.cpp                      |  5 +++++
 alib2common/src/object/Void.h                        |  2 ++
 alib2data/src/automaton/FSM/CompactNFA.h             |  8 ++++++++
 alib2data/src/automaton/FSM/DFA.h                    |  8 ++++++++
 alib2data/src/automaton/FSM/EpsilonNFA.h             |  8 ++++++++
 alib2data/src/automaton/FSM/ExtendedNFA.h            |  8 ++++++++
 alib2data/src/automaton/FSM/MultiInitialStateNFA.h   |  8 ++++++++
 alib2data/src/automaton/FSM/NFA.h                    |  8 ++++++++
 alib2data/src/automaton/PDA/DPDA.h                   |  8 ++++++++
 alib2data/src/automaton/PDA/InputDrivenDPDA.h        |  8 ++++++++
 alib2data/src/automaton/PDA/InputDrivenNPDA.h        |  8 ++++++++
 alib2data/src/automaton/PDA/NPDA.h                   |  8 ++++++++
 alib2data/src/automaton/PDA/NPDTA.h                  | 10 +++++++++-
 .../automaton/PDA/RealTimeHeightDeterministicDPDA.h  |  8 ++++++++
 .../automaton/PDA/RealTimeHeightDeterministicNPDA.h  |  8 ++++++++
 alib2data/src/automaton/PDA/SinglePopDPDA.h          |  8 ++++++++
 alib2data/src/automaton/PDA/SinglePopNPDA.h          |  8 ++++++++
 alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h    |  8 ++++++++
 alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h    |  8 ++++++++
 alib2data/src/automaton/TA/DFTA.h                    |  8 ++++++++
 alib2data/src/automaton/TA/NFTA.h                    |  8 ++++++++
 alib2data/src/automaton/TM/OneTapeDTM.h              |  8 ++++++++
 alib2data/src/grammar/ContextFree/CFG.h              |  8 ++++++++
 alib2data/src/grammar/ContextFree/CNF.h              |  8 ++++++++
 alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h   |  8 ++++++++
 alib2data/src/grammar/ContextFree/GNF.h              |  8 ++++++++
 alib2data/src/grammar/ContextFree/LG.h               |  8 ++++++++
 alib2data/src/grammar/ContextSensitive/CSG.h         |  8 ++++++++
 .../grammar/ContextSensitive/NonContractingGrammar.h |  8 ++++++++
 alib2data/src/grammar/Regular/LeftLG.h               |  8 ++++++++
 alib2data/src/grammar/Regular/LeftRG.h               |  8 ++++++++
 alib2data/src/grammar/Regular/RightLG.h              |  8 ++++++++
 alib2data/src/grammar/Regular/RightRG.h              |  8 ++++++++
 .../ContextPreservingUnrestrictedGrammar.h           |  8 ++++++++
 .../src/grammar/Unrestricted/UnrestrictedGrammar.h   |  8 ++++++++
 alib2data/src/regexp/formal/FormalRegExp.h           |  8 ++++++++
 alib2data/src/regexp/unbounded/UnboundedRegExp.h     |  8 ++++++++
 alib2data/src/rte/formal/FormalRTE.h                 |  8 ++++++++
 alib2data/src/string/CyclicString.h                  |  8 ++++++++
 alib2data/src/string/Epsilon.h                       | 12 ++++++++++--
 alib2data/src/string/LinearString.h                  |  8 ++++++++
 .../tree/ranked/PrefixRankedBarNonlinearPattern.h    |  8 ++++++++
 alib2data/src/tree/ranked/PrefixRankedBarPattern.h   |  8 ++++++++
 alib2data/src/tree/ranked/PrefixRankedBarTree.h      |  8 ++++++++
 .../src/tree/ranked/PrefixRankedNonlinearPattern.h   |  8 ++++++++
 alib2data/src/tree/ranked/PrefixRankedPattern.h      |  8 ++++++++
 alib2data/src/tree/ranked/PrefixRankedTree.h         |  8 ++++++++
 alib2data/src/tree/ranked/RankedNonlinearPattern.h   |  8 ++++++++
 alib2data/src/tree/ranked/RankedPattern.h            |  8 ++++++++
 alib2data/src/tree/ranked/RankedTree.h               |  8 ++++++++
 alib2data/src/tree/unranked/PrefixBarTree.h          |  8 ++++++++
 .../src/tree/unranked/UnrankedNonlinearPattern.h     |  8 ++++++++
 alib2data/src/tree/unranked/UnrankedPattern.h        |  8 ++++++++
 alib2data/src/tree/unranked/UnrankedTree.h           |  8 ++++++++
 .../graph/directed/AdjacencyListDirectedGraph.cpp    |  4 ++++
 .../src/graph/directed/AdjacencyListDirectedGraph.h  |  2 ++
 .../graph/directed/AdjacencyMatrixDirectedGraph.cpp  |  4 ++++
 .../graph/directed/AdjacencyMatrixDirectedGraph.h    |  2 ++
 .../undirected/AdjacencyListUndirectedGraph.cpp      |  4 ++++
 .../graph/undirected/AdjacencyListUndirectedGraph.h  |  2 ++
 .../undirected/AdjacencyMatrixUndirectedGraph.cpp    |  4 ++++
 .../undirected/AdjacencyMatrixUndirectedGraph.h      |  2 ++
 .../src/indexes/suffixTrie/SuffixTrieFinalMark.cpp   |  5 +++++
 .../src/indexes/suffixTrie/SuffixTrieFinalMark.h     |  2 ++
 .../suffixTrie/SuffixTrieTerminatingSymbol.cpp       |  5 +++++
 .../indexes/suffixTrie/SuffixTrieTerminatingSymbol.h |  2 ++
 .../src/string/LinearStringTerminatingSymbol.cpp     |  5 +++++
 .../src/string/LinearStringTerminatingSymbol.h       |  2 ++
 80 files changed, 542 insertions(+), 3 deletions(-)

diff --git a/alib2common/src/container/ObjectsDeque.h b/alib2common/src/container/ObjectsDeque.h
index 049e821805..21282ec7d9 100644
--- a/alib2common/src/container/ObjectsDeque.h
+++ b/alib2common/src/container/ObjectsDeque.h
@@ -16,6 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <core/xmlApi.hpp>
+#include "../object/UniqueObject.h"
 
 namespace container {
 
@@ -56,6 +57,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	static void compose ( std::deque < sax::Token > & out, const std::deque < ElementType > & input );
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class ElementType >
@@ -128,6 +131,11 @@ void ObjectsDeque < ElementType >::compose ( std::deque < sax::Token > & out, co
 	out.emplace_back ( ObjectsDeque < >::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class ElementType >
+alib::ObjectBase* ObjectsDeque < ElementType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace container */
 
 namespace alib {
diff --git a/alib2common/src/container/ObjectsList.h b/alib2common/src/container/ObjectsList.h
index 6c8510714b..2cc8d3f47e 100644
--- a/alib2common/src/container/ObjectsList.h
+++ b/alib2common/src/container/ObjectsList.h
@@ -16,6 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <core/xmlApi.hpp>
+#include "../object/UniqueObject.h"
 
 namespace container {
 
@@ -56,6 +57,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	static void compose ( std::deque < sax::Token > & out, const std::list < ElementType > & input );
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class ElementType >
@@ -128,6 +131,11 @@ void ObjectsList < ElementType >::compose ( std::deque < sax::Token > & out, con
 	out.emplace_back ( ObjectsList < >::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class ElementType >
+alib::ObjectBase* ObjectsList < ElementType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace container */
 
 namespace alib {
diff --git a/alib2common/src/container/ObjectsMap.h b/alib2common/src/container/ObjectsMap.h
index aafec1d139..c65ae1c4c0 100644
--- a/alib2common/src/container/ObjectsMap.h
+++ b/alib2common/src/container/ObjectsMap.h
@@ -16,6 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <core/xmlApi.hpp>
+#include "../object/UniqueObject.h"
 
 #include "ObjectsPair.h"
 
@@ -58,6 +59,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	static void compose ( std::deque < sax::Token > & out, const std::map < KeyType, ValueType > & input );
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class KeyType, class ValueType >
@@ -131,6 +134,11 @@ void ObjectsMap < KeyType, ValueType >::compose ( std::deque < sax::Token > & ou
 	out.emplace_back ( ObjectsMap < >::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class KeyType, class ValueType >
+alib::ObjectBase* ObjectsMap < KeyType, ValueType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace container */
 
 namespace alib {
diff --git a/alib2common/src/container/ObjectsPair.h b/alib2common/src/container/ObjectsPair.h
index d0f8503793..13cb8a5e20 100644
--- a/alib2common/src/container/ObjectsPair.h
+++ b/alib2common/src/container/ObjectsPair.h
@@ -16,6 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <core/xmlApi.hpp>
+#include "../object/UniqueObject.h"
 
 namespace container {
 
@@ -56,6 +57,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	static void compose ( std::deque < sax::Token > & out, const std::pair < KeyType, ValueType > & input );
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class KeyType, class ValueType >
@@ -128,6 +131,11 @@ void ObjectsPair < KeyType, ValueType >::compose ( std::deque < sax::Token > & o
 	out.emplace_back ( ObjectsPair::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class KeyType, class ValueType >
+alib::ObjectBase* ObjectsPair < KeyType, ValueType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace container */
 
 namespace alib {
diff --git a/alib2common/src/container/ObjectsSet.h b/alib2common/src/container/ObjectsSet.h
index 1195aca583..8a91eb6cef 100644
--- a/alib2common/src/container/ObjectsSet.h
+++ b/alib2common/src/container/ObjectsSet.h
@@ -16,6 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <core/xmlApi.hpp>
+#include "../object/UniqueObject.h"
 
 namespace container {
 
@@ -56,6 +57,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	static void compose ( std::deque < sax::Token > & out, const std::set < ElementType > & input );
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class ElementType >
@@ -129,6 +132,11 @@ void ObjectsSet < ElementType >::compose ( std::deque < sax::Token > & out, cons
 	out.emplace_back ( ObjectsSet < >::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class ElementType >
+alib::ObjectBase* ObjectsSet < ElementType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace container */
 
 namespace alib {
diff --git a/alib2common/src/container/ObjectsTree.h b/alib2common/src/container/ObjectsTree.h
index d4856161b6..a520ec9090 100644
--- a/alib2common/src/container/ObjectsTree.h
+++ b/alib2common/src/container/ObjectsTree.h
@@ -16,6 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <core/xmlApi.hpp>
+#include "../object/UniqueObject.h"
 
 namespace container {
 
@@ -55,6 +56,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	static void compose ( std::deque < sax::Token > & out, const std::tree < ElementType > & input );
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class ElementType >
@@ -162,6 +165,11 @@ void ObjectsTree < ElementType >::compose ( std::deque < sax::Token > & out, con
 	out.emplace_back ( ObjectsTree < >::getXmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class ElementType >
+alib::ObjectBase* ObjectsTree < ElementType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace container */
 
 namespace alib {
diff --git a/alib2common/src/container/ObjectsVector.h b/alib2common/src/container/ObjectsVector.h
index d191758a1f..514343d010 100644
--- a/alib2common/src/container/ObjectsVector.h
+++ b/alib2common/src/container/ObjectsVector.h
@@ -16,6 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <core/xmlApi.hpp>
+#include "../object/UniqueObject.h"
 
 namespace container {
 
@@ -56,6 +57,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	static void compose ( std::deque < sax::Token > & out, const std::vector < ElementType > & input );
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class ElementType >
@@ -128,6 +131,11 @@ void ObjectsVector < ElementType >::compose ( std::deque < sax::Token > & out, c
 	out.emplace_back ( ObjectsVector < >::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class ElementType >
+alib::ObjectBase* ObjectsVector < ElementType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace container */
 
 namespace alib {
diff --git a/alib2common/src/exception/CommonException.cpp b/alib2common/src/exception/CommonException.cpp
index b4053278c6..42227afaec 100644
--- a/alib2common/src/exception/CommonException.cpp
+++ b/alib2common/src/exception/CommonException.cpp
@@ -10,6 +10,7 @@
 #include "../sax/FromXMLParserHelper.h"
 #include "../object/Object.h"
 #include "../core/xmlApi.hpp"
+#include "../object/UniqueObject.h"
 #include "../global/GlobalData.h"
 
 #ifdef DEBUG
@@ -115,6 +116,10 @@ void CommonException::compose(std::deque<sax::Token>& out) const {
 	out.emplace_back(CommonException::getXmlTagName(), sax::Token::TokenType::END_ELEMENT);
 }
 
+alib::ObjectBase* CommonException::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace exception */
 
 namespace alib {
diff --git a/alib2common/src/exception/CommonException.h b/alib2common/src/exception/CommonException.h
index 9676d5c716..5205c4fcc4 100644
--- a/alib2common/src/exception/CommonException.h
+++ b/alib2common/src/exception/CommonException.h
@@ -79,6 +79,8 @@ public:
 	static CommonException parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace exception */
diff --git a/alib2common/src/object/Object.cpp b/alib2common/src/object/Object.cpp
index aa46af4152..54121572ff 100644
--- a/alib2common/src/object/Object.cpp
+++ b/alib2common/src/object/Object.cpp
@@ -10,6 +10,10 @@
 
 namespace alib {
 
+void Object::inc ( ) {
+	this->operator ++ ( );
+}
+
 auto ObjectDeleter = xmlApi < alib::Object >::InputContextDeleter ( );
 
 }
diff --git a/alib2common/src/object/Object.h b/alib2common/src/object/Object.h
index cc0930c2c0..285743dd60 100644
--- a/alib2common/src/object/Object.h
+++ b/alib2common/src/object/Object.h
@@ -20,6 +20,8 @@ class Object : public alib::WrapperBase < ObjectBase > {
 	using alib::WrapperBase < ObjectBase >::WrapperBase;
 
 public:
+	void inc ( );
+
 	static const std::string & getXmlTagRefName() {
 		static std::string xmlTagName = "ObjectRef";
 
diff --git a/alib2common/src/object/ObjectBase.h b/alib2common/src/object/ObjectBase.h
index 498fdff68a..0c75fc9f52 100644
--- a/alib2common/src/object/ObjectBase.h
+++ b/alib2common/src/object/ObjectBase.h
@@ -24,6 +24,8 @@ public:
 
 	virtual ObjectBase* clone() const = 0;
 	virtual ObjectBase* plunder() && = 0;
+
+	virtual ObjectBase* inc() && = 0;
 };
 
 } /* namespace alib */
diff --git a/alib2common/src/object/Void.cpp b/alib2common/src/object/Void.cpp
index 9246d93ed8..bfbb682744 100644
--- a/alib2common/src/object/Void.cpp
+++ b/alib2common/src/object/Void.cpp
@@ -9,6 +9,7 @@
 #include "../sax/FromXMLParserHelper.h"
 #include "Object.h"
 #include "../core/xmlApi.hpp"
+#include "UniqueObject.h"
 
 namespace alib {
 
@@ -49,6 +50,10 @@ void Void::compose(std::deque<sax::Token>& out) const {
 	out.emplace_back(Void::getXmlTagName(), sax::Token::TokenType::END_ELEMENT);
 }
 
+ObjectBase* Void::inc() && {
+	return new UniqueObject(Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace alib */
 
 namespace alib {
diff --git a/alib2common/src/object/Void.h b/alib2common/src/object/Void.h
index e8fcc8fae7..d46bd7671a 100644
--- a/alib2common/src/object/Void.h
+++ b/alib2common/src/object/Void.h
@@ -51,6 +51,8 @@ public:
 	static Void parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual ObjectBase * inc ( ) &&;
 };
 
 } /* namespace alib */
diff --git a/alib2data/src/automaton/FSM/CompactNFA.h b/alib2data/src/automaton/FSM/CompactNFA.h
index 0de2fc7652..ad082df6c5 100644
--- a/alib2data/src/automaton/FSM/CompactNFA.h
+++ b/alib2data/src/automaton/FSM/CompactNFA.h
@@ -16,6 +16,7 @@
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
 #include <common/createUnique.hpp>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -167,6 +168,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace automaton */
@@ -386,6 +389,11 @@ void CompactNFA < SymbolType, StateType >::composeTransitions ( std::deque < sax
 	out.emplace_back ( "transitions", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class StateType >
+alib::ObjectBase* CompactNFA < SymbolType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/FSM/DFA.h b/alib2data/src/automaton/FSM/DFA.h
index e43fcdfa46..84fd9a9022 100644
--- a/alib2data/src/automaton/FSM/DFA.h
+++ b/alib2data/src/automaton/FSM/DFA.h
@@ -14,6 +14,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -168,6 +169,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template<class SymbolType, class StateType >
@@ -354,6 +357,11 @@ void DFA<SymbolType, StateType>::composeTransitions ( std::deque < sax::Token >
 	out.emplace_back ( "transitions", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class StateType >
+alib::ObjectBase* DFA < SymbolType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.h b/alib2data/src/automaton/FSM/EpsilonNFA.h
index 5ca3f7b7cf..e700e94181 100644
--- a/alib2data/src/automaton/FSM/EpsilonNFA.h
+++ b/alib2data/src/automaton/FSM/EpsilonNFA.h
@@ -16,6 +16,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include <core/components.hpp>
 #include <common/createUnique.hpp>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonException.h"
 #include "../AutomatonBase.h"
@@ -244,6 +245,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace automaton */
@@ -574,6 +577,11 @@ void EpsilonNFA < SymbolType, EpsilonType, StateType >::composeTransitions ( std
 	out.emplace_back ( "transitions", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class EpsilonType, class StateType >
+alib::ObjectBase* EpsilonNFA < SymbolType, EpsilonType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.h b/alib2data/src/automaton/FSM/ExtendedNFA.h
index 4e08dcf8ac..c9685960c1 100644
--- a/alib2data/src/automaton/FSM/ExtendedNFA.h
+++ b/alib2data/src/automaton/FSM/ExtendedNFA.h
@@ -16,6 +16,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include <core/components.hpp>
 #include <common/createUnique.hpp>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonException.h"
 #include "../AutomatonBase.h"
@@ -171,6 +172,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace automaton */
@@ -404,6 +407,11 @@ void ExtendedNFA < SymbolType, StateType >::composeTransitions ( std::deque < sa
 	out.emplace_back ( "transitions", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class StateType >
+alib::ObjectBase* ExtendedNFA < SymbolType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/FSM/MultiInitialStateNFA.h b/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
index 857424a431..2fcdccfb89 100644
--- a/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
+++ b/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
@@ -14,6 +14,7 @@
 
 #include <sax/FromXMLParserHelper.h>
 #include <core/components.hpp>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonException.h"
 #include "../AutomatonBase.h"
@@ -186,6 +187,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace automaton */
@@ -397,6 +400,11 @@ void MultiInitialStateNFA < SymbolType, StateType >::composeTransitions ( std::d
 	out.emplace_back ( "transitions", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class StateType >
+alib::ObjectBase* MultiInitialStateNFA < SymbolType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/FSM/NFA.h b/alib2data/src/automaton/FSM/NFA.h
index db2fe2b6b5..c1c7d72c27 100644
--- a/alib2data/src/automaton/FSM/NFA.h
+++ b/alib2data/src/automaton/FSM/NFA.h
@@ -12,6 +12,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonException.h"
 #include "../AutomatonBase.h"
@@ -178,6 +179,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace automaton */
@@ -381,6 +384,11 @@ void NFA < SymbolType, StateType >::composeTransitions ( std::deque < sax::Token
 	out.emplace_back ( "transitions", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class StateType >
+alib::ObjectBase* NFA < SymbolType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/PDA/DPDA.h b/alib2data/src/automaton/PDA/DPDA.h
index 84fc6af378..bf078ecc9f 100644
--- a/alib2data/src/automaton/PDA/DPDA.h
+++ b/alib2data/src/automaton/PDA/DPDA.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -202,6 +203,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType, class EpsilonType, class StateType >
@@ -480,6 +483,11 @@ void DPDA < SymbolType, EpsilonType, StateType >::composeTransitions(std::deque<
 	out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType, class EpsilonType, class StateType >
+alib::ObjectBase* DPDA < SymbolType, EpsilonType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/PDA/InputDrivenDPDA.h b/alib2data/src/automaton/PDA/InputDrivenDPDA.h
index fda8835124..978cee8943 100644
--- a/alib2data/src/automaton/PDA/InputDrivenDPDA.h
+++ b/alib2data/src/automaton/PDA/InputDrivenDPDA.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -206,6 +207,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class  SymbolType, class StateType >
@@ -455,6 +458,11 @@ void InputDrivenDPDA < SymbolType, StateType >::composeTransitions(std::deque<sa
 	out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType, class StateType >
+alib::ObjectBase* InputDrivenDPDA < SymbolType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/PDA/InputDrivenNPDA.h b/alib2data/src/automaton/PDA/InputDrivenNPDA.h
index 463434c335..f30875aa83 100644
--- a/alib2data/src/automaton/PDA/InputDrivenNPDA.h
+++ b/alib2data/src/automaton/PDA/InputDrivenNPDA.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -206,6 +207,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType, class StateType >
@@ -453,6 +456,11 @@ void InputDrivenNPDA < SymbolType, StateType >::composeTransitions(std::deque<sa
 	out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType, class StateType >
+alib::ObjectBase* InputDrivenNPDA < SymbolType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/PDA/NPDA.h b/alib2data/src/automaton/PDA/NPDA.h
index f109014f5d..d62a041fdc 100644
--- a/alib2data/src/automaton/PDA/NPDA.h
+++ b/alib2data/src/automaton/PDA/NPDA.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -188,6 +189,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType, class EpsilonType, class StateType >
@@ -370,6 +373,11 @@ void NPDA < SymbolType, EpsilonType, StateType >::composeTransitions(std::deque<
 	out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType, class EpsilonType, class StateType >
+alib::ObjectBase* NPDA < SymbolType, EpsilonType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/PDA/NPDTA.h b/alib2data/src/automaton/PDA/NPDTA.h
index 528ef056c4..1b1f9fdc7a 100644
--- a/alib2data/src/automaton/PDA/NPDTA.h
+++ b/alib2data/src/automaton/PDA/NPDTA.h
@@ -15,8 +15,9 @@
 #include <algorithm>
 #include <sstream>
 
-#include <sax/FromXMLParserHelper.h>
 #include <core/components.hpp>
+#include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -212,6 +213,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType, class EpsilonType, class StateType >
@@ -430,6 +433,11 @@ void NPDTA < SymbolType, EpsilonType, StateType >::composeTransitions(std::deque
 	out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType, class EpsilonType, class StateType >
+alib::ObjectBase* NPDTA < SymbolType, EpsilonType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
index 3a38007e8f..0933f2e3b1 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -228,6 +229,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template<class SymbolType, class EpsilonType, class StateType >
@@ -672,6 +675,11 @@ void RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType >::com
 	out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType, class EpsilonType, class StateType >
+alib::ObjectBase* RealTimeHeightDeterministicDPDA < SymbolType, EpsilonType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
index 3dd3fd179a..d3a318adeb 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -236,6 +237,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType, class EpsilonType, class StateType >
@@ -573,6 +576,11 @@ void RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType >::com
 	out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType, class EpsilonType, class StateType >
+alib::ObjectBase* RealTimeHeightDeterministicNPDA < SymbolType, EpsilonType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/PDA/SinglePopDPDA.h b/alib2data/src/automaton/PDA/SinglePopDPDA.h
index a2240ee11e..e8742ac799 100644
--- a/alib2data/src/automaton/PDA/SinglePopDPDA.h
+++ b/alib2data/src/automaton/PDA/SinglePopDPDA.h
@@ -18,6 +18,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -193,6 +194,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType, class EpsilonType, class StateType >
@@ -411,6 +414,11 @@ void SinglePopDPDA < SymbolType, EpsilonType, StateType >::composeTransitions(st
 	out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType, class EpsilonType, class StateType >
+alib::ObjectBase* SinglePopDPDA < SymbolType, EpsilonType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/PDA/SinglePopNPDA.h b/alib2data/src/automaton/PDA/SinglePopNPDA.h
index 8f93b94a73..25adf8656b 100644
--- a/alib2data/src/automaton/PDA/SinglePopNPDA.h
+++ b/alib2data/src/automaton/PDA/SinglePopNPDA.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -188,6 +189,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType, class EpsilonType, class StateType >
@@ -375,6 +378,11 @@ void SinglePopNPDA < SymbolType, EpsilonType, StateType >::composeTransitions(st
 	out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType, class EpsilonType, class StateType >
+alib::ObjectBase* SinglePopNPDA < SymbolType, EpsilonType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
index 3f6eedd718..b4b8de42ae 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
@@ -15,6 +15,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -261,6 +262,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType, class StateType >
@@ -596,6 +599,11 @@ void VisiblyPushdownDPDA < SymbolType, StateType >::composeTransitions(std::dequ
 	out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType, class StateType >
+alib::ObjectBase* VisiblyPushdownDPDA < SymbolType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
index 4bc114b05b..4b0b1af7e8 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
@@ -15,6 +15,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -269,6 +270,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType, class StateType >
@@ -542,6 +545,11 @@ void VisiblyPushdownNPDA < SymbolType, StateType >::composeTransitions(std::dequ
 	out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType, class StateType >
+alib::ObjectBase* VisiblyPushdownNPDA < SymbolType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/TA/DFTA.h b/alib2data/src/automaton/TA/DFTA.h
index 35cb5d5af0..bed1454b82 100644
--- a/alib2data/src/automaton/TA/DFTA.h
+++ b/alib2data/src/automaton/TA/DFTA.h
@@ -15,6 +15,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "alphabet/ranked_symbol.hpp"
 
 #include "../AutomatonFeatures.h"
@@ -144,6 +145,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace automaton */
@@ -294,6 +297,11 @@ void DFTA < SymbolType, RankType, StateType >::composeTransitions(std::deque<sax
 	out.emplace_back(sax::Token("transitions", sax::Token::TokenType::END_ELEMENT));
 }
 
+template < class SymbolType, class RankType, class StateType >
+alib::ObjectBase* DFTA < SymbolType, RankType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/TA/NFTA.h b/alib2data/src/automaton/TA/NFTA.h
index d7ec2fe37f..b979838cb2 100644
--- a/alib2data/src/automaton/TA/NFTA.h
+++ b/alib2data/src/automaton/TA/NFTA.h
@@ -15,6 +15,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonBase.h"
 #include "../AutomatonFeatures.h"
@@ -153,6 +154,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace automaton */
@@ -317,6 +320,11 @@ void NFTA < SymbolType, RankType, StateType >::composeTransitions(std::deque<sax
 	out.emplace_back(sax::Token("transitions", sax::Token::TokenType::END_ELEMENT));
 }
 
+template < class SymbolType, class RankType, class StateType >
+alib::ObjectBase* NFTA < SymbolType, RankType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/automaton/TM/OneTapeDTM.h b/alib2data/src/automaton/TM/OneTapeDTM.h
index fe2f2e447a..3c140bbd3c 100644
--- a/alib2data/src/automaton/TM/OneTapeDTM.h
+++ b/alib2data/src/automaton/TM/OneTapeDTM.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../AutomatonException.h"
 #include "../AutomatonBase.h"
@@ -181,6 +182,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeTransitions ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template<class SymbolType, class StateType >
@@ -354,6 +357,11 @@ void OneTapeDTM<SymbolType, StateType>::composeTransitions(std::deque<sax::Token
 	out.emplace_back("transitions", sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType, class StateType >
+alib::ObjectBase* OneTapeDTM < SymbolType, StateType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace automaton */
 
 namespace std {
diff --git a/alib2data/src/grammar/ContextFree/CFG.h b/alib2data/src/grammar/ContextFree/CFG.h
index 0fe11fe684..f19a348597 100644
--- a/alib2data/src/grammar/ContextFree/CFG.h
+++ b/alib2data/src/grammar/ContextFree/CFG.h
@@ -15,6 +15,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -113,6 +114,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace grammar */
@@ -269,6 +272,11 @@ void CFG < SymbolType >::composeRules ( std::deque < sax::Token > & out ) const
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* CFG < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/grammar/ContextFree/CNF.h b/alib2data/src/grammar/ContextFree/CNF.h
index 61cd02ed3a..6e3612ded7 100644
--- a/alib2data/src/grammar/ContextFree/CNF.h
+++ b/alib2data/src/grammar/ContextFree/CNF.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -120,6 +121,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -358,6 +361,11 @@ void CNF < SymbolType >::composeRules ( std::deque < sax::Token > & out ) const
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* CNF < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
index eeaf1d8ec1..c3e4bff625 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
@@ -15,6 +15,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -115,6 +116,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -296,6 +299,11 @@ void EpsilonFreeCFG < SymbolType >::composeRules ( std::deque < sax::Token > & o
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* EpsilonFreeCFG < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/grammar/ContextFree/GNF.h b/alib2data/src/grammar/ContextFree/GNF.h
index 11f3ef8905..3c98dfc4dd 100644
--- a/alib2data/src/grammar/ContextFree/GNF.h
+++ b/alib2data/src/grammar/ContextFree/GNF.h
@@ -15,6 +15,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -116,6 +117,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -305,6 +308,11 @@ void GNF < SymbolType >::composeRules ( std::deque < sax::Token > & out ) const
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* GNF < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/grammar/ContextFree/LG.h b/alib2data/src/grammar/ContextFree/LG.h
index 585af5398f..80e172649c 100644
--- a/alib2data/src/grammar/ContextFree/LG.h
+++ b/alib2data/src/grammar/ContextFree/LG.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -117,6 +118,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -335,6 +338,11 @@ void LG < SymbolType >::composeRules ( std::deque < sax::Token > & out ) const {
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* LG < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/grammar/ContextSensitive/CSG.h b/alib2data/src/grammar/ContextSensitive/CSG.h
index 15fd69b8ef..eb75e88bf3 100644
--- a/alib2data/src/grammar/ContextSensitive/CSG.h
+++ b/alib2data/src/grammar/ContextSensitive/CSG.h
@@ -15,6 +15,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -109,6 +110,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -267,6 +270,11 @@ void CSG < SymbolType >::composeRules ( std::deque < sax::Token > & out ) const
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* CSG < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
index 5fda40f728..1e8c149633 100644
--- a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
+++ b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
@@ -15,6 +15,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -109,6 +110,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -261,6 +264,11 @@ void NonContractingGrammar < SymbolType >::composeRules ( std::deque < sax::Toke
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* NonContractingGrammar < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/grammar/Regular/LeftLG.h b/alib2data/src/grammar/Regular/LeftLG.h
index 8b47b25384..54c0282bd7 100644
--- a/alib2data/src/grammar/Regular/LeftLG.h
+++ b/alib2data/src/grammar/Regular/LeftLG.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -116,6 +117,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -321,6 +324,11 @@ void LeftLG < SymbolType >::composeRules ( std::deque < sax::Token > & out ) con
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* LeftLG < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/grammar/Regular/LeftRG.h b/alib2data/src/grammar/Regular/LeftRG.h
index 6e6238f0aa..72b4d1ec8f 100644
--- a/alib2data/src/grammar/Regular/LeftRG.h
+++ b/alib2data/src/grammar/Regular/LeftRG.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -194,6 +195,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -428,6 +431,11 @@ void LeftRG < SymbolType >::composeRules ( std::deque < sax::Token > & out ) con
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* LeftRG < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/grammar/Regular/RightLG.h b/alib2data/src/grammar/Regular/RightLG.h
index ae0f911e31..c3a96ea097 100644
--- a/alib2data/src/grammar/Regular/RightLG.h
+++ b/alib2data/src/grammar/Regular/RightLG.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -116,6 +117,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -321,6 +324,11 @@ void RightLG < SymbolType >::composeRules ( std::deque < sax::Token > & out ) co
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* RightLG < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/grammar/Regular/RightRG.h b/alib2data/src/grammar/Regular/RightRG.h
index 2748cba19f..c507c7eff3 100644
--- a/alib2data/src/grammar/Regular/RightRG.h
+++ b/alib2data/src/grammar/Regular/RightRG.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -137,6 +138,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -369,6 +372,11 @@ void RightRG < SymbolType >::composeRules ( std::deque < sax::Token > & out ) co
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* RightRG < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
index 71c563ef05..cbb9e13799 100644
--- a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
+++ b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
@@ -15,6 +15,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -105,6 +106,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -242,6 +245,11 @@ void ContextPreservingUnrestrictedGrammar < SymbolType >::composeRules ( std::de
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* ContextPreservingUnrestrictedGrammar < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
index a907f91d0c..ce6bda2ea0 100644
--- a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
+++ b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
@@ -15,6 +15,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../GrammarBase.h"
 #include "../GrammarFeatures.h"
@@ -105,6 +106,8 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 	void composeRules ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -236,6 +239,11 @@ void UnrestrictedGrammar < SymbolType >::composeRules ( std::deque < sax::Token
 	out.emplace_back ( "rules", sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* UnrestrictedGrammar < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace grammar */
 
 namespace std {
diff --git a/alib2data/src/regexp/formal/FormalRegExp.h b/alib2data/src/regexp/formal/FormalRegExp.h
index 516e1242fc..7ab95c272e 100644
--- a/alib2data/src/regexp/formal/FormalRegExp.h
+++ b/alib2data/src/regexp/formal/FormalRegExp.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include <exception/CommonException.h>
 
 #include "../RegExpBase.h"
@@ -101,6 +102,8 @@ public:
 	static FormalRegExp parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace regexp */
@@ -199,6 +202,11 @@ void FormalRegExp < SymbolType >::compose ( std::deque < sax::Token > & out ) co
 	out.emplace_back ( FormalRegExp::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* FormalRegExp < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace regexp */
 
 namespace std {
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExp.h b/alib2data/src/regexp/unbounded/UnboundedRegExp.h
index dc701f5c2b..579e655f88 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExp.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExp.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include <exception/CommonException.h>
 
 #include "../RegExpBase.h"
@@ -101,6 +102,8 @@ public:
 	static UnboundedRegExp parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace regexp */
@@ -199,6 +202,11 @@ void UnboundedRegExp < SymbolType >::compose ( std::deque < sax::Token > & out )
 	out.emplace_back ( UnboundedRegExp::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* UnboundedRegExp < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace regexp */
 
 namespace std {
diff --git a/alib2data/src/rte/formal/FormalRTE.h b/alib2data/src/rte/formal/FormalRTE.h
index 332e36e353..a8f3770455 100644
--- a/alib2data/src/rte/formal/FormalRTE.h
+++ b/alib2data/src/rte/formal/FormalRTE.h
@@ -16,6 +16,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include <exception/CommonException.h>
 
 #include "../RTEBase.h"
@@ -138,6 +139,8 @@ public:
 	static FormalRTE parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType, class RankType >
@@ -228,6 +231,11 @@ void FormalRTE < SymbolType, RankType >::compose ( std::deque < sax::Token > & o
 	out.emplace_back ( FormalRTE::getXmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class RankType >
+alib::ObjectBase* FormalRTE < SymbolType, RankType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace rte */
 
 namespace std {
diff --git a/alib2data/src/string/CyclicString.h b/alib2data/src/string/CyclicString.h
index 39b067ae20..24453302ee 100644
--- a/alib2data/src/string/CyclicString.h
+++ b/alib2data/src/string/CyclicString.h
@@ -15,6 +15,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "StringBase.h"
 #include "StringFeatures.h"
@@ -87,6 +88,8 @@ public:
 	static CyclicString parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace string */
@@ -197,6 +200,11 @@ void CyclicString < SymbolType >::compose(std::deque<sax::Token>& out) const {
 	out.emplace_back(CyclicString::getXmlTagName(), sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType >
+alib::ObjectBase* CyclicString < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace string */
 
 namespace std {
diff --git a/alib2data/src/string/Epsilon.h b/alib2data/src/string/Epsilon.h
index bd340eb1de..799499c4b0 100644
--- a/alib2data/src/string/Epsilon.h
+++ b/alib2data/src/string/Epsilon.h
@@ -13,6 +13,7 @@
 
 #include <sax/FromXMLParserHelper.h>
 #include <core/components.hpp>
+#include <object/UniqueObject.h>
 
 #include "StringBase.h"
 #include "StringFeatures.h"
@@ -29,6 +30,8 @@ class GeneralAlphabet;
  */
 template < class SymbolType >
 class Epsilon : public StringBase, public std::Components < Epsilon < SymbolType >, SymbolType, std::tuple < GeneralAlphabet >, std::tuple < > > {
+	static const std::vector < SymbolType > content;
+
 public:
 	Epsilon ( );
 
@@ -79,7 +82,7 @@ public:
 
 	void compose ( std::deque < sax::Token > & out ) const;
 
-	static std::vector < SymbolType > content;
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 template < class SymbolType >
@@ -130,7 +133,7 @@ template < class SymbolType >
 Epsilon < SymbolType > Epsilon < SymbolType >::EPSILON = Epsilon < SymbolType >();
 
 template < class SymbolType >
-std::vector<SymbolType> Epsilon < SymbolType >::content;
+const std::vector<SymbolType> Epsilon < SymbolType >::content;
 
 template < class SymbolType >
 Epsilon < SymbolType > Epsilon < SymbolType >::parse(std::deque<sax::Token>::iterator& input) {
@@ -147,6 +150,11 @@ void Epsilon < SymbolType >::compose(std::deque<sax::Token>& out) const {
 	out.emplace_back(Epsilon::getXmlTagName(), sax::Token::TokenType::END_ELEMENT);
 }
 
+template < class SymbolType >
+alib::ObjectBase* Epsilon < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace string */
 
 namespace std {
diff --git a/alib2data/src/string/LinearString.h b/alib2data/src/string/LinearString.h
index 65ef6c4459..c76babddb4 100644
--- a/alib2data/src/string/LinearString.h
+++ b/alib2data/src/string/LinearString.h
@@ -15,6 +15,7 @@
 
 #include <sax/FromXMLParserHelper.h>
 #include <core/components.hpp>
+#include <object/UniqueObject.h>
 
 #include "StringBase.h"
 #include "StringFeatures.h"
@@ -101,6 +102,8 @@ public:
 	static LinearString parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace string */
@@ -260,6 +263,11 @@ void LinearString < SymbolType >::compose ( std::deque < sax::Token > & out ) co
 	out.emplace_back ( LinearString::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* LinearString < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace string */
 
 namespace std {
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
index 1a5cd708d3..4393edae43 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
@@ -17,6 +17,7 @@
 
 #include <sax/FromXMLParserHelper.h>
 #include <core/components.hpp>
+#include <object/UniqueObject.h>
 #include "alphabet/ranked_symbol.hpp"
 
 #include "../TreeFeatures.h"
@@ -123,6 +124,8 @@ public:
 	static PrefixRankedBarNonlinearPattern parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -310,6 +313,11 @@ void PrefixRankedBarNonlinearPattern < SymbolType, RankType >::compose ( std::de
 	out.emplace_back ( PrefixRankedBarNonlinearPattern::getXmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class RankType >
+alib::ObjectBase* PrefixRankedBarNonlinearPattern < SymbolType, RankType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
index 8ba7b4a313..4004e445e4 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "alphabet/ranked_symbol.hpp"
 
 #include "../TreeFeatures.h"
@@ -112,6 +113,8 @@ public:
 	static PrefixRankedBarPattern parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -274,6 +277,11 @@ void PrefixRankedBarPattern < SymbolType, RankType >::compose ( std::deque < sax
 	out.emplace_back ( PrefixRankedBarPattern::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class RankType >
+alib::ObjectBase* PrefixRankedBarPattern < SymbolType, RankType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
index 4106f31398..0153851eba 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "alphabet/ranked_symbol.hpp"
 
 #include "../TreeFeatures.h"
@@ -99,6 +100,8 @@ public:
 	static PrefixRankedBarTree parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -244,6 +247,11 @@ void PrefixRankedBarTree < SymbolType, RankType >::compose ( std::deque < sax::T
 	out.emplace_back ( PrefixRankedBarTree::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class RankType >
+alib::ObjectBase* PrefixRankedBarTree < SymbolType, RankType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
index e843e58a22..8a97f9b949 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "alphabet/ranked_symbol.hpp"
 
 #include "../TreeFeatures.h"
@@ -107,6 +108,8 @@ public:
 	static PrefixRankedNonlinearPattern parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -262,6 +265,11 @@ void PrefixRankedNonlinearPattern < SymbolType, RankType >::compose ( std::deque
 	out.emplace_back ( PrefixRankedNonlinearPattern::getXmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class RankType >
+alib::ObjectBase* PrefixRankedNonlinearPattern < SymbolType, RankType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.h b/alib2data/src/tree/ranked/PrefixRankedPattern.h
index 0b98089902..2393243c85 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "alphabet/ranked_symbol.hpp"
 
 #include "../TreeFeatures.h"
@@ -98,6 +99,8 @@ public:
 	static PrefixRankedPattern parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -232,6 +235,11 @@ void PrefixRankedPattern < SymbolType, RankType >::compose ( std::deque < sax::T
 	out.emplace_back ( PrefixRankedPattern::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class RankType >
+alib::ObjectBase* PrefixRankedPattern < SymbolType, RankType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.h b/alib2data/src/tree/ranked/PrefixRankedTree.h
index e4842315de..a55c98f346 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "alphabet/ranked_symbol.hpp"
 
 #include "../TreeFeatures.h"
@@ -90,6 +91,8 @@ public:
 	static PrefixRankedTree parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -217,6 +220,11 @@ void PrefixRankedTree < SymbolType, RankType >::compose ( std::deque < sax::Toke
 	out.emplace_back ( PrefixRankedTree::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class RankType >
+alib::ObjectBase* PrefixRankedTree < SymbolType, RankType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.h b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
index a63abeee1e..762bb8ecb3 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "alphabet/ranked_symbol.hpp"
 
 #include "../TreeFeatures.h"
@@ -115,6 +116,8 @@ public:
 	static RankedNonlinearPattern parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -233,6 +236,11 @@ void RankedNonlinearPattern < SymbolType, RankType >::compose ( std::deque < sax
 	out.emplace_back ( RankedNonlinearPattern::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class RankType >
+alib::ObjectBase* RankedNonlinearPattern < SymbolType, RankType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data/src/tree/ranked/RankedPattern.h b/alib2data/src/tree/ranked/RankedPattern.h
index a5408874a3..a38f2c6b3d 100644
--- a/alib2data/src/tree/ranked/RankedPattern.h
+++ b/alib2data/src/tree/ranked/RankedPattern.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "alphabet/ranked_symbol.hpp"
 
 #include "../TreeFeatures.h"
@@ -109,6 +110,8 @@ public:
 	static RankedPattern parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -221,6 +224,11 @@ void RankedPattern < SymbolType, RankType >::compose ( std::deque < sax::Token >
 	out.emplace_back ( RankedPattern::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class RankType >
+alib::ObjectBase* RankedPattern < SymbolType, RankType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data/src/tree/ranked/RankedTree.h b/alib2data/src/tree/ranked/RankedTree.h
index 58de295acf..402277c3cd 100644
--- a/alib2data/src/tree/ranked/RankedTree.h
+++ b/alib2data/src/tree/ranked/RankedTree.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "alphabet/ranked_symbol.hpp"
 
 #include "../TreeFeatures.h"
@@ -104,6 +105,8 @@ public:
 	static RankedTree parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -214,6 +217,11 @@ void RankedTree < SymbolType, RankType >::compose ( std::deque < sax::Token > &
 	out.emplace_back ( RankedTree::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType, class RankType >
+alib::ObjectBase* RankedTree < SymbolType, RankType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data/src/tree/unranked/PrefixBarTree.h b/alib2data/src/tree/unranked/PrefixBarTree.h
index 874093c6f7..fdefd3e2f5 100644
--- a/alib2data/src/tree/unranked/PrefixBarTree.h
+++ b/alib2data/src/tree/unranked/PrefixBarTree.h
@@ -17,6 +17,7 @@
 
 #include <sax/FromXMLParserHelper.h>
 #include <core/components.hpp>
+#include <object/UniqueObject.h>
 
 #include "../TreeFeatures.h"
 #include "../UnrankedTreeBase.h"
@@ -96,6 +97,8 @@ public:
 	static PrefixBarTree parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -234,6 +237,11 @@ void PrefixBarTree < SymbolType >::compose ( std::deque < sax::Token > & out ) c
 	out.emplace_back ( PrefixBarTree::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* PrefixBarTree < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
index b72b1a23e8..65b72f21ba 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
@@ -118,6 +119,8 @@ public:
 	static UnrankedNonlinearPattern parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -225,6 +228,11 @@ void UnrankedNonlinearPattern < SymbolType >::compose ( std::deque < sax::Token
 	out.emplace_back ( UnrankedNonlinearPattern::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* UnrankedNonlinearPattern < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.h b/alib2data/src/tree/unranked/UnrankedPattern.h
index c130f8d822..3ee6af57e9 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedPattern.h
@@ -17,6 +17,7 @@
 
 #include <core/components.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 
 #include "../TreeFeatures.h"
 #include "../TreeException.h"
@@ -106,6 +107,8 @@ public:
 	static UnrankedPattern parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -207,6 +210,11 @@ void UnrankedPattern < SymbolType >::compose ( std::deque < sax::Token > & out )
 	out.emplace_back ( UnrankedPattern::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* UnrankedPattern < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data/src/tree/unranked/UnrankedTree.h b/alib2data/src/tree/unranked/UnrankedTree.h
index 567994e780..59dc654975 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.h
+++ b/alib2data/src/tree/unranked/UnrankedTree.h
@@ -17,6 +17,7 @@
 
 #include <sax/FromXMLParserHelper.h>
 #include <core/components.hpp>
+#include <object/UniqueObject.h>
 
 #include "../TreeFeatures.h"
 #include "../UnrankedTreeBase.h"
@@ -101,6 +102,8 @@ public:
 	static UnrankedTree parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
@@ -200,6 +203,11 @@ void UnrankedTree < SymbolType >::compose ( std::deque < sax::Token > & out ) co
 	out.emplace_back ( UnrankedTree::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+template < class SymbolType >
+alib::ObjectBase* UnrankedTree < SymbolType >::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace tree */
 
 namespace std {
diff --git a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp
index a917755adb..34e481dcfc 100644
--- a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp
@@ -13,6 +13,7 @@
 #include <object/Object.h>
 #include <core/xmlApi.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "../common/GraphFromXMLParser.h"
 #include "../common/GraphToXMLComposer.h"
 #include "../Graph.h"
@@ -315,6 +316,9 @@ void AdjacencyListDirectedGraph::compose( std::deque<sax::Token> & out ) const
 	out.emplace_back(getXmlTagName(), sax::Token::TokenType::END_ELEMENT);
 }
 
+alib::ObjectBase* AdjacencyListDirectedGraph::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
 
 } // namespace graph
 
diff --git a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.h b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.h
index a114f38a02..aa75f9d249 100644
--- a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.h
+++ b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.h
@@ -88,6 +88,8 @@ public:
 
 		return xmlTagName;
 	}
+
+	alib::ObjectBase * inc ( ) && override;
 };
 
 } // namespace graph
diff --git a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp
index ab04d54bfe..4edc624765 100644
--- a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp
@@ -13,6 +13,7 @@
 #include <object/Object.h>
 #include <core/xmlApi.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "../common/GraphFromXMLParser.h"
 #include "../common/GraphToXMLComposer.h"
 #include "../Graph.h"
@@ -316,6 +317,9 @@ void AdjacencyMatrixDirectedGraph::compose( std::deque<sax::Token> & out ) const
 	out.emplace_back(getXmlTagName(), sax::Token::TokenType::END_ELEMENT);
 }
 
+alib::ObjectBase* AdjacencyMatrixDirectedGraph::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
 
 } // namespace graph
 
diff --git a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.h b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.h
index bbc7a48e14..6151b63412 100644
--- a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.h
+++ b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.h
@@ -91,6 +91,8 @@ public:
 
 		return xmlTagName;
 	}
+
+	alib::ObjectBase * inc ( ) && override;
 };
 
 } // namespace graph
diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp
index 9f1f3fa040..47544fdbe3 100644
--- a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp
@@ -13,6 +13,7 @@
 #include <object/Object.h>
 #include <core/xmlApi.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "../common/GraphFromXMLParser.h"
 #include "../common/GraphToXMLComposer.h"
 #include "../Graph.h"
@@ -244,6 +245,9 @@ void AdjacencyListUndirectedGraph::compose( std::deque<sax::Token> & out ) const
 	out.emplace_back(getXmlTagName(), sax::Token::TokenType::END_ELEMENT);
 }
 
+alib::ObjectBase* AdjacencyListUndirectedGraph::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
 
 } // namespace graph
 
diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.h b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.h
index 71c09bb974..6fc8eba66f 100644
--- a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.h
+++ b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.h
@@ -85,6 +85,8 @@ public:
 
 		return xmlTagName;
 	}
+
+	alib::ObjectBase * inc ( ) && override;
 };
 
 } // namespace graph
diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp
index bcb8113511..859b0d7c2e 100644
--- a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp
+++ b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp
@@ -13,6 +13,7 @@
 #include <object/Object.h>
 #include <core/xmlApi.hpp>
 #include <sax/FromXMLParserHelper.h>
+#include <object/UniqueObject.h>
 #include "../common/GraphFromXMLParser.h"
 #include "../common/GraphToXMLComposer.h"
 #include "../Graph.h"
@@ -258,6 +259,9 @@ void AdjacencyMatrixUndirectedGraph::compose( std::deque<sax::Token> & out ) con
 	out.emplace_back(getXmlTagName(), sax::Token::TokenType::END_ELEMENT);
 }
 
+alib::ObjectBase* AdjacencyMatrixUndirectedGraph::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
 
 } // namespace graph
 
diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.h b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.h
index aa449eb63e..338cf3d7da 100644
--- a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.h
+++ b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.h
@@ -88,6 +88,8 @@ public:
 
 		return xmlTagName;
 	}
+
+	alib::ObjectBase * inc ( ) && override;
 };
 
 } // namespace graph
diff --git a/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieFinalMark.cpp b/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieFinalMark.cpp
index 66865965c5..482cb51c10 100644
--- a/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieFinalMark.cpp
+++ b/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieFinalMark.cpp
@@ -18,6 +18,7 @@
 #include "../common/IndexToXMLComposer.h"
 #include <object/Object.h>
 #include <core/xmlApi.hpp>
+#include <object/UniqueObject.h>
 
 namespace indexes {
 
@@ -133,6 +134,10 @@ void SuffixTrieFinalMark::compose ( std::deque < sax::Token > & out ) const {
 	out.emplace_back ( SuffixTrieFinalMark::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+alib::ObjectBase* SuffixTrieFinalMark::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace indexes */
 
 namespace alib {
diff --git a/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieFinalMark.h b/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieFinalMark.h
index 390b806444..461ed8d894 100644
--- a/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieFinalMark.h
+++ b/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieFinalMark.h
@@ -110,6 +110,8 @@ public:
 	static SuffixTrieFinalMark parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
diff --git a/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp b/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp
index 6da2e7d97b..89be56fb86 100644
--- a/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp
+++ b/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp
@@ -17,6 +17,7 @@
 #include "../common/IndexToXMLComposer.h"
 #include <object/Object.h>
 #include <core/xmlApi.hpp>
+#include <object/UniqueObject.h>
 
 namespace indexes {
 
@@ -130,6 +131,10 @@ void SuffixTrieTerminatingSymbol::compose ( std::deque < sax::Token > & out ) co
 	out.emplace_back ( SuffixTrieTerminatingSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+alib::ObjectBase* SuffixTrieTerminatingSymbol::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace indexes */
 
 namespace alib {
diff --git a/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.h b/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.h
index 75bea8fbba..c875decfa0 100644
--- a/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.h
+++ b/alib2data_experimental/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.h
@@ -106,6 +106,8 @@ public:
 	static SuffixTrieTerminatingSymbol parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace tree */
diff --git a/alib2data_experimental/src/string/LinearStringTerminatingSymbol.cpp b/alib2data_experimental/src/string/LinearStringTerminatingSymbol.cpp
index 54efb98850..9e78fe3e51 100644
--- a/alib2data_experimental/src/string/LinearStringTerminatingSymbol.cpp
+++ b/alib2data_experimental/src/string/LinearStringTerminatingSymbol.cpp
@@ -19,6 +19,7 @@
 #include <object/Object.h>
 #include <core/xmlApi.hpp>
 #include <core/castApi.hpp>
+#include <object/UniqueObject.h>
 
 namespace string {
 
@@ -116,6 +117,10 @@ void LinearStringTerminatingSymbol::compose ( std::deque < sax::Token > & out )
 	out.emplace_back ( LinearStringTerminatingSymbol::getXmlTagName(), sax::Token::TokenType::END_ELEMENT );
 }
 
+alib::ObjectBase* LinearStringTerminatingSymbol::inc() && {
+	return new alib::UniqueObject(alib::Object(std::move(*this)), primitive::Integer(0));
+}
+
 } /* namespace string */
 
 namespace alib {
diff --git a/alib2data_experimental/src/string/LinearStringTerminatingSymbol.h b/alib2data_experimental/src/string/LinearStringTerminatingSymbol.h
index 0d7da3741e..e0dc3b7874 100644
--- a/alib2data_experimental/src/string/LinearStringTerminatingSymbol.h
+++ b/alib2data_experimental/src/string/LinearStringTerminatingSymbol.h
@@ -89,6 +89,8 @@ public:
 	static LinearStringTerminatingSymbol parse ( std::deque < sax::Token >::iterator & input );
 
 	void compose ( std::deque < sax::Token > & out ) const;
+
+	virtual alib::ObjectBase * inc ( ) &&;
 };
 
 } /* namespace string */
-- 
GitLab