diff --git a/src/encode.c b/src/encode.c
index 2a0e3465ad872ab68ed1cd9a277a12a3363fc513..3fa4aebca6d051272cd8d29f53d293a52a8b134d 100644
--- a/src/encode.c
+++ b/src/encode.c
@@ -4660,13 +4660,12 @@ static void decode_value2(struct decode_data *data)
 
 		/* prog */
 		decode_value2(data);
-		if (TYPEOF(Pike_sp[-1]) != T_PROGRAM) {
+		if (!(prog = program_from_svalue(Pike_sp-1))) {
 		  ref_push_program (p);
 		  decode_error(data, Pike_sp - 1,
 			       "Bad inherit: Expected program, got: %O\n",
 			       Pike_sp - 2);
 		}
-		prog = Pike_sp[-1].u.program;
 		if (prog == placeholder_program) {
 		  ref_push_program (p);
 		  decode_error (data, Pike_sp - 1,