diff --git a/alib2raw/src/tree/TreeFromRawParser.cpp b/alib2raw/src/tree/TreeFromRawParser.cpp
index d375f36d35a0c8e87eeca5717dfdcdadc3ec7636..96ab094461ac7b8be432189ff8754312de1a8d32 100644
--- a/alib2raw/src/tree/TreeFromRawParser.cpp
+++ b/alib2raw/src/tree/TreeFromRawParser.cpp
@@ -8,6 +8,7 @@
 #include <sax/FromXMLParserHelper.h>
 #include <exception/CommonException.h>
 #include <tree/Tree.h>
+#include <tree/RankedTreeWrapper.h>
 #include <tree/TreeClasses.h>
 #include <alphabet/Symbol.h>
 #include <alphabet/BarSymbol.h>
@@ -33,6 +34,22 @@ Tree TreeFromRawParser::parseTree(std::deque<sax::Token>::iterator& input, const
 	throw exception::CommonException("Invalid input");
 }
 
+RankedTreeWrapper TreeFromRawParser::parseRankedTree(std::deque<sax::Token>::iterator& input) const {
+	return parseRankedTree(input, std::set<FEATURES>({FEATURES::RANKED_TREE, FEATURES::PREFIX_RANKED_TREE, FEATURES::PREFIX_RANKED_BAR_TREE}));
+}
+
+RankedTreeWrapper TreeFromRawParser::parseRankedTree(std::deque<sax::Token>::iterator& input, const std::set<FEATURES>& features) const {
+	UnrankedTree < alphabet::Symbol > tree(this->parseContent(input));
+
+	if(features.count(FEATURES::PREFIX_RANKED_TREE)) return RankedTreeWrapper{PrefixRankedTree < alphabet::Symbol, primitive::Unsigned > {RankedTree < alphabet::Symbol, primitive::Unsigned > {tree}}};
+
+	if(features.count(FEATURES::PREFIX_RANKED_BAR_TREE)) return RankedTreeWrapper{PrefixRankedBarTree < alphabet::Symbol, primitive::Unsigned > {alphabet::Symbol{alphabet::BarSymbol{}}, RankedTree < alphabet::Symbol, primitive::Unsigned > {tree}}};
+
+	if(features.count(FEATURES::RANKED_TREE)) return RankedTreeWrapper{RankedTree < alphabet::Symbol, primitive::Unsigned > {tree}};
+
+	throw exception::CommonException("Invalid input");
+}
+
 std::tree < alphabet::Symbol > TreeFromRawParser::parseContent(std::deque<sax::Token>::iterator& input) const {
 	if (sax::FromXMLParserHelper::isTokenType(input, sax::Token::TokenType::START_ELEMENT)) {
 		std::tree < alphabet::Symbol > node ( alphabet::Symbol(sax::FromXMLParserHelper::popTokenData(input, sax::Token::TokenType::START_ELEMENT)), {});
diff --git a/alib2raw/src/tree/TreeFromRawParser.h b/alib2raw/src/tree/TreeFromRawParser.h
index e4501fe06e81e8a9254352072fac785262be1b3a..ef73bff86ab4ec136fe33a42d494c274b8cebf81 100644
--- a/alib2raw/src/tree/TreeFromRawParser.h
+++ b/alib2raw/src/tree/TreeFromRawParser.h
@@ -24,6 +24,9 @@ public:
 	Tree parseTree(std::deque<sax::Token>::iterator& input) const;
 	Tree parseTree(std::deque<sax::Token>::iterator& input, const std::set<FEATURES>& features) const;
 
+	RankedTreeWrapper parseRankedTree(std::deque<sax::Token>::iterator& input) const;
+	RankedTreeWrapper parseRankedTree(std::deque<sax::Token>::iterator& input, const std::set<FEATURES>& features) const;
+
 private:
 	std::tree < alphabet::Symbol > parseContent(std::deque<sax::Token>::iterator& input) const;
 };