diff --git a/alib2aux/src/compare/IsSame.cpp b/alib2aux/src/compare/IsSame.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a74347a04bca2ec4ea61648005aab9f507911c28
--- /dev/null
+++ b/alib2aux/src/compare/IsSame.cpp
@@ -0,0 +1,19 @@
+#include <object/Object.h>
+#include <registration/AlgoRegistration.hpp>
+
+namespace compare {
+
+class IsSame {
+public:
+	static bool isSame ( const object::Object & a, const object::Object & b ) {
+		return a == b;
+	}
+};
+
+} /* namespace compare */
+
+namespace {
+
+auto IsSame = registration::AbstractRegister < compare::IsSame, bool, const object::Object &, const object::Object & > ( compare::IsSame::isSame );
+
+} /* namespace */
diff --git a/alib2aux/src/compare/PrimitiveCompare.cpp b/alib2aux/src/compare/PrimitiveCompare.cpp
deleted file mode 100644
index 735346f2f9285e66d1a3c6cfbb9f169cfbfa132c..0000000000000000000000000000000000000000
--- a/alib2aux/src/compare/PrimitiveCompare.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "PrimitiveCompare.h"
-#include <registration/AlgoRegistration.hpp>
-
-#include <string/LinearString.h>
-
-namespace {
-
-auto PrimitiveCompareUnsignedInt = registration::AbstractRegister < compare::PrimitiveCompare, bool, const unsigned int &, const unsigned int & > ( compare::PrimitiveCompare::compare );
-auto PrimitiveCompareInt = registration::AbstractRegister < compare::PrimitiveCompare, bool, const int &, const int & > ( compare::PrimitiveCompare::compare );
-auto PrimitiveCompareBool = registration::AbstractRegister < compare::PrimitiveCompare, bool, const bool &, const bool & > ( compare::PrimitiveCompare::compare );
-
-} /* namespace */
diff --git a/alib2aux/src/compare/PrimitiveCompare.h b/alib2aux/src/compare/PrimitiveCompare.h
deleted file mode 100644
index 147403c4473b5fcb343fe1378d7ae689b15418c8..0000000000000000000000000000000000000000
--- a/alib2aux/src/compare/PrimitiveCompare.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#pragma once
-
-#include <alib/set>
-
-namespace compare {
-
-class PrimitiveCompare {
-public:
-	template < class T >
-	static bool compare ( const T & a, const T & b ) {
-		return a == b;
-	}
-};
-
-} /* namespace compare */
-
diff --git a/alib2aux/src/compare/SetCompare.cpp b/alib2aux/src/compare/SetCompare.cpp
deleted file mode 100644
index a8347128a1c39416bee7e654c12425be017d1eaf..0000000000000000000000000000000000000000
--- a/alib2aux/src/compare/SetCompare.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "SetCompare.h"
-#include <registration/AlgoRegistration.hpp>
-
-#include <string/LinearString.h>
-
-namespace {
-
-auto SetCompareLinearString = registration::AbstractRegister < compare::SetCompare, bool, const ext::set < string::LinearString < > > &, const ext::set < string::LinearString < > > & > ( compare::SetCompare::compare );
-auto SetCompareUnsignedInt  = registration::AbstractRegister < compare::SetCompare, bool, const ext::set < unsigned > &, const ext::set < unsigned > & > ( compare::SetCompare::compare );
-
-} /* namespace */
diff --git a/alib2aux/src/compare/SetCompare.h b/alib2aux/src/compare/SetCompare.h
deleted file mode 100644
index 9fb6d8c90bcbaf5f18f1c7f01c3f1e49fc0e204d..0000000000000000000000000000000000000000
--- a/alib2aux/src/compare/SetCompare.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#pragma once
-
-#include <alib/set>
-
-namespace compare {
-
-class SetCompare {
-public:
-	template < class T >
-	static bool compare ( const ext::set < T > & a, const ext::set < T > & b ) {
-		return a == b;
-	}
-};
-
-} /* namespace compare */
-
diff --git a/alib2aux/src/compare/StringCompare.h b/alib2aux/src/compare/StringCompare.h
index 6062d2168c528436d4173a587dab2d8853dc22ff..c9b770203f21be3b31ede7f6e1831b6d2496203c 100644
--- a/alib2aux/src/compare/StringCompare.h
+++ b/alib2aux/src/compare/StringCompare.h
@@ -16,7 +16,7 @@ public:
 
 template < class SymbolType >
 bool StringCompare::compare ( const string::LinearString < SymbolType > & a, const string::LinearString < SymbolType > & b ) {
-	return		a.getAlphabet ( ) == b.getAlphabet ( ) &&
+	return	//a.getAlphabet ( ) == b.getAlphabet ( ) &&
 			a.getContent ( ) == b.getContent ( ) ;
 }
 
