diff --git a/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.cpp b/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.cpp
index f20ba3a504d1cbfcdcbd17343fb9a8e825f394a2..611290913b608db905eac1abf35b58e47eabd893 100644
--- a/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.cpp
+++ b/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.cpp
@@ -10,6 +10,7 @@
 
 #include <exception/AlibException.h>
 #include <tree/ranked/RankedTree.h>
+#include <tree/ranked/PrefixRankedTree.h>
 #include <tree/Tree.h>
 #include <global/GlobalData.h>
 
@@ -34,7 +35,7 @@ tree::RankedNode * ExactSubtreeRepeatsNaive::repeats ( const tree::RankedNode &
 
 	if ( uniqueRepeatId == 0 ) uniqueRepeatId = minId++;
 
-	return new tree::RankedNode ( alphabet::RankedSymbol ( alphabet::symbolFrom ( uniqueRepeatId ), children.size ( ) ), std::move ( children ) );
+	return new tree::RankedNode ( alphabet::RankedSymbol ( alphabet::symbolFrom ( uniqueRepeatId ), node.getSymbol ( ).getRank ( ) ), std::move ( children ) );
 }
 
 tree::RankedTree ExactSubtreeRepeatsNaive::repeats ( const tree::RankedTree & tree ) {
@@ -48,7 +49,38 @@ tree::RankedTree ExactSubtreeRepeatsNaive::repeats ( const tree::RankedTree & tr
 	return res;
 }
 
-auto ExactRepeatsSimpleRankedTree = ExactSubtreeRepeatsNaive::RegistratorWrapper < tree::RankedTree, tree::RankedTree > ( ExactSubtreeRepeatsNaive::getInstance ( ), ExactSubtreeRepeatsNaive::repeats );
+auto ExactRepeatsNaiveRankedTree = ExactSubtreeRepeatsNaive::RegistratorWrapper < tree::RankedTree, tree::RankedTree > ( ExactSubtreeRepeatsNaive::getInstance ( ), ExactSubtreeRepeatsNaive::repeats );
+
+alphabet::RankedSymbol ExactSubtreeRepeatsNaive::repeats ( const std::vector < alphabet::RankedSymbol > & symbols, std::vector < alphabet::RankedSymbol > & res, std::map < std::pair < alphabet::RankedSymbol, std::vector < alphabet::RankedSymbol > >, int > & data, int & minId, int & index ) {
+	int begin = index;
+	std::pair < alphabet::RankedSymbol, std::vector < alphabet::RankedSymbol > > childRepeatsKey ( symbols[begin], std::vector < alphabet::RankedSymbol > ( ) );
+
+	res.push_back ( alphabet::RankedSymbol ( alphabet::symbolFrom ( 0 ), symbols[begin].getRank ( ) ) );
+
+	index++;
+
+	for ( unsigned i = 0; i < symbols[begin].getRank ( ).getData ( ); ++i )
+		childRepeatsKey.second.push_back ( repeats ( symbols, res, data, minId, index ) );
+
+	int & uniqueRepeatId = data[childRepeatsKey];
+
+	if ( uniqueRepeatId == 0 ) uniqueRepeatId = minId++;
+
+	res[begin] = alphabet::RankedSymbol ( alphabet::symbolFrom ( uniqueRepeatId ), symbols[begin].getRank ( ) );
+	return res[begin];
+}
+
+tree::PrefixRankedTree ExactSubtreeRepeatsNaive::repeats ( const tree::PrefixRankedTree & tree ) {
+	int minId = 1;
+	int index = 0;
+	std::vector < alphabet::RankedSymbol > res;
+	std::map < std::pair < alphabet::RankedSymbol, std::vector < alphabet::RankedSymbol > >, int > data;
+
+	repeats ( tree.getContent ( ), res, data, minId, index );
+	return tree::PrefixRankedTree ( res );
+}
+
+auto ExactRepeatsNaivePrefixRankedTree = ExactSubtreeRepeatsNaive::RegistratorWrapper < tree::PrefixRankedTree, tree::PrefixRankedTree > ( ExactSubtreeRepeatsNaive::getInstance ( ), ExactSubtreeRepeatsNaive::repeats );
 
 } /* namespace exact */
 
diff --git a/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.h b/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.h
index 6b7764c6ba319d3001f176b0326abb5124890e6d..c9874bf1fd5021579749e16aa3fc177b37da72f5 100644
--- a/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.h
+++ b/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.h
@@ -24,6 +24,7 @@ namespace exact {
  */
 class ExactSubtreeRepeatsNaive : public std::SingleDispatch < tree::Tree, tree::TreeBase > {
 	static tree::RankedNode * repeats ( const tree::RankedNode & node, std::map < std::pair < alphabet::RankedSymbol, std::vector < alphabet::RankedSymbol > >, int > & data, int & minId );
+	static alphabet::RankedSymbol repeats ( const std::vector < alphabet::RankedSymbol > & symbols, std::vector < alphabet::RankedSymbol > & res, std::map < std::pair < alphabet::RankedSymbol, std::vector < alphabet::RankedSymbol > >, int > & data, int & minId, int & index );
 
 public:
 	/**
@@ -37,6 +38,7 @@ public:
 	 * @return Tree of repeats
 	 */
 	static tree::RankedTree repeats ( const tree::RankedTree & tree );
+	static tree::PrefixRankedTree repeats ( const tree::PrefixRankedTree & tree );
 
 	static ExactSubtreeRepeatsNaive & getInstance ( ) {
 		static ExactSubtreeRepeatsNaive res;