diff --git a/ChangeLog b/ChangeLog
index 16efc7bc..b6d65577 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2006-09-18 Joerg Wunsch <j@uriah.heep.sax.de>
+
+	* avrdude.conf.in: Various fixes for ancient processors and their
+	capabilities.  For the AT90S1200 and the AT90S8515, fuse bit
+	handling via ISP, and lock bit reading via ISP are not supported
+	at all.  For the AT90S4414 (small brother of the AT90S8515), add
+	the ability to write the lock bits, and add a definition for the
+	fuse bits (usable for HV programming).  For the AT90S2313, add the
+	"fuse" memory range, so it's available for HV programming.
+
+	Resolves bug #17796: avrdude will not program or verify lockbits
+	with Atmel STK protocol programmers
+
 2006-09-17 Joerg Wunsch <j@uriah.heep.sax.de>
 
 	Submitted by Thomas Fischl:
diff --git a/avrdude.conf.in b/avrdude.conf.in
index 34af02de..a0a51c27 100644
--- a/avrdude.conf.in
+++ b/avrdude.conf.in
@@ -1310,21 +1310,11 @@ part
       ;
     memory "fuse"
         size            = 1;
-        min_write_delay = 9000;
-        max_write_delay = 20000;
-        read            = "0 1 0 1  0 0 0 0   x x x x  x x x x",
-                          "x x x x  x x x x   x x o o  o o o o";
-
-        write           = "1 0 1 0  1 1 0 0   1 0 1 i  i i i i",
-                          "x x x x  x x x x   x x x x  x x x x";
       ;
     memory "lock"
         size            = 1;
         min_write_delay = 9000;
         max_write_delay = 20000;
-        read            = "0 1 0 1  1 0 0 0   x x x x  x x x x",
-                          "x x x x  x x x x   x x x x  x o o x";
-
         write           = "1 0 1 0  1 1 0 0   1 1 1 1  1 i i 1",
                           "x x x x  x x x x   x x x x  x x x x";
       ;
@@ -1431,6 +1421,16 @@ part
         read            = "0  0  1  1   0  0  0  0   x  x  x  x   x  x  x  x",
                           "x  x  x  x   x  x a1 a0   o  o  o  o   o  o  o  o";
       ;
+    memory "fuse"
+	size		= 1;
+      ;
+    memory "lock"
+	size		= 1;
+	write		= "1  0  1  0   1  1  0  0   1  1  1  1   1  i  i  1",
+			  "x  x  x  x   x  x  x  x   x  x  x  x   x  x  x  x";
+        min_write_delay = 9000;
+        max_write_delay = 9000;
+      ;
   ;
 
 #------------------------------------------------------------
@@ -1534,6 +1534,9 @@ part
         read            = "0  0  1  1   0  0  0  0   x  x  x  x   x  x  x  x",
                           "x  x  x  x   x  x a1 a0   o  o  o  o   o  o  o  o";
       ;
+    memory "fuse"
+        size            = 1;
+      ;
     memory "lock"
         size            = 1;
         write           = "1 0 1 0  1 1 0 0  1 1 1 x  x i i x",
@@ -2063,17 +2066,9 @@ part
       ;
     memory "fuse"
 	size		= 1;
-	read		= "0  1  0  1   1  0  0  0   x  x  x  x   x  x  x  x",
-			  "x  x  x  x   x  x  x  x   x  x  x  x   x  x  x  o";
-	write		= "1  0  1  0   1  1  0  0   1  0  1  1   1  1  1  i",
-			  "x  x  x  x   x  x  x  x   x  x  x  x   x  x  x  x";
-        min_write_delay = 9000;
-        max_write_delay = 9000;
       ;
     memory "lock"
 	size		= 1;
-	read		= "0  1  0  1   1  0  0  0   x  x  x  x   x  x  x  x",
-			  "x  x  x  x   x  x  x  x   o  o  x  x   x  x  x  x";
 	write		= "1  0  1  0   1  1  0  0   1  1  1  1   1  i  i  1",
 			  "x  x  x  x   x  x  x  x   x  x  x  x   x  x  x  x";
         min_write_delay = 9000;