diff -wrup a/jtagmkII.c b/jtagmkII.c
--- a/jtagmkII.c	2011-09-15 10:37:04.000000000 -0400
+++ b/jtagmkII.c	2011-12-05 13:34:47.000000000 -0500
@@ -896,8 +896,15 @@ static int jtagmkII_chip_erase(PROGRAMME
 {
   int status, len;
   unsigned char buf[6], *resp, c;
+  unsigned char par[4];
+  AVRMEM * m;
 
   if (p->flags & AVRPART_HAS_PDI) {
+    m = avr_locate_mem(p, "application");
+    u32_to_b4( par, m->offset );
+    (void) jtagmkII_setparm( pgm, PAR_PDI_OFFSET_START, par );
+    u32_to_b4( par, m->offset + m->size );
+    (void) jtagmkII_setparm( pgm, PAR_PDI_OFFSET_END, par );
     buf[0] = CMND_XMEGA_ERASE;
     buf[1] = XMEGA_ERASE_CHIP;
     memset(buf + 2, 0, 4);      /* address of area to be erased */
@@ -906,6 +913,7 @@ static int jtagmkII_chip_erase(PROGRAMME
     buf[0] = CMND_CHIP_ERASE;
     len = 1;
   }
+  
   if (verbose >= 2)
     fprintf(stderr,
             "%s: jtagmkII_chip_erase(): Sending %schip erase command: ",
@@ -992,8 +1000,7 @@ static void jtagmkII_set_devdescr(PROGRA
       sendbuf.dd.ucEepromPageSize = PDATA(pgm)->eeprom_pagesize = m->page_size;
     }
   }
-  sendbuf.dd.ucCacheType =
-    (p->flags & AVRPART_HAS_PDI)? 0x02 /* ATxmega */: 0x00;
+  sendbuf.dd.ucCacheType = 0x00; // CacheType_Normal 0x00, CacheType_CAN 0x01
 
   if (verbose >= 2)
     fprintf(stderr, "%s: jtagmkII_set_devdescr(): "
diff -wrup a/jtagmkII_private.h b/jtagmkII_private.h
--- a/jtagmkII_private.h	2011-09-15 10:37:04.000000000 -0400
+++ b/jtagmkII_private.h	2011-12-05 13:18:29.000000000 -0500
@@ -318,12 +318,12 @@ struct device_descriptor
   unsigned char ucWriteIOExtShadow[52];/*LSB = IOloc 96, MSB = IOloc511 */
   unsigned char ucIDRAddress; /*IDR address */
   unsigned char ucSPMCRAddress; /*SPMCR Register address and dW BasePC */
+  unsigned char ulBootAddress[4]; /*Device Boot Loader Start Address */
   unsigned char ucRAMPZAddress; /*RAMPZ Register address in SRAM I/O */
 				/*space */
   unsigned char uiFlashPageSize[2]; /*Device Flash Page Size, Size = */
 				/*2 exp ucFlashPageSize */
   unsigned char ucEepromPageSize; /*Device Eeprom Page Size in bytes */
-  unsigned char ulBootAddress[4]; /*Device Boot Loader Start Address */
   unsigned char uiUpperExtIOLoc[2]; /*Topmost (last) extended I/O */
 				/*location, 0 if no external I/O */
   unsigned char ulFlashSize[4]; /*Device Flash Size */
