diff --git a/alib2algo/src/tree/NormalizeTreeLabels.cpp b/alib2algo/src/tree/NormalizeTreeLabels.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..26b509933e4630171d4c1d78e1561f8d5c81b462
--- /dev/null
+++ b/alib2algo/src/tree/NormalizeTreeLabels.cpp
@@ -0,0 +1,19 @@
+/*
+ * NormalizeTreeLabels.cpp
+ *
+ *  Created on: 10. 5. 2017
+ *      Author: Aleksandr Shatrovskii
+ */
+
+#include "NormalizeTreeLabels.h"
+#include <tree/Tree.h>
+
+namespace tree {
+
+tree::Tree NormalizeTreeLabels::normalize ( const tree::Tree & tree ) {
+	return dispatch ( tree.getData ( ) );
+}
+
+auto NormalizeTreeLabelsRankedTree = NormalizeTreeLabels::RegistratorWrapper < tree::RankedTree < unsigned, DefaultRankType >, tree::RankedTree < > > ( NormalizeTreeLabels::normalize );
+
+} /* namespace tree */
diff --git a/alib2algo/src/tree/NormalizeTreeLabels.h b/alib2algo/src/tree/NormalizeTreeLabels.h
new file mode 100644
index 0000000000000000000000000000000000000000..951ac0553d01f581d9478a3b5bd59b294e184d80
--- /dev/null
+++ b/alib2algo/src/tree/NormalizeTreeLabels.h
@@ -0,0 +1,85 @@
+/*
+ * NormalizeTreeLabels.h
+ *
+ *  Created on: 10. 5. 2017
+ *      Author: Aleksandr Shatrovskii
+ */
+
+#ifndef _ARBOLOGY_NORMALIZE_TREE_LABELS_H_
+#define _ARBOLOGY_NORMALIZE_TREE_LABELS_H_
+
+#include <tree/TreeFeatures.h>
+#include <alphabet/SymbolFeatures.h>
+#include <core/multipleDispatch.hpp>
+
+#include <map>
+#include <vector>
+#include <tree>
+#include <alphabet/RankedSymbol.h>
+#include <primitive/Unsigned.h>
+
+#include "properties/SubtreeJumpTable.h"
+
+#include <tree/ranked/RankedTree.h>
+#include <global/GlobalData.h>
+
+namespace tree {
+
+/**
+ * Simple computation of subtree repeats
+ */
+class NormalizeTreeLabels : public std::SingleDispatch < NormalizeTreeLabels, tree::Tree, const tree::TreeBase & > {
+	template < class SymbolType, class RankType >
+	static std::tree < std::ranked_symbol < unsigned, RankType > > normalize ( const std::tree < std::ranked_symbol < SymbolType, RankType > > & tree, std::map < std::ranked_symbol < SymbolType, RankType >, unsigned > & mapping, unsigned & counter );
+
+public:
+	/**
+	 * Compute a same shaped tree with nodes containing unique subtree ids.
+	 * @return Tree of repeats
+	 */
+	static tree::Tree normalize ( const tree::Tree & pattern );
+
+	/**
+	 * Compute a same shaped tree with nodes containing unique subtree ids.
+	 * @return Tree of repeats
+	 */
+	template < class SymbolType, class RankType >
+	static tree::RankedTree < unsigned, RankType > normalize ( const tree::RankedTree < SymbolType, RankType > & tree );
+
+};
+
+template < class SymbolType, class RankType >
+std::tree < std::ranked_symbol < unsigned, RankType > > NormalizeTreeLabels::normalize ( const std::tree < std::ranked_symbol < SymbolType, RankType > > & tree, std::map < std::ranked_symbol < SymbolType, RankType >, unsigned > & mapping, unsigned & counter ) {
+
+	std::vector < std::tree < std::ranked_symbol < unsigned, RankType > > > children;
+
+	for ( const std::tree < std::ranked_symbol < SymbolType, RankType > > & child : tree )
+		children.push_back ( normalize < SymbolType, RankType > ( child, mapping, counter ) );
+
+	auto newLabelIt = mapping.find ( tree.getData ( ) );
+	unsigned newLabel;
+
+	if ( newLabelIt == mapping.end ( ) ) {
+		mapping.insert ( std::make_pair ( tree.getData ( ), counter ) );
+		newLabel = counter;
+		counter += 1;
+	} else {
+		newLabel = newLabelIt->second;
+	}
+
+	return std::tree < std::ranked_symbol < unsigned, RankType > > ( std::ranked_symbol < unsigned, RankType > ( newLabel, tree.getData ( ).getRank ( ) ), std::move ( children ) );
+
+}
+
+template < class SymbolType, class RankType >
+tree::RankedTree < unsigned, RankType > NormalizeTreeLabels::normalize ( const tree::RankedTree < SymbolType, RankType > & tree ) {
+
+	std::map < std::ranked_symbol < SymbolType, RankType >, unsigned > mapping;
+	unsigned counter = 1;
+
+	return tree::RankedTree < unsigned, RankType > ( normalize ( tree.getContent ( ), mapping, counter ) );
+}
+
+} /* namespace tree */
+
+#endif /* _ARBOLOGY_NORMALIZE_TREE_LABELS_H_ */