diff --git a/doc/openocd.texi b/doc/openocd.texi
index 523be2b2e56f4053b63eb919a84da678c1586035..91cc025bbeb49c2da2f25977dcb6a777c8a85b79 100644
--- a/doc/openocd.texi
+++ b/doc/openocd.texi
@@ -4474,14 +4474,6 @@ tasks which waste bandwidth by flushing small transfers too often,
 instead of batching them into larger operations.
 @end deffn
 
-@deffn Command {endstate} tap_state
-Flush any pending JTAG operations,
-and return with all TAPs in @var{tap_state}.
-This state should be a stable state such as @sc{reset},
-@sc{run/idle},
-@sc{drpause}, or @sc{irpause}.
-@end deffn
-
 @deffn Command {irscan} [tap instruction]+ [@option{-endstate} tap_state]
 For each @var{tap} listed, loads the instruction register
 with its associated numeric @var{instruction}.
@@ -4552,7 +4544,7 @@ Default is enabled.
 @cindex TAP state names
 
 The @var{tap_state} names used by OpenOCD in the @command{drscan},
-@command{endstate}, and @command{irscan} commands are:
+and @command{irscan} commands are:
 
 @itemize @bullet
 @item @b{RESET}
@@ -4578,9 +4570,6 @@ face of TMS fixed and a free-running JTAG clock; for all the
 others, the next TCK transition changes to a new state.
 
 @itemize @bullet
-@item @sc{reset} is probably most useful with @command{endstate},
-but entering it frequently has side effects.
-(This is the only stable state with TMS high.)
 @item From @sc{drshift} and @sc{irshift}, clock transitions will
 produce side effects by changing register contents.  The values
 to be latched in upcoming @sc{drupdate} or @sc{irupdate} states
@@ -4838,6 +4827,9 @@ become much shorter.
 @item @b{arm7_9 fast_writes}
 @cindex arm7_9 fast_writes
 @*Use @command{arm7_9 fast_memory_access} instead.
+@item @b{endstate}
+@cindex endstate
+@*An buggy old command that would not really work since background polling would wipe out the global endstate
 @xref{arm7_9 fast_memory_access}.
 @item @b{arm7_9 force_hw_bkpts}
 @*Use @command{gdb_breakpoint_override} instead. Note that GDB will use hardware breakpoints
diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c
index 2e122fb1758638d8aa002f7c4400fb7e76afade5..6821445595ae4fac37555e6c76d9a1b62bfb64df 100644
--- a/src/jtag/jtag.c
+++ b/src/jtag/jtag.c
@@ -227,7 +227,6 @@ static int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx, ch
 
 static int handle_scan_chain_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
 
-static int handle_endstate_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
 static int handle_jtag_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
 static int handle_runtest_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
 static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
@@ -1659,8 +1658,6 @@ int jtag_register_commands(struct command_context_s *cmd_ctx)
 	register_command(cmd_ctx, NULL, "scan_chain", handle_scan_chain_command,
 		COMMAND_EXEC, "print current scan chain configuration");
 
-	register_command(cmd_ctx, NULL, "endstate", handle_endstate_command,
-		COMMAND_EXEC, "finish JTAG operations in <tap_state>");
 	register_command(cmd_ctx, NULL, "jtag_reset", handle_jtag_reset_command,
 		COMMAND_EXEC, "toggle reset lines <trst> <srst>");
 	register_command(cmd_ctx, NULL, "runtest", handle_runtest_command,
@@ -2215,26 +2212,6 @@ static int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd,
 
 }
 
-static int handle_endstate_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
-{
-	if (argc < 1)
-		return ERROR_COMMAND_SYNTAX_ERROR;
-
-	tap_state_t state = tap_state_by_name(args[0]);
-	if (state < 0)
-	{
-		command_print( cmd_ctx, "Invalid state name: %s\n", args[0] );
-		return ERROR_COMMAND_SYNTAX_ERROR;
-	}
-	jtag_set_end_state(state);
-	jtag_execute_queue();
-
-	command_print(cmd_ctx, "current endstate: %s",
-			tap_state_name(cmd_queue_end_state));
-
-	return ERROR_OK;
-}
-
 static int handle_jtag_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
 {
 	int trst = -1;