diff --git a/src/array.c b/src/array.c
index b935f595a8e5ed6fa47f0bef552bd661c8e9c743..e25c278b974290b4b2f43af6dfbb88aa42e26a4a 100644
--- a/src/array.c
+++ b/src/array.c
@@ -23,7 +23,7 @@
 #include "stuff.h"
 #include "bignum.h"
 
-RCSID("$Id: array.c,v 1.123 2002/01/16 02:54:07 nilsson Exp $");
+RCSID("$Id: array.c,v 1.124 2002/03/06 11:01:59 grubba Exp $");
 
 PMOD_EXPORT struct array empty_array=
 {
@@ -2378,8 +2378,14 @@ PMOD_EXPORT struct array *explode_array(struct array *a, struct array *b)
 
 PMOD_EXPORT struct array *implode_array(struct array *a, struct array *b)
 {
-  INT32 e,size;
+  INT32 e, size;
   struct array *ret;
+
+  if (!a->size) {
+    add_ref(a);
+    return a;
+  }
+
   size=0;
   for(e=0;e<a->size;e++)
   {
@@ -2411,7 +2417,7 @@ PMOD_EXPORT struct array *implode_array(struct array *a, struct array *b)
   }
 #ifdef PIKE_DEBUG
   if(size != ret->size)
-    fatal("Implode_array failed miserably\n");
+    fatal("Implode_array failed miserably (%d != %d)\n", size, ret->size);
 #endif
   return ret;
 }