diff -U 3 -r -b hplip-3.9.2.orig/prnt/backend/hp.c hplip-3.9.2.local/prnt/backend/hp.c
--- hplip-3.9.2.orig/prnt/backend/hp.c	2009-02-20 01:34:46.000000000 +0100
+++ hplip-3.9.2.local/prnt/backend/hp.c	2009-10-11 17:20:16.000000000 +0200
@@ -382,17 +382,18 @@
       pthread_mutex_lock(&pa->mutex);
       status = pa->current_status;
       pthread_mutex_unlock(&pa->mutex);
+BUG("---- get_..status() status = %d", status);
    }
    else
    {
       status = VSTATUS_IDLE; /* set default */
       r = hpmud_get_device_id(dd, id, sizeof(id), &len);
+BUG("---- get_..status() len = %d, \"%s\"", len, id);
       if (!(r == HPMUD_R_OK || r == HPMUD_R_DEVICE_BUSY))
       {
          status = 5000+r;      /* no deviceid, return some error */
          goto bugout;
       }
-   
       /* Check for valid S-field in device id string. */
       if ((pSf = strstr(id, ";S:")) == NULL)
       {
@@ -414,6 +415,11 @@
       }
       else
       {
+/*
+  ;S:038088C4840F10210278cb0000041b8003846b8003e47b8006444b8006448b8006445b8
+  printer canceled the job
+  ;S:038088C4840F10210578cb0000041b8003846b8003e47b8006444b8006448b8006445b8
+*/
          /* Valid S-field, get version number. */
          pSf+=3;
          ver = 0; 
@@ -603,6 +609,7 @@
 int main(int argc, char *argv[])
 {
    int fd;
+   int trfd = -1;
    int copies;
    int len, status, cnt;
    char buf[HPMUD_BUFFER_SIZE];
@@ -610,7 +617,7 @@
    struct pjl_attributes pa;
    HPMUD_DEVICE hd=-1;
    HPMUD_CHANNEL cd=-1;
-   int n, total, retry=0, size, pages;
+   int n, total, retry=0, size, pages, tot_cnt;
    enum HPMUD_RESULT stat;
    char *printer = getenv("PRINTER"); 
    
@@ -652,6 +659,8 @@
       copies = atoi(argv[4]);
    }
 
+trfd = open("/tmp/hplip-trace.dmp", O_WRONLY | O_CREAT | O_TRUNC, 0644);
+
    init_dbus();
 
    fputs("STATE: +connecting-to-device\n", stderr);
@@ -689,6 +698,7 @@
    while (copies > 0)
    {
       copies--;
+      tot_cnt = 0;
 
       if (fd != 0)
       {
@@ -700,6 +710,7 @@
       {
          size=len;
          total=0;
+         if (trfd >= 0) write (trfd, buf, size);
 
          while (size > 0)
          {
@@ -735,12 +746,14 @@
                }
             }
 
+BUG("---- Info size = %d tot_cnt = %d\n", size, tot_cnt);
             stat = hpmud_write_channel(hd, cd, buf+total, size, EXCEPTION_TIMEOUT, &n);
-
+BUG("---- Info    n = %d\n", n);
             if (n != size)
             {
                /* IO error, get printer status. */
                loop_test(hd, cd, &pa, argv[0], printer, argv[2], argv[1], argv[3]);
+if (n == 0) n = size;
             }
             else
             {
@@ -753,10 +766,14 @@
             }
             total+=n;
             size-=n;
+            tot_cnt += n;
          }   /* while (size > 0) */
       }   /* while ((len = read(fd, buf, HPLIP_BUFFER_SIZE)) > 0) */
+BUG("---- Byebye len = %d tot_cnt = %d----\n", len, tot_cnt);
    }   /* while (copies > 0) */
 
+if (trfd >= 0) close (trfd);
+
    DBG("job end %s prt_mode=%d statustype=%d\n", argv[0], ma.prt_mode, ma.statustype); 
 
    if (pa.pjl_device)
diff -U 3 -r -b hplip-3.9.2.orig/prnt/hpijs/djgenericvip.cpp hplip-3.9.2.local/prnt/hpijs/djgenericvip.cpp
--- hplip-3.9.2.orig/prnt/hpijs/djgenericvip.cpp	2009-02-20 01:38:04.000000000 +0100
+++ hplip-3.9.2.local/prnt/hpijs/djgenericvip.cpp	2009-10-11 15:39:22.000000000 +0200
@@ -612,6 +612,25 @@
 }
 #endif // APDK_LINUX
 
