diff --git a/src/helper/command.c b/src/helper/command.c
index d34c402bafc9e6871a3b4b82125625a10dc5802b..9ade320c669bfdc3442a290d1622fa094df73cfc 100644
--- a/src/helper/command.c
+++ b/src/helper/command.c
@@ -741,7 +741,12 @@ int handle_sleep_command(struct command_context_s *cmd_ctx, char *cmd, char **ar
 		busy_sleep(duration);
 	} else
 	{
-		alive_sleep(duration);
+		long long then=timeval_ms();
+		while ((timeval_ms()-then)<duration)
+		{
+			target_call_timer_callbacks_now();
+			usleep(1000);
+		}
 	}
 
 	return ERROR_OK;
diff --git a/src/helper/log.c b/src/helper/log.c
index f7b2fc9698173778cfb8c60370eb70aea6fac5ae..7ea2a6cb4a7763a0f6524806686e9968c2fc96e2 100644
--- a/src/helper/log.c
+++ b/src/helper/log.c
@@ -400,14 +400,14 @@ void kept_alive()
 void alive_sleep(int ms)
 {
 	int i;
-	for (i=0; i<ms; i+=500)
+	int napTime=10;
+	for (i=0; i<ms; i+=napTime)
 	{
 		int sleep_a_bit=ms-i;
-		if (sleep_a_bit>500)
+		if (sleep_a_bit>napTime)
 		{
-			sleep_a_bit=500;
+			sleep_a_bit=napTime;
 		}
-		keep_alive();
 		usleep(sleep_a_bit*1000);
 		keep_alive();
 	}
diff --git a/src/target/target/zy1000.cfg b/src/target/target/zy1000.cfg
index b1c6034da7d7b9e6ea24233fedbbbb19c8775961..522212516fca653a2c2975adc4ec4e8507db3411 100644
--- a/src/target/target/zy1000.cfg
+++ b/src/target/target/zy1000.cfg
@@ -86,7 +86,7 @@ proc production_test {} {
 	sleep 1000
 	target_request debugmsgs enable
 	reset run
-	sleep 20000
+	sleep 25000
 	target_request debugmsgs disable
 	return "See IP address above..."
 }
\ No newline at end of file