diff --git a/src/mapping.c b/src/mapping.c
index cb4db69880a68ed6e3c3c6b36d73b56cdb691379..0da050c3d42ff2c4b83e3fc5d9f05f8d2e3b2324 100644
--- a/src/mapping.c
+++ b/src/mapping.c
@@ -398,7 +398,7 @@ void check_mapping_for_destruct(struct mapping *m)
   if(d_flag > 1) check_mapping_type_fields(m);
 #endif
 
-  if((m->ind_types | m->val_types) & BIT_OBJECT)
+  if((m->ind_types | m->val_types) & (BIT_OBJECT | BIT_FUNCTION))
   {
     val_types = ind_types = 0;
     m->val_types |= BIT_INT;
@@ -408,7 +408,8 @@ void check_mapping_for_destruct(struct mapping *m)
       {
 	check_destructed(& k->val);
 	
-	if(k->ind.type == T_OBJECT && !k->ind.u.object->prog)
+	if((k->ind.type == T_OBJECT || k->ind.type == T_FUNCTION) &&
+	   !k->ind.u.object->prog)
 	{
 	  *prev=k->next;
 	  free_svalue(& k->ind);