diff --git a/config.h b/config.h
index f27e122..dcad60f 100644
--- a/config.h
+++ b/config.h
@@ -39,7 +39,7 @@ setting settings[] = {
 	// optional startup file of musca commands, one per line
 	{ "startup",                 mst_str,   { .s = ".musca_start" }, ".+" },
 	// customize the dmenu command.
-	{ "dmenu",                   mst_str,   { .s = "sort | dmenu -i -b"  }, ".+" },
+	{ "dmenu",                   mst_str,   { .s = "-i -b"  }, ".+" },
 	// customize the actions of dmenu driven window/group/command menus.  by default we
 	// just spit commands back to musca, but you can wrap or redirect stuff.  the $MUSCA
 	// environment variable is set to argv[0] in setup().  -i means execute stdin.
diff --git a/musca.c b/musca.c
index 7f1d6a3..794bb9c 100644
--- a/musca.c
+++ b/musca.c
@@ -2162,8 +2162,16 @@ void launch(char *cmd)
 }
 void menu(char *cmd, char *after)
 {
+	// we keep original behaviour by sorting
 	char *tmp = allocate(strlen(cmd)+strlen(after)+BLOCK);
-	sprintf(tmp, "%s | %s | %s", cmd, settings[ms_dmenu].s, after);
+	sprintf(tmp, "%s | sort | dmenu %s | %s", cmd, settings[ms_dmenu].s, after);
+	printf("%s\n", tmp);
+	launch(tmp); free(tmp);
+}
+void menufix(char *cmd, char*after)
+{
+	char *tmp = allocate(strlen(cmd)+strlen(after)+BLOCK);
+	sprintf(tmp, "%s %s | %s",cmd, settings[ms_dmenu].s, after);
 	printf("%s\n", tmp);
 	launch(tmp); free(tmp);
 }
@@ -2631,7 +2639,7 @@ char* com_command(char *cmd, regmatch_t *subs)
 }
 char* com_shell(char *cmd, regmatch_t *subs)
 {
-	menu("dmenu_path", settings[ms_run_shell_command].s);
+	menufix("dmenu_run", settings[ms_run_shell_command].s);
 	return NULL;
 }
 char* com_alias(char *cmd, regmatch_t *subs)
diff --git a/musca_proto.h b/musca_proto.h
index dc14d75..e25c1ea 100644
--- a/musca_proto.h
+++ b/musca_proto.h
@@ -145,6 +145,7 @@ void head_focus(head *h);
 void head_next();
 void launch(char *cmd);
 void menu(char *cmd, char *after);
+void menufix(char *cmd, char *after);
 void menu_wrapper(char *cmd, char *after);
 void shutdown();
 dcell parse_size(char *cmd, regmatch_t *subs, ucell index, ucell limit);