diff --git a/alib2data/src/tree/RankedTreeBase.h b/alib2data/src/tree/RankedTreeBase.h
index a0472bf939465681d51367114a42f5b1a9be0acd..a3a12129929c40c555765e5a338f2d8b9276ccdd 100644
--- a/alib2data/src/tree/RankedTreeBase.h
+++ b/alib2data/src/tree/RankedTreeBase.h
@@ -17,7 +17,7 @@ namespace tree {
 /**
  * Represents symbol in an alphabet.
  */
-class RankedTreeBase : public tree::TreeBase {
+class RankedTreeBase : public TreeBase {
 public:
 	virtual RankedTreeBase * clone ( ) const = 0;
 	virtual RankedTreeBase * plunder ( ) && = 0;
diff --git a/alib2data/src/tree/RankedTreeWrapper.cpp b/alib2data/src/tree/RankedTreeWrapper.cpp
index e64fb3dfca9073c3ef6b51417e3c5c0617e5b2fb..1f6be4e6d253530c7ce51ce79b9b9a5667e350e6 100644
--- a/alib2data/src/tree/RankedTreeWrapper.cpp
+++ b/alib2data/src/tree/RankedTreeWrapper.cpp
@@ -22,6 +22,6 @@ void RankedTreeWrapper::extendAlphabet ( const std::set < alphabet::RankedSymbol
 
 namespace alib {
 
-auto RankedTreeWrapperDeleter = xmlApi < tree::RankedTreeWrapper >::InputContextDeleter ( );
+auto RankedTreeWrapperDeleter = xmlApi < ::tree::RankedTreeWrapper >::InputContextDeleter ( );
 
 }
diff --git a/alib2data/src/tree/Tree.cpp b/alib2data/src/tree/Tree.cpp
index c04c11839de86366d9627d4365102a3cdc0f7cdf..87cea9086cf4e4c7d5615fe7829461fd08ab61f6 100644
--- a/alib2data/src/tree/Tree.cpp
+++ b/alib2data/src/tree/Tree.cpp
@@ -10,6 +10,6 @@
 
 namespace alib {
 
-auto TreeDeleter = xmlApi < tree::Tree >::InputContextDeleter ( );
+auto TreeDeleter = xmlApi < ::tree::Tree >::InputContextDeleter ( );
 
 }
diff --git a/alib2data/src/tree/UnrankedTreeWrapper.cpp b/alib2data/src/tree/UnrankedTreeWrapper.cpp
index 1e343f0f1267e81e1df45fa6be4d366b9232df48..1ec21ad52902b88f01248d3a54900465d2539112 100644
--- a/alib2data/src/tree/UnrankedTreeWrapper.cpp
+++ b/alib2data/src/tree/UnrankedTreeWrapper.cpp
@@ -22,6 +22,6 @@ void UnrankedTreeWrapper::extendAlphabet ( const std::set < alphabet::Symbol > &
 
 namespace alib {
 
-auto UnrankedTreeWrapperDeleter = xmlApi < tree::UnrankedTreeWrapper >::InputContextDeleter ( );
+auto UnrankedTreeWrapperDeleter = xmlApi < ::tree::UnrankedTreeWrapper >::InputContextDeleter ( );
 
 }
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
index 25c8bb2ccb306573d3e174ec9973bd34f01d9ea1..ee9fd4085268a70c14b4edd82e6339990c13489e 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
@@ -196,15 +196,15 @@ void PrefixRankedBarNonlinearPattern::compose ( std::deque < sax::Token > & out
 
 namespace alib {
 
-auto prefixRankedBarNonlinearPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarNonlinearPattern > ( );
-auto prefixRankedBarNonlinearPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::PrefixRankedBarNonlinearPattern > ( );
-auto prefixRankedBarNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarNonlinearPattern > ( );
-
-auto PrefixRankedBarNonlinearPatternFromRankedTree = castApi::CastRegister < tree::PrefixRankedBarNonlinearPattern, tree::RankedTree > ( );
-auto PrefixRankedBarNonlinearPatternFromRankedPattern = castApi::CastRegister < tree::PrefixRankedBarNonlinearPattern, tree::RankedPattern > ( );
-auto PrefixRankedBarNonlinearPatternFromRankedNonlinearPattern = castApi::CastRegister < tree::PrefixRankedBarNonlinearPattern, tree::RankedNonlinearPattern > ( );
-auto PrefixRankedBarNonlinearPatternFromPrefixRankedBarTree = castApi::CastRegister < tree::PrefixRankedBarNonlinearPattern, tree::PrefixRankedBarTree > ( );
-auto PrefixRankedBarNonlinearPatternFromPrefixRankedBarPattern = castApi::CastRegister < tree::PrefixRankedBarNonlinearPattern, tree::PrefixRankedBarPattern > ( );
-auto PrefixRankedBarNonlinearPatternCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedBarNonlinearPattern > ( tree::PrefixRankedBarNonlinearPattern::getXmlTagName ( ) );
+auto prefixRankedBarNonlinearPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedBarNonlinearPattern > ( );
+auto prefixRankedBarNonlinearPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedBarNonlinearPattern > ( );
+auto prefixRankedBarNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedBarNonlinearPattern > ( );
+
+auto PrefixRankedBarNonlinearPatternFromRankedTree = castApi::CastRegister < ::tree::PrefixRankedBarNonlinearPattern, ::tree::RankedTree > ( );
+auto PrefixRankedBarNonlinearPatternFromRankedPattern = castApi::CastRegister < ::tree::PrefixRankedBarNonlinearPattern, ::tree::RankedPattern > ( );
+auto PrefixRankedBarNonlinearPatternFromRankedNonlinearPattern = castApi::CastRegister < ::tree::PrefixRankedBarNonlinearPattern, ::tree::RankedNonlinearPattern > ( );
+auto PrefixRankedBarNonlinearPatternFromPrefixRankedBarTree = castApi::CastRegister < ::tree::PrefixRankedBarNonlinearPattern, ::tree::PrefixRankedBarTree > ( );
+auto PrefixRankedBarNonlinearPatternFromPrefixRankedBarPattern = castApi::CastRegister < ::tree::PrefixRankedBarNonlinearPattern, ::tree::PrefixRankedBarPattern > ( );
+auto PrefixRankedBarNonlinearPatternCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedBarNonlinearPattern > ( ::tree::PrefixRankedBarNonlinearPattern::getXmlTagName ( ) );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
index 2b414c0ba73e1a11f7b96fdf086ff79e6d887a20..e94dc505d2a92354e5ee495d67eb53fe365a4f16 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
@@ -122,85 +122,85 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+	static bool used ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
 		const std::vector < alphabet::RankedSymbol > & content = pattern.getContent ( );
 
-		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < tree::VariablesBarSymbol > ( ).get ( ) == symbol || pattern.accessComponent < tree::BarSymbols > ( ).get ( ).count ( symbol ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol;
+		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < ::tree::VariablesBarSymbol > ( ).get ( ) == symbol || pattern.accessComponent < ::tree::BarSymbols > ( ).get ( ).count ( symbol ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol;
 	}
 
-	static bool available ( const tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) {
+	static bool available ( const ::tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) {
+	static void valid ( const ::tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) {
 	}
 };
 
 template < >
-class ComponentConstraint< tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, tree::BarSymbols > {
+class ComponentConstraint< ::tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, ::tree::BarSymbols > {
 public:
-	static bool used ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+	static bool used ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
 		const std::vector < alphabet::RankedSymbol > & content = pattern.getContent ( );
 
-		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < tree::VariablesBarSymbol > ( ).get ( ) == symbol;
+		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < ::tree::VariablesBarSymbol > ( ).get ( ) == symbol;
 	}
 
-	static bool available ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) {
+	static void valid ( const ::tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) {
 	}
 };
 
 template < >
-class ComponentConstraint< tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, tree::NonlinearAlphabet > {
+class ComponentConstraint< ::tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, ::tree::NonlinearAlphabet > {
 public:
-	static bool used ( const tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) {
+	static bool used ( const ::tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) {
 		return false;
 	}
 
-	static bool available ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) {
+	static void valid ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) {
 		if ( symbol.getRank ( ).getData ( ) != 0 )
-			throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
+			throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
 
-		if ( pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol )
-			throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" );
+		if ( pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol )
+			throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" );
 	}
 };
 
 template < >
-class ElementConstraint< tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, tree::SubtreeWildcard > {
+class ElementConstraint< ::tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, ::tree::SubtreeWildcard > {
 public:
-	static bool available ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) {
+	static void valid ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) {
 		if ( symbol.getRank ( ).getData ( ) != 0 )
-			throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
+			throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
 
-		if ( pattern.accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) )
-			throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" );
+		if ( pattern.accessComponent < ::tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) )
+			throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" );
 	}
 };
 
 template < >
-class ElementConstraint< tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, tree::VariablesBarSymbol > {
+class ElementConstraint< ::tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, ::tree::VariablesBarSymbol > {
 public:
-	static bool available ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::BarSymbols > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::BarSymbols > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & symbol) {
+	static void valid ( const ::tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & symbol) {
 		if ( symbol.getRank ( ).getData ( ) != 0 )
-			throw tree::TreeException ( "VariablesBarSymbol has nonzero arity" );
+			throw ::tree::TreeException ( "VariablesBarSymbol has nonzero arity" );
 	}
 };
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
index 24ea1e0829f5b120afa7455ea4a41095e9a0429f..709f834cb79d9c290d842ab142305dab53d9046d 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
@@ -175,12 +175,12 @@ void PrefixRankedBarPattern::compose ( std::deque < sax::Token > & out ) const {
 
 namespace alib {
 
-auto prefixRankedBarPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarPattern > ();
-auto prefixRankedBarPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::PrefixRankedBarPattern > ();
-auto prefixRankedBarPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarPattern > ();
+auto prefixRankedBarPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedBarPattern > ();
+auto prefixRankedBarPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedBarPattern > ();
+auto prefixRankedBarPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedBarPattern > ();
 
-auto PrefixRankedBarPatternFromRankedPattern = castApi::CastRegister < tree::PrefixRankedBarPattern, tree::RankedPattern > ( );
-auto PrefixRankedBarPatternFromPrefixRankedBarTree = castApi::CastRegister < tree::PrefixRankedBarPattern, tree::PrefixRankedBarTree > ( );
-auto PrefixRankedBarPatternCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedBarPattern > ( tree::PrefixRankedBarPattern::getXmlTagName() );
+auto PrefixRankedBarPatternFromRankedPattern = castApi::CastRegister < ::tree::PrefixRankedBarPattern, ::tree::RankedPattern > ( );
+auto PrefixRankedBarPatternFromPrefixRankedBarTree = castApi::CastRegister < ::tree::PrefixRankedBarPattern, ::tree::PrefixRankedBarTree > ( );
+auto PrefixRankedBarPatternCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedBarPattern > ( ::tree::PrefixRankedBarPattern::getXmlTagName() );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
index 227dccd27cf6e130f13944c924a9aa3ce6e8169f..c04a0e02d6d11b751c0f67b0e7bc76b724c0ddbe 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
@@ -108,62 +108,62 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::PrefixRankedBarPattern, alphabet::RankedSymbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::PrefixRankedBarPattern, alphabet::RankedSymbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+	static bool used ( const ::tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) {
 		const std::vector < alphabet::RankedSymbol > & content = pattern.getContent ( );
 
-		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < tree::VariablesBarSymbol > ( ).get ( ) == symbol || pattern.accessComponent < tree::BarSymbols > ( ).get ( ).count ( symbol ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol;
+		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < ::tree::VariablesBarSymbol > ( ).get ( ) == symbol || pattern.accessComponent < ::tree::BarSymbols > ( ).get ( ).count ( symbol ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol;
 	}
 
-	static bool available ( const tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & ) {
+	static bool available ( const ::tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & ) {
+	static void valid ( const ::tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & ) {
 	}
 };
 
 template < >
-class ComponentConstraint< tree::PrefixRankedBarPattern, alphabet::RankedSymbol, tree::BarSymbols > {
+class ComponentConstraint< ::tree::PrefixRankedBarPattern, alphabet::RankedSymbol, ::tree::BarSymbols > {
 public:
-	static bool used ( const tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+	static bool used ( const ::tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) {
 		const std::vector < alphabet::RankedSymbol > & content = pattern.getContent ( );
 
-		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < tree::VariablesBarSymbol > ( ).get ( ) == symbol;
+		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < ::tree::VariablesBarSymbol > ( ).get ( ) == symbol;
 	}
 
-	static bool available ( const tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & ) {
+	static void valid ( const ::tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & ) {
 	}
 };
 
 template < >
-class ElementConstraint< tree::PrefixRankedBarPattern, alphabet::RankedSymbol, tree::SubtreeWildcard > {
+class ElementConstraint< ::tree::PrefixRankedBarPattern, alphabet::RankedSymbol, ::tree::SubtreeWildcard > {
 public:
-	static bool available ( const tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 }
 
-	static void valid ( const tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & symbol) {
+	static void valid ( const ::tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & symbol) {
 		if( symbol.getRank().getData() != 0 )
-			throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
+			throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
 	}
 };
 
 template < >
-class ElementConstraint< tree::PrefixRankedBarPattern, alphabet::RankedSymbol, tree::VariablesBarSymbol > {
+class ElementConstraint< ::tree::PrefixRankedBarPattern, alphabet::RankedSymbol, ::tree::VariablesBarSymbol > {
 public:
-	static bool available ( const tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::BarSymbols > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::BarSymbols > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & symbol) {
+	static void valid ( const ::tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & symbol) {
 		if( symbol.getRank().getData() != 0 )
-			throw tree::TreeException ( "VariablesBarSymbol has nonzero arity" );
+			throw ::tree::TreeException ( "VariablesBarSymbol has nonzero arity" );
 	}
 };
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
index e9b7bc2faba7f29003ccfed2c84582f9bc71f29e..47c8af409ab9475e3873ee08ce3c3b1e2e660ad2 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
@@ -155,11 +155,11 @@ void PrefixRankedBarTree::compose ( std::deque < sax::Token > & out ) const {
 
 namespace alib {
 
-auto prefixRankedBarTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarTree > ();
-auto prefixRankedBarTreeParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::PrefixRankedBarTree > ();
-auto prefixRankedBarTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarTree > ();
+auto prefixRankedBarTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedBarTree > ();
+auto prefixRankedBarTreeParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedBarTree > ();
+auto prefixRankedBarTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedBarTree > ();
 
-auto PrefixRankedBarTreeFromRankedTree = castApi::CastRegister < tree::PrefixRankedBarTree, tree::RankedTree > ( );
-auto PrefixRankedBarTreeCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedBarTree > ( tree::PrefixRankedBarTree::getXmlTagName() );
+auto PrefixRankedBarTreeFromRankedTree = castApi::CastRegister < ::tree::PrefixRankedBarTree, ::tree::RankedTree > ( );
+auto PrefixRankedBarTreeCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedBarTree > ( ::tree::PrefixRankedBarTree::getXmlTagName() );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
index a204602cb42f3ba86c33d3d7ad21dfb29c39915b..ee28dddb8a8de30bd51c1436c6f84309abe209ff 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
@@ -96,36 +96,36 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::PrefixRankedBarTree, alphabet::RankedSymbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::PrefixRankedBarTree, alphabet::RankedSymbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::PrefixRankedBarTree & tree, const alphabet::RankedSymbol & symbol ) {
+	static bool used ( const ::tree::PrefixRankedBarTree & tree, const alphabet::RankedSymbol & symbol ) {
 		const std::vector < alphabet::RankedSymbol > & content = tree.getContent ( );
 
 		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( );
 	}
 
-	static bool available ( const tree::PrefixRankedBarTree &, const alphabet::RankedSymbol & ) {
+	static bool available ( const ::tree::PrefixRankedBarTree &, const alphabet::RankedSymbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::PrefixRankedBarTree &, const alphabet::RankedSymbol & ) {
+	static void valid ( const ::tree::PrefixRankedBarTree &, const alphabet::RankedSymbol & ) {
 	}
 };
 
 template < >
-class ComponentConstraint< tree::PrefixRankedBarTree, alphabet::RankedSymbol, tree::BarSymbols > {
+class ComponentConstraint< ::tree::PrefixRankedBarTree, alphabet::RankedSymbol, ::tree::BarSymbols > {
 public:
-	static bool used ( const tree::PrefixRankedBarTree & tree, const alphabet::RankedSymbol & symbol ) {
+	static bool used ( const ::tree::PrefixRankedBarTree & tree, const alphabet::RankedSymbol & symbol ) {
 		const std::vector < alphabet::RankedSymbol > & content = tree.getContent ( );
 
 		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( );
 	}
 
-	static bool available ( const tree::PrefixRankedBarTree & tree, const alphabet::RankedSymbol & symbol ) {
-		return tree.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::PrefixRankedBarTree & tree, const alphabet::RankedSymbol & symbol ) {
+		return tree.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::PrefixRankedBarTree &, const alphabet::RankedSymbol & ) {
+	static void valid ( const ::tree::PrefixRankedBarTree &, const alphabet::RankedSymbol & ) {
 	}
 };
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
index 5b638838a17d94fb365c32bc72c09bd3813d9b4c..3cf25ebf209fc7e715179a36fa6d9e11f46be2a8 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
@@ -170,15 +170,15 @@ void PrefixRankedNonlinearPattern::compose ( std::deque < sax::Token > & out ) c
 
 namespace alib {
 
-auto prefixRankedNonlinearPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedNonlinearPattern > ( );
-auto prefixRankedNonlinearPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::PrefixRankedNonlinearPattern > ( );
-auto prefixRankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedNonlinearPattern > ( );
-
-auto PrefixRankedNonlinearPatternFromRankedTree = castApi::CastRegister < tree::PrefixRankedNonlinearPattern, tree::RankedTree > ( );
-auto PrefixRankedNonlinearPatternFromRankedPattern = castApi::CastRegister < tree::PrefixRankedNonlinearPattern, tree::RankedPattern > ( );
-auto PrefixRankedNonlinearPatternFromRankedNonlinearPattern = castApi::CastRegister < tree::PrefixRankedNonlinearPattern, tree::RankedNonlinearPattern > ( );
-auto PrefixRankedNonlinearPatternFromPrefixRankedTree = castApi::CastRegister < tree::PrefixRankedNonlinearPattern, tree::PrefixRankedTree > ( );
-auto PrefixRankedNonlinearPatternFromPrefixRankedPattern = castApi::CastRegister < tree::PrefixRankedNonlinearPattern, tree::PrefixRankedPattern > ( );
-auto PrefixRankedNonlinearPatternCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedNonlinearPattern > ( tree::PrefixRankedNonlinearPattern::getXmlTagName ( ) );
+auto prefixRankedNonlinearPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedNonlinearPattern > ( );
+auto prefixRankedNonlinearPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedNonlinearPattern > ( );
+auto prefixRankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedNonlinearPattern > ( );
+
+auto PrefixRankedNonlinearPatternFromRankedTree = castApi::CastRegister < ::tree::PrefixRankedNonlinearPattern, ::tree::RankedTree > ( );
+auto PrefixRankedNonlinearPatternFromRankedPattern = castApi::CastRegister < ::tree::PrefixRankedNonlinearPattern, ::tree::RankedPattern > ( );
+auto PrefixRankedNonlinearPatternFromRankedNonlinearPattern = castApi::CastRegister < ::tree::PrefixRankedNonlinearPattern, ::tree::RankedNonlinearPattern > ( );
+auto PrefixRankedNonlinearPatternFromPrefixRankedTree = castApi::CastRegister < ::tree::PrefixRankedNonlinearPattern, ::tree::PrefixRankedTree > ( );
+auto PrefixRankedNonlinearPatternFromPrefixRankedPattern = castApi::CastRegister < ::tree::PrefixRankedNonlinearPattern, ::tree::PrefixRankedPattern > ( );
+auto PrefixRankedNonlinearPatternCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedNonlinearPattern > ( ::tree::PrefixRankedNonlinearPattern::getXmlTagName ( ) );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
index 10d366c47f000e6dc3e1a5f27826d167a67d3bf5..d98759cf3c93735d5bbe5163fac5e8685dce1d9c 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
@@ -110,55 +110,55 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::PrefixRankedNonlinearPattern, alphabet::RankedSymbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::PrefixRankedNonlinearPattern, alphabet::RankedSymbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+	static bool used ( const ::tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
 		const std::vector < alphabet::RankedSymbol > & content = pattern.getContent ( );
 
-		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol;
+		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol;
 	}
 
-	static bool available ( const tree::PrefixRankedNonlinearPattern &, const alphabet::RankedSymbol & ) {
+	static bool available ( const ::tree::PrefixRankedNonlinearPattern &, const alphabet::RankedSymbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::PrefixRankedNonlinearPattern &, const alphabet::RankedSymbol & ) {
+	static void valid ( const ::tree::PrefixRankedNonlinearPattern &, const alphabet::RankedSymbol & ) {
 	}
 };
 
 template < >
-class ComponentConstraint< tree::PrefixRankedNonlinearPattern, alphabet::RankedSymbol, tree::NonlinearAlphabet > {
+class ComponentConstraint< ::tree::PrefixRankedNonlinearPattern, alphabet::RankedSymbol, ::tree::NonlinearAlphabet > {
 public:
-	static bool used ( const tree::PrefixRankedNonlinearPattern &, const alphabet::RankedSymbol & ) {
+	static bool used ( const ::tree::PrefixRankedNonlinearPattern &, const alphabet::RankedSymbol & ) {
 		return false;
 	}
 
-	static bool available ( const tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) {
+	static void valid ( const ::tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) {
 		if ( symbol.getRank ( ).getData ( ) != 0 )
-			throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
+			throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
 
-		if ( pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol )
-			throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" );
+		if ( pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol )
+			throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" );
 	}
 };
 
 template < >
-class ElementConstraint< tree::PrefixRankedNonlinearPattern, alphabet::RankedSymbol, tree::SubtreeWildcard > {
+class ElementConstraint< ::tree::PrefixRankedNonlinearPattern, alphabet::RankedSymbol, ::tree::SubtreeWildcard > {
 public:
-	static bool available ( const tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) {
+	static void valid ( const ::tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) {
 		if ( symbol.getRank ( ).getData ( ) != 0 )
-			throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
+			throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
 
-		if ( pattern.accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) )
-			throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" );
+		if ( pattern.accessComponent < ::tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) )
+			throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" );
 	}
 };
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
index 0bf3ed930e096c991d857eaba9c66e954b5275ec..d47030c719bc9b8dc0ff77c93539c2f9fce51394 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
@@ -148,11 +148,11 @@ void PrefixRankedPattern::compose ( std::deque < sax::Token > & out ) const {
 
 namespace alib {
 
-auto prefixRankedPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedPattern > ();
-auto prefixRankedPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::PrefixRankedPattern > ();
-auto prefixRankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedPattern > ();
+auto prefixRankedPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedPattern > ();
+auto prefixRankedPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedPattern > ();
+auto prefixRankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedPattern > ();
 
-auto PrefixRankedPatternFromRankedPattern = castApi::CastRegister < tree::PrefixRankedPattern, tree::RankedPattern > ( );
-auto PrefixRankedPatternCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedPattern > ( tree::PrefixRankedPattern::getXmlTagName() );
+auto PrefixRankedPatternFromRankedPattern = castApi::CastRegister < ::tree::PrefixRankedPattern, ::tree::RankedPattern > ( );
+auto PrefixRankedPatternCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedPattern > ( ::tree::PrefixRankedPattern::getXmlTagName() );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.h b/alib2data/src/tree/ranked/PrefixRankedPattern.h
index 00260f4a59ce025a6221542facff28074c9e407c..994ee3e7981b3adc5f700c6280b9f5e8043c4217 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.h
@@ -97,32 +97,32 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::PrefixRankedPattern, alphabet::RankedSymbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::PrefixRankedPattern, alphabet::RankedSymbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::PrefixRankedPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+	static bool used ( const ::tree::PrefixRankedPattern & pattern, const alphabet::RankedSymbol & symbol ) {
 		const std::vector < alphabet::RankedSymbol > & content = pattern.getContent ( );
 
-		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol;
+		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol;
 	}
 
-	static bool available ( const tree::PrefixRankedPattern &, const alphabet::RankedSymbol & ) {
+	static bool available ( const ::tree::PrefixRankedPattern &, const alphabet::RankedSymbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::PrefixRankedPattern &, const alphabet::RankedSymbol & ) {
+	static void valid ( const ::tree::PrefixRankedPattern &, const alphabet::RankedSymbol & ) {
 	}
 };
 
 template < >
-class ElementConstraint< tree::PrefixRankedPattern, alphabet::RankedSymbol, tree::SubtreeWildcard > {
+class ElementConstraint< ::tree::PrefixRankedPattern, alphabet::RankedSymbol, ::tree::SubtreeWildcard > {
 public:
-	static bool available ( const tree::PrefixRankedPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::PrefixRankedPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::PrefixRankedPattern &, const alphabet::RankedSymbol & symbol) {
+	static void valid ( const ::tree::PrefixRankedPattern &, const alphabet::RankedSymbol & symbol) {
 		if( symbol.getRank().getData() != 0 )
-			throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
+			throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
 	}
 };
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.cpp b/alib2data/src/tree/ranked/PrefixRankedTree.cpp
index bd5fa0e0ab31798f5683820121071f6dc22e3fed..c2878076e49e4941800c32c66aa98be49d7507c2 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.cpp
@@ -136,11 +136,11 @@ void PrefixRankedTree::compose ( std::deque < sax::Token > & out ) const {
 
 namespace alib {
 
-auto prefixRankedTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedTree > ();
-auto prefixRankedTreeParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::PrefixRankedTree > ();
-auto prefixRankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedTree > ();
+auto prefixRankedTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedTree > ();
+auto prefixRankedTreeParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedTree > ();
+auto prefixRankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedTree > ();
 
-auto PrefixRankedTreeFromRankedTree = castApi::CastRegister < tree::PrefixRankedTree, tree::RankedTree > ( );
-auto PrefixRankedTreeCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedTree > ( tree::PrefixRankedTree::getXmlTagName() );
+auto PrefixRankedTreeFromRankedTree = castApi::CastRegister < ::tree::PrefixRankedTree, ::tree::RankedTree > ( );
+auto PrefixRankedTreeCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedTree > ( ::tree::PrefixRankedTree::getXmlTagName() );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.h b/alib2data/src/tree/ranked/PrefixRankedTree.h
index f90779d08d680fcbd2f92ad0e7535f9331e33b63..8c399aa3d6f68ff548c9cdcf1752f4f394eb196a 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.h
@@ -90,19 +90,19 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::PrefixRankedTree, alphabet::RankedSymbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::PrefixRankedTree, alphabet::RankedSymbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::PrefixRankedTree & tree, const alphabet::RankedSymbol & symbol ) {
+	static bool used ( const ::tree::PrefixRankedTree & tree, const alphabet::RankedSymbol & symbol ) {
 		const std::vector < alphabet::RankedSymbol > & content = tree.getContent ( );
 
 		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( );
 	}
 
-	static bool available ( const tree::PrefixRankedTree &, const alphabet::RankedSymbol & ) {
+	static bool available ( const ::tree::PrefixRankedTree &, const alphabet::RankedSymbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::PrefixRankedTree &, const alphabet::RankedSymbol & ) {
+	static void valid ( const ::tree::PrefixRankedTree &, const alphabet::RankedSymbol & ) {
 	}
 };
 
diff --git a/alib2data/src/tree/ranked/RankedNode.cpp b/alib2data/src/tree/ranked/RankedNode.cpp
index db25406e9f8d722649406bb4dd32fb6201b348ea..352d245dab04974170696649754858508c84cf98 100644
--- a/alib2data/src/tree/ranked/RankedNode.cpp
+++ b/alib2data/src/tree/ranked/RankedNode.cpp
@@ -197,16 +197,16 @@ void RankedNode::nicePrint ( std::ostream & os, const std::string & prefix, cons
 
 namespace alib {
 
-tree::RankedNode xmlApi < tree::RankedNode >::parse ( std::deque < sax::Token >::iterator & input ) {
-	return tree::TreeFromXMLParser::parseRankedNode ( input );
+::tree::RankedNode xmlApi < ::tree::RankedNode >::parse ( std::deque < sax::Token >::iterator & input ) {
+	return ::tree::TreeFromXMLParser::parseRankedNode ( input );
 }
 
-bool xmlApi < tree::RankedNode >::first ( const std::deque < sax::Token >::const_iterator & ) {
-	throw tree::TreeException ( "Unimplemented" );
+bool xmlApi < ::tree::RankedNode >::first ( const std::deque < sax::Token >::const_iterator & ) {
+	throw ::tree::TreeException ( "Unimplemented" );
 }
 
-void xmlApi < tree::RankedNode >::compose ( std::deque < sax::Token > & output, const tree::RankedNode & data ) {
-	tree::TreeToXMLComposer::composeNode ( output, data );
+void xmlApi < ::tree::RankedNode >::compose ( std::deque < sax::Token > & output, const ::tree::RankedNode & data ) {
+	::tree::TreeToXMLComposer::composeNode ( output, data );
 }
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/RankedNode.h b/alib2data/src/tree/ranked/RankedNode.h
index 93482c66555293960968d4a3bf25c977364c7ca9..5b41dc8474c53904f5d98c04e71c43d9335e6629 100644
--- a/alib2data/src/tree/ranked/RankedNode.h
+++ b/alib2data/src/tree/ranked/RankedNode.h
@@ -116,10 +116,10 @@ public:
 namespace alib {
 
 template < >
-struct xmlApi < tree::RankedNode > {
-	static tree::RankedNode parse ( std::deque < sax::Token >::iterator & input );
+struct xmlApi < ::tree::RankedNode > {
+	static ::tree::RankedNode parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
-	static void compose ( std::deque < sax::Token > & output, const tree::RankedNode & data );
+	static void compose ( std::deque < sax::Token > & output, const ::tree::RankedNode & data );
 };
 
 } /* namespace alib */
@@ -127,8 +127,8 @@ struct xmlApi < tree::RankedNode > {
 namespace std {
 
 template < >
-struct compare < tree::RankedNode > {
-	int operator ()( const tree::RankedNode & first, const tree::RankedNode & second ) const {
+struct compare < ::tree::RankedNode > {
+	int operator ()( const ::tree::RankedNode & first, const ::tree::RankedNode & second ) const {
 		return first.compare ( second );
 	}
 
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
index 3574cd73bc0fed9e38224af0e4489b2e4e668327..074c73f21e08d41ad9e5e64520e6640d513163f0 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
@@ -134,8 +134,8 @@ void RankedNonlinearPattern::compose ( std::deque < sax::Token > & out ) const {
 
 namespace alib {
 
-auto RankedNonlinearPatternParserRegister  = xmlApi < tree::Tree >::ParserRegister < tree::RankedNonlinearPattern > ( );
-auto RankedNonlinearPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::RankedNonlinearPattern > ( );
-auto RankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::RankedNonlinearPattern > ( );
+auto RankedNonlinearPatternParserRegister  = xmlApi < ::tree::Tree >::ParserRegister < ::tree::RankedNonlinearPattern > ( );
+auto RankedNonlinearPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::RankedNonlinearPattern > ( );
+auto RankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::RankedNonlinearPattern > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.h b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
index 54eacd1227d16f382efcce40d093d21f421214b3..0a47b6f9bbc64504df314c30d8b39455ce562dcd 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
@@ -123,53 +123,53 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::RankedNonlinearPattern, alphabet::RankedSymbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::RankedNonlinearPattern, alphabet::RankedSymbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol || pattern.accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol );
+	static bool used ( const ::tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol || pattern.accessComponent < ::tree::NonlinearAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static bool available ( const tree::RankedNonlinearPattern &, const alphabet::RankedSymbol & ) {
+	static bool available ( const ::tree::RankedNonlinearPattern &, const alphabet::RankedSymbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::RankedNonlinearPattern &, const alphabet::RankedSymbol & ) {
+	static void valid ( const ::tree::RankedNonlinearPattern &, const alphabet::RankedSymbol & ) {
 	}
 };
 
 template < >
-class ComponentConstraint< tree::RankedNonlinearPattern, alphabet::RankedSymbol, tree::NonlinearAlphabet > {
+class ComponentConstraint< ::tree::RankedNonlinearPattern, alphabet::RankedSymbol, ::tree::NonlinearAlphabet > {
 public:
-	static bool used ( const tree::RankedNonlinearPattern &, const alphabet::RankedSymbol & ) {
+	static bool used ( const ::tree::RankedNonlinearPattern &, const alphabet::RankedSymbol & ) {
 		return false;
 	}
 
-	static bool available ( const tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 }
 
-	static void valid ( const tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) {
+	static void valid ( const ::tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) {
 		if( symbol.getRank().getData() != 0 )
-			throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
+			throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
 
-		if ( pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol )
-			throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" );
+		if ( pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol )
+			throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" );
 	}
 };
 
 template < >
-class ElementConstraint< tree::RankedNonlinearPattern, alphabet::RankedSymbol, tree::SubtreeWildcard > {
+class ElementConstraint< ::tree::RankedNonlinearPattern, alphabet::RankedSymbol, ::tree::SubtreeWildcard > {
 public:
-	static bool available ( const tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) {
+	static void valid ( const ::tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) {
 		if( symbol.getRank().getData() != 0 )
-			throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
+			throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
 
-		if ( pattern.accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) )
-			throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" );
+		if ( pattern.accessComponent < ::tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) )
+			throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" );
 	}
 };
 
diff --git a/alib2data/src/tree/ranked/RankedPattern.cpp b/alib2data/src/tree/ranked/RankedPattern.cpp
index 56b467abb4a9a24bd5aeccaa17991912691c8537..2aeb63ece3d0453eb65634aa673e406b5fe819a5 100644
--- a/alib2data/src/tree/ranked/RankedPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedPattern.cpp
@@ -131,11 +131,11 @@ void RankedPattern::compose ( std::deque < sax::Token > & out ) const {
 
 namespace alib {
 
-auto rankedPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::RankedPattern > ();
-auto rankedPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::RankedPattern > ();
-auto rankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::RankedPattern > ();
+auto rankedPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::RankedPattern > ();
+auto rankedPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::RankedPattern > ();
+auto rankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::RankedPattern > ();
 
-auto RankedPatternFromUnrankedPattern = castApi::CastRegister < tree::RankedPattern, tree::UnrankedPattern > ( );
-auto RankedPatternCastBinder = castApi::CastPoolStringBinder < tree::RankedPattern > ( tree::RankedPattern::getXmlTagName() );
+auto RankedPatternFromUnrankedPattern = castApi::CastRegister < ::tree::RankedPattern, ::tree::UnrankedPattern > ( );
+auto RankedPatternCastBinder = castApi::CastPoolStringBinder < ::tree::RankedPattern > ( ::tree::RankedPattern::getXmlTagName() );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/RankedPattern.h b/alib2data/src/tree/ranked/RankedPattern.h
index f58f4596968ff0bd0f6f32f61fa596d6eabefde1..7dd55dfa82cb136d4de8ecaecf0655a45276f76c 100644
--- a/alib2data/src/tree/ranked/RankedPattern.h
+++ b/alib2data/src/tree/ranked/RankedPattern.h
@@ -118,30 +118,30 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::RankedPattern, alphabet::RankedSymbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::RankedPattern, alphabet::RankedSymbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::RankedPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol;
+	static bool used ( const ::tree::RankedPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol;
 	}
 
-	static bool available ( const tree::RankedPattern &, const alphabet::RankedSymbol & ) {
+	static bool available ( const ::tree::RankedPattern &, const alphabet::RankedSymbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::RankedPattern &, const alphabet::RankedSymbol & ) {
+	static void valid ( const ::tree::RankedPattern &, const alphabet::RankedSymbol & ) {
 	}
 };
 
 template < >
-class ElementConstraint< tree::RankedPattern, alphabet::RankedSymbol, tree::SubtreeWildcard > {
+class ElementConstraint< ::tree::RankedPattern, alphabet::RankedSymbol, ::tree::SubtreeWildcard > {
 public:
-	static bool available ( const tree::RankedPattern & pattern, const alphabet::RankedSymbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::RankedPattern & pattern, const alphabet::RankedSymbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::RankedPattern &, const alphabet::RankedSymbol & symbol) {
+	static void valid ( const ::tree::RankedPattern &, const alphabet::RankedSymbol & symbol) {
 		if( symbol.getRank().getData() != 0 )
-			throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
+			throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" );
 	}
 };
 
diff --git a/alib2data/src/tree/ranked/RankedTree.cpp b/alib2data/src/tree/ranked/RankedTree.cpp
index b1e5c2ee3feb68969b3cde2698dc1fa9280e8a74..35fa45e79391e298ae1b27994e3439ff59cd36b2 100644
--- a/alib2data/src/tree/ranked/RankedTree.cpp
+++ b/alib2data/src/tree/ranked/RankedTree.cpp
@@ -128,11 +128,11 @@ void RankedTree::compose ( std::deque < sax::Token > & out ) const {
 
 namespace alib {
 
-auto rankedTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::RankedTree > ();
-auto rankedTreeParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::RankedTree > ();
-auto rankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::RankedTree > ();
+auto rankedTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::RankedTree > ();
+auto rankedTreeParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::RankedTree > ();
+auto rankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::RankedTree > ();
 
-auto RankedTreeFromUnrankedTree = castApi::CastRegister < tree::RankedTree, tree::UnrankedTree > ( );
-auto RankedTreeCastBinder = castApi::CastPoolStringBinder < tree::RankedTree > ( tree::RankedTree::getXmlTagName() );
+auto RankedTreeFromUnrankedTree = castApi::CastRegister < ::tree::RankedTree, ::tree::UnrankedTree > ( );
+auto RankedTreeCastBinder = castApi::CastPoolStringBinder < ::tree::RankedTree > ( ::tree::RankedTree::getXmlTagName() );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/ranked/RankedTree.h b/alib2data/src/tree/ranked/RankedTree.h
index 1d32503457635f5e6f822f04b328aee7ddce216a..dbbd6462414b35fa30ca3d21ada06411a64046f8 100644
--- a/alib2data/src/tree/ranked/RankedTree.h
+++ b/alib2data/src/tree/ranked/RankedTree.h
@@ -113,17 +113,17 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::RankedTree, alphabet::RankedSymbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::RankedTree, alphabet::RankedSymbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::RankedTree & tree, const alphabet::RankedSymbol & symbol ) {
+	static bool used ( const ::tree::RankedTree & tree, const alphabet::RankedSymbol & symbol ) {
 		return tree.getRoot ( ).testSymbol ( symbol );
 	}
 
-	static bool available ( const tree::RankedTree &, const alphabet::RankedSymbol & ) {
+	static bool available ( const ::tree::RankedTree &, const alphabet::RankedSymbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::RankedTree &, const alphabet::RankedSymbol & ) {
+	static void valid ( const ::tree::RankedTree &, const alphabet::RankedSymbol & ) {
 	}
 };
 
diff --git a/alib2data/src/tree/unranked/PrefixBarTree.cpp b/alib2data/src/tree/unranked/PrefixBarTree.cpp
index e1dd179a965b31259833603af4428f3ddf5d2bc0..f2f7db2961cbc7c1920f545fc48fd05a9f6334a3 100644
--- a/alib2data/src/tree/unranked/PrefixBarTree.cpp
+++ b/alib2data/src/tree/unranked/PrefixBarTree.cpp
@@ -148,11 +148,11 @@ void PrefixBarTree::compose ( std::deque < sax::Token > & out ) const {
 
 namespace alib {
 
-auto prefixBarTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixBarTree > ( );
-auto prefixBarTreeParserRegister2 = xmlApi < tree::UnrankedTreeWrapper >::ParserRegister < tree::PrefixBarTree > ( );
-auto prefixBarTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixBarTree > ( );
+auto prefixBarTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixBarTree > ( );
+auto prefixBarTreeParserRegister2 = xmlApi < ::tree::UnrankedTreeWrapper >::ParserRegister < ::tree::PrefixBarTree > ( );
+auto prefixBarTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixBarTree > ( );
 
-auto PrefixBarTreeFromUnrankedTree = castApi::CastRegister < tree::PrefixBarTree, tree::UnrankedTree > ( );
-auto PrefixBarTreeCastBinder = castApi::CastPoolStringBinder < tree::PrefixBarTree > ( tree::PrefixBarTree::getXmlTagName() );
+auto PrefixBarTreeFromUnrankedTree = castApi::CastRegister < ::tree::PrefixBarTree, ::tree::UnrankedTree > ( );
+auto PrefixBarTreeCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixBarTree > ( ::tree::PrefixBarTree::getXmlTagName() );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/unranked/PrefixBarTree.h b/alib2data/src/tree/unranked/PrefixBarTree.h
index c3004494b2a58455b6afcfd90eddfa8d2e531448..299b719b9242d999c4d8a774dadcef5542da4581 100644
--- a/alib2data/src/tree/unranked/PrefixBarTree.h
+++ b/alib2data/src/tree/unranked/PrefixBarTree.h
@@ -95,30 +95,30 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::PrefixBarTree, alphabet::Symbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::PrefixBarTree, alphabet::Symbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::PrefixBarTree & tree, const alphabet::Symbol & symbol ) {
+	static bool used ( const ::tree::PrefixBarTree & tree, const alphabet::Symbol & symbol ) {
 		const std::vector < alphabet::Symbol > & content = tree.getContent ( );
 
 		return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( );
 	}
 
-	static bool available ( const tree::PrefixBarTree &, const alphabet::Symbol & ) {
+	static bool available ( const ::tree::PrefixBarTree &, const alphabet::Symbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::PrefixBarTree &, const alphabet::Symbol & ) {
+	static void valid ( const ::tree::PrefixBarTree &, const alphabet::Symbol & ) {
 	}
 };
 
 template < >
-class ElementConstraint< tree::PrefixBarTree, alphabet::Symbol, tree::BarSymbol > {
+class ElementConstraint< ::tree::PrefixBarTree, alphabet::Symbol, ::tree::BarSymbol > {
 public:
-	static bool available ( const tree::PrefixBarTree & tree, const alphabet::Symbol & symbol ) {
-		return tree.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::PrefixBarTree & tree, const alphabet::Symbol & symbol ) {
+		return tree.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::PrefixBarTree &, const alphabet::Symbol & ) {
+	static void valid ( const ::tree::PrefixBarTree &, const alphabet::Symbol & ) {
 	}
 };
 
diff --git a/alib2data/src/tree/unranked/UnrankedNode.cpp b/alib2data/src/tree/unranked/UnrankedNode.cpp
index a22a15758f6abece25f74e6fa4dfa1bcc0958cc2..26a0e44eed355bd28770f2fff137f21aab7fda52 100644
--- a/alib2data/src/tree/unranked/UnrankedNode.cpp
+++ b/alib2data/src/tree/unranked/UnrankedNode.cpp
@@ -202,16 +202,16 @@ void UnrankedNode::nicePrint ( std::ostream & os, const std::string & prefix, co
 
 namespace alib {
 
-tree::UnrankedNode xmlApi < tree::UnrankedNode >::parse ( std::deque < sax::Token >::iterator & input ) {
-	return tree::TreeFromXMLParser::parseUnrankedNode ( input );
+::tree::UnrankedNode xmlApi < ::tree::UnrankedNode >::parse ( std::deque < sax::Token >::iterator & input ) {
+	return ::tree::TreeFromXMLParser::parseUnrankedNode ( input );
 }
 
-bool xmlApi < tree::UnrankedNode >::first ( const std::deque < sax::Token >::const_iterator & ) {
-	throw tree::TreeException ( "Unimplemented" );
+bool xmlApi < ::tree::UnrankedNode >::first ( const std::deque < sax::Token >::const_iterator & ) {
+	throw ::tree::TreeException ( "Unimplemented" );
 }
 
-void xmlApi < tree::UnrankedNode >::compose ( std::deque < sax::Token > & output, const tree::UnrankedNode & data ) {
-	tree::TreeToXMLComposer::composeNode ( output, data );
+void xmlApi < ::tree::UnrankedNode >::compose ( std::deque < sax::Token > & output, const ::tree::UnrankedNode & data ) {
+	::tree::TreeToXMLComposer::composeNode ( output, data );
 }
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/unranked/UnrankedNode.h b/alib2data/src/tree/unranked/UnrankedNode.h
index e514240bed6521340125a6878c343e0115ed2908..7179e943af6a94d6c7482dbd5eb0e2d9225fd4eb 100644
--- a/alib2data/src/tree/unranked/UnrankedNode.h
+++ b/alib2data/src/tree/unranked/UnrankedNode.h
@@ -118,10 +118,10 @@ public:
 namespace alib {
 
 template < >
-struct xmlApi < tree::UnrankedNode > {
-	static tree::UnrankedNode parse ( std::deque < sax::Token >::iterator & input );
+struct xmlApi < ::tree::UnrankedNode > {
+	static ::tree::UnrankedNode parse ( std::deque < sax::Token >::iterator & input );
 	static bool first ( const std::deque < sax::Token >::const_iterator & input );
-	static void compose ( std::deque < sax::Token > & output, const tree::UnrankedNode & data );
+	static void compose ( std::deque < sax::Token > & output, const ::tree::UnrankedNode & data );
 };
 
 } /* namespace alib */
@@ -129,8 +129,8 @@ struct xmlApi < tree::UnrankedNode > {
 namespace std {
 
 template < >
-struct compare < tree::UnrankedNode > {
-	int operator ()( const tree::UnrankedNode & first, const tree::UnrankedNode & second ) const {
+struct compare < ::tree::UnrankedNode > {
+	int operator ()( const ::tree::UnrankedNode & first, const ::tree::UnrankedNode & second ) const {
 		return first.compare ( second );
 	}
 
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
index c354c0107fbedc2d26df5c172a3bcbb7bfb02c52..bd8376debb8f63009f9f929213ec8f97945eebd4 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
@@ -134,8 +134,8 @@ void UnrankedNonlinearPattern::compose ( std::deque < sax::Token > & out ) const
 
 namespace alib {
 
-auto UnrankedNonlinearPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::UnrankedNonlinearPattern > ( );
-auto UnrankedNonlinearPatternParserRegister2 = xmlApi < tree::UnrankedTreeWrapper >::ParserRegister < tree::UnrankedNonlinearPattern > ( );
-auto UnrankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::UnrankedNonlinearPattern > ( );
+auto UnrankedNonlinearPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::UnrankedNonlinearPattern > ( );
+auto UnrankedNonlinearPatternParserRegister2 = xmlApi < ::tree::UnrankedTreeWrapper >::ParserRegister < ::tree::UnrankedNonlinearPattern > ( );
+auto UnrankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::UnrankedNonlinearPattern > ( );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
index 69fc7284c5004fdde532ecf5927838d3391153a2..1cef5fff3c04dd924a75240b337b8add12efb62d 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
@@ -129,47 +129,47 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::UnrankedNonlinearPattern, alphabet::Symbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::UnrankedNonlinearPattern, alphabet::Symbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol ) {
-		return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol || pattern.accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol );
+	static bool used ( const ::tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol ) {
+		return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol || pattern.accessComponent < ::tree::NonlinearAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static bool available ( const tree::UnrankedNonlinearPattern &, const alphabet::Symbol & ) {
+	static bool available ( const ::tree::UnrankedNonlinearPattern &, const alphabet::Symbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::UnrankedNonlinearPattern &, const alphabet::Symbol & ) {
+	static void valid ( const ::tree::UnrankedNonlinearPattern &, const alphabet::Symbol & ) {
 	}
 };
 
 template < >
-class ComponentConstraint< tree::UnrankedNonlinearPattern, alphabet::Symbol, tree::NonlinearAlphabet > {
+class ComponentConstraint< ::tree::UnrankedNonlinearPattern, alphabet::Symbol, ::tree::NonlinearAlphabet > {
 public:
-	static bool used ( const tree::UnrankedNonlinearPattern &, const alphabet::Symbol & ) {
+	static bool used ( const ::tree::UnrankedNonlinearPattern &, const alphabet::Symbol & ) {
 		return false;
 	}
 
-	static bool available ( const tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol) {
-		if ( pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol )
-			throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" );
+	static void valid ( const ::tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol) {
+		if ( pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol )
+			throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" );
 	}
 };
 
 template < >
-class ElementConstraint< tree::UnrankedNonlinearPattern, alphabet::Symbol, tree::SubtreeWildcard > {
+class ElementConstraint< ::tree::UnrankedNonlinearPattern, alphabet::Symbol, ::tree::SubtreeWildcard > {
 public:
-	static bool available ( const tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol) {
-		if ( pattern.accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) )
-			throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" );
+	static void valid ( const ::tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol) {
+		if ( pattern.accessComponent < ::tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) )
+			throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" );
 	}
 };
 
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.cpp b/alib2data/src/tree/unranked/UnrankedPattern.cpp
index 6ced3384a92dd46b30c5ee6db766cbea12ac890d..ffa82f78c49b345d6ebf535f68f71a6565cb9e42 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedPattern.cpp
@@ -132,11 +132,11 @@ void UnrankedPattern::compose ( std::deque < sax::Token > & out ) const {
 
 namespace alib {
 
-auto unrankedPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::UnrankedPattern > ( );
-auto unrankedPatternParserRegister2 = xmlApi < tree::UnrankedTreeWrapper >::ParserRegister < tree::UnrankedPattern > ( );
-auto unrankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::UnrankedPattern > ( );
+auto unrankedPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::UnrankedPattern > ( );
+auto unrankedPatternParserRegister2 = xmlApi < ::tree::UnrankedTreeWrapper >::ParserRegister < ::tree::UnrankedPattern > ( );
+auto unrankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::UnrankedPattern > ( );
 
-auto UnrankedPatternFromRankedPattern = castApi::CastRegister < tree::UnrankedPattern, tree::RankedPattern > ( );
-auto UnrankedPatternCastBinder = castApi::CastPoolStringBinder < tree::UnrankedPattern > ( tree::UnrankedPattern::getXmlTagName() );
+auto UnrankedPatternFromRankedPattern = castApi::CastRegister < ::tree::UnrankedPattern, ::tree::RankedPattern > ( );
+auto UnrankedPatternCastBinder = castApi::CastPoolStringBinder < ::tree::UnrankedPattern > ( ::tree::UnrankedPattern::getXmlTagName() );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.h b/alib2data/src/tree/unranked/UnrankedPattern.h
index 11f6ce9935f3e9a1b5890c96349a672344689dd9..a8692eee3fe4dbdfcf68506c9526eb9b87f6d65c 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedPattern.h
@@ -120,28 +120,28 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::UnrankedPattern, alphabet::Symbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::UnrankedPattern, alphabet::Symbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::UnrankedPattern & pattern, const alphabet::Symbol & symbol ) {
-		return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol;
+	static bool used ( const ::tree::UnrankedPattern & pattern, const alphabet::Symbol & symbol ) {
+		return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol;
 	}
 
-	static bool available ( const tree::UnrankedPattern &, const alphabet::Symbol & ) {
+	static bool available ( const ::tree::UnrankedPattern &, const alphabet::Symbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::UnrankedPattern &, const alphabet::Symbol & ) {
+	static void valid ( const ::tree::UnrankedPattern &, const alphabet::Symbol & ) {
 	}
 };
 
 template < >
-class ElementConstraint< tree::UnrankedPattern, alphabet::Symbol, tree::SubtreeWildcard > {
+class ElementConstraint< ::tree::UnrankedPattern, alphabet::Symbol, ::tree::SubtreeWildcard > {
 public:
-	static bool available ( const tree::UnrankedPattern & pattern, const alphabet::Symbol & symbol ) {
-		return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
+	static bool available ( const ::tree::UnrankedPattern & pattern, const alphabet::Symbol & symbol ) {
+		return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol );
 	}
 
-	static void valid ( const tree::UnrankedPattern &, const alphabet::Symbol & ) {
+	static void valid ( const ::tree::UnrankedPattern &, const alphabet::Symbol & ) {
 	}
 };
 
diff --git a/alib2data/src/tree/unranked/UnrankedTree.cpp b/alib2data/src/tree/unranked/UnrankedTree.cpp
index c2839a8f3aea00804c2960284bbd118d09cedb61..12250d6daade15ce15dc184d2f46ea679e719937 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.cpp
+++ b/alib2data/src/tree/unranked/UnrankedTree.cpp
@@ -129,11 +129,11 @@ void UnrankedTree::compose ( std::deque < sax::Token > & out ) const {
 
 namespace alib {
 
-auto unrankedTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::UnrankedTree > ( );
-auto unrankedTreeParserRegister2 = xmlApi < tree::UnrankedTreeWrapper >::ParserRegister < tree::UnrankedTree > ( );
-auto unrankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::UnrankedTree > ( );
+auto unrankedTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::UnrankedTree > ( );
+auto unrankedTreeParserRegister2 = xmlApi < ::tree::UnrankedTreeWrapper >::ParserRegister < ::tree::UnrankedTree > ( );
+auto unrankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::UnrankedTree > ( );
 
-auto UnrankedTreeFromRankedTree = castApi::CastRegister < tree::UnrankedTree, tree::RankedTree > ( );
-auto UnrankedTreeCastBinder = castApi::CastPoolStringBinder < tree::UnrankedTree > ( tree::UnrankedTree::getXmlTagName() );
+auto UnrankedTreeFromRankedTree = castApi::CastRegister < ::tree::UnrankedTree, ::tree::RankedTree > ( );
+auto UnrankedTreeCastBinder = castApi::CastPoolStringBinder < ::tree::UnrankedTree > ( ::tree::UnrankedTree::getXmlTagName() );
 
 } /* namespace alib */
diff --git a/alib2data/src/tree/unranked/UnrankedTree.h b/alib2data/src/tree/unranked/UnrankedTree.h
index 49fcbd6366553fbc10ef1ab2bb3ae2e6b141cea6..1e16dbbb478646fefcfe449b71ca57cd153493f0 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.h
+++ b/alib2data/src/tree/unranked/UnrankedTree.h
@@ -117,17 +117,17 @@ public:
 namespace std {
 
 template < >
-class ComponentConstraint< tree::UnrankedTree, alphabet::Symbol, tree::GeneralAlphabet > {
+class ComponentConstraint< ::tree::UnrankedTree, alphabet::Symbol, ::tree::GeneralAlphabet > {
 public:
-	static bool used ( const tree::UnrankedTree & tree, const alphabet::Symbol & symbol ) {
+	static bool used ( const ::tree::UnrankedTree & tree, const alphabet::Symbol & symbol ) {
 		return tree.getRoot ( ).testSymbol ( symbol );
 	}
 
-	static bool available ( const tree::UnrankedTree &, const alphabet::Symbol & ) {
+	static bool available ( const ::tree::UnrankedTree &, const alphabet::Symbol & ) {
 		return true;
 	}
 
-	static void valid ( const tree::UnrankedTree &, const alphabet::Symbol & ) {
+	static void valid ( const ::tree::UnrankedTree &, const alphabet::Symbol & ) {
 	}
 };
 
diff --git a/alib2std/src/extensions/iterator.hpp b/alib2std/src/extensions/iterator.hpp
index 9c0e1d25922a16655591326b90fadff2f11698a0..dbcbdaccda4d0b18b978ba9a21660e4c53810d15 100644
--- a/alib2std/src/extensions/iterator.hpp
+++ b/alib2std/src/extensions/iterator.hpp
@@ -32,6 +32,12 @@ reverser<T> make_reverse(T& container) {
 	return reverser<T>(container);
 }
 
+template < typename T >
+struct is_iterator : std::false_type {};
+
+template < typename T >
+struct is_iterator<typename std::iterator_traits<T>> : std::true_type {};
+
 } /* namespace std */
 
 #endif /* __ITERATOR_HPP_ */
diff --git a/alib2std/src/extensions/tree.hpp b/alib2std/src/extensions/tree.hpp
index a66cd6d5ef5d95d7050f7ea54da897ebd0cd1503..726e48d36b44857fcd62a8ba95d6c3ec00f74562 100644
--- a/alib2std/src/extensions/tree.hpp
+++ b/alib2std/src/extensions/tree.hpp
@@ -10,6 +10,778 @@
 
 namespace std {
 
+template < class T >
+struct AnyArity {
+	bool operator ()( const T &, unsigned ) const {
+		return true;
+	}
+
+};
+
+template < class T, class ArityChecker = AnyArity < T > >
+class tree {
+
+	ArityChecker arityChecker;
+
+	struct tree_node {
+		T data;
+
+		tree_node * parent;
+		std::vector < tree_node > children;
+
+		tree_node ( const T & data, const std::vector < tree_node > & children ) : data ( data ), children ( children ), parent ( nullptr ) {
+			for ( tree_node & child : this->children )
+				child.parent = this;
+		}
+
+		tree_node ( T && data, std::vector < tree_node > && children ) : data ( std::move ( data ) ), children ( std::move ( children ) ), parent ( nullptr ) {
+			for ( tree_node & child : this->children )
+				child.parent = this;
+		}
+
+		~tree_node ( ) noexcept {
+		}
+
+		tree_node ( const tree_node & node ) : data ( node.data ), parent ( node.parent ), children ( node.children ) {
+			for ( tree_node & child : children )
+				child.parent = this;
+		}
+
+		tree_node ( tree_node && node ) noexcept : data ( std::move ( node.data ) ), parent ( node.parent ), children ( std::move ( node.children ) ) {
+			for ( tree_node & child : children )
+				child.parent = this;
+		}
+
+		tree_node & operator =( const tree_node & node ) {
+			return this->operator =( tree_node ( node ) );
+		}
+
+		tree_node & operator =( tree_node && node ) noexcept {
+			data = std::move ( node.data );
+			children = std::move ( node.children );
+
+			for ( tree_node & child : children )
+				child.parent = this;
+
+			return * this;
+		}
+
+		tree_node * getParent ( ) {
+			return parent;
+		}
+
+		const tree_node * getParent ( ) const {
+			return parent;
+		}
+
+		T & getData ( ) {
+			return data;
+		}
+
+		const T & getData ( ) const {
+			return data;
+		}
+
+		std::vector < tree_node > & getChildren ( ) {
+			return children;
+		}
+
+		const std::vector < tree_node > & getChildren ( ) const {
+			return children;
+		}
+
+	};
+
+	tree_node root;
+
+	std::vector < tree_node > fromTree ( const std::vector < tree < T, ArityChecker > > & input ) {
+		std::vector < tree_node > res;
+
+		for ( const tree < T, ArityChecker > & subtree : input )
+			res.push_back ( subtree.root );
+
+		return res;
+	}
+
+public:
+	class const_children_iterator : public std::iterator < std::bidirectional_iterator_tag, T > {
+		typename std::vector < tree_node >::const_iterator node;
+
+	public:
+		const_children_iterator ( typename std::vector < tree_node >::const_iterator node ) : node ( node ) {
+		}
+
+		const_children_iterator ( const const_children_iterator & other ) : node ( other.node ) {
+		}
+
+		const_children_iterator & operator ++( ) {
+			++node;
+			return * this;
+		}
+
+		const_children_iterator operator ++( int ) {
+			const_children_iterator tmp ( * this );
+
+			operator ++( );
+			return tmp;
+		}
+
+		const_children_iterator & operator --( ) {
+			--node;
+			return * this;
+		}
+
+		const_children_iterator operator --( int ) {
+			const_children_iterator tmp ( * this );
+
+			operator --( );
+			return tmp;
+		}
+
+		bool operator ==( const const_children_iterator & other ) {
+			return node == other.node;
+		}
+
+		bool operator !=( const const_children_iterator & other ) {
+			return !( * this == other );
+		}
+
+		const T & operator *( ) const {
+			return node->getData ( );
+		}
+
+		size_t operator -( const const_children_iterator other ) const {
+			return node - other.node;
+		}
+
+		const_children_iterator begin ( ) const {
+			return node->getChildren ( ).begin ( );
+		}
+
+		const_children_iterator end ( ) const {
+			return node->getChildren ( ).end ( );
+		}
+
+		const_children_iterator parent ( ) const {
+			return typename std::vector < tree_node >::const_iterator ( node->getParent ( ) );
+		}
+
+	private:
+		const tree_node & getTreeNode ( ) const {
+			return * node;
+		}
+
+		typename std::vector < tree_node >::const_iterator getUnderlyingIterator ( ) const {
+			return node;
+		}
+
+		template < class F, class G >
+		friend class tree;
+	};
+
+	class const_structure_iterator : public std::iterator < std::bidirectional_iterator_tag, T > {
+		typename std::vector < tree_node >::const_iterator node;
+		unsigned level;
+
+		bool virtual_node;
+		bool isEnd;
+
+	public:
+		const_structure_iterator ( typename std::vector < tree_node >::const_iterator node ) : node ( node ), level ( 0 ), virtual_node ( false ), isEnd ( false ) {
+		}
+
+		const_structure_iterator ( const const_structure_iterator & other ) : node ( other.node ), level ( other.level ), virtual_node ( other.virtual_node ) {
+		}
+
+		const_structure_iterator & operator ++( ) {
+			if ( virtual_node ) {
+				const tree_node * parent = node->getParent ( );
+
+				if ( parent != nullptr ) {
+					++node;
+
+					if ( node == parent->getChildren ( ).end ( ) ) {
+						--level;
+						node = typename std::vector < tree_node >::const_iterator ( parent );
+					} else {
+						virtual_node = false;
+					}
+				} else {
+					++node;
+					virtual_node = false;
+					isEnd = true;
+				}
+			} else {
+				typename std::vector < tree_node >::const_iterator newIter = node->getChildren ( ).begin ( );
+
+				if ( newIter != node->getChildren ( ).end ( ) ) {
+					++level;
+					node = newIter;
+				} else {
+					virtual_node = true;
+				}
+			}
+
+			return * this;
+		}
+
+		const_structure_iterator operator ++( int ) {
+			const_structure_iterator tmp ( * this );
+
+			operator ++( );
+			return tmp;
+		}
+
+		const_structure_iterator & operator --( ) {
+			if ( isEnd ) {
+				--node;
+				virtual_node = true;
+				isEnd = false;
+			} else if ( virtual_node ) {
+				typename std::vector < tree_node >::const_iterator newIter = node->getChildren ( ).end ( );
+
+				if ( newIter != node->getChildren ( ).begin ( ) ) {
+					++level;
+					node = newIter;
+					--node;
+				} else {
+					virtual_node = false;
+				}
+			} else {
+				const tree_node * parent = node->getParent ( );
+
+				if ( parent != nullptr ) {
+					if ( node == parent->getChildren ( ).begin ( ) ) {
+						--level;
+						node = typename std::vector < tree_node >::const_iterator ( parent );
+					} else {
+						--node;
+						virtual_node = true;
+					}
+				}
+			}
+
+			return * this;
+		}
+
+		const_structure_iterator operator --( int ) {
+			const_structure_iterator tmp ( * this );
+
+			operator --( );
+			return tmp;
+		}
+
+		bool operator ==( const const_structure_iterator & other ) {
+			return node == other.node && virtual_node == other.virtual_node;
+		}
+
+		bool operator !=( const const_structure_iterator & other ) {
+			return !( * this == other );
+		}
+
+		const T & operator *( ) const {
+			return node->getData ( );
+		}
+
+		unsigned getLevel ( ) const {
+			return level;
+		}
+
+		bool getVirtual ( ) const {
+			return virtual_node;
+		}
+
+	private:
+		const tree_node & getTreeNode ( ) const {
+			return * node;
+		}
+
+		typename std::vector < tree_node >::const_iterator getUnderlyingIterator ( ) const {
+			return node;
+		}
+
+		template < class F, class G >
+		friend class tree;
+	};
+
+	class const_prefix_iterator : public std::iterator < std::bidirectional_iterator_tag, T > {
+		const_structure_iterator node;
+
+	public:
+		const_prefix_iterator ( typename std::vector < tree_node >::const_iterator node ) : node ( node ) {
+		}
+
+		const_prefix_iterator ( const const_prefix_iterator & other ) : node ( other.node ) {
+		}
+
+		const_prefix_iterator & operator ++( ) {
+			while ( ( ++node ).getVirtual ( ) );
+
+			return * this;
+		}
+
+		const_prefix_iterator operator ++( int ) {
+			const_prefix_iterator tmp ( * this );
+
+			operator ++( );
+			return tmp;
+		}
+
+		const_prefix_iterator & operator --( ) {
+			while ( ( --node ).getVirtual ( ) );
+
+			return * this;
+		}
+
+		const_prefix_iterator operator --( int ) {
+			const_prefix_iterator tmp ( * this );
+
+			operator --( );
+			return tmp;
+		}
+
+		bool operator ==( const const_prefix_iterator & other ) {
+			return node == other.node;
+		}
+
+		bool operator !=( const const_prefix_iterator & other ) {
+			return !( * this == other );
+		}
+
+		const T & operator *( ) const {
+			return * node;
+		}
+
+		unsigned getLevel ( ) const {
+			return node.getLevel ( );
+		}
+
+	private:
+		const tree_node & getTreeNode ( ) const {
+			return node.getTreeNode ( );
+		}
+
+		typename std::vector < tree_node >::const_iterator getUnderlyingIterator ( ) const {
+			return node.getUnderlyingIterator;
+		}
+
+		template < class F, class G >
+		friend class tree;
+	};
+
+	class const_postfix_iterator : public std::iterator < std::bidirectional_iterator_tag, T > {
+		const_structure_iterator node;
+
+	public:
+		const_postfix_iterator ( typename std::vector < tree_node >::const_iterator node ) : node ( node ) {
+		}
+
+		const_postfix_iterator ( const const_postfix_iterator & other ) : node ( other.node ) {
+		}
+
+		const_postfix_iterator & operator ++( ) {
+			while ( !( ++node ).getVirtual ( ) && !node.isEnd );
+
+			return * this;
+		}
+
+		const_postfix_iterator operator ++( int ) {
+			const_postfix_iterator tmp ( * this );
+
+			operator ++( );
+			return tmp;
+		}
+
+		const_postfix_iterator & operator --( ) {
+			while ( !( --node ).getVirtual ( ) );
+
+			return * this;
+		}
+
+		const_postfix_iterator operator --( int ) {
+			const_postfix_iterator tmp ( * this );
+
+			operator --( );
+			return tmp;
+		}
+
+		bool operator ==( const const_postfix_iterator & other ) {
+			return node == other.node;
+		}
+
+		bool operator !=( const const_postfix_iterator & other ) {
+			return !( * this == other );
+		}
+
+		const T & operator *( ) const {
+			return * node;
+		}
+
+		unsigned getLevel ( ) const {
+			return node.getLevel ( );
+		}
+
+	private:
+		const tree_node & getTreeNode ( ) const {
+			return node.getTreeNode ( );
+		}
+
+		typename std::vector < tree_node >::const_iterator getUnderlyingIterator ( ) const {
+			return node.getUnderlyingIterator ( );
+		}
+
+		template < class F, class G >
+		friend class tree;
+	};
+
+// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+private:
+	const_children_iterator insert_helper ( const_children_iterator under, const_children_iterator position, const_children_iterator begin, const_children_iterator end ) {
+		tree_node * under_node = const_cast < tree_node * > ( & under.getTreeNode ( ) );
+		std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under_node->getChildren ( ) );
+
+		size_t insertedSize = end - begin;
+
+		if ( !arityChecker ( * under, children.size ( ) + insertedSize ) )
+			throw "Invalid number of children";
+
+		std::vector < tree_node > inserted;
+
+		for ( const_children_iterator beginCopy = begin; beginCopy != end; ++beginCopy )
+			inserted.push_back ( beginCopy.getTreeNode ( ) );
+
+		typename std::vector < tree_node >::iterator iter = children.insert ( position.getUnderlyingIterator ( ), inserted.begin ( ), inserted.end ( ) );
+
+		for ( typename std::vector < tree_node >::iterator iterCopy = iter; begin != end; ++begin, ++iterCopy )
+			iterCopy->parent = under_node;
+
+		typename std::vector < tree_node >::const_iterator citer = iter;
+		return citer;
+	}
+
+public:
+	const_children_iterator insert ( const_children_iterator under, const_children_iterator position, const tree < T, ArityChecker > & value ) {
+		std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) );
+
+		typename std::vector < tree_node >::iterator iter = children.insert ( position.getUnderlyingIterator ( ), value.root );
+		iter->parent = const_cast < tree_node * > ( & under.getTreeNode ( ) );
+		typename std::vector < tree_node >::const_iterator res = iter;
+		return res;
+	}
+
+	const_children_iterator insert ( const_children_iterator under, const_children_iterator position, tree < T, ArityChecker > && value ) {
+		std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) );
+
+		typename std::vector < tree_node >::iterator iter = children.insert ( position.getUnderlyingIterator ( ), std::move ( value.root ) );
+		iter->parent = const_cast < tree_node * > ( & under.getTreeNode ( ) );
+		typename std::vector < tree_node >::const_iterator res = iter;
+		return res;
+	}
+
+	template < class Iterator >
+	const_children_iterator insert ( const_children_iterator under, const_children_iterator position, Iterator begin, Iterator end ) {
+		std::vector < tree_node > children;
+
+		for ( ; begin != end; ++begin )
+			children.push_back ( tree_node ( * begin, { } ) );
+
+		return insert_helper ( under, position, children.cbegin ( ), children.cend ( ) );
+	}
+
+	const_children_iterator insert ( const_children_iterator under, const_children_iterator position, const_children_iterator begin, const_children_iterator end ) {
+		return insert_helper ( under, position, begin, end );
+	}
+
+// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+public:
+	tree ( const T & data, const std::vector < tree < T, ArityChecker > > & subtrees, ArityChecker arityChecker = ArityChecker ( ) ) : arityChecker ( arityChecker ), root ( data, fromTree ( subtrees ) ) {
+		if ( !arityChecker ( data, subtrees.size ( ) ) )
+			throw "Invalid number of children";
+	}
+
+	template < typename ... Types >
+	tree ( const T & data, Types ... subtrees, ArityChecker arityChecker ) : tree ( data, std::vector < tree < T, ArityChecker > > { subtrees ... }, arityChecker ) {
+	}
+
+	template < typename ... Types >
+	tree ( const T & data, Types ... subtrees ) : tree ( data, std::vector < tree < T, ArityChecker > > { subtrees ... }, ArityChecker ( ) ) {
+	}
+
+	template < typename Iterator, typename std::enable_if < std::is_iterator < Iterator >::value >::type >
+	tree ( const T & data, Iterator begin, Iterator end ) : root ( data, { } ) {
+		std::vector < tree_node > children;
+
+		for ( ; begin != end; ++begin )
+			children.push_back ( tree_node ( * begin, { } ) );
+
+		insert_helper ( begin ( ), begin ( ).end ( ), children.cbegin ( ), children.cend ( ) );
+	}
+
+	tree ( const T & data, const_children_iterator begin, const_children_iterator end ) : root ( data, { } ) {
+		insert_helper ( begin ( ), begin ( ).end ( ), begin, end );
+	}
+
+// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+	const_children_iterator begin ( ) const {
+		return typename std::vector < tree_node >::const_iterator ( & root );
+	}
+
+	const_children_iterator end ( ) const {
+		return typename std::vector < tree_node >::const_iterator ( & root + 1 );
+	}
+
+// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+	const_prefix_iterator prefix_begin ( ) const {
+		return typename std::vector < tree_node >::const_iterator ( & root );
+	}
+
+	const_prefix_iterator prefix_end ( ) const {
+		const_prefix_iterator res ( typename std::vector < tree_node >::const_iterator ( & root + 1 ) );
+
+		res.node.isEnd = true;
+		return res;
+	}
+
+// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+	const_postfix_iterator postfix_begin ( ) const {
+		const_postfix_iterator res { typename std::vector < tree_node >::const_iterator ( & root ) };
+
+		while ( !( res.node ).getVirtual ( ) ) ++res.node;
+
+		return res;
+	}
+
+	const_postfix_iterator postfix_end ( ) const {
+		const_postfix_iterator res ( typename std::vector < tree_node >::const_iterator ( & root + 1 ) );
+
+		res.node.isEnd = true;
+		return res;
+	}
+
+// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+	const_structure_iterator structure_begin ( ) const {
+		return typename std::vector < tree_node >::const_iterator ( & root );
+	}
+
+	const_structure_iterator structure_end ( ) const {
+		const_structure_iterator res ( typename std::vector < tree_node >::const_iterator ( & root + 1 ) );
+
+		res.isEnd = true;
+		return res;
+	}
+
+// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+	void push_back ( const_children_iterator under, const T & value ) {
+		std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) );
+
+		if ( !arityChecker ( * under, children.size ( ) + 1 ) )
+			throw "Invalid number of children";
+
+		children.push_back ( tree_node ( value, { } ) );
+		std::prev ( children.end ( ) )->parent = const_cast < tree_node * > ( & under.getTreeNode ( ) );
+	}
+
+	void push_back ( const_children_iterator under, T && value ) {
+		std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) );
+
+		if ( !arityChecker ( * under, children.size ( ) + 1 ) )
+			throw "Invalid number of children";
+
+		children.push_back ( tree_node ( std::move ( value ), { } ) );
+		std::prev ( children.end ( ) )->parent = const_cast < tree_node * > ( & under.getTreeNode ( ) );
+	}
+
+// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+	const_children_iterator erase ( const_children_iterator under, const_children_iterator position ) {
+		std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) );
+
+		if ( !arityChecker ( * under, children.size ( ) - 1 ) )
+			throw "Invalid number of children";
+
+		typename std::vector < tree_node >::iterator iter = children.erase ( position.getUnderlyingIterator ( ) );
+		typename std::vector < tree_node >::const_iterator res = iter;
+		return res;
+	}
+
+	// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+	template < class ... Indexes >
+	const T & operator ()( Indexes ... indexes ) const {
+		const tree_node * node = & root;
+
+		( void ) std::initializer_list < int > { ( node = & node->getChildren ( )[indexes], 0 ) ... };
+
+		return node->getData ( );
+	}
+
+private:
+	class SubscriptAccess {
+		tree_node * node;
+		const ArityChecker & arityChecker;
+
+	public:
+		SubscriptAccess ( tree_node * node, const ArityChecker & arityChecker ) : node ( node ), arityChecker ( arityChecker ) {
+		}
+
+		SubscriptAccess ( const SubscriptAccess & ) = delete;
+		SubscriptAccess ( SubscriptAccess && ) = delete;
+
+		SubscriptAccess & operator =( const SubscriptAccess & ) = delete;
+		SubscriptAccess & operator =( SubscriptAccess && ) = delete;
+
+		operator const T &( ) {
+			return node->getData ( );
+		}
+
+		SubscriptAccess & operator =( const T & data ) {
+			if ( !arityChecker ( data, node->getChildren ( ).size ( ) ) )
+				throw "Invalid number of children";
+
+			node->getData ( ) = data;
+
+			return * this;
+		}
+
+		SubscriptAccess & operator =( const tree < T, ArityChecker > & data ) {
+			* node = data.root;
+
+			return * this;
+		}
+
+		friend void swap ( SubscriptAccess && first, SubscriptAccess && second ) {
+			tree_node tmp = std::move ( * first.node );
+
+			* first.node = std::move ( * second.node );
+			* second.node = std::move ( tmp );
+		}
+
+	};
+
+public:
+	template < class ... Indexes >
+	SubscriptAccess operator ()( Indexes ... indexes ) {
+		tree_node * node = & root;
+
+		( void ) std::initializer_list < int > { ( node = & node->getChildren ( )[indexes], 0 ) ... };
+
+		return { node, arityChecker };
+	}
+
+// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+	bool checkStructure ( const tree_node & node ) const {
+		bool sign = true;
+
+		for ( const tree_node & child : node.getChildren ( ) )
+			sign &= child.getParent ( ) == & node && checkStructure ( child );
+
+		return sign;
+	}
+
+	bool checkStructure ( ) const {
+		return root.parent == nullptr && checkStructure ( root );
+	}
+
+// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+	friend void swap ( tree & first, tree & second ) {
+		swap ( std::move ( first ( ) ), std::move ( second ( ) ) );
+	}
+
+// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+	int compare ( const tree & other ) const {
+		std::compare < typename std::decay < T >::type > comp;
+		auto iterF = this->prefix_begin ( );
+		auto iterS = other.prefix_begin ( );
+
+		for ( ; iterF != this->prefix_end ( ) || iterS != other.prefix_end ( ); ++iterF, ++iterS ) {
+			int res = comp ( * iterF, * iterS );
+
+			if ( res != 0 ) return res;
+		}
+
+		if ( iterF != this->prefix_end ( ) ) return -1;
+
+		if ( iterS != other.prefix_end ( ) ) return 1;
+
+		return 0;
+	}
+
+	bool operator ==( const tree & other ) {
+		return compare ( other ) == 0;
+	}
+
+	bool operator !=( const tree & other ) {
+		return compare ( other ) != 0;
+	}
+
+	bool operator <( const tree & other ) {
+		return compare ( other ) < 0;
+	}
+
+	bool operator <=( const tree & other ) {
+		return compare ( other ) <= 0;
+	}
+
+	bool operator >( const tree & other ) {
+		return compare ( other ) > 0;
+	}
+
+	bool operator >=( const tree & other ) {
+		return compare ( other ) >= 0;
+	}
+
+};
+
+template < class T, class ... Ts >
+std::ostream & operator <<( std::ostream & out, const tree < T, Ts ... > & t ) {
+	out << "[";
+
+	unsigned level = 0;
+
+	for ( typename tree < T, Ts ... >::const_prefix_iterator iter = t.prefix_begin ( ); iter != t.prefix_end ( ); ) {
+		while ( iter.getLevel ( ) > level ) {
+			out << "[";
+			++level;
+		}
+
+		out << level << * iter;
+		++iter;
+
+		bool printComma = iter.getLevel ( ) == level;
+
+		while ( iter.getLevel ( ) < level ) {
+			out << "]";
+			--level;
+			printComma = true;
+		}
+
+		if ( printComma && ( level != 0 ) )
+			out << ",";
+	}
+
+	out << "]";
+	return out;
+}
+
+template < class T, class ... Ts >
+struct compare < tree < T, Ts ... > > {
+	int operator ()( const tree < T, Ts ... > & first, const tree < T, Ts ... > & second ) const {
+		return first.compare ( second );
+	}
+
+};
+
+// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
 template < class Data >
 class BaseNode {
 	Data * parent;
@@ -375,7 +1147,7 @@ public:
 	typename std::vector < Data >::iterator insert ( typename std::vector < Data >::iterator it, Data d ) {
 		it = children.insert ( it, std::move ( d ) );
 
-		( * std::prev ( it ) ) -> parent = static_cast < Cast * > ( this );
+		( * std::prev ( it ) )->parent = static_cast < Cast * > ( this );
 
 		return it;
 	}
diff --git a/alib2std/src/tree b/alib2std/src/tree
index 136d7e05689c788e900a7b3022f13f9a3705ab81..32683cb54c727c8a7e787bb37507500317863bb0 100644
--- a/alib2std/src/tree
+++ b/alib2std/src/tree
@@ -4,6 +4,7 @@
 #include <memory>
 #include <vector>
 #include <tuple>
+#include "iterator"
 #include "extensions/tree.hpp"
 
 #endif /* __TREE_HEADER_WRAPPER */
diff --git a/alib2std/test-src/extensions/TreeTest.cpp b/alib2std/test-src/extensions/TreeTest.cpp
index 23f062e51b0eb42ae25cf94bbef5381fb97245b3..c9e3d92790172bfe1fb7ccb5b5800dcfd5e2d716 100644
--- a/alib2std/test-src/extensions/TreeTest.cpp
+++ b/alib2std/test-src/extensions/TreeTest.cpp
@@ -40,3 +40,152 @@ void TreeTest::testRankedTree ( ) {
 
 void TreeTest::testUnrankedTree ( ) {
 }
+
+void print_tree ( std::tree < char >::const_children_iterator biter, std::tree < char >::const_children_iterator eiter, std::string indent ) {
+	for ( std::tree < char >::const_children_iterator iter = biter; iter != eiter; iter++ ) {
+		std::cout << indent << * iter << std::endl;
+		print_tree ( iter.begin ( ), iter.end ( ), indent + " " );
+	}
+}
+
+struct RankedArityChecker {
+	bool operator ()( char symbol, unsigned wantedRank ) const {
+		switch ( symbol ) {
+		case 'a':
+			return wantedRank == 2;
+
+		case 'b':
+			return wantedRank == 1;
+
+		default:
+			return wantedRank == 0;
+		}
+	}
+
+};
+
+void TreeTest::testTreeStdStructure ( ) {
+	std::tree < char > t ( 'a', std::tree < char > ( 'a' ), std::tree < char > ( 'b', std::tree < char > ( 'a' ), std::tree < char > ( 'b' ) ) );
+
+	// std::cout << "structure t " << std::boolalpha << t.checkStructure() << std::endl;
+
+	std::tree < char > t2 ( 'c' );
+
+	 // std::cout << "structure t2 " << std::boolalpha << t2.checkStructure() << std::endl;
+	t2.insert ( t2.begin ( ), t2.begin ( ).begin ( ), { 'c', std::tree < char > ( 'b' ) } );
+	CPPUNIT_ASSERT ( t2.checkStructure ( ) );
+
+	t2.insert ( t2.begin ( ), t2.begin ( ).end ( ), t.begin ( ), t.end ( ) );
+	CPPUNIT_ASSERT ( t2.checkStructure ( ) );
+
+	std::vector < char > data = { 'd', 'e' };
+	t2.insert ( t2.begin ( ), t2.begin ( ).end ( ), data.begin ( ), data.end ( ) );
+	CPPUNIT_ASSERT ( t2.checkStructure ( ) );
+
+	// print_tree ( t.begin(), t.end(), "");
+
+	t2.erase ( t2.begin ( ), std::prev ( t2.begin ( ).end ( ) ) );
+	CPPUNIT_ASSERT ( t2.checkStructure ( ) );
+	t2.push_back ( t2.begin ( ), 'f' );
+	CPPUNIT_ASSERT ( t2.checkStructure ( ) );
+
+	// print_tree ( t2.begin(), t2.end(), "");
+
+	CPPUNIT_ASSERT_EQUAL ( ( char ) t2 ( 1, 1 ), 'b' );
+	t2 ( 1, 1 ) = 'c';
+	CPPUNIT_ASSERT_EQUAL ( ( char ) t2 ( 1, 1 ), 'c' );
+
+	CPPUNIT_ASSERT ( t2.checkStructure ( ) );
+	std::tree < char >::const_prefix_iterator beg = t2.prefix_begin ( );
+	beg++;
+	beg++;
+	beg++;
+	beg++;
+	beg++;
+	beg++;
+	beg++;
+	beg--;
+	beg--;
+	beg--;
+	beg--;
+	beg--;
+	beg--;
+	beg--;
+
+	CPPUNIT_ASSERT ( beg == t2.prefix_begin ( ) );
+	std::cout << t2 << std::endl;
+	std::stringstream ss;
+	ss << t2;
+	CPPUNIT_ASSERT ( ss.str ( ) == "[0c[1c[2b],1a[2a,2c[3a,3b]],1d,1f]]" );
+
+	std::vector < std::pair < unsigned, char > > expectedPrefix = { { 0, 'c' }, { 1, 'c' }, { 2, 'b' }, { 1, 'a' }, { 2, 'a' }, { 2, 'c' }, { 3, 'a' }, { 3, 'b' }, { 1, 'd' }, { 1, 'f' } };
+	std::vector < std::pair < unsigned, char > >::const_iterator ref = expectedPrefix.begin ( );
+
+	for ( std::tree < char >::const_prefix_iterator iter = t2.prefix_begin ( ); iter != t2.prefix_end ( ); ++iter ) {
+		CPPUNIT_ASSERT ( iter.getLevel ( ) == ref->first );
+		CPPUNIT_ASSERT ( * iter == ref->second );
+		++iter;
+		--iter;
+		++ref;
+	}
+
+	std::vector < std::tuple < unsigned, char, bool > > expectedStructure = { std::make_tuple ( 0u, 'c', false ), std::make_tuple ( 1u, 'c', false ), std::make_tuple ( 2u, 'b', false ), std::make_tuple ( 2u, 'b', true ), std::make_tuple ( 1u, 'c', true ), std::make_tuple ( 1u, 'a', false ), std::make_tuple ( 2u, 'a', false ), std::make_tuple ( 2u, 'a', true ), std::make_tuple ( 2u, 'c', false ), std::make_tuple ( 3u, 'a', false ), std::make_tuple ( 3u, 'a', true ), std::make_tuple ( 3u, 'b', false ), std::make_tuple ( 3u, 'b', true ), std::make_tuple ( 2u, 'c', true ), std::make_tuple ( 1u, 'a', true ), std::make_tuple ( 1u, 'd', false ), std::make_tuple ( 1u, 'd', true ), std::make_tuple ( 1u, 'f', false ), std::make_tuple ( 1u, 'f', true ), std::make_tuple ( 0u, 'c', true ) };
+	std::vector < std::tuple < unsigned, char, bool > >::const_iterator ref2 = expectedStructure.begin ( );
+
+	for ( std::tree < char >::const_structure_iterator iter = t2.structure_begin ( ); iter != t2.structure_end ( ); ++iter ) {
+		CPPUNIT_ASSERT ( iter.getLevel ( ) == std::get < 0 > ( * ref2 ) );
+		CPPUNIT_ASSERT ( * iter == std::get < 1 > ( * ref2 ) );
+		CPPUNIT_ASSERT ( iter.getVirtual ( ) == std::get < 2 > ( * ref2 ) );
+		++iter;
+		--iter;
+		++ref2;
+	}
+
+	std::vector < std::pair < unsigned, char > > expectedPostfix = { { 2, 'b' }, { 1, 'c' }, { 2, 'a' }, { 3, 'a' }, { 3, 'b' }, { 2, 'c' }, { 1, 'a' }, { 1, 'd' }, { 1, 'f' }, { 0, 'c' } };
+	std::vector < std::pair < unsigned, char > >::const_iterator ref3 = expectedPostfix.begin ( );
+
+	for ( std::tree < char >::const_postfix_iterator iter = t2.postfix_begin ( ); iter != t2.postfix_end ( ); ++iter ) {
+		CPPUNIT_ASSERT ( iter.getLevel ( ) == ref3->first );
+		CPPUNIT_ASSERT ( * iter == ref3->second );
+		++iter;
+		--iter;
+		++ref3;
+	}
+
+	std::tree < char, RankedArityChecker > rt ( 'a', std::tree < char, RankedArityChecker > ( 'b', std::tree < char, RankedArityChecker > ( 'c' ) ), std::tree < char, RankedArityChecker > ( 'c' ) );
+
+	CPPUNIT_ASSERT_EQUAL ( ( char ) rt ( 0, 0 ), 'c' );
+	rt ( 0, 0 ) = 'd';
+	CPPUNIT_ASSERT_EQUAL ( ( char ) rt ( 0, 0 ), 'd' );
+	rt ( 0, 0 ) = std::tree < char, RankedArityChecker > ( 'e' );
+	CPPUNIT_ASSERT_EQUAL ( ( char ) rt ( 0, 0 ), 'e' );
+	CPPUNIT_ASSERT ( rt.checkStructure ( ) );
+
+	std::cout << rt << std::endl;
+	swap ( rt ( 0 ), rt ( 1 ) );
+	CPPUNIT_ASSERT ( rt.checkStructure ( ) );
+	std::cout << rt << std::endl;
+	std::stringstream ss2;
+	ss2 << rt;
+	CPPUNIT_ASSERT ( ss2.str ( ) == "[0a[1c,1b[2e]]]" );
+
+	std::tree < char, RankedArityChecker > rt2 ( 'c' );
+	swap ( rt, rt2 );
+
+	CPPUNIT_ASSERT ( rt.checkStructure ( ) );
+	std::cout << rt << std::endl;
+	std::stringstream ss3;
+	ss3 << rt;
+	CPPUNIT_ASSERT ( ss3.str ( ) == "[0c]" );
+	std::cout << rt2 << std::endl;
+
+	std::tree < char > cmp1 ( 'a' );
+	std::tree < char > cmp2 ( 'b' );
+	std::tree < char > cmp3 ( 'c' );
+
+	CPPUNIT_ASSERT ( cmp1 < cmp2 );
+	CPPUNIT_ASSERT ( cmp2 < cmp3 );
+	CPPUNIT_ASSERT ( cmp2 <= cmp3 );
+	CPPUNIT_ASSERT ( cmp2 == cmp2 );
+	CPPUNIT_ASSERT ( cmp1 != cmp2 );
+}
diff --git a/alib2std/test-src/extensions/TreeTest.h b/alib2std/test-src/extensions/TreeTest.h
index 41c6695f6d24528bc702c54a2632127f829a1e18..12989ce28014ca4b51b59f4d57b543d4c311d7ce 100644
--- a/alib2std/test-src/extensions/TreeTest.h
+++ b/alib2std/test-src/extensions/TreeTest.h
@@ -10,6 +10,7 @@ class TreeTest : public CppUnit::TestFixture {
 	CPPUNIT_TEST ( testRegexps );
 	CPPUNIT_TEST ( testRankedTree );
 	CPPUNIT_TEST ( testUnrankedTree );
+	CPPUNIT_TEST ( testTreeStdStructure );
 	CPPUNIT_TEST_SUITE_END ( );
 
 public:
@@ -100,6 +101,7 @@ public:
 	void testRegexps ( );
 	void testRankedTree ( );
 	void testUnrankedTree ( );
+	void testTreeStdStructure();
 };
 
 #endif // TREE_TEST_H_