diff --git a/src/backends/glr.c b/src/backends/glr.c
index ea69ea37ebb9275387b2eb67cf0e21fc64ac8960..06722b1963ed51d4aefc095d7a39a30d10633396 100644
--- a/src/backends/glr.c
+++ b/src/backends/glr.c
@@ -174,9 +174,9 @@ static bool glr_step(HParseResult **result, HSlist *engines,
     HSlistNode *x;
     for(x=engines->head; x; x=x->next) {
       HLREngine *eng = x->elem;
-      if(eng->state == engine->state) {
-        x->elem = lrengine_merge(eng, engine);
-        break;
+      if(eng->state == engine->state && eng->input.index == engine->input.index) {
+    	x->elem = lrengine_merge(eng, engine);
+    	break;
       }
     }
     if(!x)  // no merge happened
diff --git a/src/t_regression.c b/src/t_regression.c
index 2c28b99efe6a36e69e5831044dadcbcc381f4d18..c245eff5b841f28ac47814869b22a950be0069fe 100644
--- a/src/t_regression.c
+++ b/src/t_regression.c
@@ -472,6 +472,57 @@ static void test_issue83() {
   g_check_cmp_int(r, ==, 0);
 }
 
+
+static void test_bug60() {
+
+//There is probably an even smaller example that shows the issue
+
+	  HParser *zed = NULL;
+	  HParser *alpha = NULL;
+	  HParser *vchar = NULL;
+	  HParser *why = NULL;
+	  HParser *plural_zed = NULL;
+	  HParser *plural_zed_zed = NULL;
+	  HParser *a_to_zed = NULL;
+	  HParser *alphas = NULL;
+	  HParser *rule = NULL;
+	  HParser *rulelist = NULL;
+	  HParser *p = NULL;
+	  HParseResult *r = NULL;
+	  int n;
+
+	  zed =  h_ch('z');
+
+	  vchar = h_ch_range(0x79, 0x7a); // allows y and z
+
+	  alpha = h_ch('a');
+
+	  why = h_ch('y');
+
+	  plural_zed = h_sequence(
+	      why,
+	      h_many(h_choice(alpha, vchar, NULL)),
+	      NULL);
+	  plural_zed_zed = h_choice(plural_zed, zed, NULL);
+	  alphas = h_choice(alpha, h_sequence(plural_zed_zed, alpha, NULL), NULL);
+
+	  a_to_zed = h_sequence(
+	      zed,
+	      h_many(h_sequence(h_many1(alphas), zed, NULL)),
+	      NULL);
+	  rule = h_sequence(a_to_zed, plural_zed_zed, NULL);
+	  rulelist = h_many1(h_choice(
+	      rule,
+	      h_sequence(h_many(alphas), plural_zed_zed, NULL),
+	      NULL));
+
+	  p = rulelist;
+
+	  g_check_parse_ok(p, PB_GLR, "ayzza", 5);
+	  g_check_parse_match(p, PB_GLR, "ayzza", 5, "(((u0x61) (u0x79 (u0x7a u0x7a u0x61))))");
+
+}
+
 void register_regression_tests(void) {
   g_test_add_func("/core/regression/bug118", test_bug118);
   g_test_add_func("/core/regression/seq_index_path", test_seq_index_path);
@@ -488,4 +539,5 @@ void register_regression_tests(void) {
   g_test_add_func("/core/regression/issue87", test_issue87);
   g_test_add_func("/core/regression/issue92", test_issue92);
   g_test_add_func("/core/regression/issue83", test_issue83);
+  g_test_add_func("/core/regression/bug60", test_bug60);
 }