#include "genesis/simple-fun.h"
 #include "save.h"
 #include "genesis/hash-table.h"
+#include "genesis/instance.h"
+#include "genesis/layout.h"
 
 /* forward declarations */
 page_index_t  gc_find_freeish_pages(long *restart_page_ptr, long nbytes,
                 case SINGLE_FLOAT_WIDETAG:
 #endif
                 case UNBOUND_MARKER_WIDETAG:
-                case INSTANCE_HEADER_WIDETAG:
                 case FDEFN_WIDETAG:
                     count = 1;
                     break;
 
+                case INSTANCE_HEADER_WIDETAG:
+                    {
+                        lispobj nuntagged;
+                        long ntotal = HeaderValue(thing);
+                        lispobj layout = ((struct instance *)start)->slots[0];
+                        if (!layout) {
+                            count = 1;
+                            break;
+                        }
+                        nuntagged = ((struct layout *)native_pointer(layout))->n_untagged_slots;
+                        verify_space(start + 1, ntotal - fixnum_value(nuntagged));
+                        count = ntotal + 1;
+                        break;
+                    }
                 case CODE_HEADER_WIDETAG:
                     {
                         lispobj object = *start;
 
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.9.9.32"
+"0.9.9.33"