diff --git simutrans/config/simuconf.tab simutrans/config/simuconf.tab
index 853b978e6..94f60a69e 100644
--- simutrans/config/simuconf.tab
+++ simutrans/config/simuconf.tab
@@ -376,6 +376,9 @@ numpad_always_moves_map = 1
 # 1=upon opening, all toolbars will be closed, toolbar will be top centered
 #single_toolbar = 0
 
+# 1=upon opening, toolbars will be stacked below each other
+#stack_toolbars = 1
+
 # display scaling factor in percent or -1 for auto
 # dpi_scaling = 100
 
diff --git src/simutrans/dataobj/environment.cc src/simutrans/dataobj/environment.cc
index 1d7bb1bf1..588f37081 100644
--- src/simutrans/dataobj/environment.cc
+++ src/simutrans/dataobj/environment.cc
@@ -25,11 +25,13 @@ std::string env_t::pak_name;
 #ifndef __ANDROID__
 sint16 env_t::menupos = MENU_TOP;
 bool env_t::single_toolbar_mode = false;
+bool env_t::stack_toolbars = true;
 sint16 env_t::dpi_scale = 100;
 bool env_t::single_info = 1;
 #else
 sint16 env_t::menupos = MENU_BOTTOM;
 bool env_t::single_toolbar_mode = true;
+bool env_t::stack_toolbars = false;
 sint16 env_t::dpi_scale = -1;
 bool env_t::single_info = 0;
 #endif
@@ -357,6 +359,7 @@ void env_t::init()
 #ifndef __ANDROID__
 	env_t::menupos = MENU_TOP;
 	env_t::single_toolbar_mode = false;
+	env_t::stack_toolbars = true;
 	env_t::dpi_scale = 100;
 	env_t::single_info = 1;
 	env_t::hide_keyboard = false;
@@ -365,6 +368,7 @@ void env_t::init()
 	// here for Android
 	env_t::menupos = MENU_BOTTOM;
 	env_t::single_toolbar_mode = true;
+	env_t::stack_toolbars = false;
 	env_t::dpi_scale = -1;
 	env_t::single_info = 0;
 	// autoshow keyboard on textinput
@@ -650,6 +654,7 @@ void env_t::rdwr(loadsave_t *file)
 
 	if (file->is_version_atleast(124, 4)) {
 		file->rdwr_bool(show_single_ways);
+		file->rdwr_bool(stack_toolbars);
 	}
 
 	// server settings are not saved, since they are server specific
diff --git src/simutrans/dataobj/environment.h src/simutrans/dataobj/environment.h
index 22ab08886..b610914b4 100644
--- src/simutrans/dataobj/environment.h
+++ src/simutrans/dataobj/environment.h
@@ -52,6 +52,7 @@ public:
 
 	static sint16 menupos;
 	static bool single_toolbar_mode;
+	static bool stack_toolbars;
 
 	static sint16 fullscreen;
 	static sint16 dpi_scale;
diff --git src/simutrans/dataobj/settings.cc src/simutrans/dataobj/settings.cc
index 62e06bd75..7a581f73b 100644
--- src/simutrans/dataobj/settings.cc
+++ src/simutrans/dataobj/settings.cc
@@ -813,6 +813,7 @@ void settings_t::parse_simuconf( tabfile_t& simuconf, sint16& disp_width, sint16
 	env_t::menupos                   = contents.get_int_clamped( "menubar_position",  env_t::menupos, 0, 3);
 	env_t::reselect_closes_tool      = contents.get_int( "reselect_closes_tool",      env_t::reselect_closes_tool ) != 0;
 	env_t::single_toolbar_mode       = contents.get_int( "single_toolbar",            env_t::single_toolbar_mode ) != 0;
+	env_t::stack_toolbars            = contents.get_int( "stack_toolbars",            env_t::stack_toolbars ) != 0;
 	env_t::dpi_scale                 = contents.get_int( "dpi_scaling",               env_t::dpi_scale );
 
 	env_t::show_tooltips      = contents.get_int(         "show_tooltips",      env_t::show_tooltips ) != 0;
diff --git src/simutrans/gui/display_settings.cc src/simutrans/gui/display_settings.cc
index bfb3048e9..9b20d5a0c 100644
--- src/simutrans/gui/display_settings.cc
+++ src/simutrans/gui/display_settings.cc
@@ -153,6 +153,10 @@ gui_settings_t::gui_settings_t()
 	single_toolbar.pressed = ( env_t::single_toolbar_mode );
 	add_component( &single_toolbar, 3 );
 
+	stack_toolbars.init( button_t::square_state, "Stack toolbars" );
+	stack_toolbars.pressed = ( env_t::stack_toolbars );
+	add_component( &stack_toolbars, 3 );
+
 	reselect_closes_tool.init( button_t::square_state, "Reselect closes tools" );
 	reselect_closes_tool.pressed = env_t::reselect_closes_tool;
 	add_component( &reselect_closes_tool, 3 );
@@ -614,6 +618,7 @@ color_gui_t::color_gui_t() :
 	}
 	gui_settings.toolbar_pos.add_listener( this );
 	gui_settings.single_toolbar.add_listener(this);
