Index: code/trunk/data/gui/layouts/MultiplayerMenu.layout
===================================================================
--- code/trunk/data/gui/layouts/MultiplayerMenu.layout	(revision 7612)
+++ code/trunk/data/gui/layouts/MultiplayerMenu.layout	(revision 7648)
@@ -15,5 +15,5 @@
             <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
             <Property Name="VertFormatting" Value="TopAligned" />
-            <Property Name="UnifiedAreaRect" Value="{{0.25,0},{0.2875,0},{0.75,0},{0.6375,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.25,0},{0.2875,0},{0.75,0},{0.7,0}}" />
             <Window Type="MenuWidgets/Listbox" Name="orxonox/MultiplayerListbox" >
                 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
@@ -23,5 +23,5 @@
                 <Property Name="Text" Value="Join" />
                 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
-                <Property Name="UnifiedAreaRect" Value="{{0.1,0},{0.85,0},{0.3,0},{0.95,0}}" />
+                <Property Name="UnifiedAreaRect" Value="{{0.1,0},{0.81,0},{0.3,0},{0.89,0}}" />
                 <Event Name="SelectStateChanged" Function="MultiplayerMenu.MultiplayerJoinButton_clicked"/>
             </Window>
@@ -29,5 +29,5 @@
                 <Property Name="Text" Value="Host" />
                 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
-                <Property Name="UnifiedAreaRect" Value="{{0.4,0},{0.85,0},{0.6,0},{0.95,0}}" />
+                <Property Name="UnifiedAreaRect" Value="{{0.4,0},{0.81,0},{0.6,0},{0.89,0}}" />
                 <Event Name="SelectStateChanged" Function="MultiplayerMenu.MultiplayerHostButton_clicked"/>
             </Window>
@@ -35,6 +35,13 @@
                 <Property Name="Text" Value="Dedicated" />
                 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
-                <Property Name="UnifiedAreaRect" Value="{{0.7,0},{0.85,0},{0.9,0},{0.95,0}}" />
+                <Property Name="UnifiedAreaRect" Value="{{0.7,0},{0.81,0},{0.9,0},{0.89,0}}" />
                 <Event Name="SelectStateChanged" Function="MultiplayerMenu.MultiplayerDedicatedButton_clicked"/>
+            </Window>
+            <Window Type="MenuWidgets/Checkbox" Name="orxonox/MultiplayerShowAllCheckbox" >
+                <Property Name="Text" Value="show all" />
+                <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+                <Property Name="UnifiedAreaRect" Value="{{0.65,0},{0.89,0},{0.8,0},{0.99,0}}" />
+                <Property Name="Disabled" Value="True" />
+                <Event Name="CheckStateChanged" Function="MultiplayerMenu.MultiplayerShowAll_clicked"/>
             </Window>
         </Window>
@@ -42,5 +49,5 @@
             <Property Name="Text" Value="Start" />
             <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
-            <Property Name="UnifiedAreaRect" Value="{{0.2875,0},{0.6625,0},{0.4875,0},{0.7125,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.2875,0},{0.725,0},{0.4875,0},{0.775,0}}" />
             <Event Name="Clicked" Function="MultiplayerMenu.MultiplayerStartButton_clicked"/>
         </Window>
@@ -48,5 +55,5 @@
             <Property Name="Text" Value="Back" />
             <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
-            <Property Name="UnifiedAreaRect" Value="{{0.5125,0},{0.6625,0},{0.7125,0},{0.7125,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.5125,0},{0.725,0},{0.7125,0},{0.775,0}}" />
             <Event Name="Clicked" Function="MultiplayerMenu.MultiplayerBackButton_clicked"/>
         </Window>
Index: code/trunk/data/gui/layouts/SingleplayerMenu.layout
===================================================================
--- code/trunk/data/gui/layouts/SingleplayerMenu.layout	(revision 7612)
+++ code/trunk/data/gui/layouts/SingleplayerMenu.layout	(revision 7648)
@@ -15,8 +15,14 @@
             <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
             <Property Name="VertFormatting" Value="TopAligned" />
-            <Property Name="UnifiedAreaRect" Value="{{0.25,0},{0.2875,0},{0.75,0},{0.6375,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.25,0},{0.2875,0},{0.75,0},{0.7,0}}" />
             <Window Type="MenuWidgets/Listbox" Name="orxonox/SingleplayerLevelListbox" >
                 <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
-                <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.15,0},{0.95,0},{0.92,0}}" />
+                <Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.15,0},{0.95,0},{0.85,0}}" />
+            </Window>
+            <Window Type="MenuWidgets/Checkbox" Name="orxonox/SingleplayerShowAllCheckbox" >
+                <Property Name="Text" Value="show all" />
+                <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+                <Property Name="UnifiedAreaRect" Value="{{0.65,0},{0.87,0},{0.8,0},{.97,0}}" />
+                <Event Name="CheckStateChanged" Function="SingleplayerMenu.SingleplayerShowAll_clicked"/>
             </Window>
         </Window>
