diff --git a/src/avr.c b/src/avr.c
index 4091b497..dd9095e4 100644
--- a/src/avr.c
+++ b/src/avr.c
@@ -331,7 +331,7 @@ int avr_read(PROGRAMMER * pgm, AVRPART * p, char * memtype,
 
   /* supports "paged load" thru post-increment */
   if ((p->flags & AVRPART_HAS_TPI) && mem->page_size > 1 &&
-      pgm->cmd_tpi != NULL) {
+      mem->size % mem->page_size == 0 && pgm->cmd_tpi != NULL) {
 
     while (avr_tpi_poll_nvmbsy(pgm));
 
@@ -361,7 +361,8 @@ int avr_read(PROGRAMMER * pgm, AVRPART * p, char * memtype,
     return avr_mem_hiaddr(mem);
   }
 
-  if (pgm->paged_load != NULL && mem->page_size > 1) {
+  if (pgm->paged_load != NULL && mem->page_size > 1 &&
+      mem->size % mem->page_size == 0) {
     /*
      * the programmer supports a paged mode read
      */