diff --git a/alib2algo/src/grammar/parsing/LRParser.cpp b/alib2algo/src/grammar/parsing/LRParser.cpp
index f6d19c69e6c63a8ffdf92447046574c4d2e02a15..11428be7588a03d041fa97aeb32b4931f10e1391 100644
--- a/alib2algo/src/grammar/parsing/LRParser.cpp
+++ b/alib2algo/src/grammar/parsing/LRParser.cpp
@@ -64,6 +64,27 @@ LR0Items LRParser::getClosure ( LR0Items items, grammar::CFG originalGrammar ) {
 	return items;
 }
 
+LR0Items LRParser::getNextStateItems ( LR0Items items, alphabet::Symbol symbol, grammar::CFG originalGrammar ) {
+	LR0Items transitionItems;
+	for ( const LR0Items::value_type & symbolItems : items ) {
+		alphabet::Symbol leftHandSide = symbolItems.first;
+		for ( const std::pair < unsigned, std::vector < alphabet::Symbol > > & item : symbolItems.second) {
+			unsigned position = item.first;
+			std::vector < alphabet::Symbol > rightHandSide = item.second;
+
+			if ( position == rightHandSide.size ( ) ) {
+				continue;
+			}
+
+			if ( rightHandSide[position] == symbol ) {
+				transitionItems[leftHandSide].insert ( { position + 1, rightHandSide } );
+			}
+		}
+	}
+
+	return getClosure ( transitionItems, originalGrammar );
+}
+
 } /* namespace parsing */
 
 } /* namespace grammar */
diff --git a/alib2algo/src/grammar/parsing/LRParser.h b/alib2algo/src/grammar/parsing/LRParser.h
index 50c66a06c8e558eaf41d326856379203b00e3df5..561f69bf8d59d050132b20bad9f65900a35d8955 100644
--- a/alib2algo/src/grammar/parsing/LRParser.h
+++ b/alib2algo/src/grammar/parsing/LRParser.h
@@ -23,6 +23,8 @@ public:
 	static grammar::CFG getAugmentedGrammar ( grammar::CFG originalGrammar );
 
 	static LR0Items getClosure ( LR0Items items, grammar::CFG originalGrammar );
+
+	static LR0Items getNextStateItems ( LR0Items items, alphabet::Symbol symbol, grammar::CFG originalGrammar );
 };
 
 } /* namespace parsing */