diff --git a/src/flash/flash.c b/src/flash/flash.c
index 2c63b827c9d7f81527d14e935a9cd480b589b452..98e5ee0e31e871ad8fceb16c91c24a1598ed71a1 100644
--- a/src/flash/flash.c
+++ b/src/flash/flash.c
@@ -577,7 +577,6 @@ COMMAND_HANDLER(handle_flash_protect_command)
 	uint32_t bank_nr;
 	uint32_t first;
 	uint32_t last;
-	int set;
 
 	COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], bank_nr);
 	struct flash_bank *p = get_flash_bank_by_num(bank_nr);
@@ -590,12 +589,8 @@ COMMAND_HANDLER(handle_flash_protect_command)
 	else
 		COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], last);
 
-	if (strcmp(CMD_ARGV[3], "on") == 0)
-		set = 1;
-	else if (strcmp(CMD_ARGV[3], "off") == 0)
-		set = 0;
-	else
-		return ERROR_COMMAND_SYNTAX_ERROR;
+	bool set;
+	COMMAND_PARSE_ON_OFF(CMD_ARGV[3], set);
 
 	int retval;
 	if ((retval = flash_check_sector_parameters(CMD_CTX,
diff --git a/src/jtag/parport.c b/src/jtag/parport.c
index 97f6458d35f21860ad2697177098bdacf818b7ed..b80626f57d5dcd518f85830303ab83a95a368052 100644
--- a/src/jtag/parport.c
+++ b/src/jtag/parport.c
@@ -103,7 +103,7 @@ static struct cable cables[] =
 /* configuration */
 static char* parport_cable = NULL;
 static uint16_t parport_port;
-static int parport_exit = 0;
+static bool parport_exit = 0;
 static uint32_t parport_toggling_time_ns = 1000;
 static int wait_states;
 
@@ -453,10 +453,7 @@ COMMAND_HANDLER(parport_handle_write_on_exit_command)
 		return ERROR_OK;
 	}
 
-	if (strcmp(CMD_ARGV[0], "on") == 0)
-		parport_exit = 1;
-	else if (strcmp(CMD_ARGV[0], "off") == 0)
-		parport_exit = 0;
+	COMMAND_PARSE_ON_OFF(CMD_ARGV[0], parport_exit);
 
 	return ERROR_OK;
 }
diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c
index a509aee58b0e8ca6656303273fc312740b912f89..206b362c6258502cc3c2ccf9c07ce3743ff2fa6b 100644
--- a/src/jtag/zy1000/zy1000.c
+++ b/src/jtag/zy1000/zy1000.c
@@ -236,18 +236,9 @@ int handle_power_command(struct command_context *cmd_ctx, char *cmd, char **args
 
 	if (argc == 1)
 	{
-		if (strcmp(args[0], "on") == 0)
-		{
-			setPower(1);
-		}
-		else if (strcmp(args[0], "off") == 0)
-		{
-			setPower(0);
-		} else
-		{
-			command_print(cmd_ctx, "arg is \"on\" or \"off\"");
-			return ERROR_INVALID_ARGUMENTS;
-		}
+		bool enable;
+		COMMAND_PARSE_ON_OFF(args[0], enable);
+		setPower(enable);
 	}
 
 	command_print(cmd_ctx, "Target power %s", savePower ? "on" : "off");
diff --git a/src/target/cortex_m3.c b/src/target/cortex_m3.c
index 42f8ee089ff1a377a914ebef4fcc3c0025df091c..e7b5110791c74438519082dfd477c4bd737bec27 100644
--- a/src/target/cortex_m3.c
+++ b/src/target/cortex_m3.c
@@ -1898,18 +1898,11 @@ COMMAND_HANDLER(handle_cortex_m3_mask_interrupts_command)
 
 	if (CMD_ARGC > 0)
 	{
-		if (!strcmp(CMD_ARGV[0], "on"))
-		{
-			cortex_m3_write_debug_halt_mask(target, C_HALT | C_MASKINTS, 0);
-		}
-		else if (!strcmp(CMD_ARGV[0], "off"))
-		{
-			cortex_m3_write_debug_halt_mask(target, C_HALT, C_MASKINTS);
-		}
-		else
-		{
-			command_print(CMD_CTX, "usage: cortex_m3 maskisr ['on'|'off']");
-		}
+		bool enable;
+		COMMAND_PARSE_ON_OFF(CMD_ARGV[0], enable);
+		uint32_t mask_on = C_HALT | (enable ? C_MASKINTS : 0);
+		uint32_t mask_off = enable ? 0 : C_MASKINTS;
+		cortex_m3_write_debug_halt_mask(target, mask_on, mask_off);
 	}
 
 	command_print(CMD_CTX, "cortex_m3 interrupt mask %s",
diff --git a/src/target/target.c b/src/target/target.c
index 98e7a40346303f9faad88a317ee41102786c7be5..f203913cc5d669ca67dcea1e435e807fffc01589 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -2003,23 +2003,14 @@ COMMAND_HANDLER(handle_poll_command)
 			return retval;
 		if ((retval = target_arch_state(target)) != ERROR_OK)
 			return retval;
-
 	}
 	else if (CMD_ARGC == 1)
 	{
-		if (strcmp(CMD_ARGV[0], "on") == 0)
-		{
-			jtag_poll_set_enabled(true);
-		}
-		else if (strcmp(CMD_ARGV[0], "off") == 0)
-		{
-			jtag_poll_set_enabled(false);
-		}
-		else
-		{
-			command_print(CMD_CTX, "arg is \"on\" or \"off\"");
-		}
-	} else
+		bool enable;
+		COMMAND_PARSE_ON_OFF(CMD_ARGV[0], enable);
+		jtag_poll_set_enabled(enable);
+	}
+	else
 	{
 		return ERROR_COMMAND_SYNTAX_ERROR;
 	}