diff --git a/src/guiMainMenu.cpp b/src/guiMainMenu.cpp
index 5d5ae1e903021d0cae7c34e913c4ff5d20d433d1..48e41bb816ccdedf94bf3e2acef007b1d1a70bf8 100644
--- a/src/guiMainMenu.cpp
+++ b/src/guiMainMenu.cpp
@@ -726,9 +726,11 @@ void GUIMainMenu::regenerateGui(v2u32 screensize)
 			gui::IGUIListBox *e = Environment->addListBox(rect, this,
 					GUI_ID_WORLD_LISTBOX);
 			e->setDrawBackground(true);
-			for(std::vector<WorldSpec>::const_iterator i = m_data->worlds.begin();
-					i != m_data->worlds.end(); i++){
-				e->addItem(narrow_to_wide(i->name+" ["+i->gameid+"]").c_str());
+			m_world_indices.clear();
+			for(size_t wi = 0; wi < m_data->worlds.size(); wi++){
+				const WorldSpec &spec = m_data->worlds[wi];
+				e->addItem(narrow_to_wide(spec.name+" ["+spec.gameid+"]").c_str());
+				m_world_indices.push_back(wi);
 			}
 			e->setSelected(m_data->selected_world);
 		}
@@ -1380,6 +1382,10 @@ bool GUIMainMenu::OnEvent(const SEvent& event)
 				return true;
 			}
 		}
+		if(event.GUIEvent.EventType==gui::EGET_LISTBOX_CHANGED)
+		{
+			readInput(m_data);
+		}
 		if(event.GUIEvent.EventType==gui::EGET_LISTBOX_SELECTED_AGAIN)
 		{
 			switch(event.GUIEvent.Caller->getID())