diff --git a/alib2data/src/string/CyclicString.h b/alib2data/src/string/CyclicString.h
index 24453302eeab995d48da681a8b62f6cdb702a836..513da9e8e0514e191109a1ed2d033f004a5be17c 100644
--- a/alib2data/src/string/CyclicString.h
+++ b/alib2data/src/string/CyclicString.h
@@ -42,7 +42,7 @@ public:
 	explicit CyclicString ( std::vector < SymbolType > str );
 	explicit CyclicString ( const std::string & str );
 	explicit CyclicString ( const char * str );
-	explicit CyclicString ( const Epsilon < > & epsilon );
+	explicit CyclicString ( const Epsilon < SymbolType > & epsilon );
 
 	virtual StringBase * clone ( ) const;
 	virtual StringBase * plunder ( ) &&;
@@ -120,7 +120,7 @@ CyclicString < SymbolType >::CyclicString(const char* str) : CyclicString((std::
 }
 
 template < class SymbolType >
-CyclicString < SymbolType >::CyclicString(const Epsilon < > & epsilon) : CyclicString ( epsilon.getAlphabet( ), std::vector < SymbolType > ( ) ) {
+CyclicString < SymbolType >::CyclicString(const Epsilon < SymbolType > & epsilon) : CyclicString ( epsilon.getAlphabet( ), std::vector < SymbolType > ( ) ) {
 }
 
 template < class SymbolType >
diff --git a/alib2data/src/string/LinearString.h b/alib2data/src/string/LinearString.h
index c76babddb4f3571bb6e40d2944e86065346c0e51..e8e7557443181a2935cb5ac9cab98cc3cb6847da 100644
--- a/alib2data/src/string/LinearString.h
+++ b/alib2data/src/string/LinearString.h
@@ -51,7 +51,7 @@ public:
 	explicit LinearString ( std::vector < SymbolType > str );
 	explicit LinearString ( const std::string & str );
 	explicit LinearString ( const char * str );
-	explicit LinearString ( const Epsilon < > & epsilon );
+	explicit LinearString ( const Epsilon < SymbolType > & epsilon );
 
 	virtual StringBase * clone ( ) const;
 	virtual StringBase * plunder ( ) &&;
@@ -142,7 +142,7 @@ LinearString < SymbolType >::LinearString(const char* str) : LinearString ( ( st
 }
 
 template < class SymbolType >
-LinearString < SymbolType >::LinearString(const Epsilon < > & epsilon) : LinearString ( epsilon.getAlphabet( ), std::vector < SymbolType > ( ) ) {
+LinearString < SymbolType >::LinearString(const Epsilon < SymbolType > & epsilon) : LinearString ( epsilon.getAlphabet( ), std::vector < SymbolType > ( ) ) {
 }
 
 template < class SymbolType >
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
index 516475868bba28dd608956cdbd9d62ab44252f11..7ab57a38e113877d45d71dc99ecd64daa32821db 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
@@ -53,14 +53,14 @@ public:
 	explicit PrefixRankedBarNonlinearPattern ( std::set < std::ranked_symbol < SymbolType, RankType > > bar, std::ranked_symbol < SymbolType, RankType > variablesBar, std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > nonlinearVariables, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedBarNonlinearPattern ( std::set < std::ranked_symbol < SymbolType, RankType > > bar, std::ranked_symbol < SymbolType, RankType > variablesBar, std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > nonlinearVariables, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedBarNonlinearPattern ( std::set < std::ranked_symbol < SymbolType, RankType > > bar, std::ranked_symbol < SymbolType, RankType > variablesBar, std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
-	explicit PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedTree < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedNonlinearPattern < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( const PrefixRankedBarTree < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( const PrefixRankedBarPattern < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( const RankedTree < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( const RankedPattern < > & tree );
-	explicit PrefixRankedBarNonlinearPattern ( const RankedNonlinearPattern < > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedNonlinearPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( const PrefixRankedBarTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( const PrefixRankedBarPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( const RankedTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( const RankedPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarNonlinearPattern ( const RankedNonlinearPattern < SymbolType, RankType > & tree );
 
 	virtual RankedTreeBase * clone ( ) const;
 	virtual RankedTreeBase * plunder ( ) &&;
@@ -148,35 +148,35 @@ PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonline
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedTree < > & tree ) : PrefixRankedBarNonlinearPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, toPrefixRankedBar ( tree.getContent ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, barBase, variablesBar ) ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedTree < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, toPrefixRankedBar ( tree.getContent ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, barBase, variablesBar ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < > & tree ) : PrefixRankedBarNonlinearPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, tree.getSubtreeWildcard ( ) }, toPrefixRankedBar ( tree.getContent ( ), tree.getSubtreeWildcard ( ), { }, barBase, variablesBar ) ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, tree.getSubtreeWildcard ( ) }, toPrefixRankedBar ( tree.getContent ( ), tree.getSubtreeWildcard ( ), { }, barBase, variablesBar ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedNonlinearPattern < > & tree ) : PrefixRankedBarNonlinearPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, tree.getSubtreeWildcard ( ), tree.getNonlinearVariables ( ), tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, tree.getSubtreeWildcard ( ) } + tree.getNonlinearVariables ( ), toPrefixRankedBar ( tree.getContent ( ), tree.getSubtreeWildcard ( ), tree.getNonlinearVariables ( ), barBase, variablesBar ) ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedNonlinearPattern < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, tree.getSubtreeWildcard ( ), tree.getNonlinearVariables ( ), tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, tree.getSubtreeWildcard ( ) } + tree.getNonlinearVariables ( ), toPrefixRankedBar ( tree.getContent ( ), tree.getSubtreeWildcard ( ), tree.getNonlinearVariables ( ), barBase, variablesBar ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const PrefixRankedBarTree < > & tree ) : PrefixRankedBarNonlinearPattern ( tree.getBars ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, tree.getContent ( ) ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const PrefixRankedBarTree < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( tree.getBars ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, tree.getContent ( ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const PrefixRankedBarPattern < > & tree ) : PrefixRankedBarNonlinearPattern ( tree.getBars ( ), tree.getVariablesBar ( ), tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ), tree.getContent ( ) ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const PrefixRankedBarPattern < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( tree.getBars ( ), tree.getVariablesBar ( ), tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ), tree.getContent ( ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const RankedTree < > & tree ) : PrefixRankedBarNonlinearPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const RankedTree < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const RankedPattern < > & tree ) : PrefixRankedBarNonlinearPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const RankedPattern < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const RankedNonlinearPattern < > & tree ) : PrefixRankedBarNonlinearPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
+PrefixRankedBarNonlinearPattern < SymbolType, RankType >::PrefixRankedBarNonlinearPattern ( const RankedNonlinearPattern < SymbolType, RankType > & tree ) : PrefixRankedBarNonlinearPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
index e27476deed6e1d5b89692d728f8f307b547d47d9..3e5d3e25bf9f676879f390482b0bd5297ff06135 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
@@ -51,9 +51,9 @@ class PrefixRankedBarPattern : public RankedTreeBase, public std::Components < P
 public:
 	explicit PrefixRankedBarPattern ( std::set < std::ranked_symbol < SymbolType, RankType > > bar, std::ranked_symbol < SymbolType, RankType > variablesBar, std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedBarPattern ( std::set < std::ranked_symbol < SymbolType, RankType > > bar, std::ranked_symbol < SymbolType, RankType > variablesBar, std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
-	explicit PrefixRankedBarPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < > & tree );
-	explicit PrefixRankedBarPattern ( const PrefixRankedBarTree < > & tree );
-	explicit PrefixRankedBarPattern ( const RankedPattern < > & tree );
+	explicit PrefixRankedBarPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarPattern ( const PrefixRankedBarTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedBarPattern ( const RankedPattern < SymbolType, RankType > & tree );
 
 	virtual RankedTreeBase * clone ( ) const;
 	virtual RankedTreeBase * plunder ( ) &&;
@@ -134,15 +134,15 @@ PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( std::s
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < > & tree ) : PrefixRankedBarPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, tree.getSubtreeWildcard ( ), tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, tree.getSubtreeWildcard ( ) }, toPrefixRankedBar ( tree.getContent ( ), tree.getSubtreeWildcard ( ), barBase, variablesBar ) ) {
+PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( SymbolType barBase, std::ranked_symbol < SymbolType, RankType > variablesBar, const RankedPattern < SymbolType, RankType > & tree ) : PrefixRankedBarPattern ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar }, variablesBar, tree.getSubtreeWildcard ( ), tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ) + std::set < std::ranked_symbol < SymbolType, RankType > > { variablesBar, tree.getSubtreeWildcard ( ) }, toPrefixRankedBar ( tree.getContent ( ), tree.getSubtreeWildcard ( ), barBase, variablesBar ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( const PrefixRankedBarTree < > & tree ) : PrefixRankedBarPattern ( tree.getBars() + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree.getAlphabet ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, tree.getContent ( ) ) {
+PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( const PrefixRankedBarTree < SymbolType, RankType > & tree ) : PrefixRankedBarPattern ( tree.getBars() + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree.getAlphabet ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, tree.getContent ( ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( const RankedPattern < > & tree ) : PrefixRankedBarPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
+PrefixRankedBarPattern < SymbolType, RankType >::PrefixRankedBarPattern ( const RankedPattern < SymbolType, RankType > & tree ) : PrefixRankedBarPattern ( alphabet::BarSymbol::instance < SymbolType > ( ), alphabet::VariablesBarSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
index 58b1b2a67d6405cf759fccda86cbbadbc1ce52cf..6b560bf189ef5aa7e6efe023df2ed2aca8d2cb29 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
@@ -47,7 +47,7 @@ class PrefixRankedBarTree : public RankedTreeBase, public std::Components < Pref
 public:
 	explicit PrefixRankedBarTree ( std::set < std::ranked_symbol < SymbolType, RankType > > bars, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedBarTree ( std::set < std::ranked_symbol < SymbolType, RankType > > bars, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
-	explicit PrefixRankedBarTree ( SymbolType barBase, const RankedTree < > & tree );
+	explicit PrefixRankedBarTree ( SymbolType barBase, const RankedTree < SymbolType, RankType > & tree );
 	explicit PrefixRankedBarTree ( const RankedTree < > & tree );
 
 	virtual RankedTreeBase * clone ( ) const;
@@ -120,7 +120,7 @@ PrefixRankedBarTree < SymbolType, RankType >::PrefixRankedBarTree ( std::set < s
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedBarTree < SymbolType, RankType >::PrefixRankedBarTree ( SymbolType barBase, const RankedTree < > & tree ) : PrefixRankedBarTree ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ), tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ), toPrefixRankedBar ( tree.getContent ( ), barBase ) ) {
+PrefixRankedBarTree < SymbolType, RankType >::PrefixRankedBarTree ( SymbolType barBase, const RankedTree < SymbolType, RankType > & tree ) : PrefixRankedBarTree ( TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ), tree.getAlphabet ( ) + TreeAuxiliary::computeBars ( tree.getAlphabet ( ), barBase ), toPrefixRankedBar ( tree.getContent ( ), barBase ) ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
index 6e19b4a2f60204b0714984531c5084f9e1a13d99..e29d8c70817fe312e472989ba3998bca92dee802 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
@@ -48,11 +48,11 @@ public:
 	explicit PrefixRankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > nonlinearVariables, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > nonlinearVariables, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
-	explicit PrefixRankedNonlinearPattern ( const PrefixRankedTree < > & tree );
-	explicit PrefixRankedNonlinearPattern ( const PrefixRankedPattern < > & tree );
-	explicit PrefixRankedNonlinearPattern ( const RankedTree < > & tree );
-	explicit PrefixRankedNonlinearPattern ( const RankedPattern < > & tree );
-	explicit PrefixRankedNonlinearPattern ( const RankedNonlinearPattern < > & tree );
+	explicit PrefixRankedNonlinearPattern ( const PrefixRankedTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedNonlinearPattern ( const PrefixRankedPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedNonlinearPattern ( const RankedTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedNonlinearPattern ( const RankedPattern < SymbolType, RankType > & tree );
+	explicit PrefixRankedNonlinearPattern ( const RankedNonlinearPattern < SymbolType, RankType > & tree );
 
 	virtual RankedTreeBase * clone ( ) const;
 	virtual RankedTreeBase * plunder ( ) &&;
@@ -136,23 +136,23 @@ PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPatt
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const PrefixRankedTree < > & tree ) : PrefixRankedNonlinearPattern ( alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ), tree.getContent ( ) ) {
+PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const PrefixRankedTree < SymbolType, RankType > & tree ) : PrefixRankedNonlinearPattern ( alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ), tree.getContent ( ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const PrefixRankedPattern < > & tree ) : PrefixRankedNonlinearPattern ( tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ), tree.getContent ( ) ) {
+PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const PrefixRankedPattern < SymbolType, RankType > & tree ) : PrefixRankedNonlinearPattern ( tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ), tree.getContent ( ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const RankedTree < > & tree ) : PrefixRankedNonlinearPattern ( alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
+PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const RankedTree < SymbolType, RankType > & tree ) : PrefixRankedNonlinearPattern ( alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), { }, tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const RankedPattern < > & tree ) : PrefixRankedNonlinearPattern ( tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
+PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const RankedPattern < SymbolType, RankType > & tree ) : PrefixRankedNonlinearPattern ( tree.getSubtreeWildcard ( ), { }, tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const RankedNonlinearPattern < > & tree ) : PrefixRankedNonlinearPattern ( tree.getSubtreeWildcard ( ), tree.getNonlinearVariables ( ), tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
+PrefixRankedNonlinearPattern < SymbolType, RankType >::PrefixRankedNonlinearPattern ( const RankedNonlinearPattern < SymbolType, RankType > & tree ) : PrefixRankedNonlinearPattern ( tree.getSubtreeWildcard ( ), tree.getNonlinearVariables ( ), tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.h b/alib2data/src/tree/ranked/PrefixRankedPattern.h
index b00f9fb82dfae41b3d3714fab32af35a3e3b227b..2480d6a81db15a129aee280ea39cd367093ffc80 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.h
@@ -46,8 +46,8 @@ class PrefixRankedPattern : public RankedTreeBase, public std::Components < Pref
 public:
 	explicit PrefixRankedPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
-	explicit PrefixRankedPattern ( const PrefixRankedTree < > & tree );
-	explicit PrefixRankedPattern ( const RankedPattern < > & tree );
+	explicit PrefixRankedPattern ( const PrefixRankedTree < SymbolType, RankType > & tree );
+	explicit PrefixRankedPattern ( const RankedPattern < SymbolType, RankType > & tree );
 
 	virtual RankedTreeBase * clone ( ) const;
 	virtual RankedTreeBase * plunder ( ) &&;
@@ -120,11 +120,11 @@ PrefixRankedPattern < SymbolType, RankType >::PrefixRankedPattern ( std::ranked_
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedPattern < SymbolType, RankType >::PrefixRankedPattern ( const PrefixRankedTree < > & tree ) : PrefixRankedPattern ( alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree.getAlphabet ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, tree.getContent ( ) ) {
+PrefixRankedPattern < SymbolType, RankType >::PrefixRankedPattern ( const PrefixRankedTree < SymbolType, RankType > & tree ) : PrefixRankedPattern ( alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ), tree.getAlphabet ( ) + std::set < std::ranked_symbol < SymbolType, RankType > > { alphabet::SubtreeWildcardSymbol::instance < std::ranked_symbol < SymbolType, RankType > > ( ) }, tree.getContent ( ) ) {
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedPattern < SymbolType, RankType >::PrefixRankedPattern ( const RankedPattern < > & tree ) : PrefixRankedPattern ( tree.getSubtreeWildcard ( ), tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
+PrefixRankedPattern < SymbolType, RankType >::PrefixRankedPattern ( const RankedPattern < SymbolType, RankType > & tree ) : PrefixRankedPattern ( tree.getSubtreeWildcard ( ), tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.h b/alib2data/src/tree/ranked/PrefixRankedTree.h
index bc5ebc06e1de4deb610672a89c5bfdedf318d5b8..fcb73f78e0b4599c04ffa1d8fe081527cfb587b8 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.h
@@ -43,7 +43,7 @@ class PrefixRankedTree : public RankedTreeBase, public std::Components < PrefixR
 public:
 	explicit PrefixRankedTree ( std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::vector < std::ranked_symbol < SymbolType, RankType > > data );
 	explicit PrefixRankedTree ( std::vector < std::ranked_symbol < SymbolType, RankType > > data );
-	explicit PrefixRankedTree ( const RankedTree < > & tree );
+	explicit PrefixRankedTree ( const RankedTree < SymbolType, RankType > & tree );
 
 	virtual RankedTreeBase * clone ( ) const;
 	virtual RankedTreeBase * plunder ( ) &&;
@@ -111,7 +111,7 @@ PrefixRankedTree < SymbolType, RankType >::PrefixRankedTree ( std::vector < std:
 }
 
 template < class SymbolType, class RankType >
-PrefixRankedTree < SymbolType, RankType >::PrefixRankedTree ( const RankedTree < > & tree ) : PrefixRankedTree ( tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
+PrefixRankedTree < SymbolType, RankType >::PrefixRankedTree ( const RankedTree < SymbolType, RankType > & tree ) : PrefixRankedTree ( tree.getAlphabet ( ), toPrefixRanked ( tree.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.h b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
index 41856f92856fd2f6631f2c91b153dc8997e36c9b..464c70c8c57cf6474111e12165131597dcc46034 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
@@ -59,7 +59,7 @@ public:
 	explicit RankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > nonlinearVariables, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::tree < std::ranked_symbol < SymbolType, RankType > > pattern );
 	explicit RankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > nonlinearVariables, std::tree < std::ranked_symbol < SymbolType, RankType > > pattern );
 	explicit RankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::tree < std::ranked_symbol < SymbolType, RankType > > pattern );
-	explicit RankedNonlinearPattern ( const UnrankedNonlinearPattern < > & other );
+	explicit RankedNonlinearPattern ( const UnrankedNonlinearPattern < SymbolType > & other );
 
 	/**
 	 * @return Root node of the regular expression pattern
@@ -141,7 +141,7 @@ RankedNonlinearPattern < SymbolType, RankType >::RankedNonlinearPattern ( std::r
 }
 
 template < class SymbolType, class RankType >
-RankedNonlinearPattern < SymbolType, RankType >::RankedNonlinearPattern ( const UnrankedNonlinearPattern < > & other ) : RankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > ( other.getSubtreeWildcard ( ), 0 ), TreeAuxiliary::toRankedTree < SymbolType, RankType > ( other.getContent ( ) ) ) {
+RankedNonlinearPattern < SymbolType, RankType >::RankedNonlinearPattern ( const UnrankedNonlinearPattern < SymbolType > & other ) : RankedNonlinearPattern ( std::ranked_symbol < SymbolType, RankType > ( other.getSubtreeWildcard ( ), 0 ), TreeAuxiliary::toRankedTree < SymbolType, RankType > ( other.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/ranked/RankedPattern.h b/alib2data/src/tree/ranked/RankedPattern.h
index 7bdd11ddfdce0a1c847dd6d7161de3b65bf7f944..527ff6dd08c5cce44fc4e6c6b9b19aa66b3d2526 100644
--- a/alib2data/src/tree/ranked/RankedPattern.h
+++ b/alib2data/src/tree/ranked/RankedPattern.h
@@ -57,7 +57,7 @@ public:
 
 	explicit RankedPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::tree < std::ranked_symbol < SymbolType, RankType > > pattern );
 	explicit RankedPattern ( std::ranked_symbol < SymbolType, RankType > subtreeWildcard, std::tree < std::ranked_symbol < SymbolType, RankType > > pattern );
-	explicit RankedPattern ( const UnrankedPattern < > & other );
+	explicit RankedPattern ( const UnrankedPattern < SymbolType > & other );
 
 	/**
 	 * @return Root node of the regular expression pattern
@@ -131,7 +131,7 @@ RankedPattern < SymbolType, RankType >::RankedPattern ( std::ranked_symbol < Sym
 }
 
 template < class SymbolType, class RankType >
-RankedPattern < SymbolType, RankType >::RankedPattern ( const UnrankedPattern < > & other ) : RankedPattern ( std::ranked_symbol < SymbolType, RankType > ( other.getSubtreeWildcard ( ), 0 ), TreeAuxiliary::toRankedTree < SymbolType, RankType > ( other.getContent ( ) ) ) {
+RankedPattern < SymbolType, RankType >::RankedPattern ( const UnrankedPattern < SymbolType > & other ) : RankedPattern ( std::ranked_symbol < SymbolType, RankType > ( other.getSubtreeWildcard ( ), 0 ), TreeAuxiliary::toRankedTree < SymbolType, RankType > ( other.getContent ( ) ) ) {
 }
 
 template < class SymbolType, class RankType >
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
index 073b450a8192410fb4beb1258c17b2b5bd21bc68..d6e45fed681bcf6bb72377bc155f692310846049 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
@@ -56,7 +56,8 @@ public:
 	explicit UnrankedNonlinearPattern ( SymbolType subtreeWildcard, std::set < SymbolType > nonlinearVariables, std::set < SymbolType > alphabet, std::tree < SymbolType > pattern );
 	explicit UnrankedNonlinearPattern ( SymbolType subtreeWildcard, std::set < SymbolType > nonlinearVariables, std::tree < SymbolType > pattern );
 	explicit UnrankedNonlinearPattern ( SymbolType subtreeWildcard, std::tree < SymbolType > pattern );
-	explicit UnrankedNonlinearPattern ( const RankedNonlinearPattern < > & other );
+	template < class RankType >
+	explicit UnrankedNonlinearPattern ( const RankedNonlinearPattern < SymbolType, RankType > & other );
 
 	/**
 	 * @return Content of the pattern
@@ -143,7 +144,8 @@ UnrankedNonlinearPattern < SymbolType >::UnrankedNonlinearPattern ( SymbolType s
 }
 
 template < class SymbolType >
-UnrankedNonlinearPattern < SymbolType >::UnrankedNonlinearPattern ( const RankedNonlinearPattern < > & other ) : UnrankedNonlinearPattern ( other.getSubtreeWildcard ( ).getSymbol ( ), TreeAuxiliary::unrankSymbols ( other.getAlphabet ( ) ), TreeAuxiliary::toUnrankedTree ( other.getContent ( ) ) ) {
+template < class RankType >
+UnrankedNonlinearPattern < SymbolType >::UnrankedNonlinearPattern ( const RankedNonlinearPattern < SymbolType, RankType > & other ) : UnrankedNonlinearPattern ( other.getSubtreeWildcard ( ).getSymbol ( ), TreeAuxiliary::unrankSymbols ( other.getAlphabet ( ) ), TreeAuxiliary::toUnrankedTree ( other.getContent ( ) ) ) {
 }
 
 template < class SymbolType >
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.h b/alib2data/src/tree/unranked/UnrankedPattern.h
index 9baa2acc4f4a074f713e89377a84b4a0beb677e4..09a89e49f2a28d986572c7ad453cabf51faf1243 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedPattern.h
@@ -54,7 +54,8 @@ public:
 
 	explicit UnrankedPattern ( SymbolType subtreeWildcard, std::set < SymbolType > alphabet, std::tree < SymbolType > pattern );
 	explicit UnrankedPattern ( SymbolType subtreeWildcard, std::tree < SymbolType > pattern );
-	explicit UnrankedPattern ( const RankedPattern < > & other );
+	template < class RankType >
+	explicit UnrankedPattern ( const RankedPattern < SymbolType, RankType > & other );
 
 	/**
 	 * @return Content of the pattern
@@ -127,7 +128,8 @@ UnrankedPattern < SymbolType >::UnrankedPattern ( SymbolType subtreeWildcard, st
 }
 
 template < class SymbolType >
-UnrankedPattern < SymbolType >::UnrankedPattern ( const RankedPattern < > & other ) : UnrankedPattern ( other.getSubtreeWildcard ( ).getSymbol ( ), TreeAuxiliary::unrankSymbols ( other.getAlphabet ( ) ), TreeAuxiliary::toUnrankedTree ( other.getContent ( ) ) ) {
+template < class RankType >
+UnrankedPattern < SymbolType >::UnrankedPattern ( const RankedPattern < SymbolType, RankType > & other ) : UnrankedPattern ( other.getSubtreeWildcard ( ).getSymbol ( ), TreeAuxiliary::unrankSymbols ( other.getAlphabet ( ) ), TreeAuxiliary::toUnrankedTree ( other.getContent ( ) ) ) {
 }
 
 template < class SymbolType >
diff --git a/alib2data/src/tree/unranked/UnrankedTree.h b/alib2data/src/tree/unranked/UnrankedTree.h
index 403bef5a971b3ae5a44a3eb583156c194eddac54..f9a4825b89e9a63be2d271f22ef389f09b0d3d19 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.h
+++ b/alib2data/src/tree/unranked/UnrankedTree.h
@@ -53,7 +53,8 @@ public:
 
 	explicit UnrankedTree ( std::set < SymbolType > alphabet, std::tree < SymbolType > tree );
 	explicit UnrankedTree ( std::tree < SymbolType > tree );
-	explicit UnrankedTree ( const RankedTree < > & other );
+	template < class RankType >
+	explicit UnrankedTree ( const RankedTree < SymbolType, RankType > & other );
 
 	const std::set < SymbolType > & getAlphabet ( ) const {
 		return this->template accessComponent < GeneralAlphabet > ( ).get ( );
@@ -122,7 +123,8 @@ UnrankedTree < SymbolType >::UnrankedTree ( std::tree < SymbolType > pattern ) :
 }
 
 template < class SymbolType >
-UnrankedTree < SymbolType >::UnrankedTree ( const RankedTree < > & other ) : UnrankedTree ( TreeAuxiliary::unrankSymbols ( other.getAlphabet ( ) ), TreeAuxiliary::toUnrankedTree ( other.getContent ( ) ) ) {
+template < class RankType >
+UnrankedTree < SymbolType >::UnrankedTree ( const RankedTree < SymbolType, RankType > & other ) : UnrankedTree ( TreeAuxiliary::unrankSymbols ( other.getAlphabet ( ) ), TreeAuxiliary::toUnrankedTree ( other.getContent ( ) ) ) {
 }
 
 template < class SymbolType >