diff --git a/alib2aux/src/compare/TrieCompare.cpp b/alib2aux/src/compare/TrieCompare.cpp
deleted file mode 100644
index 920b9b71cf0a77de8aea93b68c977f592a0e85a2..0000000000000000000000000000000000000000
--- a/alib2aux/src/compare/TrieCompare.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "TrieCompare.h"
-#include <registration/AlgoRegistration.hpp>
-
-namespace {
-
-auto TrieCompareLinearString = registration::AbstractRegister < compare::TrieCompare, bool, const ext::trie < DefaultSymbolType, bool > &, const ext::trie < DefaultSymbolType, bool > & > ( compare::TrieCompare::compare );
-
-} /* namespace */
diff --git a/alib2aux/src/compare/TrieCompare.h b/alib2aux/src/compare/TrieCompare.h
deleted file mode 100644
index fedde00a584b2ed7979391d4dfbbc8125250da40..0000000000000000000000000000000000000000
--- a/alib2aux/src/compare/TrieCompare.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#pragma once
-
-#include <alib/trie>
-#include <common/DefaultSymbolType.h>
-
-namespace compare {
-
-class TrieCompare {
-public:
-	template < class R, class T >
-	static bool compare ( const ext::trie < R, T > & a, const ext::trie < R, T > & b ) {
-		return a == b;
-	}
-};
-
-} /* namespace compare */
-
diff --git a/alib2aux/src/compare/VectorCompare.cpp b/alib2aux/src/compare/VectorCompare.cpp
deleted file mode 100644
index 90e7381072e407ad3bc43b8e3aada1300565bbc7..0000000000000000000000000000000000000000
--- a/alib2aux/src/compare/VectorCompare.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "VectorCompare.h"
-#include <registration/AlgoRegistration.hpp>
-
-namespace {
-
-auto VectorCompareULI = registration::AbstractRegister < compare::VectorCompare, bool, const ext::vector < unsigned long > &, const ext::vector < unsigned long > & > ( compare::VectorCompare::compare );
-
-} /* namespace */
diff --git a/alib2aux/src/compare/VectorCompare.h b/alib2aux/src/compare/VectorCompare.h
deleted file mode 100644
index f64bb4ce0eee2938aab2257a61b18d83e2ed4a8e..0000000000000000000000000000000000000000
--- a/alib2aux/src/compare/VectorCompare.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#pragma once
-
-#include <alib/vector>
-
-namespace compare {
-
-class VectorCompare {
-public:
-	template < class T >
-	static bool compare ( const ext::vector < T > & a, const ext::vector < T > & b ) {
-		return a == b;
-	}
-};
-
-} /* namespace compare */
-
diff --git a/tests/aql/ArbologyMPAlreadyMatchedPatternPrefixTest.aql b/tests/aql/ArbologyMPAlreadyMatchedPatternPrefixTest.aql
index 168ef3631c641377ef3fb7cea01e219a6c8276c9..177bf895ac34b1fca6dab665ce75b0f829cb9719 100644
--- a/tests/aql/ArbologyMPAlreadyMatchedPatternPrefixTest.aql
+++ b/tests/aql/ArbologyMPAlreadyMatchedPatternPrefixTest.aql
@@ -2,4 +2,4 @@ execute string::Parse @Tree "RANKED_EXTENDED_PATTERN a 2 #N 2 #S #S #S" > $patte
 execute string::Parse @Tree "RANKED_TREE a 2 b 2 b 2 a 0 a 0 a 0 a 0" > $subject
 execute arbology::exact::ExactPatternMatch $subject $pattern > $res1
 execute arbology::exact::KnuthMorrisPratt (PrefixRankedTree)$subject (PrefixRankedExtendedPattern) $pattern > $res2
