diff --git a/alib2data/src/tree/common/TreeAuxiliary.h b/alib2data/src/tree/common/TreeAuxiliary.h
index 34d219277c6dc8bc204e131bb00234303d3d83ea..b2a900fd0dc6f9b65b9d0b8bedcbd9a2329bb891 100644
--- a/alib2data/src/tree/common/TreeAuxiliary.h
+++ b/alib2data/src/tree/common/TreeAuxiliary.h
@@ -24,6 +24,8 @@ class TreeAuxiliary {
 	template < class SymbolType, class RankType >
 	static void postfixToPrefixInt ( const ext::vector < common::ranked_symbol < SymbolType, RankType > > & src, ext::vector < common::ranked_symbol < SymbolType, RankType > > & dest, unsigned & readIndex );
 
+	template < class SymbolType, class RankType >
+	static ext::tree < common::ranked_symbol < SymbolType, RankType > > prefixToTreeInt ( const ext::vector < common::ranked_symbol < SymbolType, RankType > > & from, unsigned & index );
 public:
 	template < class SymbolType, class RankType >
 	static ext::set < SymbolType > unrankSymbols ( const ext::set < common::ranked_symbol < SymbolType, RankType > > & alphabet );
@@ -37,6 +39,8 @@ public:
 
 	template < class SymbolType, class RankType >
 	static ext::tree < common::ranked_symbol < SymbolType, RankType > > postfixToTree (const ext::vector < common::ranked_symbol < SymbolType, RankType > > & from);
+	template < class SymbolType, class RankType >
+	static ext::tree < common::ranked_symbol < SymbolType, RankType > > prefixToTree (const ext::vector < common::ranked_symbol < SymbolType, RankType > > & from);
 
 	template < class SymbolType, class RankType >
 	static ext::vector < common::ranked_symbol < SymbolType, RankType > > postfixToPrefix ( const ext::vector < common::ranked_symbol < SymbolType, RankType > > & src );
@@ -106,6 +110,24 @@ ext::tree < common::ranked_symbol < SymbolType, RankType > > TreeAuxiliary::post
 	return tree_stack.top ( );
 }
 
+template < class SymbolType, class RankType >
+ext::tree < common::ranked_symbol < SymbolType, RankType > > TreeAuxiliary::prefixToTreeInt ( const ext::vector < common::ranked_symbol < SymbolType, RankType > > & from, unsigned & index ) {
+	const common::ranked_symbol < SymbolType, RankType > & x = from [ index ++ ];
+
+	ext::vector < ext::tree < common::ranked_symbol < SymbolType, RankType > > > children;
+
+	for ( unsigned i = 0; i < ( unsigned ) x.getRank ( ); ++i ) {
+		children.push_back ( prefixToTreeInt ( from, index ) );
+	}
+
+	return ext::tree < common::ranked_symbol < SymbolType, RankType > > ( x, std::move ( children ) );
+}
+
+template < class SymbolType, class RankType >
+ext::tree < common::ranked_symbol < SymbolType, RankType > > TreeAuxiliary::prefixToTree ( const ext::vector < common::ranked_symbol < SymbolType, RankType > > & from ) {
+	unsigned index = 0;
+	return prefixToTreeInt ( from, index );
+}
 
 template < class SymbolType, class RankType >
 ext::tree < SymbolType > TreeAuxiliary::rankedToUnranked ( const ext::tree < common::ranked_symbol < SymbolType, RankType > > & tree ) {
diff --git a/alib2data/src/tree/ranked/RankedTree.cpp b/alib2data/src/tree/ranked/RankedTree.cpp
index 0d48b48f161a222d73895368bbee3474a71fbf00..cadc5d86add13dd94eaa2ed533db346e9eeb8993 100644
--- a/alib2data/src/tree/ranked/RankedTree.cpp
+++ b/alib2data/src/tree/ranked/RankedTree.cpp
@@ -21,5 +21,6 @@ static auto valuePrinter = registration::ValuePrinterRegister < tree::RankedTree
 
 static auto RankedTreeFromUnrankedTree = registration::CastRegister < tree::RankedTree < >, tree::UnrankedTree < > > ( );
 static auto RankedTreeFromPostfixRankedTree = registration::CastRegister < tree::RankedTree < >, tree::PostfixRankedTree < > > ( );
+static auto RankedTreeFromPrefixRankedTree = registration::CastRegister < tree::RankedTree < >, tree::PrefixRankedTree < > > ( );
 
 } /* namespace */
diff --git a/alib2data/src/tree/ranked/RankedTree.h b/alib2data/src/tree/ranked/RankedTree.h
index 3e211ba48fccce5d689d70f1fc040e06a452e738..5c2af8af41a2a72f9470d7a0473788d06f4d2a1f 100644
--- a/alib2data/src/tree/ranked/RankedTree.h
+++ b/alib2data/src/tree/ranked/RankedTree.h
@@ -54,6 +54,7 @@ class RankedTree;
 
 #include "../unranked/UnrankedTree.h"
 #include "PostfixRankedTree.h"
+#include "PrefixRankedTree.h"
 
 namespace tree {
 
@@ -122,10 +123,17 @@ public:
 	/**
 	 * \brief Creates a new instance of the tree based on the PostfixRankedTree. The natural representation is recreated from postfix representation.
 	 *
-	 * \param other RankedTree representation of a tree.
+	 * \param other PostfixRankedTree representation of a tree.
 	 */
 	explicit RankedTree ( const PostfixRankedTree < SymbolType, RankType > & other );
 
+	/**
+	 * \brief Creates a new instance of the tree based on the PrefixRankedTree. The natural representation is recreated from prefix representation.
+	 *
+	 * \param other PrefixRankedTree representation of a tree.
+	 */
+	explicit RankedTree ( const PrefixRankedTree < SymbolType, RankType > & other );
+
 	/**
 	 * @copydoc tree::TreeBase::clone ( ) const &
 	 */
@@ -245,6 +253,10 @@ template < class SymbolType, class RankType >
 RankedTree < SymbolType, RankType >::RankedTree ( const PostfixRankedTree < SymbolType, RankType > & other) : RankedTree ( TreeAuxiliary::postfixToTree < SymbolType, RankType > ( other.getContent ( ) ) ) {
 }
 
+template < class SymbolType, class RankType >
+RankedTree < SymbolType, RankType >::RankedTree ( const PrefixRankedTree < SymbolType, RankType > & other) : RankedTree ( TreeAuxiliary::prefixToTree < SymbolType, RankType > ( other.getContent ( ) ) ) {
+}
+
 template < class SymbolType, class RankType >
 TreeBase * RankedTree < SymbolType, RankType >::clone ( ) const & {
 	return new RankedTree ( * this );