diff --git a/alib2algo/src/arbology/exact/SubtreeJumpTable.cpp b/alib2algo/src/arbology/exact/SubtreeJumpTable.cpp
index d6b5fc604ab9ce9d0a6e4ba7857698bbc52b22ed..39996c9abbfc770ef2101d15f79500bb58043fca 100644
--- a/alib2algo/src/arbology/exact/SubtreeJumpTable.cpp
+++ b/alib2algo/src/arbology/exact/SubtreeJumpTable.cpp
@@ -8,8 +8,8 @@
 #include "SubtreeJumpTable.h"
 
 #include <exception/AlibException.h>
+#include <tree/ranked/PrefixRankedTree.h>
 #include <tree/ranked/PrefixRankedBarTree.h>
-#include <tree/ranked/PrefixRankedBarPattern.h>
 #include <alphabet/RankedSymbol.h>
 
 #include <map>
@@ -30,6 +30,18 @@ std::vector < int > SubtreeJumpTable::compute ( const tree::PrefixRankedBarTree
 	return res;
 }
 
+auto SubtreeSizesPrefixRankedBarTree = SubtreeJumpTable::RegistratorWrapper < std::vector < int >, tree::PrefixRankedBarTree > ( SubtreeJumpTable::getInstance ( ), SubtreeJumpTable::compute );
+
+std::vector < int > SubtreeJumpTable::compute ( const tree::PrefixRankedTree & subject ) {
+	std::vector < int > res;
+
+	buildDataPointers ( res, subject, 0 );
+
+	return res;
+}
+
+auto SubtreeSizesPrefixRankedTree = SubtreeJumpTable::RegistratorWrapper < std::vector < int >, tree::PrefixRankedTree > ( SubtreeJumpTable::getInstance ( ), SubtreeJumpTable::compute );
+
 /**
  * used to compute subtree jump table.
  * @param begin - index of a root node of a complete subtree to process
@@ -49,7 +61,27 @@ int SubtreeJumpTable::buildDataPointers ( std::vector < int > & res, const tree:
 	return index;
 }
 
-auto SubtreeSizesPrefixRankedBarTree = SubtreeJumpTable::RegistratorWrapper < std::vector < int >, tree::PrefixRankedBarTree > ( SubtreeJumpTable::getInstance ( ), SubtreeJumpTable::compute );
+/**
+ * used to compute subtree jump table.
+ * @param begin - index of a root node of a complete subtree to process
+ * @return index, increased by one, of the last node in the subtree starting at index begin
+ */
+int SubtreeJumpTable::buildDataPointers ( std::vector < int > & res, const tree::PrefixRankedTree & subject, int begin ) {
+	for ( unsigned i = 0; i < subject.getContent ( ).size ( ); i++ )
+		res.push_back ( 0 );
+
+	return buildDataPointersInternal ( res, subject, begin );
+}
+
+int SubtreeJumpTable::buildDataPointersInternal ( std::vector < int > & res, const tree::PrefixRankedTree & subject, int begin ) {
+	int index = begin + 1;
+
+	for ( unsigned i = 0; i < subject.getContent ( )[begin].getRank ( ).getData ( ); i++ )
+		index = buildDataPointersInternal ( res, subject, index );
+
+	res[begin] = index;
+	return index;
+}
 
 } /* namespace exact */
 
diff --git a/alib2algo/src/arbology/exact/SubtreeJumpTable.h b/alib2algo/src/arbology/exact/SubtreeJumpTable.h
index 37e588c8748d628ced0a3662efc383d758379c5e..526a22d71050a6be01ca17fe72cf6d5a20cab739 100644
--- a/alib2algo/src/arbology/exact/SubtreeJumpTable.h
+++ b/alib2algo/src/arbology/exact/SubtreeJumpTable.h
@@ -24,8 +24,11 @@ public:
 	static std::vector < int > compute ( const tree::RankedTreeWrapper & subject );
 
 	static std::vector < int > compute ( const tree::PrefixRankedBarTree & subject );
+	static std::vector < int > compute ( const tree::PrefixRankedTree & subject );
 
 	static int buildDataPointers ( std::vector < int > & res, const tree::PrefixRankedBarTree & subject, int begin );
+	static int buildDataPointers ( std::vector < int > & res, const tree::PrefixRankedTree & subject, int begin );
+	static int buildDataPointersInternal ( std::vector < int > & res, const tree::PrefixRankedTree & subject, int begin );
 
 	static SubtreeJumpTable & getInstance ( ) {
 		static SubtreeJumpTable res;