diff --git a/alib/src/grammar/RightRegularGrammar.cpp b/alib/src/grammar/RightRegularGrammar.cpp
index e2c49a6b20e4405dcc9eff2bd75a08a8a1b126c6..2f7b4c5c8950bef253ebd489651339f46def0cc4 100644
--- a/alib/src/grammar/RightRegularGrammar.cpp
+++ b/alib/src/grammar/RightRegularGrammar.cpp
@@ -59,7 +59,7 @@ bool RightRegularGrammar::checkRightSide(const list<Symbol>& rightSide) const {
 
 	//check if all symbols except the last are terminal symbols
 	for (list<Symbol>::const_iterator symbol = rightSide.begin(); symbol != --rightSide.end(); symbol++) {
-		if (terminalSymbols.find(*symbol) != terminalSymbols.end()) {
+		if (terminalSymbols.find(*symbol) == terminalSymbols.end()) {
 			return false;
 		}
 	}
diff --git a/alib/src/grammar/Rule.cpp b/alib/src/grammar/Rule.cpp
index 4d1af3ec699bded2468510f5f043a60d7d1c9bbc..0052bf55da4cc8afa11f90ba02c4974da2fb5d1d 100644
--- a/alib/src/grammar/Rule.cpp
+++ b/alib/src/grammar/Rule.cpp
@@ -53,6 +53,7 @@ bool Rule::operator <(const Rule& other) const {
 		if (*left != *otherLeft) {
 			return *left < *otherLeft;
 		}
+		left ++;
 	}
 
 	list<Symbol>::const_iterator right = rightSide.begin();
@@ -61,6 +62,7 @@ bool Rule::operator <(const Rule& other) const {
 		if (*right != *otherRight) {
 			return *right < *otherRight;
 		}
+		right ++;
 	}
 
 	return false;