+	gui_settings.stack_toolbars.add_listener(this);
 	gui_settings.reselect_closes_tool.add_listener(this);
 	gui_settings.fullscreen.add_listener( this );
 	gui_settings.borderless.add_listener( this );
@@ -672,6 +677,12 @@ bool color_gui_t::action_triggered( gui_action_creator_t *comp, value_t)
 		return true;
 	}
 
+	if(  comp == &gui_settings.stack_toolbars  ) {
+		env_t::stack_toolbars = !env_t::stack_toolbars;
+		gui_settings.stack_toolbars.pressed = env_t::stack_toolbars;
+		return true;
+	}
+
 	int i;
 	for(  i=0;  i<COLORS_MAX_BUTTONS  &&  comp!=buttons+i;  i++  ) { }
 
diff --git src/simutrans/gui/display_settings.h src/simutrans/gui/display_settings.h
index e931927cc..34ada6fa2 100644
--- src/simutrans/gui/display_settings.h
+++ src/simutrans/gui/display_settings.h
@@ -36,7 +36,7 @@ private:
 		simloops_value_label;
 
 public:
-	button_t toolbar_pos, reselect_closes_tool, single_toolbar, fullscreen, borderless;
+	button_t toolbar_pos, reselect_closes_tool, single_toolbar, stack_toolbars, fullscreen, borderless;
 
 	gui_settings_t();
 
diff --git src/simutrans/gui/simwin.cc src/simutrans/gui/simwin.cc
index 6a5161dc3..e08f43db0 100644
--- src/simutrans/gui/simwin.cc
+++ src/simutrans/gui/simwin.cc
@@ -892,10 +892,34 @@ int create_win(scr_coord pos, gui_frame_t *const gui, wintype const wt, ptrdiff_
 			inside_event_handling = old;
 		}
 
-		// try to go next to mouse bar
 		if (pos.x == -1) {
-			pos.x = get_mouse_pos().x - gui->get_windowsize().w / 2;
-			pos.y = get_mouse_pos().y - gui->get_windowsize().h - get_tile_raster_width()/4;
+
+			if (env_t::stack_toolbars && true /* is_toolbar */) {
+				// try to keep the toolbar below all other toolbars
+				pos.y = (env_t::menupos == MENU_TOP) ? env_t::iconsize.h : 0;
+				if (wt & w_no_overlap) {
+					for (uint32 i=0;  i<wins.get_count()-1;  i++) {
+						if (wins[i].wt & w_no_overlap) {
+							if (wins[i].pos.y >= pos.y) {
+								sint16 lower_y = wins[i].pos.y + wins[i].gui->get_windowsize().h;
+								if (lower_y >= pos.y) {
+									pos.y = lower_y;
+								}
+							}
+						}
+					}
+					// right aligned
+//					pos.x = max(0, display_get_width()-size.w);
+					// but we go for left
+					pos.x = (env_t::menupos == MENU_LEFT) ? env_t::iconsize.w : 0;
+					pos.y = min(pos.y, display_get_height()-gui->get_windowsize().h);
+				}
+			}
+			else {
+				// try to go next to mouse bar
+				pos.x = get_mouse_pos().x - gui->get_windowsize().w / 2;
+				pos.y = get_mouse_pos().y - gui->get_windowsize().h - get_tile_raster_width()/4;
+			}
 		}
 
 		// make sure window is on screen
