diff --git a/src/array.c b/src/array.c
index a6ab91614e0a845dc776123aaad2c2cd90d102a5..86b905098ec2d5c7d9bfa5d3cfaff4782047f71e 100644
--- a/src/array.c
+++ b/src/array.c
@@ -23,7 +23,7 @@
 #include "stuff.h"
 #include "bignum.h"
 
-RCSID("$Id: array.c,v 1.100 2001/01/03 16:36:45 grubba Exp $");
+RCSID("$Id: array.c,v 1.101 2001/01/03 21:35:13 grubba Exp $");
 
 PMOD_EXPORT struct array empty_array=
 {
@@ -680,9 +680,25 @@ static INLINE int set_svalue_cmpfun(struct svalue *a, struct svalue *b)
 
       case T_OBJECT:
 	if(a->u.object == b->u.object) return 0;
-	if(a->u.refs < b->u.refs) { def=-1; break; }
-	if(a->u.refs > b->u.refs) { def=1; break; }
-	def = (a<b)?-1:1;
+	if(a->u.object->prog == b->u.object->prog) {
+	  if (a->u.object->prog) {
+	    if(a->u.object < b->u.object) {
+	      def = -1;
+	    } else {
+	      def = 1;
+	    }
+	  } else {
+	    /* Destructed objects are considered equal. */
+	    return 0;
+	  }
+	} else {
+	  /* Attempt to group objects cloned from the same program */
+	  if (a->u.object->prog < b->u.object->prog) {
+	    def = -1;
+	  } else {
+	    def = 1;
+	  }
+	}
 	break;
     }
   }else{