diff --git a/ChangeLog b/ChangeLog
index 9926bd31..a7777719 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-11-23  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+
+	bug #43137: Writing and reading incorrect pages when using jtagicemkI
+	* jtagmkI.c (jtagmkI_paged_write, jtagmkI_paged_load): correctly
+	calculate the size of a partial (non-pagesize) buffer
+
 2014-11-23  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
 
 	bug #43078: AVRDUDE crashes after sucessfully reading/writing eeprom
diff --git a/NEWS b/NEWS
index 153da680..c5f55613 100644
--- a/NEWS
+++ b/NEWS
@@ -27,6 +27,7 @@ Current:
     - bug #41561: AVRDUDE 6.0.1/USBasp doesn't write first bytes of
                   flash page
     - bug #43078: AVRDUDE crashes after sucessfully reading/writing eeprom
+    - bug #43137: Writing and reading incorrect pages when using jtagicemkI
 
   * Internals:
     - ...
diff --git a/jtagmkI.c b/jtagmkI.c
index 2e72fe14..2a5f27e4 100644
--- a/jtagmkI.c
+++ b/jtagmkI.c
@@ -766,8 +766,8 @@ static int jtagmkI_paged_write(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m,
       return -1;
     }
 
-    if ((n_bytes-addr) < page_size)
-      block_size = n_bytes - addr;
+    if (n_bytes < page_size)
+      block_size = n_bytes;
     else
       block_size = page_size;
     avrdude_message(MSG_DEBUG, "%s: jtagmkI_paged_write(): "
@@ -886,8 +886,8 @@ static int jtagmkI_paged_load(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m,
       return -1;
     }
 
-    if ((n_bytes-addr) < page_size)
-      block_size = n_bytes - addr;
+    if (n_bytes < page_size)
+      block_size = n_bytes;
     else
       block_size = page_size;
     avrdude_message(MSG_DEBUG, "%s: jtagmkI_paged_load(): "