diff --git a/src/module_support.c b/src/module_support.c
index 436f759f6d16dc02d581bfcb7effe93b19354f32..5d8f0f58df8da2fd53f7a71eee252efa09d79b9a 100644
--- a/src/module_support.c
+++ b/src/module_support.c
@@ -117,7 +117,7 @@ int va_get_args(struct svalue *s,
       *va_arg(ap, struct array **)=s->u.array;
       break;
     case 'f':
-      if(s->type != T_ARRAY) return ret;
+      if(s->type != T_FLOAT) return ret;
       *va_arg(ap, float *)=s->u.float_number;
       break;
     case 'm':
@@ -168,6 +168,21 @@ void get_all_args(char *fname, INT32 args, char *format,  ... )
   va_start(ptr, format);
   ret=va_get_args(sp-args, args, format, ptr);
   va_end(ptr);
-  if((long)ret != (long)strlen(format) / 2)
-    error("Bad argument %d to %s()\n", ret+1, fname);
+  if((long)ret*2 != (long)strlen(format)) {
+    char *expected_type;
+    switch(format[ret*2+1]) {
+    case 'd': case 'i': expected_type = "int"; break;
+    case 's': case 'S': expected_type = "string"; break;
+    case 'a': expected_type = "array"; break;
+    case 'f': expected_type = "float"; break;
+    case 'm': expected_type = "mapping"; break;
+    case 'M': expected_type = "multiset"; break;
+    case 'o': expected_type = "object"; break;
+    case 'p': expected_type = "program"; break;
+    case '*': expected_type = "mixed"; break;
+    default: expected_type = "Unknown"; break;
+    }
+    error("Bad argument %d to %s(). Expected %s\n", ret+1, fname,
+	  expected_type);
+  }
 }