diff --git a/src/builtin.cmod b/src/builtin.cmod
index 3033f1ac49197fa7a9ee7ea3e10c470acb28b2bb..73b6b130ccaaea0bff762c74878cbe3640192326 100644
--- a/src/builtin.cmod
+++ b/src/builtin.cmod
@@ -5233,38 +5233,16 @@ PIKECLASS List
     }
   }
 
-  /* These two functions perform the same thing,
-   * but are optimized to minimize recursion.
-   */
-  static void gc_check_list_node_backward(struct pike_list_node *node,
-					  const char *msg);
-  static void gc_check_list_node_forward(struct pike_list_node *node,
-					 const char *msg)
-  {
-    while (node && !debug_gc_check(&node->refs, msg)) {
-      if (node->next)
-	debug_gc_check_svalues(&node->val, 1,  " as a list node value");
-      gc_check_list_node_backward(node->prev, msg);
-      node = node->next;
-    }
-  }
-
-  static void gc_check_list_node_backward(struct pike_list_node *node,
-					  const char *msg)
-  {
-    while (node && !debug_gc_check(&node->refs, msg)) {
-      if (node->prev)
-	debug_gc_check_svalues(&node->val, 1, " as a list node value");
-      gc_check_list_node_forward(node->next, msg);
-      node = node->prev;
-    }
-  }
-
   /* Called at gc_check time. */
   GC_CHECK
   {
-    gc_check_list_node_backward(HEAD_SENTINEL(THIS), " as a list node");
-    gc_check_list_node_forward(TAIL_SENTINEL(THIS), " as a list node");
+    struct pike_list_node *node = THIS->head;
+    struct pike_list_node *next;
+
+    while ((next = node->next)) {
+      debug_gc_check_svalues(&node->val, 1, "as a list node value");
+      node = next;
+    }
   }
 
   /* Called at gc_mark time */
@@ -5613,12 +5591,6 @@ PIKECLASS List
       }
     }
 
-    /* Called at gc_check time. */
-    GC_CHECK
-    {
-      gc_check_list_node_forward(THIS->cur, " held by an iterator");
-    }  
-
     /* These two functions perform the same thing,
      * but are optimized to minimize recursion.
      */