+/* ---------------------------------------------------------------------------
+ */
+DRIVER_ERROR DJGenericVIP::SkipRasters (int deltaY)
+{
+    DRIVER_ERROR    err = NO_ERROR;
+    char            str [16];
+    int             cnt;
+
+    if (deltaY > -32768 && deltaY < 32768)
+    {
+        cnt = sprintf (str,
+                       "\x1B*p%c%uY",
+                       (deltaY > 0) ? '+' : '-', deltaY);
+        err = Send ((const BYTE *) str, cnt);
+    }
+
+    return err;
+}
+
 Header *DJGenericVIP::SelectHeader (PrintContext *pc)
 {
     return new HeaderDJGenericVIP (this, pc);
@@ -637,9 +656,13 @@
 
 DRIVER_ERROR HeaderDJGenericVIP::FormFeed ()
 {
+    DRIVER_ERROR err = NO_ERROR;
+
     BYTE FF = 12;
     m_uiCAPy = 0;
-    return thePrinter->Send ((const BYTE *) &FF, 1);
+    //err = thePrinter->Send ((const BYTE *) "\x1B*rC", 4);
+    err = thePrinter->Send ((const BYTE *) &FF, 1);
+    return err;
 }
 
 APDK_END_NAMESPACE
Nur in hplip-3.9.2.local/prnt/hpijs: djgenericvip.cpp~.
diff -U 3 -r -b hplip-3.9.2.orig/prnt/hpijs/djgenericvip.h hplip-3.9.2.local/prnt/hpijs/djgenericvip.h
--- hplip-3.9.2.orig/prnt/hpijs/djgenericvip.h	2009-02-20 01:38:04.000000000 +0100
+++ hplip-3.9.2.local/prnt/hpijs/djgenericvip.h	2009-10-11 15:26:04.000000000 +0200
@@ -52,7 +52,8 @@
     virtual PHOTOTRAY_STATE PhotoTrayEngaged (BOOL bQueryPrinter);
     //! Returns TRUE if a hagaki feed is present in printer.
     virtual BOOL HagakiFeedPresent(BOOL bQueryPrinter);
-	virtual DATA_FORMAT GetDataFormat () { return RASTER_STRIP; }
+    virtual DRIVER_ERROR SkipRasters (int nBlankRasters);
+	//virtual DATA_FORMAT GetDataFormat () { return RASTER_STRIP; }
 
 #ifdef APDK_AUTODUPLEX
     //!Returns TRUE if duplexer and hagaki feed (combined) unit is present in printer.
Nur in hplip-3.9.2.local/prnt/hpijs: djgenericvip.h~.
diff -U 3 -r -b hplip-3.9.2.orig/prnt/hpijs/foomatic-rip-hplip hplip-3.9.2.local/prnt/hpijs/foomatic-rip-hplip
--- hplip-3.9.2.orig/prnt/hpijs/foomatic-rip-hplip	2009-02-20 01:34:52.000000000 +0100
+++ hplip-3.9.2.local/prnt/hpijs/foomatic-rip-hplip	2009-10-04 00:06:11.000000000 +0200
@@ -101,7 +101,7 @@
 # Foomatic filters into debug mode.
 #
 # WARNING: This logfile is a security hole; do not use in production.
-my $debug = 0;
+my $debug = 1;
 
 # This is the location of the debug logfile (and also the copy of the
 # processed PostScript data) in case you have enabled debugging above.
@@ -3958,7 +3958,7 @@
 
 	    # The rest of the job data
 	    my $buf;
-            while (read(KID4_IN, $buf, 1024)) {
+            while (read(KID4_IN, $buf, 8192)) {
                 print $fileh $buf;
             }
 
Nur in hplip-3.9.2.local/prnt/hpijs: foomatic-rip-hplip~.
Nur in hplip-3.9.2.local/prnt/hpijs: hpijs.cpp~.
Nur in hplip-3.9.2.local/prnt/hpijs: internal.h~.
diff -U 3 -r -b hplip-3.9.2.orig/prnt/hpijs/job.cpp hplip-3.9.2.local/prnt/hpijs/job.cpp
--- hplip-3.9.2.orig/prnt/hpijs/job.cpp	2009-02-20 01:38:04.000000000 +0100
+++ hplip-3.9.2.local/prnt/hpijs/job.cpp	2009-10-11 16:07:16.000000000 +0200
@@ -404,8 +404,24 @@
 		}
 		else
 		{
-			skipcount++;
-			if (skipcount >= 200)
+                        if (!skipcount++)
+                        {
+                                // -------------------------------------------
+                                // Entering skip mode.
+                                //   Possible present compressor have to reset
+                                //   their internal state.
+                                //
+                                if (theCompressor)
+                                {
+                                        theCompressor->Flush();
+                                }
+                                if (pBlackPlaneCompressor)
+                                {
+                                        pBlackPlaneCompressor->Flush();
+                                }
+                        }
+
+			if (0) //skipcount >= 200)
 			{
 				skipcount=0;
 				ColorImageData=BlankRaster;
