diff --git a/src/lisp/gencgc.c b/src/lisp/gencgc.c
index e02e52ae08925e598145cacfc1eadcd34edb1724..2f7ecf13203fdce4374914bbeb35d6746ebdee63 100644
--- a/src/lisp/gencgc.c
+++ b/src/lisp/gencgc.c
@@ -351,6 +351,15 @@ boolean gencgc_zero_check_during_free_heap = TRUE;
 boolean gencgc_zero_check_during_free_heap = FALSE;
 #endif
 
+/*
+ * For now, enable the gencgc_zero_check if gencgc_unmap_zero is lazy.
+ * XXX: Remove this additional condition when we feel that
+ * gencgc_unmap_zero is good enough.
+ */
+
+#define DO_GENCGC_ZERO_CHECK	(gencgc_zero_check || (gencgc_unmap_zero == MODE_LAZY))
+#define DO_GENCGC_ZERO_CHECK_DURING_FREE_HEAP	(gencgc_zero_check_during_free_heap || (gencgc_unmap_zero == MODE_LAZY))
+
 /*
  * The minimum size for a large object.
  */
@@ -959,7 +968,11 @@ handle_madvise_first_page(int first_page)
                 first_page, flags, page_table[first_page].bytes_used);
     }
     
+#if 0
     if ((flags & PAGE_MADVISE_MASK) && !PAGE_ALLOCATED(first_page)) {
+#else
+    if (!PAGE_ALLOCATED(first_page)) {
+#endif
         int *page_start = (int *) page_address(first_page);
         
         if (gencgc_debug_madvise) {
@@ -967,7 +980,10 @@ handle_madvise_first_page(int first_page)
         }
         if (*page_start != 0) {
             memset(page_start, 0, GC_PAGE_SIZE);
+#if 0
             page_table[first_page].flags &= ~PAGE_MADVISE_MASK;
+#else
+#endif
         }
     }
     if (gencgc_debug_madvise) {
@@ -981,7 +997,11 @@ handle_madvise_other_pages(int first_page, int last_page)
     int i;
     
     for (i = first_page + 1; i <= last_page; ++i) {
+#if 0
         if (page_table[i].flags & PAGE_MADVISE_MASK) {
+#else
+            if (!PAGE_ALLOCATED(i)) {
+#endif
             int *page_start = (int *) page_address(i);
 
             if (gencgc_debug_madvise) {
@@ -990,7 +1010,9 @@ handle_madvise_other_pages(int first_page, int last_page)
             }
             if (*page_start != 0) {
                 memset(page_start, 0, GC_PAGE_SIZE);
+#if 0
                 page_table[i].flags &= ~PAGE_MADVISE_MASK;
+#endif
             }
         }
     }
@@ -1162,7 +1184,7 @@ gc_alloc_new_region(int nbytes, int unboxed, struct alloc_region *alloc_region)
         handle_madvise_other_pages(first_page, last_page);
     }
 
-    if (gencgc_zero_check) {
+    if (DO_GENCGC_ZERO_CHECK) {
 	int *p;
 
 	for (p = (int *) alloc_region->start_addr;
@@ -7000,7 +7022,11 @@ free_oldspace(void)
               }
 
               for (page = first_page; page < last_page; ++page) {
-                  page_table[page].flags |= PAGE_MADVISE_MASK;
+                  if (PAGE_ALLOCATED(page)) {
+                      fprintf(stderr, "Page %d is allocated!\n", page);
+
+                  }
+                  
                   page_start = (int *) page_address(page);
                   *page_start = 0xdead0000;
               }
@@ -7956,7 +7982,7 @@ gc_free_heap(void)
 	    if (addr == NULL || addr != page_start)
 		fprintf(stderr, "gc_zero: page moved, 0x%08lx ==> 0x%08lx!\n",
 			(unsigned long) page_start, (unsigned long) addr);
-	} else if (gencgc_zero_check_during_free_heap && page < 16384) {
+	} else if (DO_GENCGC_ZERO_CHECK_DURING_FREE_HEAP && page < 16384) {
 	    int *page_start;
 	    unsigned i;