diff --git a/src/mapping.c b/src/mapping.c
index c634dac99c7d5768f4f83183f95256c9c12e8758..9ef32966570d1506f2992635f2bde6e138ae0006 100644
--- a/src/mapping.c
+++ b/src/mapping.c
@@ -199,13 +199,11 @@ static void init_mapping(struct mapping *m,
 
     e=MAPPING_DATA_SIZE(hashsize, size);
 
-    md=(struct mapping_data *)xalloc(e);
+    md=xcalloc(1,e);
 
     m->data=md;
     md->hashsize=hashsize;
-    
-    MEMSET((char *)md->hash, 0, sizeof(struct keypair *) * md->hashsize);
-    
+
     md->free_list=MD_KEYPAIRS(md, hashsize);
 #ifndef PIKE_MAPPING_KEYPAIR_LOOP
     for(e=1;e<size;e++)
@@ -214,20 +212,20 @@ static void init_mapping(struct mapping *m,
       mark_free_svalue (&md->free_list[e-1].ind);
       mark_free_svalue (&md->free_list[e-1].val);
     }
-    md->free_list[e-1].next=0;
+    /* md->free_list[e-1].next=0; */
     mark_free_svalue (&md->free_list[e-1].ind);
     mark_free_svalue (&md->free_list[e-1].val);
 #endif /* !PIKE_MAPPING_KEYPAIR_LOOP */
-    md->ind_types = 0;
-    md->val_types = 0;
+    /* md->ind_types = 0; */
+    /* md->val_types = 0; */
     md->flags = flags;
-    md->size = 0;
-    md->refs=0;
+    /* md->size = 0; */
+    /* md->refs=0; */
 #ifdef ATOMIC_SVALUE
     md->ref_type = T_MAPPING_DATA;
 #endif
-    md->valrefs=0;
-    md->hardlinks=0;
+    /* md->valrefs=0; */
+    /* md->hardlinks=0; */
     md->num_keypairs=size;
   }else{
     switch (flags & MAPPING_WEAK) {