diff --git a/avrdude/ChangeLog b/avrdude/ChangeLog
index 7f4525d7..26f96edf 100644
--- a/avrdude/ChangeLog
+++ b/avrdude/ChangeLog
@@ -1,3 +1,9 @@
+2009-07-01  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+
+	bug #26412: avrdude segfaults when called with a programmer that does not
+	support it
+	* main.c: do not call pgm->perform_osccal() unless it is != 0.
+
 2009-06-24  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
 
 	Contributed by Zoltan Laday:
diff --git a/avrdude/NEWS b/avrdude/NEWS
index f1531ef2..80db7a38 100644
--- a/avrdude/NEWS
+++ b/avrdude/NEWS
@@ -26,6 +26,7 @@ Current:
 
   * Major Xmega fixes for the JTAG ICE mkII (patch #6825)
 
+  * Bugfixes.
 
 Version 5.6:
 
diff --git a/avrdude/main.c b/avrdude/main.c
index 0f986bf3..62cb4dae 100644
--- a/avrdude/main.c
+++ b/avrdude/main.c
@@ -786,8 +786,15 @@ int main(int argc, char * argv [])
      * perform an RC oscillator calibration
      * as outlined in appnote AVR053
      */
-    fprintf(stderr, "%s: performing RC oscillator calibration\n", progname);
-    exitrc = pgm->perform_osccal(pgm);
+    if (pgm->perform_osccal == 0) {
+      fprintf(stderr,
+              "%s: programmer does not support RC oscillator calibration\n",
+	      progname);
+      exitrc = 1;
+    } else {
+      fprintf(stderr, "%s: performing RC oscillator calibration\n", progname);
+      exitrc = pgm->perform_osccal(pgm);
+    }
     if (exitrc == 0 && quell_progress < 2) {
       fprintf(stderr,
               "%s: calibration value is now stored in EEPROM at address 0\n",