diff --git a/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.cpp b/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.cpp
index 611290913b608db905eac1abf35b58e47eabd893..06548909652407b5257353ec665a72f2d90056d8 100644
--- a/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.cpp
+++ b/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.cpp
@@ -11,6 +11,7 @@
 #include <exception/AlibException.h>
 #include <tree/ranked/RankedTree.h>
 #include <tree/ranked/PrefixRankedTree.h>
+#include <tree/ranked/PrefixRankedBarTree.h>
 #include <tree/Tree.h>
 #include <global/GlobalData.h>
 
@@ -51,7 +52,7 @@ tree::RankedTree ExactSubtreeRepeatsNaive::repeats ( const tree::RankedTree & tr
 
 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 ) {
+alphabet::RankedSymbol ExactSubtreeRepeatsNaive::repeatsPrefixRanked ( 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 > ( ) );
 
@@ -60,7 +61,7 @@ alphabet::RankedSymbol ExactSubtreeRepeatsNaive::repeats ( const std::vector < a
 	index++;
 
 	for ( unsigned i = 0; i < symbols[begin].getRank ( ).getData ( ); ++i )
-		childRepeatsKey.second.push_back ( repeats ( symbols, res, data, minId, index ) );
+		childRepeatsKey.second.push_back ( repeatsPrefixRanked ( symbols, res, data, minId, index ) );
 
 	int & uniqueRepeatId = data[childRepeatsKey];
 
@@ -76,12 +77,46 @@ tree::PrefixRankedTree ExactSubtreeRepeatsNaive::repeats ( const tree::PrefixRan
 	std::vector < alphabet::RankedSymbol > res;
 	std::map < std::pair < alphabet::RankedSymbol, std::vector < alphabet::RankedSymbol > >, int > data;
 
-	repeats ( tree.getContent ( ), res, data, minId, index );
+	repeatsPrefixRanked ( tree.getContent ( ), res, data, minId, index );
 	return tree::PrefixRankedTree ( res );
 }
 
 auto ExactRepeatsNaivePrefixRankedTree = ExactSubtreeRepeatsNaive::RegistratorWrapper < tree::PrefixRankedTree, tree::PrefixRankedTree > ( ExactSubtreeRepeatsNaive::getInstance ( ), ExactSubtreeRepeatsNaive::repeats );
 
+alphabet::RankedSymbol ExactSubtreeRepeatsNaive::repeatsPrefixRankedBar ( 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 ( repeatsPrefixRankedBar ( symbols, res, data, minId, index ) );
+
+	int & uniqueRepeatId = data[childRepeatsKey];
+
+	if ( uniqueRepeatId == 0 ) uniqueRepeatId = minId++;
+
+	res[begin] = alphabet::RankedSymbol ( alphabet::symbolFrom ( uniqueRepeatId ), symbols[begin].getRank ( ) );
+	res.push_back ( symbols[index] );
+	index++;
+
+	return res[begin];
+}
+
+tree::PrefixRankedBarTree ExactSubtreeRepeatsNaive::repeats ( const tree::PrefixRankedBarTree & tree ) {
+	int minId = 1;
+	int index = 0;
+	std::vector < alphabet::RankedSymbol > res;
+	std::map < std::pair < alphabet::RankedSymbol, std::vector < alphabet::RankedSymbol > >, int > data;
+
+	repeatsPrefixRankedBar ( tree.getContent ( ), res, data, minId, index );
+	return tree::PrefixRankedBarTree ( tree.getBarSymbol ( ), res );
+}
+
+auto ExactRepeatsNaivePrefixRankedBarTree = ExactSubtreeRepeatsNaive::RegistratorWrapper < tree::PrefixRankedBarTree, tree::PrefixRankedBarTree > ( ExactSubtreeRepeatsNaive::getInstance ( ), ExactSubtreeRepeatsNaive::repeats );
+
 } /* namespace exact */
 
 } /* namespace arbology */
diff --git a/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.h b/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.h
index c9874bf1fd5021579749e16aa3fc177b37da72f5..f2d3f837cde9cbec022e3e30f631a05640b78089 100644
--- a/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.h
+++ b/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.h
@@ -24,7 +24,8 @@ 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 );
+	static alphabet::RankedSymbol repeatsPrefixRanked ( 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 );
+	static alphabet::RankedSymbol repeatsPrefixRankedBar ( 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:
 	/**
@@ -39,6 +40,7 @@ public:
 	 */
 	static tree::RankedTree repeats ( const tree::RankedTree & tree );
 	static tree::PrefixRankedTree repeats ( const tree::PrefixRankedTree & tree );
+	static tree::PrefixRankedBarTree repeats ( const tree::PrefixRankedBarTree & tree );
 
 	static ExactSubtreeRepeatsNaive & getInstance ( ) {
 		static ExactSubtreeRepeatsNaive res;