diff --git a/aarbology2/src/aarbology.cpp b/aarbology2/src/aarbology.cpp
index db0043ca7f94b7b4b0c9eb28c15a695d52f10188..b9dd5e16811e3406471a771a1f959d3ed91d0e67 100644
--- a/aarbology2/src/aarbology.cpp
+++ b/aarbology2/src/aarbology.cpp
@@ -28,7 +28,7 @@
 #include <arbology/exact/ExactSubtreeAutomaton.h>
 #include <arbology/exact/ExactTreePatternAutomaton.h>
 #include <arbology/exact/ExactNonlinearTreePatternAutomaton.h>
-#include <arbology/exact/ExactSubtreeRepeatsNaive.h>
+#include <tree/properties/ExactSubtreeRepeatsNaive.h>
 #include <arbology/transform/BeginToEndIndex.h>
 
 int main ( int argc, char * argv[] ) {
@@ -246,7 +246,7 @@ int main ( int argc, char * argv[] ) {
 			measurements::end ( );
 			measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-			tree::Tree res = arbology::exact::ExactSubtreeRepeatsNaive::repeats ( subject );
+			tree::Tree res = tree::properties::ExactSubtreeRepeatsNaive::repeats ( subject );
 
 			measurements::end ( );
 			measurements::start ( "Output write", measurements::Type::AUXILIARY );
diff --git a/alib2algo/src/arbology/exact/BoyerMooreHorspool.cpp b/alib2algo/src/arbology/exact/BoyerMooreHorspool.cpp
index 90d4d1f7eaf2c3b3e64f24017b2ace5e4dbf6335..2df5634ce4a2552b971fdc8044d552d05032b39a 100644
--- a/alib2algo/src/arbology/exact/BoyerMooreHorspool.cpp
+++ b/alib2algo/src/arbology/exact/BoyerMooreHorspool.cpp
@@ -6,9 +6,9 @@
  */
 
 #include "BoyerMooreHorspool.h"
-#include "BadCharacterShiftTable.h"
-#include "SubtreeJumpTable.h"
-#include "ExactSubtreeRepeatsNaive.h"
+#include <tree/properties/BadCharacterShiftTable.h>
+#include <tree/properties/SubtreeJumpTable.h>
+#include <tree/properties/ExactSubtreeRepeatsNaive.h>
 
 #include <tree/Tree.h>
 #include <tree/ranked/PrefixRankedBarTree.h>
@@ -34,8 +34,8 @@ auto BoyerMooreHorspoolPrefixRankedBarTreePrefixRankedBarTree = BoyerMooreHorspo
 
 std::set < unsigned > BoyerMooreHorspool::match ( const tree::PrefixRankedBarTree < > & subject, const tree::PrefixRankedBarPattern < > & pattern ) {
 	std::set < unsigned > occ;
-	std::map < std::ranked_symbol < >, size_t > bcs = BadCharacterShiftTable::bcs ( pattern ); //NOTE: the subjects alphabet must be a subset or equal to the pattern
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::map < std::ranked_symbol < >, size_t > bcs = tree::properties::BadCharacterShiftTable::bcs ( pattern ); //NOTE: the subjects alphabet must be a subset or equal to the pattern
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 
 	 // index to the subject
 	unsigned i = 0;
@@ -77,11 +77,11 @@ auto BoyerMooreHorspoolPrefixRankedBarTreePrefixRankedBarPattern = BoyerMooreHor
 
 std::set < unsigned > BoyerMooreHorspool::match ( const tree::PrefixRankedBarTree < > & subject, const tree::PrefixRankedBarNonlinearPattern < > & pattern ) {
 	std::set < unsigned > occ;
-	std::map < std::ranked_symbol < >, size_t > bcs = BadCharacterShiftTable::bcs ( pattern ); //NOTE: the subjects alphabet must be a subset or equal to the pattern
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::map < std::ranked_symbol < >, size_t > bcs = tree::properties::BadCharacterShiftTable::bcs ( pattern ); //NOTE: the subjects alphabet must be a subset or equal to the pattern
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 	std::map < std::ranked_symbol < >, alphabet::Symbol > variablesSetting;
 
-	tree::PrefixRankedBarTree < > repeats = ExactSubtreeRepeatsNaive::repeats ( subject );
+	tree::PrefixRankedBarTree < > repeats = tree::properties::ExactSubtreeRepeatsNaive::repeats ( subject );
 
 	 // index to the subject
 	unsigned i = 0;
diff --git a/alib2algo/src/arbology/exact/DeadZoneUsingBadCharacterShiftAndBorderArray.cpp b/alib2algo/src/arbology/exact/DeadZoneUsingBadCharacterShiftAndBorderArray.cpp
index e7ceb02e9417d184f93b404397ffd892469a8140..436381fbdf14f41c2ac6a3b02b74af4721b2b4d5 100644
--- a/alib2algo/src/arbology/exact/DeadZoneUsingBadCharacterShiftAndBorderArray.cpp
+++ b/alib2algo/src/arbology/exact/DeadZoneUsingBadCharacterShiftAndBorderArray.cpp
@@ -6,9 +6,9 @@
  */
 
 #include "DeadZoneUsingBadCharacterShiftAndBorderArray.h"
-#include "ReversedBadCharacterShiftTable.h"
-#include "BorderArrayNaive.h"
-#include "SubtreeJumpTable.h"
+#include <tree/properties/ReversedBadCharacterShiftTable.h>
+#include <tree/properties/BorderArrayNaive.h>
+#include <tree/properties/SubtreeJumpTable.h>
 
 #include <tree/Tree.h>
 #include <tree/ranked/PrefixRankedBarTree.h>
@@ -35,9 +35,9 @@ auto DeadZoneUsingBadCharacterShiftAndBorderArrayPrefixRankedBarTreePrefixRanked
 
 std::set < unsigned > DeadZoneUsingBadCharacterShiftAndBorderArray::match ( const tree::PrefixRankedBarTree < > & subject, const tree::PrefixRankedBarPattern < > & pattern ) {
 	std::set < unsigned > occ;
-	std::map < std::ranked_symbol < >, size_t > bbcs = ReversedBadCharacterShiftTable::bcs ( pattern ); // NOTE: the subjects alphabet must be a subset or equal to the pattern
-	std::vector < size_t > fba = BorderArrayNaive::ba ( pattern );
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::map < std::ranked_symbol < >, size_t > bbcs = tree::properties::ReversedBadCharacterShiftTable::bcs ( pattern ); // NOTE: the subjects alphabet must be a subset or equal to the pattern
+	std::vector < size_t > fba = tree::properties::BorderArrayNaive::ba ( pattern );
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 
 	match_rec ( occ, subject, pattern, fba, bbcs, subjectSubtreeJumpTable, 0, subject.getContent ( ).size ( ) - pattern.getContent ( ).size ( ) + 1 );
 	return occ;
@@ -85,9 +85,9 @@ auto DeadZoneUsingBadCharacterShiftAndBorderArrayPrefixRankedTreePrefixRankedTre
 
 std::set < unsigned > DeadZoneUsingBadCharacterShiftAndBorderArray::match ( const tree::PrefixRankedTree < > & subject, const tree::PrefixRankedPattern < > & pattern ) {
 	std::set < unsigned > occ;
-	std::map < std::ranked_symbol < >, size_t > bbcs = ReversedBadCharacterShiftTable::bcs ( pattern ); // NOTE: the subjects alphabet must be a subset or equal to the pattern
-	std::vector < size_t > fba = BorderArrayNaive::ba ( pattern );
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::map < std::ranked_symbol < >, size_t > bbcs = tree::properties::ReversedBadCharacterShiftTable::bcs ( pattern ); // NOTE: the subjects alphabet must be a subset or equal to the pattern
+	std::vector < size_t > fba = tree::properties::BorderArrayNaive::ba ( pattern );
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 
 	match_rec ( occ, subject, pattern, fba, bbcs, subjectSubtreeJumpTable, 0, subject.getContent ( ).size ( ) - pattern.getContent ( ).size ( ) + 1 );
 	return occ;
diff --git a/alib2algo/src/arbology/exact/ExactNonlinearTreePatternAutomaton.cpp b/alib2algo/src/arbology/exact/ExactNonlinearTreePatternAutomaton.cpp
index 46331981f91e71f0029c30d675b3d37afb44de16..f082bec2fd21f5c9458317f2ed2f0bfa4cd837ab 100644
--- a/alib2algo/src/arbology/exact/ExactNonlinearTreePatternAutomaton.cpp
+++ b/alib2algo/src/arbology/exact/ExactNonlinearTreePatternAutomaton.cpp
@@ -11,7 +11,7 @@
 #include <automaton/Automaton.h>
 #include <automaton/PDA/InputDrivenNPDA.h>
 
-#include "ExactSubtreeRepeatsNaive.h"
+#include <tree/properties/ExactSubtreeRepeatsNaive.h>
 
 #include <deque>
 #include <alphabet/RankedSymbol.h>
@@ -62,7 +62,7 @@ automaton::InputDrivenNPDA < > ExactNonlinearTreePatternAutomaton::constructInte
 	alphabet::Symbol S = alphabet::symbolFrom ( 'S' );
 	automaton::InputDrivenNPDA < > res ( label::labelFrom ( 0 ), S );
 
-	tree::PrefixRankedTree < > repeats = ExactSubtreeRepeatsNaive::repeats ( tree );
+	tree::PrefixRankedTree < > repeats = tree::properties::ExactSubtreeRepeatsNaive::repeats ( tree );
 	std::map < alphabet::Symbol, unsigned > repeatsToIds;
 	int maxId = 0;
 
diff --git a/alib2algo/src/arbology/exact/ExactPatternMatch.cpp b/alib2algo/src/arbology/exact/ExactPatternMatch.cpp
index 1d7b5f91a2c4040ec1025c1218621a7165136244..47f61b84088e4386f36507a63f5a5753ce47db9c 100644
--- a/alib2algo/src/arbology/exact/ExactPatternMatch.cpp
+++ b/alib2algo/src/arbology/exact/ExactPatternMatch.cpp
@@ -17,8 +17,8 @@
 #include <tree/ranked/PrefixRankedBarNonlinearPattern.h>
 #include <tree/unranked/UnrankedTree.h>
 #include <tree/unranked/UnrankedPattern.h>
-#include "SubtreeJumpTable.h"
-#include "ExactSubtreeRepeatsNaive.h"
+#include <tree/properties/SubtreeJumpTable.h>
+#include <tree/properties/ExactSubtreeRepeatsNaive.h>
 
 #include <deque>
 #include <foreach>
@@ -131,7 +131,7 @@ std::set < unsigned > ExactPatternMatch::match ( const tree::RankedTree < > & su
 	unsigned i = 0;
 	std::set < unsigned > occ;
 
-	tree::RankedTree < > repeats = ExactSubtreeRepeatsNaive::repeats ( subject );
+	tree::RankedTree < > repeats = tree::properties::ExactSubtreeRepeatsNaive::repeats ( subject );
 
 	matchInternal ( i, occ, subject.getContent ( ), pattern.getContent ( ), pattern.getSubtreeWildcard ( ), pattern.getNonlinearVariables ( ), repeats.getContent ( ) );
 	return occ;
@@ -140,7 +140,7 @@ std::set < unsigned > ExactPatternMatch::match ( const tree::RankedTree < > & su
 auto ExactPatternMatchRankedNonlinearPattern = ExactPatternMatch::RegistratorWrapper < std::set < unsigned >, tree::RankedTree < >, tree::RankedNonlinearPattern < > > ( ExactPatternMatch::match );
 
 std::set < unsigned > ExactPatternMatch::match ( const tree::PrefixRankedTree < > & subject, const tree::PrefixRankedPattern < > & pattern ) {
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 
 	std::set < unsigned > occ;
 
@@ -167,10 +167,10 @@ std::set < unsigned > ExactPatternMatch::match ( const tree::PrefixRankedTree <
 auto ExactPatternMatchPrefixRankedPattern = ExactPatternMatch::RegistratorWrapper < std::set < unsigned >, tree::PrefixRankedTree < >, tree::PrefixRankedPattern < > > ( ExactPatternMatch::match );
 
 std::set < unsigned > ExactPatternMatch::match ( const tree::PrefixRankedTree < > & subject, const tree::PrefixRankedNonlinearPattern < > & pattern ) {
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 	std::map < std::ranked_symbol < >, alphabet::Symbol > variablesSetting;
 
-	tree::PrefixRankedTree < > repeats = ExactSubtreeRepeatsNaive::repeats ( subject );
+	tree::PrefixRankedTree < > repeats = tree::properties::ExactSubtreeRepeatsNaive::repeats ( subject );
 
 	std::set < unsigned > occ;
 
@@ -206,7 +206,7 @@ std::set < unsigned > ExactPatternMatch::match ( const tree::PrefixRankedTree <
 auto ExactPatternMatchPrefixRankedNonlinearPattern = ExactPatternMatch::RegistratorWrapper < std::set < unsigned >, tree::PrefixRankedTree < >, tree::PrefixRankedNonlinearPattern < > > ( ExactPatternMatch::match );
 
 std::set < unsigned > ExactPatternMatch::match ( const tree::PrefixRankedBarTree < > & subject, const tree::PrefixRankedBarPattern < > & pattern ) {
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 
 	std::set < unsigned > occ;
 
@@ -235,10 +235,10 @@ std::set < unsigned > ExactPatternMatch::match ( const tree::PrefixRankedBarTree
 auto ExactPatternMatchPrefixRankedBarPattern = ExactPatternMatch::RegistratorWrapper < std::set < unsigned >, tree::PrefixRankedBarTree < >, tree::PrefixRankedBarPattern < > > ( ExactPatternMatch::match );
 
 std::set < unsigned > ExactPatternMatch::match ( const tree::PrefixRankedBarTree < > & subject, const tree::PrefixRankedBarNonlinearPattern < > & pattern ) {
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 	std::map < std::ranked_symbol < >, alphabet::Symbol > variablesSetting;
 
-	tree::PrefixRankedBarTree < > repeats = ExactSubtreeRepeatsNaive::repeats ( subject );
+	tree::PrefixRankedBarTree < > repeats = tree::properties::ExactSubtreeRepeatsNaive::repeats ( subject );
 
 	std::set < unsigned > occ;
 
diff --git a/alib2algo/src/arbology/exact/ExactPatternMatchingAutomaton.cpp b/alib2algo/src/arbology/exact/ExactPatternMatchingAutomaton.cpp
index d790eab30fc3f1f8187baca753692a9c35c7e882..bb64edba7796ca9662774767a6df9e5f806da014 100644
--- a/alib2algo/src/arbology/exact/ExactPatternMatchingAutomaton.cpp
+++ b/alib2algo/src/arbology/exact/ExactPatternMatchingAutomaton.cpp
@@ -7,7 +7,7 @@
 
 #include "ExactPatternMatchingAutomaton.h"
 #include "ExactSubtreeMatchingAutomaton.h"
-#include "SubtreeJumpTable.h"
+#include <tree/properties/SubtreeJumpTable.h>
 
 #include <tree/ranked/RankedTree.h>
 #include <tree/ranked/RankedPattern.h>
@@ -80,7 +80,7 @@ automaton::NPDA < > ExactPatternMatchingAutomaton::construct ( const tree::Prefi
 		res.addTransition ( label::labelFrom ( 0 ), alphabet::Symbol ( alphabet::RankedSymbol < > { symbol } ), std::vector < alphabet::Symbol > ( 1, alphabet::symbolFrom ( 'T' ) ), label::labelFrom ( 0 ), std::vector < alphabet::Symbol > ( ( size_t ) symbol.getRank ( ), alphabet::symbolFrom ( 'T' ) ) );
 	}
 
-	std::vector < int > patternSubtreeJumpTable = SubtreeJumpTable::compute ( pattern );
+	std::vector < int > patternSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( pattern );
 
 	int i = 1;
 
diff --git a/alib2algo/src/arbology/exact/KnuthMorrisPratt.cpp b/alib2algo/src/arbology/exact/KnuthMorrisPratt.cpp
index a9cd1448dcb8a3215d526f9f0b3a717945ef5452..8810d779564d7a0c0af37c277094eb7a291bf400 100644
--- a/alib2algo/src/arbology/exact/KnuthMorrisPratt.cpp
+++ b/alib2algo/src/arbology/exact/KnuthMorrisPratt.cpp
@@ -6,8 +6,8 @@
  */
 
 #include "KnuthMorrisPratt.h"
-#include "BorderArrayNaive.h"
-#include "SubtreeJumpTable.h"
+#include <tree/properties/BorderArrayNaive.h>
+#include <tree/properties/SubtreeJumpTable.h>
 
 #include <tree/Tree.h>
 #include <tree/ranked/PrefixRankedBarTree.h>
@@ -33,8 +33,8 @@ auto KnuthMorrisPrattPrefixRankedBarTreePrefixRankedBarTree = KnuthMorrisPratt::
 
 std::set < unsigned > KnuthMorrisPratt::match ( const tree::PrefixRankedBarTree < > & subject, const tree::PrefixRankedBarPattern < > & pattern ) {
 	std::set < unsigned > occ;
-	std::vector < size_t > ba = BorderArrayNaive::ba ( pattern );
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::vector < size_t > ba = tree::properties::BorderArrayNaive::ba ( pattern );
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 
 	 // index to the subject
 	unsigned i = 0;
@@ -82,8 +82,8 @@ auto KnuthMorrisPrattPrefixRankedTreePrefixRankedTree = KnuthMorrisPratt::Regist
 
 std::set < unsigned > KnuthMorrisPratt::match ( const tree::PrefixRankedTree < > & subject, const tree::PrefixRankedPattern < > & pattern ) {
 	std::set < unsigned > occ;
-	std::vector < size_t > ba = BorderArrayNaive::ba ( pattern );
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::vector < size_t > ba = tree::properties::BorderArrayNaive::ba ( pattern );
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 
 	 // index to the subject
 	unsigned i = 0;
diff --git a/alib2algo/src/arbology/exact/ReversedBoyerMooreHorspool.cpp b/alib2algo/src/arbology/exact/ReversedBoyerMooreHorspool.cpp
index 7d7574f9c4ce09bd2a44012e6eed9238d4f50c5a..135aaede2d068b171cc39fd7570d49ac608819d3 100644
--- a/alib2algo/src/arbology/exact/ReversedBoyerMooreHorspool.cpp
+++ b/alib2algo/src/arbology/exact/ReversedBoyerMooreHorspool.cpp
@@ -6,9 +6,9 @@
  */
 
 #include "ReversedBoyerMooreHorspool.h"
-#include "ReversedBadCharacterShiftTable.h"
-#include "SubtreeJumpTable.h"
-#include "ExactSubtreeRepeatsNaive.h"
+#include <tree/properties/ReversedBadCharacterShiftTable.h>
+#include <tree/properties/SubtreeJumpTable.h>
+#include <tree/properties/ExactSubtreeRepeatsNaive.h>
 
 #include <tree/Tree.h>
 #include <tree/ranked/PrefixRankedTree.h>
@@ -37,8 +37,8 @@ auto ReversedBoyerMooreHorspoolPrefixRankedBarTreePrefixRankedBarTree = Reversed
 
 std::set < unsigned > ReversedBoyerMooreHorspool::match ( const tree::PrefixRankedBarTree < > & subject, const tree::PrefixRankedBarPattern < > & pattern ) {
 	std::set < unsigned > occ;
-	std::map < std::ranked_symbol < >, size_t > bcs = ReversedBadCharacterShiftTable::bcs ( pattern ); // NOTE: the subjects alphabet must be a subset or equal to the pattern
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::map < std::ranked_symbol < >, size_t > bcs = tree::properties::ReversedBadCharacterShiftTable::bcs ( pattern ); // NOTE: the subjects alphabet must be a subset or equal to the pattern
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 
 	 // index to the subject
 	int i = ( int ) subject.getContent ( ).size ( ) - pattern.getContent ( ).size ( ) + 1;
@@ -80,11 +80,11 @@ auto ReversedBoyerMooreHorspoolPrefixRankedBarTreePrefixRankedBarPattern = Rever
 
 std::set < unsigned > ReversedBoyerMooreHorspool::match ( const tree::PrefixRankedBarTree < > & subject, const tree::PrefixRankedBarNonlinearPattern < > & pattern ) {
 	std::set < unsigned > occ;
-	std::map < std::ranked_symbol < >, size_t > bcs = ReversedBadCharacterShiftTable::bcs ( pattern ); // NOTE: the subjects alphabet must be a subset or equal to the pattern
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::map < std::ranked_symbol < >, size_t > bcs = tree::properties::ReversedBadCharacterShiftTable::bcs ( pattern ); // NOTE: the subjects alphabet must be a subset or equal to the pattern
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 	std::map < std::ranked_symbol < >, alphabet::Symbol > variablesSetting;
 
-	tree::PrefixRankedBarTree < > repeats = ExactSubtreeRepeatsNaive::repeats ( subject );
+	tree::PrefixRankedBarTree < > repeats = tree::properties::ExactSubtreeRepeatsNaive::repeats ( subject );
 
 	 // index to the subject
 	int i = ( int ) subject.getContent ( ).size ( ) - pattern.getContent ( ).size ( ) + 1;
@@ -144,8 +144,8 @@ auto ReversedBoyerMooreHorspoolPrefixRankedBarTreePrefixRankedTree = ReversedBoy
 
 std::set < unsigned > ReversedBoyerMooreHorspool::match ( const tree::PrefixRankedTree < > & subject, const tree::PrefixRankedPattern < > & pattern ) {
 	std::set < unsigned > occ;
-	std::map < std::ranked_symbol < >, size_t > bcs = ReversedBadCharacterShiftTable::bcs ( pattern ); // NOTE: the subjects alphabet must be a subset or equal to the pattern
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::map < std::ranked_symbol < >, size_t > bcs = tree::properties::ReversedBadCharacterShiftTable::bcs ( pattern ); // NOTE: the subjects alphabet must be a subset or equal to the pattern
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 
 	 // index to the subject
 	int i = ( int ) subject.getContent ( ).size ( ) - pattern.getContent ( ).size ( ) + 1;
@@ -186,11 +186,11 @@ auto ReversedBoyerMooreHorspoolPrefixRankedBarTreePrefixRankedPattern = Reversed
 
 std::set < unsigned > ReversedBoyerMooreHorspool::match ( const tree::PrefixRankedTree < > & subject, const tree::PrefixRankedNonlinearPattern < > & pattern ) {
 	std::set < unsigned > occ;
-	std::map < std::ranked_symbol < >, size_t > bcs = ReversedBadCharacterShiftTable::bcs ( pattern ); // NOTE: the subjects alphabet must be a subset or equal to the pattern
-	std::vector < int > subjectSubtreeJumpTable = SubtreeJumpTable::compute ( subject );
+	std::map < std::ranked_symbol < >, size_t > bcs = tree::properties::ReversedBadCharacterShiftTable::bcs ( pattern ); // NOTE: the subjects alphabet must be a subset or equal to the pattern
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 	std::map < std::ranked_symbol < >, alphabet::Symbol > variablesSetting;
 
-	tree::PrefixRankedTree < > repeats = ExactSubtreeRepeatsNaive::repeats ( subject );
+	tree::PrefixRankedTree < > repeats = tree::properties::ExactSubtreeRepeatsNaive::repeats ( subject );
 
 	 // index to the subject
 	int i = ( int ) subject.getContent ( ).size ( ) - pattern.getContent ( ).size ( ) + 1;
diff --git a/alib2algo/src/arbology/transform/BeginToEndIndex.h b/alib2algo/src/arbology/transform/BeginToEndIndex.h
index a44e3880f3d67b69266cc60a92333d5686de52cd..da025a2da8ba53d1f638e2551962a9932213c531 100644
--- a/alib2algo/src/arbology/transform/BeginToEndIndex.h
+++ b/alib2algo/src/arbology/transform/BeginToEndIndex.h
@@ -12,7 +12,7 @@
 #include <core/multipleDispatch.hpp>
 #include <tree/TreeFeatures.h>
 
-#include <arbology/exact/SubtreeJumpTable.h>
+#include <tree/properties/SubtreeJumpTable.h>
 
 #include <tree/Tree.h>
 #include <tree/ranked/PrefixRankedBarTree.h>
@@ -41,7 +41,7 @@ public:
 
 template < class SymbolType, class RankType >
 std::set < unsigned > BeginToEndIndex::transform ( const tree::PrefixRankedBarTree < SymbolType, RankType > & subject, const std::set < unsigned > & indexes ) {
-	std::vector < int > subjectSubtreeJumpTable = exact::SubtreeJumpTable::compute ( subject );
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 	std::set < unsigned > res;
 
 	for ( unsigned index : indexes )
@@ -52,7 +52,7 @@ std::set < unsigned > BeginToEndIndex::transform ( const tree::PrefixRankedBarTr
 
 template < class SymbolType, class RankType >
 std::set < unsigned > BeginToEndIndex::transform ( const tree::PrefixRankedTree < SymbolType, RankType > & subject, const std::set < unsigned > & indexes ) {
-	std::vector < int > subjectSubtreeJumpTable = exact::SubtreeJumpTable::compute ( subject );
+	std::vector < int > subjectSubtreeJumpTable = tree::properties::SubtreeJumpTable::compute ( subject );
 	std::set < unsigned > res;
 
 	for ( unsigned index : indexes )
diff --git a/alib2algo/src/arbology/exact/BadCharacterShiftTable.cpp b/alib2algo/src/tree/properties/BadCharacterShiftTable.cpp
similarity index 90%
rename from alib2algo/src/arbology/exact/BadCharacterShiftTable.cpp
rename to alib2algo/src/tree/properties/BadCharacterShiftTable.cpp
index c617622526667e39d84a1bcea0ab36dd030748b8..413c76d9d34581144b9e9d772228076723ab4c70 100644
--- a/alib2algo/src/arbology/exact/BadCharacterShiftTable.cpp
+++ b/alib2algo/src/tree/properties/BadCharacterShiftTable.cpp
@@ -10,9 +10,9 @@
 #include <tree/ranked/PrefixRankedBarPattern.h>
 #include <tree/ranked/PrefixRankedBarNonlinearPattern.h>
 
-namespace arbology {
+namespace tree {
 
-namespace exact {
+namespace properties {
 
 std::map < std::ranked_symbol < >, size_t > BadCharacterShiftTable::bcs ( const tree::RankedTreeWrapper & pattern ) {
 	return dispatch ( pattern.getData ( ) );
@@ -21,6 +21,6 @@ std::map < std::ranked_symbol < >, size_t > BadCharacterShiftTable::bcs ( const
 auto BadCharacterShiftTablePrefixRankedBarPattern = BadCharacterShiftTable::RegistratorWrapper < std::map < std::ranked_symbol < >, size_t >, tree::PrefixRankedBarPattern < > > ( BadCharacterShiftTable::bcs );
 auto BadCharacterShiftTablePrefixRankedBarNonlinearPattern = BadCharacterShiftTable::RegistratorWrapper < std::map < std::ranked_symbol < >, size_t >, tree::PrefixRankedBarNonlinearPattern < > > ( BadCharacterShiftTable::bcs );
 
-} /* namespace exact */
+} /* namespace properties */
 
-} /* namespace arbology */
+} /* namespace tree */
diff --git a/alib2algo/src/arbology/exact/BadCharacterShiftTable.h b/alib2algo/src/tree/properties/BadCharacterShiftTable.h
similarity index 97%
rename from alib2algo/src/arbology/exact/BadCharacterShiftTable.h
rename to alib2algo/src/tree/properties/BadCharacterShiftTable.h
index fd3f35720843cf2d77c0502c93167de853028371..124e0d4ca6a698a103079b5486310f2b96a6e93c 100644
--- a/alib2algo/src/arbology/exact/BadCharacterShiftTable.h
+++ b/alib2algo/src/tree/properties/BadCharacterShiftTable.h
@@ -16,9 +16,9 @@
 #include <set>
 #include <map>
 
-namespace arbology {
+namespace tree {
 
-namespace exact {
+namespace properties {
 
 /**
  * Computation of BCS table for BMH from MI(E+\eps)-EVY course 2014
@@ -102,8 +102,8 @@ std::map < std::ranked_symbol < SymbolType, RankType >, size_t > BadCharacterShi
 	return bcs;
 }
 
-} /* namespace exact */
+} /* namespace properties */
 
-} /* namespace arbology */
+} /* namespace tree */
 
 #endif /* _ARBOLOGY_BAD_CHARACTER_SHIFT_TABLE_H_ */
diff --git a/alib2algo/src/arbology/exact/BorderArrayNaive.cpp b/alib2algo/src/tree/properties/BorderArrayNaive.cpp
similarity index 86%
rename from alib2algo/src/arbology/exact/BorderArrayNaive.cpp
rename to alib2algo/src/tree/properties/BorderArrayNaive.cpp
index b6a574c2804e670065f6ba5dcbc06d5cf930a2c5..8163b735d9add1a0f733ab59e317e5daf000db74 100644
--- a/alib2algo/src/arbology/exact/BorderArrayNaive.cpp
+++ b/alib2algo/src/tree/properties/BorderArrayNaive.cpp
@@ -7,9 +7,9 @@
 
 #include "BorderArrayNaive.h"
 
-namespace arbology {
+namespace tree {
 
-namespace exact {
+namespace properties {
 
 std::vector < size_t > BorderArrayNaive::ba ( const tree::Tree & pattern ) {
 	return dispatch ( pattern.getData ( ) );
@@ -18,6 +18,6 @@ std::vector < size_t > BorderArrayNaive::ba ( const tree::Tree & pattern ) {
 auto BorderArrayPrefixRankedBarPattern = BorderArrayNaive::RegistratorWrapper < std::vector < size_t >, tree::PrefixRankedBarPattern < > > ( BorderArrayNaive::ba );
 auto BorderArrayPrefixRankedPattern = BorderArrayNaive::RegistratorWrapper < std::vector < size_t >, tree::PrefixRankedPattern < > > ( BorderArrayNaive::ba );
 
-} /* namespace exact */
+} /* namespace properties */
 
-} /* namespace arbology */
+} /* namespace tree */
diff --git a/alib2algo/src/arbology/exact/BorderArrayNaive.h b/alib2algo/src/tree/properties/BorderArrayNaive.h
similarity index 98%
rename from alib2algo/src/arbology/exact/BorderArrayNaive.h
rename to alib2algo/src/tree/properties/BorderArrayNaive.h
index 8724366dc41cbb0eb4eeafaba8df3b8f92db77b6..0de4e1ee15f6c73dcf5c26728eeec4da6098e89c 100644
--- a/alib2algo/src/arbology/exact/BorderArrayNaive.h
+++ b/alib2algo/src/tree/properties/BorderArrayNaive.h
@@ -20,9 +20,9 @@
 #include <tree/ranked/PrefixRankedBarPattern.h>
 #include <tree/ranked/PrefixRankedPattern.h>
 
-namespace arbology {
+namespace tree {
 
-namespace exact {
+namespace properties {
 
 /**
  * Computation of BCS table for BMH from MI(E+\eps)-EVY course 2014
@@ -150,8 +150,8 @@ std::vector < size_t > BorderArrayNaive::ba ( const tree::PrefixRankedPattern <
 	return res;
 }
 
-} /* namespace exact */
+} /* namespace properties */
 
-} /* namespace arbology */
+} /* namespace tree */
 
 #endif /* _ARBOLOGY_BORDER_ARRAY_NAIVE_H_ */
diff --git a/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.cpp b/alib2algo/src/tree/properties/ExactSubtreeRepeatsNaive.cpp
similarity index 98%
rename from alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.cpp
rename to alib2algo/src/tree/properties/ExactSubtreeRepeatsNaive.cpp
index 47205eef2db8b59716db8008abf0d184f2db8d14..9c14e084694117a5fc756eb08345c7b033a769e2 100644
--- a/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.cpp
+++ b/alib2algo/src/tree/properties/ExactSubtreeRepeatsNaive.cpp
@@ -14,9 +14,9 @@
 #include <tree/Tree.h>
 #include <global/GlobalData.h>
 
-namespace arbology {
+namespace tree {
 
-namespace exact {
+namespace properties {
 
 tree::Tree ExactSubtreeRepeatsNaive::repeats ( const tree::Tree & tree ) {
 	return dispatch ( tree.getData ( ) );
@@ -112,6 +112,6 @@ tree::PrefixRankedBarTree < > ExactSubtreeRepeatsNaive::repeats ( const tree::Pr
 
 auto ExactRepeatsNaivePrefixRankedBarTree = ExactSubtreeRepeatsNaive::RegistratorWrapper < tree::PrefixRankedBarTree < >, tree::PrefixRankedBarTree < > > ( ExactSubtreeRepeatsNaive::repeats );
 
-} /* namespace exact */
+} /* namespace properties */
 
-} /* namespace arbology */
+} /* namespace tree */
diff --git a/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.h b/alib2algo/src/tree/properties/ExactSubtreeRepeatsNaive.h
similarity index 95%
rename from alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.h
rename to alib2algo/src/tree/properties/ExactSubtreeRepeatsNaive.h
index dda3b4a524b1a2e0aa4e0c3a7452a611ab671365..237892691693a0e75bd151b77af605a273fcffcd 100644
--- a/alib2algo/src/arbology/exact/ExactSubtreeRepeatsNaive.h
+++ b/alib2algo/src/tree/properties/ExactSubtreeRepeatsNaive.h
@@ -17,9 +17,9 @@
 #include <tree>
 #include <alphabet/RankedSymbol.h>
 
-namespace arbology {
+namespace tree {
 
-namespace exact {
+namespace properties {
 
 /**
  * Simple computation of subtree repeats
@@ -46,8 +46,8 @@ public:
 
 };
 
-} /* namespace exact */
+} /* namespace properties */
 
-} /* namespace arbology */
+} /* namespace tree */
 
 #endif /* _ARBOLOGY_SUBTREE_REPEATS_NAIVE_H_ */
diff --git a/alib2algo/src/arbology/exact/ReversedBadCharacterShiftTable.cpp b/alib2algo/src/tree/properties/ReversedBadCharacterShiftTable.cpp
similarity index 98%
rename from alib2algo/src/arbology/exact/ReversedBadCharacterShiftTable.cpp
rename to alib2algo/src/tree/properties/ReversedBadCharacterShiftTable.cpp
index c0f7dca5236ee7ee0c51fb0173ec0e58d740e9cd..25e5d2188e77b322907cbc134afd0e73fd45eb6a 100644
--- a/alib2algo/src/arbology/exact/ReversedBadCharacterShiftTable.cpp
+++ b/alib2algo/src/tree/properties/ReversedBadCharacterShiftTable.cpp
@@ -12,9 +12,9 @@
 #include <tree/ranked/PrefixRankedPattern.h>
 #include <tree/ranked/PrefixRankedNonlinearPattern.h>
 
-namespace arbology {
+namespace tree {
 
-namespace exact {
+namespace properties {
 
 std::map < std::ranked_symbol < >, size_t > ReversedBadCharacterShiftTable::bcs ( const tree::RankedTreeWrapper & pattern ) {
 	return dispatch ( pattern.getData ( ) );
@@ -132,6 +132,6 @@ std::map < std::ranked_symbol < >, size_t > ReversedBadCharacterShiftTable::bcs
 
 auto ReversedBadCharacterShiftTablePrefixRankedNonlinearPattern = ReversedBadCharacterShiftTable::RegistratorWrapper < std::map < std::ranked_symbol < >, size_t >, tree::PrefixRankedNonlinearPattern < > > ( ReversedBadCharacterShiftTable::bcs );
 
-} /* namespace exact */
+} /* namespace properties */
 
-} /* namespace arbology */
+} /* namespace tree */
diff --git a/alib2algo/src/arbology/exact/ReversedBadCharacterShiftTable.h b/alib2algo/src/tree/properties/ReversedBadCharacterShiftTable.h
similarity index 93%
rename from alib2algo/src/arbology/exact/ReversedBadCharacterShiftTable.h
rename to alib2algo/src/tree/properties/ReversedBadCharacterShiftTable.h
index 4bd37d117b3082574c7e157fdc78613d239dbcb8..0eb08f2487375d9e6302ed9183bc8158fbb317d5 100644
--- a/alib2algo/src/arbology/exact/ReversedBadCharacterShiftTable.h
+++ b/alib2algo/src/tree/properties/ReversedBadCharacterShiftTable.h
@@ -16,9 +16,9 @@
 #include <set>
 #include <map>
 
-namespace arbology {
+namespace tree {
 
-namespace exact {
+namespace properties {
 
 /**
  * Computation of BCS table for BMH from MI(E+\eps)-EVY course 2014
@@ -39,8 +39,8 @@ public:
 
 };
 
-} /* namespace exact */
+} /* namespace properties */
 
-} /* namespace arbology */
+} /* namespace tree */
 
 #endif /* _ARBOLOGY_REVERSED_BAD_CHARACTER_SHIFT_TABLE_H_ */
diff --git a/alib2algo/src/arbology/exact/SubtreeJumpTable.cpp b/alib2algo/src/tree/properties/SubtreeJumpTable.cpp
similarity index 90%
rename from alib2algo/src/arbology/exact/SubtreeJumpTable.cpp
rename to alib2algo/src/tree/properties/SubtreeJumpTable.cpp
index e5917860750cadd29278926ec13b8efbc6374136..cd756d6f64501ac712c8bd717981eaf0704b9c3b 100644
--- a/alib2algo/src/arbology/exact/SubtreeJumpTable.cpp
+++ b/alib2algo/src/tree/properties/SubtreeJumpTable.cpp
@@ -7,9 +7,9 @@
 
 #include "SubtreeJumpTable.h"
 
-namespace arbology {
+namespace tree {
 
-namespace exact {
+namespace properties {
 
 std::vector < int > SubtreeJumpTable::compute ( const tree::RankedTreeWrapper & subject ) {
 	return dispatch ( subject.getData ( ) );
@@ -20,6 +20,6 @@ auto SubtreeSizesPrefixRankedBarPattern = SubtreeJumpTable::RegistratorWrapper <
 auto SubtreeSizesPrefixRankedTree = SubtreeJumpTable::RegistratorWrapper < std::vector < int >, tree::PrefixRankedTree < > > ( SubtreeJumpTable::compute );
 auto SubtreeSizesPrefixRankedPattern = SubtreeJumpTable::RegistratorWrapper < std::vector < int >, tree::PrefixRankedPattern < > > ( SubtreeJumpTable::compute );
 
-} /* namespace exact */
+} /* namespace properties */
 
-} /* namespace arbology */
+} /* namespace tree */
diff --git a/alib2algo/src/arbology/exact/SubtreeJumpTable.h b/alib2algo/src/tree/properties/SubtreeJumpTable.h
similarity index 97%
rename from alib2algo/src/arbology/exact/SubtreeJumpTable.h
rename to alib2algo/src/tree/properties/SubtreeJumpTable.h
index 9bf88690b9096265646c2de44d9b8a0fb3e8f384..6aa2e84e1415ff34a277878128a578357c5ef9b2 100644
--- a/alib2algo/src/arbology/exact/SubtreeJumpTable.h
+++ b/alib2algo/src/tree/properties/SubtreeJumpTable.h
@@ -19,9 +19,9 @@
 #include <tree/ranked/PrefixRankedBarTree.h>
 #include <tree/ranked/PrefixRankedBarPattern.h>
 
-namespace arbology {
+namespace tree {
 
-namespace exact {
+namespace properties {
 
 class SubtreeJumpTable : public std::SingleDispatch < SubtreeJumpTable, std::vector < int >, const tree::RankedTreeBase & > {
 	template < class T >
@@ -125,8 +125,8 @@ int SubtreeJumpTable::buildDataPointersPrefixRankedInternal ( std::vector < int
 	return index;
 }
 
-} /* namespace exact */
+} /* namespace properties */
 
-} /* namespace arbology */
+} /* namespace tree */
 
 #endif /* _SUBTREE_JUMP_TABLE_H_ */