diff --git a/ChangeLog b/ChangeLog
index a16699e0..3fd84c4e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2014-10-15  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+
+	bug #37441: lockbits in ATxmega + avrdude = problem
+	* fileio.c: replace strmcp(..., "lock") by strncmp(..., "lock", 4)
+	where applicable
+	* jtag3.c: (Dito.)
+	* jtagmkII.c: (Dito.)
+
 2014-10-07  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
 
 	bug #42267: jtag3isp fails to read lock and fuse bytes directly
diff --git a/fileio.c b/fileio.c
index adfde915..f2d61782 100644
--- a/fileio.c
+++ b/fileio.c
@@ -796,7 +796,7 @@ static int elf_mem_limits(AVRMEM *mem, struct avrpart * p,
       *lowbound = 0x820000;
       *highbound = 0x82ffff;
       *fileoff = mem->desc[4] - '0';
-    } else if (strcmp(mem->desc, "lock") == 0) {
+    } else if (strncmp(mem->desc, "lock", 4) == 0) {
       *lowbound = 0x830000;
       *highbound = 0x83ffff;
       *fileoff = 0;
diff --git a/jtag3.c b/jtag3.c
index 51db6af4..3cb3c6f1 100644
--- a/jtag3.c
+++ b/jtag3.c
@@ -1034,7 +1034,7 @@ static int jtag3_initialize(PROGRAMMER * pgm, AVRPART * p)
 	u32_to_b4(xd.nvm_boot_offset, m->offset);
       } else if (strcmp(m->desc, "fuse1") == 0) {
 	u32_to_b4(xd.nvm_fuse_offset, m->offset & ~7);
-      } else if (strcmp(m->desc, "lock") == 0) {
+      } else if (strncmp(m->desc, "lock", 4) == 0) {
 	u32_to_b4(xd.nvm_lock_offset, m->offset);
       } else if (strcmp(m->desc, "usersig") == 0) {
 	u32_to_b4(xd.nvm_user_sig_offset, m->offset);
@@ -1644,7 +1644,7 @@ static int jtag3_read_byte(PROGRAMMER * pgm, AVRPART * p, AVRMEM * mem,
     addr = 2;
     if (pgm->flag & PGM_FL_IS_DW)
       unsupp = 1;
-  } else if (strcmp(mem->desc, "lock") == 0) {
+  } else if (strncmp(mem->desc, "lock", 4) == 0) {
     cmd[3] = MTYPE_LOCK_BITS;
     if (pgm->flag & PGM_FL_IS_DW)
       unsupp = 1;
@@ -1797,7 +1797,7 @@ static int jtag3_write_byte(PROGRAMMER * pgm, AVRPART * p, AVRMEM * mem,
     cmd[3] = MTYPE_USERSIG;
   } else if (strcmp(mem->desc, "prodsig") == 0) {
     cmd[3] = MTYPE_PRODSIG;
-  } else if (strcmp(mem->desc, "lock") == 0) {
+  } else if (strncmp(mem->desc, "lock", 4) == 0) {
     cmd[3] = MTYPE_LOCK_BITS;
     if (pgm->flag & PGM_FL_IS_DW)
       unsupp = 1;
diff --git a/jtagmkII.c b/jtagmkII.c
index 6e49b84d..78c412ce 100644
--- a/jtagmkII.c
+++ b/jtagmkII.c
@@ -1053,7 +1053,7 @@ static void jtagmkII_set_xmega_params(PROGRAMMER * pgm, AVRPART * p)
       u32_to_b4(sendbuf.dd.nvm_boot_offset, m->offset);
     } else if (strcmp(m->desc, "fuse1") == 0) {
       u32_to_b4(sendbuf.dd.nvm_fuse_offset, m->offset & ~7);
-    } else if (strcmp(m->desc, "lock") == 0) {
+    } else if (strncmp(m->desc, "lock", 4) == 0) {
       u32_to_b4(sendbuf.dd.nvm_lock_offset, m->offset);
     } else if (strcmp(m->desc, "usersig") == 0) {
       u32_to_b4(sendbuf.dd.nvm_user_sig_offset, m->offset);
@@ -2250,7 +2250,7 @@ static int jtagmkII_read_byte(PROGRAMMER * pgm, AVRPART * p, AVRMEM * mem,
     addr = 2;
     if (pgm->flag & PGM_FL_IS_DW)
       unsupp = 1;
-  } else if (strcmp(mem->desc, "lock") == 0) {
+  } else if (strncmp(mem->desc, "lock", 4) == 0) {
     cmd[1] = MTYPE_LOCK_BITS;
     if (pgm->flag & PGM_FL_IS_DW)
       unsupp = 1;
@@ -2429,7 +2429,7 @@ static int jtagmkII_write_byte(PROGRAMMER * pgm, AVRPART * p, AVRMEM * mem,
     cmd[1] = MTYPE_USERSIG;
   } else if (strcmp(mem->desc, "prodsig") == 0) {
     cmd[1] = MTYPE_PRODSIG;
-  } else if (strcmp(mem->desc, "lock") == 0) {
+  } else if (strncmp(mem->desc, "lock", 4) == 0) {
     cmd[1] = MTYPE_LOCK_BITS;
     if (pgm->flag & PGM_FL_IS_DW)
       unsupp = 1;