diff --git a/src/t_parser.c b/src/t_parser.c
index 4b2d5cc0fe3079b99e9fecd61e684e9d0b8cd507..666bc850be2bc3f2b7b2d1704d1cd2643de8ab29 100644
--- a/src/t_parser.c
+++ b/src/t_parser.c
@@ -482,6 +482,27 @@ static void test_iterative(gconstpointer backend) {
   g_check_parse_chunks_failed(p, be, "f",1, "uo",2);
 }
 
+static void test_iterative_lookahead(gconstpointer backend) {
+  HParserBackend be = (HParserBackend)GPOINTER_TO_INT(backend);
+  HParser *p;
+
+  // needs 2 lookahead
+  p = h_sequence(h_ch('f'), h_choice(h_token((uint8_t*)"oo", 2),
+                                     h_token((uint8_t*)"ou", 2), NULL), NULL);
+  if(h_compile(p, be, (void *)2) != 0) {
+    g_test_message("Compile failed");
+    g_test_fail();
+    return;
+  }
+
+  // partial chunk consumed
+  g_check_parse_chunks_match_(p, "fo",2, "o",1, "(u0x66 <6f.6f>)");
+  g_check_parse_chunks_match_(p, "fo",2, "u",1, "(u0x66 <6f.75>)");
+  g_check_parse_chunks_failed_(p, "go",2, "o",1);
+  g_check_parse_chunks_failed_(p, "fa",2, "u",1);
+  g_check_parse_chunks_failed_(p, "fo",2, "b",1);
+}
+
 static void test_ambiguous(gconstpointer backend) {
   HParser *d_ = h_ch('d');
   HParser *p_ = h_ch('+');
@@ -731,6 +752,7 @@ void register_parser_tests(void) {
   //g_test_add_data_func("/core/parser/llk/leftrec", GINT_TO_POINTER(PB_LLk), test_leftrec);
   g_test_add_data_func("/core/parser/llk/rightrec", GINT_TO_POINTER(PB_LLk), test_rightrec);
   g_test_add_data_func("/core/parser/llk/iterative", GINT_TO_POINTER(PB_LLk), test_iterative);
+  g_test_add_data_func("/core/parser/llk/iterative/lookahead", GINT_TO_POINTER(PB_LLk), test_iterative_lookahead);
 
   g_test_add_data_func("/core/parser/regex/token", GINT_TO_POINTER(PB_REGULAR), test_token);
   g_test_add_data_func("/core/parser/regex/ch", GINT_TO_POINTER(PB_REGULAR), test_ch);
diff --git a/src/test_suite.h b/src/test_suite.h
index 76f7e878679648cd29c3c600fa723b1291e9638e..49f13cf81c50864eb8ae03ed705f582a7dd1ca0f 100644
--- a/src/test_suite.h
+++ b/src/test_suite.h
@@ -155,6 +155,10 @@
       g_test_fail();							\
       break;								\
     }									\
+    g_check_parse_chunks_failed_(parser, chunk1, c1_len, chunk2, c2_len); \
+  } while(0)
+
+#define g_check_parse_chunks_failed_(parser, chunk1, c1_len, chunk2, c2_len) do {	\
     HSuspendedParser *s = h_parse_start(parser);			\
     if(!s) {								\
       g_test_message("Chunk-wise parsing not available");		\
@@ -177,6 +181,10 @@
       g_test_fail();							\
       break;								\
     }									\
+    g_check_parse_chunks_match_(parser, chunk1, c1_len, chunk2, c2_len, result); \
+  } while(0)
+
+#define g_check_parse_chunks_match_(parser, chunk1, c1_len, chunk2, c2_len, result) do { \
     HSuspendedParser *s = h_parse_start(parser);			\
     if(!s) {								\
       g_test_message("Chunk-wise parsing not available");		\