diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp
index 72452f9c2..b7b58cff6 100644
--- a/src/client/clientlauncher.cpp
+++ b/src/client/clientlauncher.cpp
@@ -42,7 +42,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 /* mainmenumanager.h
  */
 gui::IGUIEnvironment *guienv = nullptr;
-gui::IGUIStaticText *guiroot = nullptr;
 MainMenuManager g_menumgr;
 
 bool isMenuActive()
@@ -218,14 +217,6 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
 
 			m_rendering_engine->get_gui_env()->clear();
 
-			/*
-				We need some kind of a root node to be able to add
-				custom gui elements directly on the screen.
-				Otherwise they won't be automatically drawn.
-			*/
-			guiroot = m_rendering_engine->get_gui_env()->addStaticText(L"",
-				core::rect<s32>(0, 0, 10000, 10000));
-
 			bool game_has_run = launch_game(error_message, reconnect_requested,
 				start_data, cmd_args);
 
@@ -556,7 +547,8 @@ void ClientLauncher::main_menu(MainMenuData *menudata)
 #endif
 
 	/* show main menu */
-	GUIEngine mymenu(&input->joystick, guiroot, m_rendering_engine, &g_menumgr, menudata, *kill);
+	GUIEngine mymenu(&input->joystick, m_rendering_engine->get_gui_env()->getRootGUIElement(),
+			m_rendering_engine, &g_menumgr, menudata, *kill);
 
 	/* leave scene manager in a clean state */
 	m_rendering_engine->get_scene_manager()->clear();
diff --git a/src/client/game.cpp b/src/client/game.cpp
index 32787cad3..8a91d352f 100644
--- a/src/client/game.cpp
+++ b/src/client/game.cpp
@@ -1806,19 +1806,19 @@ inline bool Game::handleCallbacks()
 	}
 
 	if (g_gamecallback->changepassword_requested) {
-		(new GUIPasswordChange(guienv, guiroot, -1,
+		(new GUIPasswordChange(guienv, guienv->getRootGUIElement(), -1,
 				       &g_menumgr, client, texture_src))->drop();
 		g_gamecallback->changepassword_requested = false;
 	}
 
 	if (g_gamecallback->changevolume_requested) {
-		(new GUIVolumeChange(guienv, guiroot, -1,
+		(new GUIVolumeChange(guienv, guienv->getRootGUIElement(), -1,
 				     &g_menumgr, texture_src))->drop();
 		g_gamecallback->changevolume_requested = false;
 	}
 
 	if (g_gamecallback->keyconfig_requested) {
-		(new GUIKeyChangeMenu(guienv, guiroot, -1,
+		(new GUIKeyChangeMenu(guienv, guienv->getRootGUIElement(), -1,
 				      &g_menumgr, texture_src))->drop();
 		g_gamecallback->keyconfig_requested = false;
 	}
@@ -4142,7 +4142,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
 		}
 
 		if (isMenuActive())
-			guiroot->bringToFront(formspec);
+			m_rendering_engine->get_gui_env()->getRootGUIElement()->bringToFront(formspec);
 	} while (false);
 
 	/*
diff --git a/src/client/gameui.cpp b/src/client/gameui.cpp
index d448eadd6..4cc68fa10 100644
--- a/src/client/gameui.cpp
+++ b/src/client/gameui.cpp
@@ -53,6 +53,8 @@ GameUI::GameUI()
 }
 void GameUI::init()
 {
+	IGUIElement *guiroot = guienv->getRootGUIElement();
+
 	// First line of debug text
 	m_guitext = gui::StaticText::add(guienv, utf8_to_wide(PROJECT_NAME_C).c_str(),
 		core::rect<s32>(0, 0, 0, 0), false, true, guiroot);
diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp
index 578456139..f15f39582 100644
--- a/src/gui/guiFormSpecMenu.cpp
+++ b/src/gui/guiFormSpecMenu.cpp
@@ -139,9 +139,9 @@ void GUIFormSpecMenu::create(GUIFormSpecMenu *&cur_formspec, Client *client,
 	TextDest *txt_dest, const std::string &formspecPrepend, ISoundManager *sound_manager)
 {
 	if (cur_formspec == nullptr) {
-		cur_formspec = new GUIFormSpecMenu(joystick, guiroot, -1, &g_menumgr,
-			client, guienv, client->getTextureSource(), sound_manager, fs_src,
-			txt_dest, formspecPrepend);
+		cur_formspec = new GUIFormSpecMenu(joystick, guienv->getRootGUIElement(),
+			-1, &g_menumgr, client, guienv, client->getTextureSource(), sound_manager,
+			fs_src, txt_dest, formspecPrepend);
 		cur_formspec->doPause = false;
 
 		/*
diff --git a/src/gui/mainmenumanager.h b/src/gui/mainmenumanager.h
index 76d357340..b86d1892a 100644
--- a/src/gui/mainmenumanager.h
+++ b/src/gui/mainmenumanager.h
@@ -38,8 +38,8 @@ public:
 	virtual void signalKeyConfigChange() = 0;
 };
 
+// FIXME: do we really need this global variable?
 extern gui::IGUIEnvironment *guienv;
-extern gui::IGUIStaticText *guiroot;
 
 // Handler for the modal menus