diff --git a/src/mapping.c b/src/mapping.c
index 5354320a64df995a26cdca51d5567efdff6d5a11..5f960514bffb55df55c1e1bdcf3c1ec8d3b500a0 100644
--- a/src/mapping.c
+++ b/src/mapping.c
@@ -4,7 +4,7 @@
 ||| See the files COPYING and DISCLAIMER for more information.
 \*/
 #include "global.h"
-RCSID("$Id: mapping.c,v 1.30 1998/04/24 00:01:32 hubbe Exp $");
+RCSID("$Id: mapping.c,v 1.31 1998/04/27 09:55:32 hubbe Exp $");
 #include "main.h"
 #include "object.h"
 #include "mapping.h"
@@ -694,25 +694,16 @@ struct mapping *merge_mappings(struct mapping *a, struct mapping *b, INT32 op)
 
 struct mapping *add_mappings(struct svalue *argp, INT32 args)
 {
-  struct mapping *ret,*a,*b;
-  switch(args)
-  {
-  case 0: return allocate_mapping(0);
-  case 1: return copy_mapping(argp->u.mapping);
-  case 2: return merge_mappings(argp[0].u.mapping, argp[1].u.mapping, OP_ADD);
-  case 3:
-    a=merge_mappings(argp[0].u.mapping,argp[1].u.mapping,OP_ADD);
-    ret=merge_mappings(a,argp[2].u.mapping,OP_ADD);
-    free_mapping(a);
-    return ret;
-  default:
-    a=add_mappings(argp,args/2);
-    b=add_mappings(argp+args/2,args-args/2);
-    ret=merge_mappings(a,b,OP_ADD);
-    free_mapping(a);
-    free_mapping(b);
-    return ret;
-  }
+  INT32 e,d;
+  struct mapping *ret;
+  struct keypair *k;
+
+  for(e=d=0;d<args;d++) e+=argp[d].u.mapping->size;
+  ret=allocate_mapping(MAP_SLOTS(e));
+  for(d=0;d<args;d++)
+    LOOP(argp[d].u.mapping)
+      mapping_insert(ret, &k->ind, &k->val);
+  return ret;
 }
 
 int mapping_equal_p(struct mapping *a, struct mapping *b, struct processing *p)