diff --git a/alib2/src/regexp/RegExp.cpp b/alib2/src/regexp/RegExp.cpp
index fdf21207752d588fc5705d53ad15f4fe611afd2e..03a7d26fb5d073fbeeba30309848b85b6210141d 100644
--- a/alib2/src/regexp/RegExp.cpp
+++ b/alib2/src/regexp/RegExp.cpp
@@ -135,9 +135,10 @@ std::ostream& operator <<(std::ostream& out, const RegExp& regExp) {
 }
 
 bool RegExp::operator<(const RegExp& other) const {
-	if(*this == other) return false;
 	if(*(this->regExp) < *(other.regExp)) {
 	  return true;
+	} else if(*(this->regExp) > *(other.regExp)) {
+	  return false;
 	} else {
 	  return this->alphabet < other.alphabet;
 	}
diff --git a/alib2/src/regexp/RegExpElement.cpp b/alib2/src/regexp/RegExpElement.cpp
index ba1181b65130a04b9b026dcb72cbc3b55c577751..bb653bce5b0f4a91ee4cb3376078554fe0954407 100644
--- a/alib2/src/regexp/RegExpElement.cpp
+++ b/alib2/src/regexp/RegExpElement.cpp
@@ -34,27 +34,27 @@ bool RegExpElement::operator!=(const RegExpElement& other) const {
 
 
 bool RegExpElement::operator<(const Concatenation& other) const {
-	return typeid(this).before(typeid(other));
+	return typeid(*this).before(typeid(other));
 }
 
 bool RegExpElement::operator<(const Alternation& other) const {
-	return typeid(this).before(typeid(other));
+	return typeid(*this).before(typeid(other));
 }
 
 bool RegExpElement::operator<(const Iteration& other) const {
-	return typeid(this).before(typeid(other));
+	return typeid(*this).before(typeid(other));
 }
 
 bool RegExpElement::operator<(const RegExpSymbol& other) const {
-	return typeid(this).before(typeid(other));
+	return typeid(*this).before(typeid(other));
 }
 
 bool RegExpElement::operator<(const RegExpEpsilon& other) const {
-	return typeid(this).before(typeid(other));
+	return typeid(*this).before(typeid(other));
 }
 
 bool RegExpElement::operator<(const RegExpEmpty& other) const {
-	return typeid(this).before(typeid(other));
+	return typeid(*this).before(typeid(other));
 }