diff --git a/src/mapping.c b/src/mapping.c
index a10284312bee56f99d5c7ba1171e085792071253..bf9881baf36ae96b51c75a81cf34109bab691232 100644
--- a/src/mapping.c
+++ b/src/mapping.c
@@ -1184,9 +1184,9 @@ PMOD_EXPORT void map_delete_no_free(struct mapping *m,
   if(m->data ==md)
     m->debug_size--;
 #endif
-  
-  if(md->size < (md->hashsize + 1) * MIN_LINK_LENGTH)
-  {
+
+  if((md->size < md->hashsize * MIN_LINK_LENGTH) &&
+     (md->hashsize > AVG_LINK_LENGTH)) {
     debug_malloc_touch(m);
     rehash(m, MAP_SLOTS(m->data->size));
   }
@@ -1260,8 +1260,8 @@ PMOD_EXPORT void check_mapping_for_destruct(struct mapping *m)
     md->val_types = val_types;
     md->ind_types = ind_types;
 
-    if(MAP_SLOTS(md->size) < md->hashsize * MIN_LINK_LENGTH)
-    {
+    if((MAP_SLOTS(md->size) < md->hashsize * MIN_LINK_LENGTH) &&
+       (md->hashsize > AVG_LINK_LENGTH)) {
       debug_malloc_touch(m);
       rehash(m, MAP_SLOTS(md->size));
     }