diff --git a/cmd-queue.c b/cmd-queue.c
index 671f1e9..b6f8f75 100644
--- a/cmd-queue.c
+++ b/cmd-queue.c
@@ -225,7 +225,11 @@ cmdq_continue(struct cmd_q *cmdq)
 			cmdq->time = time(NULL);
 			cmdq->number++;
 
-			guard = cmdq_guard(cmdq, "begin");
+			if (cmdq->cmd->flags & CMD_CONTROL)
+			    guard = cmdq_guard(cmdq, "begin");
+			else
+			    guard = cmdq_guard(cmdq, "begin auto");
+
 			retval = cmdq->cmd->entry->exec(cmdq->cmd, cmdq);
 			if (guard) {
 				if (retval == CMD_RETURN_ERROR)
diff --git a/control.c b/control.c
index ba243fd..236622a 100644
--- a/control.c
+++ b/control.c
@@ -55,6 +55,7 @@ control_callback(struct client *c, int closed, unused void *data)
 {
 	char		*line, *cause;
 	struct cmd_list	*cmdlist;
+	struct cmd	*cmd;
 
 	if (closed)
 		c->flags |= CLIENT_EXIT;
@@ -78,6 +79,9 @@ control_callback(struct client *c, int closed, unused void *data)
 
 			free(cause);
 		} else {
+ 			TAILQ_FOREACH(cmd, &cmdlist->list, qentry) {
+				cmd->flags |= CMD_CONTROL;
+			}
 			cmdq_run(c->cmdq, cmdlist);
 			cmd_list_free(cmdlist);
 		}
diff --git a/tmux.h b/tmux.h
index f0b9edf..d89987c 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1375,6 +1375,10 @@ struct cmd {
 	char			*file;
 	u_int			 line;
 
+#define CMD_NORMAL 0x0
+#define CMD_CONTROL 0x1
+        int			 flags;
+
 	TAILQ_ENTRY(cmd)	 qentry;
 };
 struct cmd_list {
