diff --git a/src/encode.c b/src/encode.c
index e713561d993f5b42ea7b4a9178c483d0ef321dfd..b2e96f5c6586ede0c5724f72abb6711d6537a36b 100644
--- a/src/encode.c
+++ b/src/encode.c
@@ -3225,6 +3225,13 @@ static void decode_value2(struct decode_data *data)
 	    break;
 	  }
 
+	  if ((p->flags & PROGRAM_NEEDS_PARENT)) {
+	    EDB(2, fprintf(stderr, "%*sKeeping %s to keep parent pointer.\n",
+			   data->depth, "",
+			   get_name_of_type(TYPEOF(Pike_sp[-1]))));
+	    break;
+	  }
+
 	  add_ref(p);
 	  pop_stack();
 	  push_program(p);