-quit compare::PrimitiveCompare <(stats::SizeStat $res1) <(stats::SizeStat $res2)
+quit compare::IsSame <(stats::SizeStat $res1) <(stats::SizeStat $res2)
diff --git a/tests/aql/InfiniteLanguage.aql b/tests/aql/InfiniteLanguage.aql
index 2224b0271418d18d11fea279ffdbc5efb150e89f..3309d66d65df0f581f734304e660c7b0494d0d66 100644
--- a/tests/aql/InfiniteLanguage.aql
+++ b/tests/aql/InfiniteLanguage.aql
@@ -7,7 +7,7 @@ begin
     execute automaton::properties::InfiniteLanguage $aut > $r1;
     execute regexp::properties::InfiniteLanguage $regexp > $r2;
 
-    execute compare::PrimitiveCompare $r1 $r2 > $res;
+    execute compare::IsSame $r1 $r2 > $res;
     if ( $res != 1 ) then begin
       print "Comparison returned non-OK value:";
       print $res;
diff --git a/tests/cppaql/approximateMatching.cpp b/tests/cppaql/approximateMatching.cpp
index c88fb74c7c4bb7eed1a011cf2d7e936011789504..052e4a56afb2e0b869028c4cb32beecfe72ff084 100644
--- a/tests/cppaql/approximateMatching.cpp
+++ b/tests/cppaql/approximateMatching.cpp
@@ -71,7 +71,7 @@ TEST_CASE ( "Approximate Matching", "[integration]" ) {
 				qCreateMatchingAutomaton ( std::get < 0 > ( definition ), "pattern", "error", "automaton" ),
 				qRunAutomaton ( "automaton", "subject", "res1" ),
 				qRunDynamicAlgorithm ( std::get < 1 > ( definition ), "pattern", "subject", "error", "res2" ),
-				"quit compare::SetCompare $res1 $res2",
+				"quit compare::IsSame $res1 $res2",
 			};
 
 			TimeoutAqlTest ( 2s, qs );
@@ -89,7 +89,7 @@ TEST_CASE ( "Approximate Matching", "[integration]" ) {
 				qCreateMatchingAutomaton ( std::get < 0 > ( definition ), "pattern", "error", "automaton" ),
 				qRunAutomaton ( "automaton", "subject", "res1" ),
 				qRunDynamicAlgorithm ( std::get < 1 > ( definition ), "pattern", "subject", "error", "res2" ),
-				"quit compare::SetCompare $res1 $res2",
+				"quit compare::IsSame $res1 $res2",
 			};
 
 			TimeoutAqlTest ( 5s, qs );
diff --git a/tests/cppaql/arbologyTest.cpp b/tests/cppaql/arbologyTest.cpp
index 6a6d56c89168768be6e809b6594ece61869e7a8b..ea949253021f8c591b0734676d2ee368cd66f288 100644
--- a/tests/cppaql/arbologyTest.cpp
+++ b/tests/cppaql/arbologyTest.cpp
@@ -128,7 +128,7 @@ void runTest ( const std::string & exactPipeline, const std::string &pipeline, c
 		ext::concat ( "execute < ", sFile, " > $subject" ),
 		ext::concat ( "execute ", exactPipeline, " > $res1" ),
 		ext::concat ( "execute ", pipeline, " > $res2" ),
-		"quit compare::PrimitiveCompare <(stats::SizeStat $res1) <(stats::SizeStat $res2)",
+		"quit compare::IsSame <(stats::SizeStat $res1) <(stats::SizeStat $res2)",
 	};
 
 	TimeoutAqlTest ( 10s, qs );
@@ -140,7 +140,7 @@ void runRandom ( const std::string & exactPipeline, const std::string &pipeline,
 		qGen ( subjectType, SUBJECT_HEIGHT, subjSize, ALPHABET_SIZE, "subject" ),
 		ext::concat ( "execute ", exactPipeline, " > $res1" ),
 		ext::concat ( "execute ", pipeline, " > $res2" ),
-		"quit compare::PrimitiveCompare <(stats::SizeStat $res1) <(stats::SizeStat $res2)",
+		"quit compare::IsSame <(stats::SizeStat $res1) <(stats::SizeStat $res2)",
 	};
 
 	TimeoutAqlTest ( 10s, qs );
