diff --git a/lib/modules/Array.pmod b/lib/modules/Array.pmod
index 874950c843f1bc6a07e7961ca22bf1cb2d4c531a..85c5796506a056c0b71767cdda87289d6ae1789b 100644
--- a/lib/modules/Array.pmod
+++ b/lib/modules/Array.pmod
@@ -15,6 +15,9 @@ mixed map(mixed arr, mixed fun, mixed ... args)
   if(mappingp(arr))
     return mkmapping(indices(arr),map(values(arr),fun,@args));
 
+  if(multisetp(arr))
+    return mkmultiset(map(indices(arr,fun,@args)));
+
   switch(sprintf("%t",fun))
   {
   case "int":
@@ -50,7 +53,13 @@ mixed filter(mixed arr, mixed fun, mixed ... args)
     for(e=0;e<sizeof(ret);e++) if(ret[e]) r[i[e]]=v[e];
 
     return r;
-  }else{
+  }
+  if(multisetp(arr))
+  {
+    return mkmultiset(filter(indices(arr,fun,@args)));
+  }
+  else
+  {
     int d;
     ret=map(arr,fun,@args);
     for(e=0;e<sizeof(arr);e++) if(ret[e]) ret[d++]=arr[e];