diff --git a/ChangeLog b/ChangeLog
index a66ad812..d0bcf4a7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-07-02  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+
+	bug #26408: Crash in stk500v2_open()
+	* stk500generic.c: Implement setup and teardown hooks, calling in turn
+	the respective hooks of the stk500v2 implementation.
+
 2009-07-02  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
 
 	bug #26130: Avrdude doesn't display it's version.
diff --git a/stk500generic.c b/stk500generic.c
index 527c2302..12125393 100644
--- a/stk500generic.c
+++ b/stk500generic.c
@@ -65,9 +65,27 @@ static int stk500generic_open(PROGRAMMER * pgm, char * port)
   return -1;
 }
 
+static void stk500generic_setup(PROGRAMMER * pgm)
+{
+  /*
+   * Only STK500v2 needs setup/teardown.
+   */
+  stk500v2_initpgm(pgm);
+  pgm->setup(pgm);
+}
+
+static void stk500generic_teardown(PROGRAMMER * pgm)
+{
+  stk500v2_initpgm(pgm);
+  pgm->teardown(pgm);
+}
+
+
 void stk500generic_initpgm(PROGRAMMER * pgm)
 {
   strcpy(pgm->type, "STK500GENERIC");
 
   pgm->open           = stk500generic_open;
+  pgm->setup          = stk500generic_setup;
+  pgm->teardown       = stk500generic_teardown;
 }