@@ -24,5 +30,5 @@
             <Property Name="Text" Value="Start" />
             <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
-            <Property Name="UnifiedAreaRect" Value="{{0.2875,0},{0.6625,0},{0.4875,0},{0.7125,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.2875,0},{0.725,0},{0.4875,0},{0.775,0}}" />
             <Event Name="Clicked" Function="SingleplayerMenu.SingleplayerStartButton_clicked"/>
         </Window>
@@ -30,5 +36,5 @@
             <Property Name="Text" Value="Back" />
             <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
-            <Property Name="UnifiedAreaRect" Value="{{0.5125,0},{0.6625,0},{0.7125,0},{0.7125,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.5125,0},{0.725,0},{0.7125,0},{0.775,0}}" />
             <Event Name="Clicked" Function="SingleplayerMenu.SingleplayerBackButton_clicked"/>
         </Window>
Index: code/trunk/data/gui/scripts/MultiplayerMenu.lua
===================================================================
--- code/trunk/data/gui/scripts/MultiplayerMenu.lua	(revision 7612)
+++ code/trunk/data/gui/scripts/MultiplayerMenu.lua	(revision 7648)
@@ -2,4 +2,8 @@
 
 local P = createMenuSheet("MultiplayerMenu")
+
+P.levelList = {}
+P.itemList = {}
+P.showAll = false
 
 function P.onLoad()
@@ -12,4 +16,6 @@
         local button = tolua.cast(window,"CEGUI::RadioButton")
         button:setSelected(true)
+        local checkbox = winMgr:getWindow("orxonox/MultiplayerShowAllCheckbox")
+        checkbox:setProperty("Disabled", "True")
         P.showServerList()
     end
@@ -18,4 +24,6 @@
         local button = tolua.cast(window,"CEGUI::RadioButton")
         button:setSelected(true)
+        local checkbox = winMgr:getWindow("orxonox/MultiplayerShowAllCheckbox")
+        checkbox:setProperty("Disabled", "False")
         P.showLevelList()
     end
@@ -24,4 +32,6 @@
         local button = tolua.cast(window,"CEGUI::RadioButton")
         button:setSelected(true)
+        local checkbox = winMgr:getWindow("orxonox/MultiplayerShowAllCheckbox")
+        checkbox:setProperty("Disabled", "True")
         P.showLevelList()
     end
@@ -30,4 +40,6 @@
 function P.MultiplayerJoinButton_clicked(e)
     P.multiplayerMode = "startClient"
+    local checkbox = winMgr:getWindow("orxonox/MultiplayerShowAllCheckbox")
+    checkbox:setProperty("Disabled", "True")
     P.showServerList()
 end
@@ -35,4 +47,6 @@
 function P.MultiplayerHostButton_clicked(e)
     P.multiplayerMode = "startServer"
+    local checkbox = winMgr:getWindow("orxonox/MultiplayerShowAllCheckbox")
+    checkbox:setProperty("Disabled", "False")
     P.showLevelList()
 end
@@ -40,5 +54,16 @@
 function P.MultiplayerDedicatedButton_clicked(e)
     P.multiplayerMode = "startDedicated"
+    local checkbox = winMgr:getWindow("orxonox/MultiplayerShowAllCheckbox")
+    checkbox:setProperty("Disabled", "True")
     P.showLevelList()
+end
+
+function P.MultiplayerShowAll_clicked(e)
+    local checkbox = tolua.cast(winMgr:getWindow("orxonox/MultiplayerShowAllCheckbox"), "CEGUI::Checkbox")
+    local show = checkbox:isSelected()
+    if show ~= P.showAll then
+        P.showAll = show
+        P.createLevelList()
+    end
 end
 
@@ -69,33 +94,40 @@
 
 function P.showLevelList()
-    local listbox = winMgr:getWindow("orxonox/MultiplayerListbox")
-    CEGUI.toListbox(listbox):resetList()
+    P.createLevelList()
+end
+
+function P.createLevelList()
+    P.levelList = {}
+    P.itemList = {}
+    local listbox = CEGUI.toListbox(winMgr:getWindow("orxonox/MultiplayerListbox"))
+    listbox:resetList()
+    orxonox.GUIManager:setItemTooltipsEnabledHelper(listbox, true)
     local preselect = orxonox.LevelManager:getInstance():getDefaultLevel()
-    orxonox.LevelManager:getInstance():compileAvailableLevelList()
-    local levelList = {}
+    local size = orxonox.LevelManager:getInstance():getNumberOfLevels()
     local index = 0
-    local level = ""
-    while true do
+    local level = nil
+    while index < size do
         level = orxonox.LevelManager:getInstance():getAvailableLevelListItem(index)
-        if level == "" then
-            break
+        if level ~= nil then
+            if P.showAll or not level:hasTag("test") then
+                table.insert(P.levelList, level)
+            end
         end
-        table.insert(levelList, level)
         index = index + 1
     end
