diff --git a/src/modules/Image/encodings/psd.c b/src/modules/Image/encodings/psd.c
index 02dd2bf39552a456e4ecb9bc0ae36d32813be774..c90d03998a19fe603cd98924c8055f08ba0d1209 100644
--- a/src/modules/Image/encodings/psd.c
+++ b/src/modules/Image/encodings/psd.c
@@ -1,5 +1,5 @@
 #include "global.h"
-RCSID("$Id: psd.c,v 1.11 1999/05/30 20:12:19 mirar Exp $");
+RCSID("$Id: psd.c,v 1.12 1999/07/16 19:22:42 per Exp $");
 
 #include "image_machine.h"
 
@@ -265,11 +265,12 @@ static void decode_layers_and_masks( struct psd_image *dst,
 
 static struct buffer
 packbitsdecode(struct buffer src, 
-               struct buffer dst)
+               struct buffer dst, 
+               int nbytes)
 {
   int n, b;
 
-  while( dst.len > 0  )
+  while( nbytes--  )
   {
     n = read_uchar( &src );
     if(n >= 128)
@@ -343,22 +344,18 @@ static void f_decode_packbits_encoded(INT32 args)
   switch(compression)
   {
    case 1:
-     push_text("");
-     while(nelems--)
-     {
-       dest = begin_shared_string( width );
-       d.str = dest->str; d.len = width;
-       ob = packbitsdecode( ob, d );
-       ref_push_string( end_shared_string( dest ) );
-       f_add( 2 );
-     }
+     dest = begin_shared_string( width * nelems );
+     d.str = dest->str; d.len = width*nelems;
+/*      while(nelems--) */
+     /*ob =*/ 
+     packbitsdecode( ob, d, width*nelems );
+     push_string( end_shared_string( dest ) );
      break;
    case 0:
      push_string( make_shared_binary_string(b.str,b.len));
      break;
    default:
      error("Impossible compression (%d)!\n", src->str[1]);
-
   }
   stack_swap();
   pop_stack();