diff --git a/src/encode.c b/src/encode.c
index 4d1b31040dcd56fe034893d92d4cf2911d905e75..5b776eba0e91ce6614b0f9fe0e588bf615c4b891 100644
--- a/src/encode.c
+++ b/src/encode.c
@@ -1385,7 +1385,12 @@ static void encode_value2(struct svalue *val, struct encode_data *data, int forc
 			       "is inherited.\n", id->name);
 		  }
 		  gs_flags = ref->id_flags & PTR_FROM_INT(p, i)->id_flags;
-		  if (id_dumped[PTR_FROM_INT(p, i)->identifier_offset]) {
+		  if (id_dumped[PTR_FROM_INT(p, i)->identifier_offset] ||
+		      (i < d)) {
+		    /* Either already dumped, or the dispatcher is in
+		     * front of us, which indicates that we are overloading
+		     * an inherited function with a variant.
+		     */
 		    gs_flags |= ID_VARIANT;
 		  } else {
 		    /* First variant. */