diff --git a/aarbology2/src/aarbology.cpp b/aarbology2/src/aarbology.cpp
index 4e31b5ede05bca4f91581797e31dcf895a3b92b7..10c6274c940c5cbddfe4b9b5338c5371790cccf8 100644
--- a/aarbology2/src/aarbology.cpp
+++ b/aarbology2/src/aarbology.cpp
@@ -23,6 +23,7 @@
 #include <arbology/exact/ExactPatternMatchingAutomaton.h>
 #include <arbology/exact/ExactSubtreeAutomaton.h>
 #include <arbology/exact/ExactTreePatternAutomaton.h>
+#include <arbology/transform/BeginToEndIndex.h>
 #include <chrono>
 
 int main ( int argc, char * argv[] ) {
@@ -49,6 +50,9 @@ int main ( int argc, char * argv[] ) {
 		TCLAP::MultiArg < std::string > pattern ( "p", "pattern", "Pattern tree from file", false, "file" );
 		cmd.add ( pattern );
 
+		TCLAP::SwitchArg ends ( "e", "ends", "Return occurrences as end indexes when applicable", false );
+		cmd.add ( ends );
+
 		TCLAP::SwitchArg measure ( "m", "measure", "Measure times", false );
 		cmd.add ( measure );
 
@@ -121,6 +125,8 @@ int main ( int argc, char * argv[] ) {
 			std::chrono::measurements::start ( "Algorithm", std::chrono::measurements::Type::MAIN );
 
 			std::set < unsigned > res = arbology::exact::ExactSubtreeMatch::match ( subject, pattern );
+			if( ends.isSet ( ) )
+				res = arbology::transform::BeginToEndIndex::transform(subject, res);
 
 			std::chrono::measurements::end ( );
 			std::chrono::measurements::start ( "Output write", std::chrono::measurements::Type::AUXILARY );
@@ -134,6 +140,8 @@ int main ( int argc, char * argv[] ) {
 			std::chrono::measurements::start ( "Algorithm", std::chrono::measurements::Type::MAIN );
 
 			std::set < unsigned > res = arbology::exact::ExactPatternMatch::match ( subject, pattern );
+			if( ends.isSet ( ) )
+				res = arbology::transform::BeginToEndIndex::transform(subject, res);
 
 			std::chrono::measurements::end ( );
 			std::chrono::measurements::start ( "Output write", std::chrono::measurements::Type::AUXILARY );
@@ -147,6 +155,8 @@ int main ( int argc, char * argv[] ) {
 			std::chrono::measurements::start ( "Algorithm", std::chrono::measurements::Type::MAIN );
 
 			std::set < unsigned > res = arbology::exact::BoyerMooreHorspool::match ( subject, pattern );
+			if( ends.isSet ( ) )
+				res = arbology::transform::BeginToEndIndex::transform(subject, res);
 
 			std::chrono::measurements::end ( );
 			std::chrono::measurements::start ( "Output write", std::chrono::measurements::Type::AUXILARY );
@@ -160,6 +170,8 @@ int main ( int argc, char * argv[] ) {
 			std::chrono::measurements::start ( "Algorithm", std::chrono::measurements::Type::MAIN );
 
 			std::set < unsigned > res = arbology::exact::KnuthMorrisPratt::match ( subject, pattern );
+			if( ends.isSet ( ) )
+				res = arbology::transform::BeginToEndIndex::transform(subject, res);
 
 			std::chrono::measurements::end ( );
 			std::chrono::measurements::start ( "Output write", std::chrono::measurements::Type::AUXILARY );
diff --git a/alib2algo/src/arbology/transform/BeginToEndIndex.cpp b/alib2algo/src/arbology/transform/BeginToEndIndex.cpp
index efd79314f03f72a45c71bb48b37af90d0bdea12a..f5dfd25b8a68e7c2cf6e84710718b9ad73b6abbc 100644
--- a/alib2algo/src/arbology/transform/BeginToEndIndex.cpp
+++ b/alib2algo/src/arbology/transform/BeginToEndIndex.cpp
@@ -23,7 +23,7 @@ std::set < unsigned > BeginToEndIndex::transform ( const tree::Tree & subject, c
 }
 
 std::set < unsigned > BeginToEndIndex::transform ( const tree::PrefixRankedBarTree & subject, const std::set < unsigned > & indexes ) {
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::vector < int > subjectSubtreeJumpTable = exact::SubtreeJumpTable::compute ( subject );
 	std::set < unsigned > res;
 
 	for ( unsigned index : indexes )
@@ -35,7 +35,7 @@ std::set < unsigned > BeginToEndIndex::transform ( const tree::PrefixRankedBarTr
 auto BeginToEndIndexPrefixRankedBarTreePrefixRankedBarTree = BeginToEndIndex::RegistratorWrapper < std::set < unsigned >, tree::PrefixRankedBarTree > ( BeginToEndIndex::getInstance ( ), BeginToEndIndex::transform );
 
 std::set < unsigned > BeginToEndIndex::transform ( const tree::PrefixRankedTree & subject, const std::set < unsigned > & indexes ) {
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::vector < int > subjectSubtreeJumpTable = exact::SubtreeJumpTable::compute ( subject );
 	std::set < unsigned > res;
 
 	for ( unsigned index : indexes )