-    table.sort(levelList)
-    index = 1
-    for k,v in pairs(levelList) do
-        local item = CEGUI.createListboxTextItem(v)
+    --TODO: Reintroduce sorting, if needed. At the moment it's sorted by filename.
+    --table.sort(levelList)
+    for k,v in pairs(P.levelList) do
+        local item = CEGUI.createListboxTextItem(v:getName())
         item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
-        item:setID(index)
-        index = index + 1
-        CEGUI.toListbox(listbox):addItem(item)
-        if v .. ".oxw" == preselect then
+        listbox:addItem(item)
+        if v:getXMLFilename() == preselect then
             listbox:setItemSelectState(item, true)
         end
+        P.itemList[k] = listbox:getListboxItemFromIndex(k-1)
+        orxonox.GUIManager:setTooltipTextHelper(P.itemList[k], v:getDescription())
     end
-    end
-    
+end
+
 function P.showServerList()
     local listbox = winMgr:getWindow("orxonox/MultiplayerListbox")
Index: code/trunk/data/gui/scripts/SingleplayerMenu.lua
===================================================================
--- code/trunk/data/gui/scripts/SingleplayerMenu.lua	(revision 7612)
+++ code/trunk/data/gui/scripts/SingleplayerMenu.lua	(revision 7648)
@@ -3,38 +3,69 @@
 local P = createMenuSheet("SingleplayerMenu")
 
+P.levelList = {}
+P.itemList = {}
+P.showAll = false
+
 function P.onLoad()
-    listbox = winMgr:getWindow("orxonox/SingleplayerLevelListbox")
-    preselect = orxonox.LevelManager:getInstance():getDefaultLevel()
-    orxonox.LevelManager:getInstance():compileAvailableLevelList()
-    local levelList = {}
+    local window = winMgr:getWindow("orxonox/SingleplayerShowAllCheckbox")
+    local button = tolua.cast(window,"CEGUI::Checkbox")
+    button:setSelected(false)
+    P.createLevelList()
+end
+
+function P.createLevelList()
+    P.levelList = {}
+    P.itemList = {}
+    local listbox = CEGUI.toListbox(winMgr:getWindow("orxonox/SingleplayerLevelListbox"))
+    listbox:resetList()
+    orxonox.GUIManager:setItemTooltipsEnabledHelper(listbox, true)
+    local preselect = orxonox.LevelManager:getInstance():getDefaultLevel()
+    local size = orxonox.LevelManager:getInstance():getNumberOfLevels()
     local index = 0
-    local level = ""
-    while true do
-      level = orxonox.LevelManager:getInstance():getAvailableLevelListItem(index)
-      if level == "" then
-        break
-      end
-      table.insert(levelList, level)
-      index = index + 1
+    local level = nil
+    while index < size do
+        level = orxonox.LevelManager:getInstance():getAvailableLevelListItem(index)
+        if level ~= nil then
+            if P.showAll or not level:hasTag("test") then
+                table.insert(P.levelList, level)
+            end
+        end
+        index = index + 1
     end
-    table.sort(levelList)
-    for k,v in pairs(levelList) do
-        item = CEGUI.createListboxTextItem(v)
+    --TODO: Reintroduce sorting, if needed. At the moment it's sorted by filename.
+    --table.sort(levelList)
+    for k,v in pairs(P.levelList) do
+        local item = CEGUI.createListboxTextItem(v:getName())
         item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
-        CEGUI.toListbox(listbox):addItem(item)
-        if v .. ".oxw" == preselect then
+        listbox:addItem(item)
+        if v:getXMLFilename() == preselect then
             listbox:setItemSelectState(item, true)
         end
+        P.itemList[k] = listbox:getListboxItemFromIndex(k-1)
+        orxonox.GUIManager:setTooltipTextHelper(P.itemList[k], v:getDescription())
     end
-
 end
 
 function P.SingleplayerStartButton_clicked(e)
-    local choice = CEGUI.toListbox(winMgr:getWindow("orxonox/SingleplayerLevelListbox")):getFirstSelectedItem()
-    if choice then
-        orxonox.LevelManager:getInstance():setDefaultLevel(choice:getText() .. ".oxw")
-        orxonox.execute("startGame")
-        hideAllMenuSheets()
+    local listbox = CEGUI.toListbox(winMgr:getWindow("orxonox/SingleplayerLevelListbox"))
+    local choice = listbox:getFirstSelectedItem()
+    if choice ~= nil then
+        local index = listbox:getItemIndex(choice)
+        local level = P.levelList[index+1]
+        if level ~= nil then
+            orxonox.LevelManager:getInstance():setDefaultLevel(level:getXMLFilename())
+            orxonox.execute("startGame")
+            hideAllMenuSheets()
+        end
     end
+end
+
+function P.SingleplayerShowAll_clicked(e)
+    local checkbox = tolua.cast(winMgr:getWindow("orxonox/SingleplayerShowAllCheckbox"), "CEGUI::Checkbox")
+    local show = checkbox:isSelected()
+    if show ~= P.showAll then
+        P.showAll = show
+        P.createLevelList()
+   end
 end
 
