diff --git a/src/mapping.c b/src/mapping.c
index c12be9e684467b28b271a0da5069662cf7812a62..2039457b60e8217334018ffd3fc5ed64be29dd5b 100644
--- a/src/mapping.c
+++ b/src/mapping.c
@@ -692,6 +692,8 @@ struct mapping_data *copy_mapping_data(struct mapping_data *md)
   add_ref(nmd);	/* For DMALLOC... */
   nmd->valrefs=0;
   nmd->hardlinks=0;
+  nmd->ind_types = md->ind_types;
+  nmd->val_types = md->val_types;
 
   /* FIXME: What about nmd->flags? */
 
@@ -1185,6 +1187,10 @@ PMOD_EXPORT void map_delete_no_free(struct mapping *m,
     m->debug_size--;
 #endif
 
+  if (UNLIKELY(!md->size)) {
+    md->ind_types = md->val_types = 0;
+  }
+
   if (!(md->flags & MAPPING_FLAG_NO_SHRINK)) {
     if((MAP_SLOTS(md->size) < md->hashsize * MIN_LINK_LENGTH) &&
        (md->hashsize > AVG_LINK_LENGTH)) {