diff --git a/src/mapping.c b/src/mapping.c
index 3946447fe637df767d1da6e26ba1aefed09663d6..c45c59e52876d3bc2dee4840cead6591a2351e28 100644
--- a/src/mapping.c
+++ b/src/mapping.c
@@ -350,10 +350,13 @@ static void mapping_rehash_backwards_evil(struct mapping_data *md,
 	}
 	break;
       case MAPPING_WEAK:
-	if ((TYPEOF(from->ind) <= MAX_REF_TYPE) &&
-	    (*from->ind.u.refs > 1) &&
-	    (TYPEOF(from->val) <= MAX_REF_TYPE) &&
-	    (*from->val.u.refs > 1)) {
+	/* NB: Compat: Unreference counted values are counted
+	 *             as multi-referenced here.
+	 */
+	if (((TYPEOF(from->ind) > MAX_REF_TYPE) ||
+	     (*from->ind.u.refs > 1)) &&
+	    ((TYPEOF(from->val) > MAX_REF_TYPE) ||
+	     (*from->val.u.refs > 1))) {
 	  goto keep_keypair;
 	}
 	break;
@@ -440,10 +443,13 @@ static void mapping_rehash_backwards_good(struct mapping_data *md,
 	}
 	break;
       case MAPPING_WEAK:
-	if ((TYPEOF(from->ind) <= MAX_REF_TYPE) &&
-	    (*from->ind.u.refs > 1) &&
-	    (TYPEOF(from->val) <= MAX_REF_TYPE) &&
-	    (*from->val.u.refs > 1)) {
+	/* NB: Compat: Unreference counted values are counted
+	 *             as multi-referenced here.
+	 */
+	if (((TYPEOF(from->ind) > MAX_REF_TYPE) ||
+	     (*from->ind.u.refs > 1)) &&
+	    ((TYPEOF(from->val) > MAX_REF_TYPE) ||
+	     (*from->val.u.refs > 1))) {
 	  goto keep_keypair;
 	}
 	break;