diff --git a/alib2std/src/extensions/compare.hpp b/alib2std/src/extensions/compare.hpp
index 1ad5063049dea6fd4c6d36164832291edff182bf..821e01ff6b34ef9577aa77b9d4c2fffab6defce1 100644
--- a/alib2std/src/extensions/compare.hpp
+++ b/alib2std/src/extensions/compare.hpp
@@ -22,6 +22,20 @@ struct compare<bool> {
 	}
 };
 
+template<>
+struct compare<unsigned char> {
+	int operator()(unsigned char first, unsigned char second) const {
+		return first - second;
+	}
+};
+
+template<>
+struct compare<signed char> {
+	int operator()(signed char first, signed char second) const {
+		return first - second;
+	}
+};
+
 template<>
 struct compare<char> {
 	int operator()(char first, char second) const {
@@ -30,29 +44,72 @@ struct compare<char> {
 };
 
 template<>
-struct compare<short> {
-	int operator()(short first, short second) const {
+struct compare<unsigned short> {
+	int operator()(unsigned short first, unsigned short second) const {
 		return first - second;
 	}
 };
 
 template<>
-struct compare<unsigned> {
-	int operator()(unsigned first, unsigned second) const {
+struct compare<signed short> {
+	int operator()(signed short first, signed short second) const {
 		return first - second;
 	}
 };
 
 template<>
-struct compare<int> {
-	int operator()(int first, int second) const {
+struct compare<unsigned int> {
+	int operator()(unsigned int first, unsigned int second) const {
 		return first - second;
 	}
 };
 
 template<>
-struct compare<long> {
-	int operator()(long first, long second) const {
+struct compare<signed int> {
+	int operator()(signed int first, signed int second) const {
+		return first - second;
+	}
+};
+
+template<>
+struct compare<signed long> {
+	int operator()(signed long first, signed long second) const {
+		if ( first < second )
+			return -1;
+		else if ( first > second )
+			return 1;
+		else
+			return 0;
+	}
+};
+
+template<>
+struct compare<unsigned long> {
+	int operator()(unsigned long first, unsigned long second) const {
+		if ( first < second )
+			return -1;
+		else if ( first > second )
+			return 1;
+		else
+			return 0;
+	}
+};
+
+template<>
+struct compare<signed long long> {
+	int operator()(signed long long first, signed long long second) const {
+		if ( first < second )
+			return -1;
+		else if ( first > second )
+			return 1;
+		else
+			return 0;
+	}
+};
+
+template<>
+struct compare<unsigned long long> {
+	int operator()(unsigned long long first, unsigned long long second) const {
 		if ( first < second )
 			return -1;
 		else if ( first > second )
@@ -63,8 +120,8 @@ struct compare<long> {
 };
 
 template<>
-struct compare<long long> {
-	int operator()(long long first, long long second) const {
+struct compare<float> {
+	int operator()(float first, float second) const {
 		if ( first < second )
 			return -1;
 		else if ( first > second )
@@ -75,8 +132,8 @@ struct compare<long long> {
 };
 
 template<>
-struct compare<double> {
-	int operator()(double first, double second) const {
+struct compare<long double> {
+	int operator()(long double first, long double second) const {
 		if ( first < second )
 			return -1;
 		else if ( first > second )