diff --git a/avrdude/ChangeLog b/avrdude/ChangeLog
index 5af97719..c91de2bc 100644
--- a/avrdude/ChangeLog
+++ b/avrdude/ChangeLog
@@ -1,3 +1,10 @@
+2013-09-17  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+
+	bug #40055: AVRDUDE segfaults when writing eeprom
+	* main.c: Always clear the UF_AUTO_ERASE flag if either a
+	non-Xmega device was found, or the programmer does not offer a
+	page_erase method.
+
 2013-09-17  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
 
 	* configure.ac (AC_INIT): Bump version to 6.0.
diff --git a/avrdude/NEWS b/avrdude/NEWS
index 02c366ae..bde177e6 100644
--- a/avrdude/NEWS
+++ b/avrdude/NEWS
@@ -5,7 +5,7 @@ Approximate change log for AVRDUDE by version.
 (For more detailed changes, see the ChangeLog file.)
 
 ----------------------------------------------------------------------
-Version 6.0:
+Version 6.0.1:
 
   * Major changes compared to the previous version:
 
@@ -195,6 +195,7 @@ Version 6.0:
       - patch #7710: usb_libusb: Check VID/PID before opening device
       - [no-id]: Fix SCK period adjustment for STK500v2
       - bug #40040: Support for ATtiny20 and ATtiny40
+      - bug #40055: AVRDUDE segfaults when writing eeprom
 
   * Internals:
 
diff --git a/avrdude/main.c b/avrdude/main.c
index c4c6d58d..39794867 100644
--- a/avrdude/main.c
+++ b/avrdude/main.c
@@ -1156,6 +1156,8 @@ int main(int argc, char * argv [])
     } else {
       AVRMEM * m;
       const char *memname = (p->flags & AVRPART_HAS_PDI)? "application": "flash";
+
+      uflags &= ~UF_AUTO_ERASE;
       for (ln=lfirst(updates); ln; ln=lnext(ln)) {
         upd = ldata(ln);
         m = avr_locate_mem(p, upd->memtype);
@@ -1163,7 +1165,6 @@ int main(int argc, char * argv [])
           continue;
         if ((strcasecmp(m->desc, memname) == 0) && (upd->op == DEVICE_WRITE)) {
           erase = 1;
-          uflags &= ~UF_AUTO_ERASE;
           if (quell_progress < 2) {
             fprintf(stderr,
                     "%s: NOTE: \"%s\" memory has been specified, an erase cycle "