diff --git a/src/jtag/core.c b/src/jtag/core.c
index 165e19662b278136df7733fbab005a8d5320d4f8..d838e29b0b8320869728c7c823eca84bd8b6e0b5 100644
--- a/src/jtag/core.c
+++ b/src/jtag/core.c
@@ -100,13 +100,13 @@ static jtag_event_callback_t *jtag_event_callbacks;
 /* speed in kHz*/
 static int speed_khz = 0;
 /* flag if the kHz speed was defined */
-bool hasKHz = false;
+static bool hasKHz = false;
+static int jtag_speed = 0;
 
 struct jtag_interface_s *jtag = NULL;
 
 /* configuration */
 jtag_interface_t *jtag_interface = NULL;
-static int jtag_speed = 0;
 
 void jtag_set_error(int error)
 {
@@ -1188,6 +1188,7 @@ int jtag_set_speed(int speed)
 	jtag_speed = speed;
 	/* this command can be called during CONFIG,
 	 * in which case jtag isn't initialized */
+	hasKHz = !jtag;
 	return jtag ? jtag->speed(speed) : ERROR_OK;
 }
 
diff --git a/src/jtag/tcl.c b/src/jtag/tcl.c
index 1ec307abf1b477536fb65b9b81e5bfe21ebfe0c2..99ed1a3682e0def386f03a5ca5af7b542b7b6a9a 100644
--- a/src/jtag/tcl.c
+++ b/src/jtag/tcl.c
@@ -39,8 +39,6 @@
 #include <strings.h>
 #endif
 
-extern bool hasKHz;
-
 extern const Jim_Nvp nvp_jtag_tap_event[];
 
 /* jtag interfaces (parport, FTDI-USB, TI-USB, ...)
@@ -994,11 +992,8 @@ static int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd,
 				return retval;
 			}
 			cur_speed = speed_div1;
-
-			retval = jtag_set_speed(cur_speed);
 		}
-		else
-			hasKHz = true;
+		retval = jtag_set_speed(cur_speed);
 	}
 
 	cur_speed = jtag_get_speed_khz();