diff --git a/lisp/gencgc.c b/lisp/gencgc.c
index 2e5e2cd8abc1ef18d4ed1e7f31a4642192000c36..4ffd13bd3b03b932a9e40b750fca5da0ff9cbf91 100644
--- a/lisp/gencgc.c
+++ b/lisp/gencgc.c
@@ -7,7 +7,7 @@
  *
  * Douglas Crosher, 1996, 1997, 1998, 1999.
  *
- * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gencgc.c,v 1.73 2006/07/20 16:19:35 rtoy Exp $
+ * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/gencgc.c,v 1.74 2006/07/21 17:36:10 rtoy Exp $
  *
  */
 
@@ -3679,11 +3679,25 @@ free_hash_entry(struct hash_table *hash_table, int hash_index, int kv_index)
 
     if (free_p) {
 	unsigned count = fixnum_value(hash_table->number_entries);
+        lispobj* kv_vector = (lispobj *) PTR(hash_table->table);
+        lispobj empty_symbol;
+        
 
 	gc_assert(count > 0);
 	hash_table->number_entries = make_fixnum(count - 1);
 	next_vector[kv_index] = fixnum_value(hash_table->next_free_kv);
 	hash_table->next_free_kv = make_fixnum(kv_index);
+        /*
+         * I (rtoy) think we also need to clear out the key and value
+         * in the kv-vector.  If we don't, maphash and
+         * with-hash-table-iterator thinks this entry is not empty.
+         */
+        
+        kv_vector += 2;         /* Skip over vector header and length slots */
+        empty_symbol = kv_vector[1];
+
+        kv_vector[2 * kv_index] = empty_symbol;
+        kv_vector[2 * kv_index + 1] = empty_symbol;
     }
 }