diff --git a/src/main.c b/src/main.c
index 691369cf..cb3232b4 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1242,8 +1242,11 @@ int main(int argc, char * argv [])
   init_ok = (rc = pgm->initialize(pgm, p)) >= 0;
   if (!init_ok) {
     pmsg_error("initialization failed, rc=%d\n", rc);
-    imsg_error("- double check the connections and try again\n");
-    imsg_error("- use -B to set lower ISP clock frequency, e.g. -B 200kHz\n");
+    if(rc == -2)
+      imsg_error("The programmer ISP clock is too fast for the target\n");
+    else
+      imsg_error("- double check the connections and try again\n");
+    imsg_error("- use -B to set lower ISP clock frequency, e.g. -B 125kHz\n");
     if (!ovsigck) {
       imsg_error("- use -F to override this check\n\n");
       exitrc = 1;
diff --git a/src/stk500v2.c b/src/stk500v2.c
index bb086c10..5455ef3d 100644
--- a/src/stk500v2.c
+++ b/src/stk500v2.c
@@ -795,6 +795,11 @@ retry:
   // attempt to read the status back
   status = stk500v2_recv(pgm,buf,maxlen);
 
+  DEBUG("STK500V2: stk500v2_command() received content: [ ");
+  for (size_t i=0; i<len; i++)
+    DEBUG("0x%02x ",buf[i]);
+  DEBUG("], length %d\n", (int) len);
+
   // if we got a successful readback, return
   if (status > 0) {
     DEBUG(" = %d\n",status);
@@ -858,6 +863,9 @@ retry:
             return status;
         } else if (buf[1] == STATUS_CMD_FAILED) {
             pmsg_error("command failed\n");
+        } else if (buf[1] == STATUS_CLOCK_ERROR) {
+            pmsg_error("target clock speed error\n");
+            return -2;
         } else if (buf[1] == STATUS_CMD_UNKNOWN) {
             pmsg_error("unknown command\n");
         } else {