diff --git a/alib2data/src/tree/common/TreeAuxiliary.h b/alib2data/src/tree/common/TreeAuxiliary.h
index ed61d4115ebf238592cf13e4e232d8dc645d22ac..c9b7ae16f6edb4b3459b3df3268ffa043b474080 100644
--- a/alib2data/src/tree/common/TreeAuxiliary.h
+++ b/alib2data/src/tree/common/TreeAuxiliary.h
@@ -11,6 +11,7 @@
 #include <set>
 #include <tree>
 #include <algorithm>
+#include <stack>
 #include <alphabet/ranked_symbol.hpp>
 
 namespace tree {
@@ -28,6 +29,8 @@ public:
 	template < class SymbolType, class RankType >
 	static std::tree < std::ranked_symbol < SymbolType, RankType > > toRankedTree ( const std::tree < SymbolType > & from );
 	template < class SymbolType, class RankType >
+	static std::tree < std::ranked_symbol < SymbolType, RankType > > toRankedTree (const std::vector < std::ranked_symbol < SymbolType, RankType > > & from);
+	template < class SymbolType, class RankType >
 	static std::tree < SymbolType > toUnrankedTree ( const std::tree < std::ranked_symbol < SymbolType, RankType > > & from );
 
 };
@@ -58,6 +61,35 @@ std::tree < std::ranked_symbol < SymbolType, RankType > > TreeAuxiliary::toRanke
 	return std::tree < std::ranked_symbol < SymbolType, RankType > > ( std::ranked_symbol < SymbolType, RankType > ( tree.getData ( ), size ), std::move ( children ) );
 }
 
+template < class SymbolType, class RankType >
+std::tree < std::ranked_symbol < SymbolType, RankType > > TreeAuxiliary::toRankedTree ( const std::vector < std::ranked_symbol < SymbolType, RankType > > & from ) {
+
+	std::stack < std::tree < std::ranked_symbol < SymbolType, RankType > > > tree_stack;
+
+	for ( auto x : from ) {
+		if ( ( unsigned ) x.getRank ( ) == 0 ) {
+			tree_stack.push ( std::tree < std::ranked_symbol < SymbolType, RankType > > ( std::ranked_symbol < SymbolType, RankType > ( x.getSymbol ( ), x.getRank ( ) ), std::vector < std::tree < std::ranked_symbol < SymbolType, RankType > > > ( ) ) );
+		} else {
+			unsigned children_size = ( unsigned ) x.getRank ( );
+			std::list < std::tree < std::ranked_symbol < SymbolType, RankType > > > childrenList;
+
+			for ( unsigned i = 0; i < children_size; ++i ) {
+				std::tree < std::ranked_symbol < SymbolType, RankType > > child = tree_stack.top ( );
+				tree_stack.pop ( );
+				childrenList.push_front ( child );
+			}
+
+			std::vector < std::tree < std::ranked_symbol < SymbolType, RankType > > > children {
+				std::begin ( childrenList ), std::end ( childrenList )
+			};
+			tree_stack.push ( std::tree < std::ranked_symbol < SymbolType, RankType > > ( std::ranked_symbol < SymbolType, RankType > ( x.getSymbol ( ), x.getRank ( ) ), std::move ( children ) ) );
+		}
+	}
+
+	return tree_stack.top ( );
+}
+
+
 template < class SymbolType, class RankType >
 std::tree < SymbolType > TreeAuxiliary::toUnrankedTree ( const std::tree < std::ranked_symbol < SymbolType, RankType > > & tree ) {
 	std::vector < std::tree < SymbolType > > children;
diff --git a/alib2data/src/tree/ranked/RankedTree.cpp b/alib2data/src/tree/ranked/RankedTree.cpp
index 6ae1ae25a5b3960815d340c631cf091ac0d1c96c..2da2063c6da2bc9e6d356a2008cf2ea7da5e3147 100644
--- a/alib2data/src/tree/ranked/RankedTree.cpp
+++ b/alib2data/src/tree/ranked/RankedTree.cpp
@@ -19,6 +19,7 @@ auto rankedTreeParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserReg
 auto rankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::RankedTree < > > ();
 
 auto RankedTreeFromUnrankedTree = castApi::CastRegister < ::tree::RankedTree < >, ::tree::UnrankedTree < > > ( );
+auto RankedTreeFromPostfixRankedTree = castApi::CastRegister < ::tree::RankedTree < >, ::tree::PostfixRankedTree < > > ( );
 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 dfe20350070b9dd459d95257a16201d7086daf64..df92d6a98513c4ae7acda8616c7181ef8284ada5 100644
--- a/alib2data/src/tree/ranked/RankedTree.h
+++ b/alib2data/src/tree/ranked/RankedTree.h
@@ -59,6 +59,7 @@ public:
 	explicit RankedTree ( std::set < std::ranked_symbol < SymbolType, RankType > > alphabet, std::tree < std::ranked_symbol < SymbolType, RankType > > tree );
 	explicit RankedTree ( std::tree < std::ranked_symbol < SymbolType, RankType > > tree );
 	explicit RankedTree ( const UnrankedTree < SymbolType > & other );
+	explicit RankedTree ( const PostfixRankedTree < SymbolType, RankType > & other );
 
 	/**
 	 * @return Root node of the regular expression tree
@@ -124,6 +125,7 @@ public:
 } /* namespace tree */
 
 #include "../unranked/UnrankedTree.h"
+#include "PostfixRankedTree.h"
 
 namespace tree {
 
@@ -141,6 +143,10 @@ template < class SymbolType, class RankType >
 RankedTree < SymbolType, RankType >::RankedTree ( const UnrankedTree < SymbolType > & other ) : RankedTree ( TreeAuxiliary::toRankedTree < SymbolType, RankType > ( other.getContent ( ) ) ) {
 }
 
+template < class SymbolType, class RankType >
+RankedTree < SymbolType, RankType >::RankedTree ( const PostfixRankedTree < SymbolType, RankType > & other) : RankedTree ( TreeAuxiliary::toRankedTree < SymbolType, RankType > ( other.getContent ( ) ) ) {
+}
+
 template < class SymbolType, class RankType >
 RankedTreeBase * RankedTree < SymbolType, RankType >::clone ( ) const {
 	return new RankedTree ( * this );