diff --git a/cmd-split-window.c b/cmd-split-window.c
index 3c49ef9e..f05dc249 100644
--- a/cmd-split-window.c
+++ b/cmd-split-window.c
@@ -139,7 +139,7 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item)
 		cause = xstrdup("pane too small");
 		goto error;
 	}
-	new_wp = window_add_pane(w, wp, hlimit);
+	new_wp = window_add_pane(w, wp, args_has(args, 'b'), hlimit);
 	layout_assign_pane(lc, new_wp);
 
 	path = NULL;
diff --git a/tmux.h b/tmux.h
index 89f1af35..40b62e0c 100644
--- a/tmux.h
+++ b/tmux.h
@@ -2066,7 +2066,7 @@ int		 window_set_active_pane(struct window *, struct window_pane *);
 void		 window_redraw_active_switch(struct window *,
 		     struct window_pane *);
 struct window_pane *window_add_pane(struct window *, struct window_pane *,
-		     u_int);
+		     int, u_int);
 void		 window_resize(struct window *, u_int, u_int);
 int		 window_zoom(struct window_pane *);
 int		 window_unzoom(struct window *);
diff --git a/window.c b/window.c
index eddd90d6..e48826b2 100644
--- a/window.c
+++ b/window.c
@@ -339,7 +339,7 @@ window_create_spawn(const char *name, int argc, char **argv, const char *path,
 	struct window_pane	*wp;
 
 	w = window_create(sx, sy);
-	wp = window_add_pane(w, NULL, hlimit);
+	wp = window_add_pane(w, NULL, 0, hlimit);
 	layout_init(w, wp);
 
 	if (window_pane_spawn(wp, argc, argv, path, shell, cwd,
@@ -426,6 +426,7 @@ window_has_pane(struct window *w, struct window_pane *wp)
 int
 window_set_active_pane(struct window *w, struct window_pane *wp)
 {
+	log_debug("%s: pane %%%u (was %%%u)", __func__, wp->id, w->active->id);
 	if (wp == w->active)
 		return (0);
 	w->last = w->active;
@@ -578,19 +579,21 @@ window_unzoom(struct window *w)
 }
 
 struct window_pane *
-window_add_pane(struct window *w, struct window_pane *after, u_int hlimit)
+window_add_pane(struct window *w, struct window_pane *other, int before,
+    u_int hlimit)
 {
 	struct window_pane	*wp;
 
+	if (other == NULL)
+		other = w->active;
+
 	wp = window_pane_create(w, w->sx, w->sy, hlimit);
 	if (TAILQ_EMPTY(&w->panes))
 		TAILQ_INSERT_HEAD(&w->panes, wp, entry);
-	else {
-		if (after == NULL)
-			TAILQ_INSERT_AFTER(&w->panes, w->active, wp, entry);
-		else
-			TAILQ_INSERT_AFTER(&w->panes, after, wp, entry);
-	}
+	else if (before)
+		TAILQ_INSERT_BEFORE(other, wp, entry);
+	else
+		TAILQ_INSERT_AFTER(&w->panes, other, wp, entry);
 	return (wp);
 }