diff --git a/lib/modules/Array.pmod b/lib/modules/Array.pmod
index b96bd314f669e310ab562c19effb00989cb93eab..0b6d2c81a94b97335f5c0ee512657184a8363411 100644
--- a/lib/modules/Array.pmod
+++ b/lib/modules/Array.pmod
@@ -197,22 +197,24 @@ array(array(array(mixed))) diff3(array mid,array left,array right)
    [lmid,ldst]=diff(mid,left);
    [rmid,rdst]=diff(mid,right);
 
+   werror(sprintf("%O\n",({rmid,rdst})));
+
    array res=({});
    int lpos=0,rpos=0;
    int l=0,r=0,n;
    array eq=({});
    int x;
 
-   for (n=0; n<sizeof(mid);)
+   for (n=0; ;)
    {
-      while (lpos>=sizeof(lmid[l]))
+      while (l<sizeof(lmid) && lpos>=sizeof(lmid[l]))
       {
 	 if (sizeof(ldst[l])>lpos)
 	    res+=({({({}),ldst[l][lpos..],({})})});
 	 l++;
 	 lpos=0;
       }
-      while (rpos>=sizeof(rmid[r])) 
+      while (r<sizeof(rmid) && rpos>=sizeof(rmid[r])) 
       {
 	 if (sizeof(rdst[r])>rpos)
 	    res+=({({({}),({}),rdst[r][rpos..]})});
@@ -220,6 +222,8 @@ array(array(array(mixed))) diff3(array mid,array left,array right)
 	 rpos=0;
       }
 
+      if (n==sizeof(mid)) break;
+
       x=min(sizeof(lmid[l])-lpos,sizeof(rmid[r])-rpos);
 
       if (lmid[l]==ldst[l] && rmid[r]==rdst[r])
@@ -244,8 +248,8 @@ array(array(array(mixed))) diff3(array mid,array left,array right)
 		  rdst[r][rpos..rpos+x-1]})});
       }
 
-//       werror(sprintf("-> %-5{%O%} %-5{%O%} %-5{%O%}"
-// 		     " x=%d l=%d:%d r=%d:%d \n",@res[-1],x,l,lpos,r,rpos));
+//        werror(sprintf("-> %-5{%O%} %-5{%O%} %-5{%O%}"
+//  		     " x=%d l=%d:%d r=%d:%d \n",@res[-1],x,l,lpos,r,rpos));
 	 
       rpos+=x;
       lpos+=x;