diff --git a/tests/cppaql/borderArrayTest.cpp b/tests/cppaql/borderArrayTest.cpp
index b444f74bc77bd6ee308026c9ae2f02dabffd9a71..64c7fbe40f8f1a5b589aa8cca60cf3cbd9de5db3 100644
--- a/tests/cppaql/borderArrayTest.cpp
+++ b/tests/cppaql/borderArrayTest.cpp
@@ -41,7 +41,7 @@ void run ( const std::string & prefixRankedType ) {
 		// "execute $pattern | string::Compose - ",
 		// "execute $res1",
 		// "execute $res2",
-		"quit compare::VectorCompare $res1 $res2",
+		"quit compare::IsSame $res1 $res2",
 	};
 	for ( size_t i = 0; i < RANDOM_ITERATIONS; i++ )
 		TimeoutAqlTest ( 1s, qs );
diff --git a/tests/cppaql/dummyTest.cpp b/tests/cppaql/dummyTest.cpp
index 5ce955cd2d96dd9142aad090146462b13aa55d12..74ce3d978bf10f93e1b5d297b3fb6a4569a92169 100644
--- a/tests/cppaql/dummyTest.cpp
+++ b/tests/cppaql/dummyTest.cpp
@@ -59,7 +59,7 @@ TEST_CASE ( "Sanitizer Test", "[integration][dummy][!hide][!shouldfail]" ) {
 
 TEST_CASE ( "Failed Test", "[integration][dummy][!shouldfail]" ) {
 	ext::vector < std::string > qs = {
-		"quit compare::PrimitiveCompare 1 2",
+		"quit compare::IsSame 1 2",
 	};
 
 	TimeoutAqlTest ( 1s, qs );
diff --git a/tests/cppaql/exactMatching.cpp b/tests/cppaql/exactMatching.cpp
index ecd81609dc098dec3a37b80ec30485e7d0a1fb6a..e05bc0a96d9b7ac311f9c8aee79e227540e6f55a 100644
--- a/tests/cppaql/exactMatching.cpp
+++ b/tests/cppaql/exactMatching.cpp
@@ -60,7 +60,7 @@ TEST_CASE ( "ExactMatching", "[integration]" ) {
 				qs.push_back ( qExtendAlphabet ( "pattern", "subject" ) );
 
 			qs.push_back ( ext::concat ( "execute ", std::get < 1 > ( definition ), " > $res2" ) );
-			qs.push_back ( "quit compare::PrimitiveCompare <(stats::SizeStat $res1) <(stats::SizeStat $res2)" );
+			qs.push_back ( "quit compare::IsSame <(stats::SizeStat $res1) <(stats::SizeStat $res2)" );
 
 			INFO ( std::get < 0 > ( definition ) );
 			TimeoutAqlTest ( 2s, qs );
@@ -79,7 +79,7 @@ TEST_CASE ( "ExactMatching", "[integration]" ) {
 				qs.push_back ( qExtendAlphabet ( "pattern", "subject" ) );
 
 			qs.push_back ( ext::concat ( "execute ", std::get < 1 > ( definition ), " > $res2" ) );
-			qs.push_back ( "quit compare::PrimitiveCompare <(stats::SizeStat $res1) <(stats::SizeStat $res2)" );
+			qs.push_back ( "quit compare::IsSame <(stats::SizeStat $res1) <(stats::SizeStat $res2)" );
 
 			INFO ( std::get < 0 > ( definition ) );
 			TimeoutAqlTest ( 2s, qs );
diff --git a/tests/cppaql/normalizeTest.cpp b/tests/cppaql/normalizeTest.cpp
index 03de54ab48c69787919bc31a33f8368a12e38c02..a1a8924cdd8358bc2a0975b72514f4e25a688a1c 100644
--- a/tests/cppaql/normalizeTest.cpp
+++ b/tests/cppaql/normalizeTest.cpp
@@ -26,7 +26,7 @@ TEST_CASE ( "Normalize test", "[integration]" ) {
 				ext::concat ( "execute ", algorithm, " $cfg > $cfg2" ),
 				ext::concat ( "execute grammar::generate::GenerateUpToLength $cfg ", STRING_LENGTHS, " > $str" ),
 				ext::concat ( "execute grammar::generate::GenerateUpToLength $cfg2 ", STRING_LENGTHS, " > $str2" ),
-				"quit compare::TrieCompare $str $str2",
+				"quit compare::IsSame $str $str2",
 			};
 
 			TimeoutAqlTest ( 1s, qs );
@@ -40,7 +40,7 @@ TEST_CASE ( "Normalize test", "[integration]" ) {
 				ext::concat ( "execute ", algorithm, " $cfg > $cfg2" ),
 				ext::concat ( "execute grammar::generate::GenerateUpToLength $cfg ", STRING_LENGTHS, " > $str" ),
 				ext::concat ( "execute grammar::generate::GenerateUpToLength $cfg2 ", STRING_LENGTHS, " > $str2" ),
-				"quit compare::TrieCompare $str $str2",
+				"quit compare::IsSame $str $str2",
 			};
 
 			TimeoutAqlTest ( 1s, qs );
diff --git a/tests/cppaql/treeNotationTest.cpp b/tests/cppaql/treeNotationTest.cpp
index 457902fddfa21ca30b374612c54dc286f62a0fd7..3c687c3e7dfd10e62fdfdd7012c0821d3d3ff828 100644
--- a/tests/cppaql/treeNotationTest.cpp
+++ b/tests/cppaql/treeNotationTest.cpp
@@ -19,7 +19,7 @@ TEST_CASE ( "TreeNotation tests | Files", "[integration]" ) {
 			ext::vector < std::string > qs = {
 				ext::concat ( "execute < ", file, " > $res1" ),
 				ext::concat ( "execute (RankedTree)", casts, "$res1 > $res2" ),
-				"quit compare::TreeCompare $res1 $res2",
+				"quit compare::IsSame $res1 $res2",
 			};
 
 			TimeoutAqlTest ( 1s, qs );
@@ -33,7 +33,7 @@ TEST_CASE ( "TreeNotation tests | Files", "[integration]" ) {
 			ext::vector < std::string > qs = {
 				randomTree,
 				ext::concat ( "execute (RankedTree)", casts, "$res1 > $res2" ),
-				"quit compare::TreeCompare $res1 $res2",
+				"quit compare::IsSame $res1 $res2",
 			};
 
 			TimeoutAqlTest ( 2s, qs );
diff --git a/tests/cppaql/treeRepeatsTest.cpp b/tests/cppaql/treeRepeatsTest.cpp
index c5271c80c7f1e0c7e665a89eef30fba4e7a4fe1b..ff0acc7507a77af885770b88467e0271fd75f48f 100644
--- a/tests/cppaql/treeRepeatsTest.cpp
+++ b/tests/cppaql/treeRepeatsTest.cpp
@@ -23,7 +23,7 @@ TEST_CASE ( "TreeRepeats", "[integration]" ) {
 				ext::concat ( "execute < ", file, " > $tree" ),
 				"execute tree::properties::ExactSubtreeRepeatsNaive $tree | tree::simplify::NormalizeTreeLabels - > $res1", // naive
 				ext::concat ( "execute ", pipeline, " > $res2" ),
-				"quit compare::TreeCompare $res1 $res2",
+				"quit compare::IsSame $res1 $res2",
 			};
 
 			TimeoutAqlTest ( 2s, qs );
@@ -36,7 +36,7 @@ TEST_CASE ( "TreeRepeats", "[integration]" ) {
 				ext::concat ( "execute tree::generate::RandomRankedTreeFactory ", HEIGHT, " ", SIZE, " ", rand ( ) % ALPHABET_SIZE + 1, " (bool)true 5 > $tree" ),
 				"execute tree::properties::ExactSubtreeRepeatsNaive $tree | tree::simplify::NormalizeTreeLabels - > $res1", // naive
 				ext::concat ( "execute ", pipeline, " > $res2" ),
-				"quit compare::TreeCompare $res1 $res2",
+				"quit compare::IsSame $res1 $res2",
 			};
 
 			TimeoutAqlTest ( 2s, qs );