diff --git a/lib/modules/Array.pmod b/lib/modules/Array.pmod
index b16aad3d64cf2843ccca3f3e26b60f825c50b258..f250f10f7640be9d8d456dcacef1a1bd56227692 100644
--- a/lib/modules/Array.pmod
+++ b/lib/modules/Array.pmod
@@ -5,11 +5,11 @@ mixed map(mixed arr, mixed fun, mixed ... args)
   int e;
   mixed *ret;
 
-  switch(sprintf("%t",fun))
-  {
-  case "mapping":
+  if(mappingp(arr))
     return mkmapping(indices(arr),map(values(arr),fun,@args));
 
+  switch(sprintf("%t",fun))
+  {
   case "int":
     return arr(@args);