diff --git a/alib2algo/src/grammar/simplify/LeftRecursionRemover.cpp b/alib2algo/src/grammar/simplify/LeftRecursionRemover.cpp
index 3837b8ac91e454bb686d76cbade7bd40e1a0dcc8..d4c760831b8e3c7426b8c6fe51753b86e4f95aa2 100644
--- a/alib2algo/src/grammar/simplify/LeftRecursionRemover.cpp
+++ b/alib2algo/src/grammar/simplify/LeftRecursionRemover.cpp
@@ -93,7 +93,7 @@ grammar::EpsilonFreeCFG assignAsOrder(const grammar::EpsilonFreeCFG& origGrammar
 				continue;
 			}
 			if(origGrammar.getRules().find(secondLHS) == origGrammar.getRules().end()) { //is there any right hand side to substitue with?
-				res.addRule(lhs, singleRHS);
+				//if not well this rule does not generate anything anyway
 				continue;
 			}
 
@@ -109,6 +109,9 @@ grammar::EpsilonFreeCFG assignAsOrder(const grammar::EpsilonFreeCFG& origGrammar
 
 grammar::EpsilonFreeCFG LeftRecursionRemover::remove(const grammar::EpsilonFreeCFG& origGrammar) {
 	grammar::EpsilonFreeCFG step = origGrammar;
+	for(const alphabet::Symbol& nonterminal : step.getNonterminalAlphabet()) { // remove identities
+		step.removeRule(nonterminal, std::vector<alphabet::Symbol>{nonterminal});
+	}
 	unsigned i = 0;
 	while(i < origGrammar.getNonterminalAlphabet().size()) {
 		grammar::EpsilonFreeCFG nextStep = assignAsOrder(directLeftRecursionRemoveAsOrder(step), i, origGrammar.getNonterminalAlphabet());