diff --git a/alib2data/src/common/ZeroRunLengthEncoding.hpp b/alib2data/src/common/ZeroRunLengthEncoding.hpp
index 04587d2d904a42d191b0e6c6148a15c5e24c5376..af99a57956326a4f491f568a6a76a89e3b5c855e 100644
--- a/alib2data/src/common/ZeroRunLengthEncoding.hpp
+++ b/alib2data/src/common/ZeroRunLengthEncoding.hpp
@@ -29,6 +29,17 @@ class ZeroRunLengthEncoding {
 	struct element {
 		unsigned run;
 		unsigned word;
+
+		bool operator == ( const element & other ) const {
+			return run == other.run && word == other.word;
+		}
+
+		bool operator < ( const element & other ) const {
+			auto firstTie = std::tie ( run, word );
+			auto secondTie = std::tie ( other.run, other.word );
+
+			return firstTie < secondTie;
+		}
 	};
 
 	std::list < element > m_Data;
@@ -129,6 +140,37 @@ public:
 		packData ( );
 	}
 
+	size_t size ( ) const {
+		return m_Size;
+	}
+
+	friend bool operator == ( const ZeroRunLengthEncoding & first, const ZeroRunLengthEncoding & second ) {
+		return first.m_Size == second.m_Size && first.m_Data == second.m_Data;
+	}
+
+	friend bool operator != ( const ZeroRunLengthEncoding & first, const ZeroRunLengthEncoding & second ) {
+		return ! ( first == second );
+	}
+
+	friend bool operator < ( const ZeroRunLengthEncoding & first, const ZeroRunLengthEncoding & second ) {
+		auto firstTie = std::tie ( first.m_Size, first.m_Data );
+		auto secondTie = std::tie ( second.m_Size, second.m_Data );
+
+		return firstTie < secondTie;
+	}
+
+	friend bool operator > ( const ZeroRunLengthEncoding & first, const ZeroRunLengthEncoding & second ) {
+		return second < first;
+	}
+
+	friend bool operator <= ( const ZeroRunLengthEncoding & first, const ZeroRunLengthEncoding & second ) {
+		return ! ( first > second );
+	}
+
+	friend bool operator >= ( const ZeroRunLengthEncoding & first, const ZeroRunLengthEncoding & second ) {
+		return ! ( first < second );
+	}
+
 	friend ZeroRunLengthEncoding & operator <<= ( ZeroRunLengthEncoding & A, size_t dist ) {
 		if ( A.m_Size == 0 || dist == 0 )
 			return A;