diff --git a/src/modules/Image/blit.c b/src/modules/Image/blit.c
index 2930c504b0fd5575ce0d985f0d39634f424cd2d5..c4a6f7dac784084f69a652f8157e11c935561d70 100644
--- a/src/modules/Image/blit.c
+++ b/src/modules/Image/blit.c
@@ -1,10 +1,10 @@
-/* $Id: blit.c,v 1.21 1997/11/23 07:22:44 per Exp $ */
+/* $Id: blit.c,v 1.22 1997/11/23 21:58:53 per Exp $ */
 #include "global.h"
 
 /*
 **! module Image
 **! note
-**!	$Id: blit.c,v 1.21 1997/11/23 07:22:44 per Exp $
+**!	$Id: blit.c,v 1.22 1997/11/23 21:58:53 per Exp $
 **! class image
 */
 
@@ -104,26 +104,26 @@ static INLINE void getrgb(struct image *img,
 
 void img_clear(rgb_group *dest,rgb_group rgb,INT32 size)
 {
-  int ok = 0;
-   THREADS_ALLOW();
-   if(sizeof(rgb.r) == 1)
-   {
-     if(rgb.r == rgb.b && rgb.b == rgb.g)
-       (ok = 1),MEMSET(dest, rgb.r, size*sizeof(rgb_group));
-   } else {
-     if(!rgb.r && !rgb.b && !rgb.g)
-       (ok = 1),MEMSET(dest, 0, size*sizeof(rgb_group));
-   }
-   if(!ok)
-   {
-       int increment = 1;
-       rgb_group *from = dest;
-       *(dest++)=rgb;
-       for (; size > increment; size-=increment,dest+=increment,increment*=2) 
-	 MEMCPY(dest,from,increment*sizeof(rgb_group));
-       MEMCPY(dest,from,size*sizeof(rgb_group));
-   }
-   THREADS_DISALLOW();
+  if(!size) return;
+  THREADS_ALLOW();
+  if(!rgb.r && !rgb.b && !rgb.g)
+    MEMSET(dest, 0, size*sizeof(rgb_group));
+  else if((sizeof(rgb.r) == 1) && (rgb.r == rgb.b && rgb.b == rgb.g))
+    MEMSET(dest, rgb.r, size*sizeof(rgb_group));
+  else if(size)
+  {
+    int increment = 1;
+    rgb_group *from = dest;
+    *(dest++)=rgb;
+    size--;
+    for (; size > increment; size-=increment,dest+=increment) 
+    {
+      MEMCPY(dest,from,increment*sizeof(rgb_group));
+      if(increment < 1024) increment *= 2;
+    }
+    if(size>0) MEMCPY(dest,from,size*sizeof(rgb_group));
+  }
+  THREADS_DISALLOW();
 }
 
 void img_box_nocheck(INT32 x1,INT32 y1,INT32 x2,INT32 y2)
diff --git a/src/modules/Image/image.c b/src/modules/Image/image.c
index 3f76f2495312a358b95a168b48cda3e1520e77d5..212b1c47a6d750c90fbe2585649ec5c5437ccfcd 100644
--- a/src/modules/Image/image.c
+++ b/src/modules/Image/image.c
@@ -1,9 +1,9 @@
-/* $Id: image.c,v 1.67 1997/11/23 07:22:45 per Exp $ */
+/* $Id: image.c,v 1.68 1997/11/23 21:58:55 per Exp $ */
 
 /*
 **! module Image
 **! note
-**!	$Id: image.c,v 1.67 1997/11/23 07:22:45 per Exp $
+**!	$Id: image.c,v 1.68 1997/11/23 21:58:55 per Exp $
 **! class image
 **!
 **!	The main object of the <ref>Image</ref> module, this object
@@ -82,7 +82,7 @@
 
 #include "stralloc.h"
 #include "global.h"
-RCSID("$Id: image.c,v 1.67 1997/11/23 07:22:45 per Exp $");
+RCSID("$Id: image.c,v 1.68 1997/11/23 21:58:55 per Exp $");
 #include "pike_macros.h"
 #include "object.h"
 #include "constants.h"
@@ -1176,6 +1176,7 @@ image_tuned_box_leftright(const rgba_group left, const rgba_group right,
 {
   int x, y=height, w;
   rgb_group *from = dest;
+  if(!xsize || !height) return;
   for(x=0; x<length; x++)
   {
     (dest+x)->r = (((long)left.r)*(length-x)+((long)right.r)*(x))/length;
@@ -1194,6 +1195,7 @@ image_tuned_box_topbottom(const rgba_group left, const rgba_group right,
 {
   int x,y;
   rgb_group color, *from, old;
+  if(!xsize || !height) return;
   if(length > 128)
   {
     for(y=0; y<height; y++)