Index: code/branches/presentation2012merge/data/gui/layouts/ShipSelectionMenu.layout
===================================================================
--- code/branches/presentation2012merge/data/gui/layouts/ShipSelectionMenu.layout	(revision 9269)
+++ code/branches/presentation2012merge/data/gui/layouts/ShipSelectionMenu.layout	(revision 9269)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<GUILayout >
+
+    <Window Type="MenuWidgets/StaticImage" Name="orxonox/ShipSelectionBackground" >
+        <Property Name="FrameEnabled" Value="False" />
+        <Property Name="InheritsAlpha" Value="False" />
+        <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+        <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{1,0}}" />
+        <Property Name="BackgroundEnabled" Value="False" />
+	<!-- --> 
+        <Window Type="MenuWidgets/StaticText" Name="orxonox/ShipSelectionWindow" >
+            <Property Name="Text" Value="ShipSelection" />
+            <Property Name="Alpha" Value="0.8" />
+            <Property Name="InheritsAlpha" Value="False" />
+            <Property Name="HorzFormatting" Value="HorzCentred" />
+            <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+            <Property Name="VertFormatting" Value="TopAligned" />
+            <Property Name="UnifiedAreaRect" Value="{{0.2,0},{0.15,0},{0.8,0},{0.7,0}}" /> 
+            <Window Type="MenuWidgets/TabControl" Name="orxonox/ShipSelectionTabControl" >
+                <Property Name="TabHeight" Value="{0,26.4388}" />
+                <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+                <Property Name="TabPanePosition" Value="Top" />
+		<Property Name="UnifiedAreaRect" Value="{{0.05,0},{0.1,0},{0.95,0},{0.925,0}}" />
+		
+            </Window>	
+            
+	    <!-- TODO: Ship Description and Image
+	    <Window Type="MenuWidgets/StaticImage" Name="orxonox/ShipSelectionShipImage" >
+                <Property Name="AlwaysOnTop" Value="True" />
+                <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+                <Property Name="UnifiedAreaRect" Value="{{0.55,0},{0.25,0},{0.9,0},{0.675,0}}" />
+            </Window>
+            <Window Type="MenuWidgets/StaticText" Name="orxonox/ShipSelectionLevelDescription" >
+                <Property Name="AlwaysOnTop" Value="True" />
+                <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+                <Property Name="VertScrollbar" Value="True" />
+                <Property Name="HorzScrollbar" Value="True" />
+                <Property Name="UnifiedAreaRect" Value="{{0.1,0},{0.725,0},{0.9,0},{0.875,0}}" />
+            </Window>--> 
+		 
+        </Window>
+        <Window Type="MenuWidgets/Button" Name="orxonox/ShipSelectionStartButton" >
+            <Property Name="Text" Value="Start" />
+            <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.25,0},{0.725,0},{0.4,0},{0.775,0}}" />
+            <Event Name="Clicked" Function="ShipSelectionMenu.ShipSelectionStartButton_clicked"/>
+        </Window>
+        <!-- TODO: set ship properties
+	<Window Type="MenuWidgets/Button" Name="orxonox/ShipSelectionConfigButton" >
+            <Property Name="Text" Value="Configure" />
+            <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.425,0},{0.725,0},{0.575,0},{0.775,0}}" />
+            <Property Name="Disabled" Value="True" />
+            <Event Name="Clicked" Function="ShipSelectionMenu.ShipSelectionConfigButton_clicked"/>
+        </Window> --> 
+        <Window Type="MenuWidgets/Button" Name="orxonox/ShipSelectionBackButton" >
+            <Property Name="Text" Value="Back" />
+            <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.6,0},{0.725,0},{0.75,0},{0.775,0}}" />
+            <Event Name="Clicked" Function="ShipSelectionMenu.ShipSelectionBackButton_clicked"/>
+        </Window>
+    </Window>
+</GUILayout>
Index: code/branches/presentation2012merge/data/gui/scripts/AudioMenu.lua
===================================================================
--- code/branches/presentation2012merge/data/gui/scripts/AudioMenu.lua	(revision 9266)
+++ code/branches/presentation2012merge/data/gui/scripts/AudioMenu.lua	(revision 9269)
@@ -34,4 +34,5 @@
     table.insert(themeList, "8-Bit Style")
     table.insert(themeList, "Corny Jazz")
+    table.insert(themeList, "Metal")
     for k,v in pairs(themeList) do
         item = CEGUI.createListboxTextItem(v)
@@ -45,4 +46,6 @@
     elseif orxonox.getConfig("MoodManager", "mood_") == "jazzy" then
         listboxwindow:setItemSelectState(3,true)
+    elseif orxonox.getConfig("MoodManager", "mood_") == "metal" then
+        listboxwindow:setItemSelectState(4,true)
     else
         listboxwindow:setItemSelectState(0,true)
@@ -178,4 +181,6 @@
     elseif listboxwindow:isItemSelected(3) then
         orxonox.config("MoodManager", "mood_", "jazzy")
+    elseif listboxwindow:isItemSelected(4) then
+        orxonox.config("MoodManager", "mood_", "metal")
     else
         orxonox.config("MoodManager", "mood_", "default")
Index: code/branches/presentation2012merge/data/gui/scripts/ShipSelectionMenu.lua
===================================================================
--- code/branches/presentation2012merge/data/gui/scripts/ShipSelectionMenu.lua	(revision 9269)
+++ code/branches/presentation2012merge/data/gui/scripts/ShipSelectionMenu.lua	(revision 9269)
@@ -0,0 +1,132 @@
+-- ShipSelectionMenu.lua
+
+local P = createMenuSheet("ShipSelectionMenu")
+P.activeTabIndexes = {}
+P.scrollbarWidth = 13
+P.shipList = {}
+function P.onLoad()
+   local dircmd = "ls -l ../levels/templates/ | awk '{print $9}' | grep \"spaceship\" | sed -e 's/\\.[a-zA-Z]*$//'" -- go to spaceships folder and generate a list of installed shipmodels.
+   os.execute(dircmd .. " > ../levels/templates/.shipmodels") --saves output in a textfile
+   --[[TODO: program a Windows Version / platform independent version here:
+   if string.sub(package.config,1,1) == '\\' then
+           -- Windows
+           dircmd = "dir /b/s"
+   end]]	
+   P.createFilterTab("All Ships")   
+end
+
+function P.createShipList() --generates list with tagged shipmodels
+   P.shipList = {}
+   for line in io.lines("../levels/templates/.shipmodels") do  --checks if shipmodel is included in level file
+	if selectedlevel:hasShip(string.lower(line)) then
+		P.shipList[#P.shipList+1] = string.lower(line)
+	end
+   end  
+end
+
+function P.update() --updates listbox with found models
+    P.createShipList()
+    listbox:resetList()
+    --orxonox.GUIManager:setItemTooltipsEnabledHelper(listbox, true)
+    local tabIndexes = {}
+    for k,v in pairs(P.shipList) do
+        --TODO: only add ship if is in the right filter tab
+        --if tag == nil or v:hasShip(tag) then
+            local item = CEGUI.createListboxTextItem(v)
+            item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
+            listbox:addItem(item)
+            table.insert(tabIndexes, k)
+            --orxonox.GUIManager:setTooltipTextHelper(item, v:getDescription())
+        --end
+    end
+    table.insert(P.activeTabIndexes, tabIndexes)
+end
+
+function P.createFilterTab(name) -- generates filter tab and list box, sets handler for selection changes
+    tabName = "orxonox/ShipSelectionLevelTab"
+    -- create new tab window with desired name
+    listbox = CEGUI.toListbox(winMgr:createWindow("MenuWidgets/Listbox", tabName)) 
+    listbox:setText(name)
+    listbox:setProperty("UnifiedMaxSize", "{{1,0},{1,0}}")
+    --[[TODO: smaller list if image and description is implemented. 
+	listbox:setProperty("UnifiedAreaRect", "{{0.05,0},{0.1,0},{0.5,0},{0.675,0}}") --]]	 
+    listbox:setProperty("UnifiedAreaRect", "{{0,0},{0,0},{1,0},{1,0}}")
+    -- fill listbox with items
+    P.update()
+    -- listen to selection changes
+    orxonox.GUIManager:subscribeEventHelper(listbox, "ItemSelectionChanged", P.name..".ShipSelectionSelectionChanged")
+    local tabControl = winMgr:getWindow("orxonox/ShipSelectionTabControl")
+    orxonox.GUIManager:subscribeEventHelper(tabControl, "TabSelectionChanged", P.name..".ShipSelectionSelectionChanged")
+    if listbox:getItemCount() > 0 then
+        tabControl:addChildWindow(tabName)
+    end
+end
+
+function P.ShipSelectionGetSelectedModel() --returns selected model, if available.
+    -- choose the active listbox
+    local tabControl = CEGUI.toTabControl(winMgr:getWindow("orxonox/ShipSelectionTabControl"))
+    local listbox = CEGUI.toListbox(tabControl:getTabContentsAtIndex(tabControl:getSelectedTabIndex()))
+    local choice = listbox:getFirstSelectedItem()
+    if choice ~= nil then
+        -- get the right tab and the right index
+        local tabIndexes = P.activeTabIndexes[tabControl:getSelectedTabIndex()+1]
+        local index = tabIndexes[listbox:getItemIndex(choice)+1]
+        return P.shipList[index]
+    else
+        return nil
+    end
+end
+
+function P.ShipSelectionSelectionChanged(e)
+    --[[ TODO: Get image and description from template file
+    local levelImage = winMgr:getWindow("orxonox/ShipSelectionLevelImage")
+    local levelDescription = winMgr:getWindow("orxonox/ShipSelectionLevelDescription")
+    local configButton = winMgr:getWindow("orxonox/ShipSelectionConfigButton")
+    local level = P.ShipSelectionGetSelectedModel()
+    if level ~= nil then
+        --local levelXMLFilename = selectedlevel:getXMLFilename()
+        --local imageName = selectedlevel:getScreenshot()
+        -- set the screenshot and the description for the selected level
+        --levelImage:setProperty("Image", "set:"..levelXMLFilename..imageName.." image:full_image")
+        --levelDescription:setText(level:getDescription())
+        -- only enable config button for "gametype" levels
+        --if level:hasTag("gametype") then
+         --   configButton:setProperty("Disabled", "False")
+        --else
+        --    configButton:setProperty("Disabled", "True")
+        --end
+    else
+        -- also take care of "no level selected"
+        levelImage:setProperty("Image", nil)
+        levelDescription:setText("")
+    end
+   --]]
+end
+
+function P.ShipSelectionStartButton_clicked(e)
+
+    if (selectedlevel ~= nil and P.ShipSelectionGetSelectedModel() ~= nil)  then
+	selectedlevel:selectShip(P.ShipSelectionGetSelectedModel())
+        orxonox.execute("startGame " .. "_temp.oxw")
+        hideAllMenuSheets()
+    else
+	orxonox.execute("orxout user_warning no ship model selected or no tagged shipmodel installed")
+    end
+end
+
+--[[ TODO: function P.ShipSelectionConfigButton_clicked(e)
+
+    local level = P.ShipSelectionGetSelectedModel()
+    if level ~= nil then
+        local configMenu = showMenuSheet("ShipSelectionConfigMenu")
+        configMenu:loadConfig(level)
+    end
+end
+--]]
+
+
+function P.ShipSelectionBackButton_clicked(e)
+    orxonox.execute("keyESC")
+end 
+
+return P
Index: code/branches/presentation2012merge/data/gui/scripts/SingleplayerMenu.lua
===================================================================
--- code/branches/presentation2012merge/data/gui/scripts/SingleplayerMenu.lua	(revision 9266)
+++ code/branches/presentation2012merge/data/gui/scripts/SingleplayerMenu.lua	(revision 9269)
@@ -2,8 +2,9 @@
 
 local P = createMenuSheet("SingleplayerMenu")
-
+P.loadAlong = {"ShipSelectionMenu"}
 P.levelList = {}
 P.activeTabIndexes = {}
 P.scrollbarWidth = 13
+selectedlevel = {} -- level for ship selection
 
 function P.onLoad()
@@ -46,5 +47,6 @@
     while index < size do
         level = orxonox.LevelManager:getInstance():getAvailableLevelListItem(index)
-        if level ~= nil then
+        if (level ~= nil and level:getXMLFilename() ~= "_temp.oxw") then
+	    --os.execute("echo " .. level:getXMLFilename() .." >> ~/outputorx")
             local levelXMLFilename = level:getXMLFilename()
             -- create an imageset for each screenshot
@@ -141,8 +143,13 @@
 
 function P.SingleplayerStartButton_clicked(e)
-    local level = P.SingleplayerGetSelectedLevel()
-    if level ~= nil then
-        orxonox.execute("startGame " .. level:getXMLFilename())
-        hideAllMenuSheets()
+    selectedlevel = P.SingleplayerGetSelectedLevel()
+    if selectedlevel ~= nil then
+        if selectedlevel:hasTag("shipselection") then
+            local shipSelectionMenu = showMenuSheet("ShipSelectionMenu", true)
+            shipSelectionMenu:update()
+        else
+            orxonox.execute("startGame " .. selectedlevel:getXMLFilename())
+            hideAllMenuSheets()
+	end
     end
 end
Index: code/branches/presentation2012merge/data/levels/SurfaceRacePresentation.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/SurfaceRacePresentation.oxw	(revision 9269)
+++ code/branches/presentation2012merge/data/levels/SurfaceRacePresentation.oxw	(revision 9269)
@@ -0,0 +1,390 @@
+<LevelInfo
+ name = "Surface Race Presentation"
+ description = "just awesome 2.0"
+ screenshot = "surfaceRace.png"
+ tags = "gametype, shipselection"
+ startingships = "spaceshipassff, spaceshipghost, spaceshipspacecruiser, spaceshiprace"
+/>
+
+<?lua
+  include("stats.oxo")
+  include("HUDTemplates3.oxo")
+  include("templates/lodInformation.oxt")
+  include("templates/spaceshipRace.oxt")
+  include("templates/spaceshipAssff.oxt")
+  include("templates/spaceshipGhost.oxt")
+  include("templates/spaceshipSpacecruiser.oxt")
+  include("templates/pickupRepresentationTemplates.oxt")
+ 
+?>
+
+<Level
+gametype = SpaceRace
+>
+
+  <templates>
+    <Template link=lodtemplate_default />
+  </templates>
+  <?lua include("includes/notifications.oxi") ?>
+
+  <Scene
+    ambientlight = "2.0, 2.0, 2.0"
+    skybox       = "Orxonox/skyBoxClouds"
+    gravity      = "0,-75,0"
+    negativeWorldRange = "-100000, -100000, -100000"
+    positiveWorldRange = " 100000,  100000,  100000"
+    hasPhysics   = true
+  >
+
+    <Template name=PortalDefault>
+        <PortalEndPoint>
+            <attached>
+                <Model mesh="Spacegate.mesh" scale="3"/>
+            </attached>
+        </PortalEndPoint>
+    </Template>
+
+    <PortalEndPoint position="6000,8050,2500" id="1" distance="40" target="MobileEntity" design="PortalDefault" reenterDelay="0"/>
+    <PortalEndPoint position="6100,8050,-4500" id="2" distance="40" target="MobileEntity" design="PortalDefault" reenterDelay="0"/>
+    <PortalLink fromID="1" toID="2" />
+    <PortalLink fromID="2" toID="1" />
+
+  <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
+
+
+    <Model position="4200,8050,-1000" scale=10 mesh="debris-pile01.mesh" shadow=true />
+    <Model position="4200,8050,-1000" scale=10 mesh="debris-pile02.mesh" shadow=true />
+    <Model position="4200,8050,-1000" scale=10 mesh="debris-pile03.mesh" shadow=true />
+    
+	<MovableEntity position="-700,8090,-300" velocity="80,0,0" rotationaxis="1,0,1" rotationrate=200>
+      <attached>
+        <Model position="0,0,-20" scale=10 mesh="cokebottle.mesh" />
+      </attached>
+    </MovableEntity>
+
+
+<SpaceRaceManager>
+ <checkpoints>	
+	<RaceCheckPoint name="checkpoint1" position="0,8050,-1000" direction="0,1,0" collisionType="static" scale="4" distance="150" checkpointindex="0" islast="false" nextcheckpoints="1,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+	<collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+    
+	<RaceCheckPoint name="checkpoint2" position="1000,8050,-4000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="1" islast="false" nextcheckpoints="2,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+           <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+
+	<RaceCheckPoint name="checkpoint3" position="3000,8050,-4000" direction="0,1,0" roll="-45" collisionType="static" scale="4" distance="150" checkpointindex="2" islast="false" nextcheckpoints="3,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+
+	<RaceCheckPoint name="checkpoint4" position="4000,8050,-1000" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="3" islast="false" nextcheckpoints="4,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+        <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+
+	<RaceCheckPoint name="checkpoint5" position="4000,8050,0" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="4" islast="false" nextcheckpoints="5,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+        <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+
+	<RaceCheckPoint name="checkpoint6" position="3000,8050,1000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="5" islast="false" nextcheckpoints="6,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+
+	<RaceCheckPoint name="checkpoint7" position="0,8050,2000" direction="0,1,0" roll="90" collisionType="static" scale="4" distance="150" checkpointindex="6" islast="false" nextcheckpoints="7,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+      <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+
+	<RaceCheckPoint name="checkpoint8" position="-4000,8050,3000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="7" islast="false" nextcheckpoints="8,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+
+	<RaceCheckPoint name="checkpoint9" position="-4000,8050,5000" direction="0,1,0" roll="-45" collisionType="static" scale="4" distance="150" checkpointindex="8" islast="false" nextcheckpoints="9,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+         <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+
+	<RaceCheckPoint name="checkpoint10" position="-3000,8050,6000" direction="0,1,0" roll="90" collisionType="static" scale="4" distance="150" checkpointindex="9" islast="false" nextcheckpoints="10,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+
+	<RaceCheckPoint name="checkpoint11" position="0,8050,6000" direction="0,1,0" roll="90" collisionType="static" scale="4" distance="120" checkpointindex="10" islast="false" nextcheckpoints="11,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+
+	<RaceCheckPoint name="checkpoint12" position="6000,8050,6000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="11" islast="false" nextcheckpoints="12,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+      <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+
+	<RaceCheckPoint name="checkpoint13" position="5500,8050,3000" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="12" islast="false" nextcheckpoints="13,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+
+	<RaceCheckPoint name="checkpoint14" position="6000,8050,-5000" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="13" islast="true" >
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+        </collisionShapes>
+    </RaceCheckPoint>
+</checkpoints>
+</SpaceRaceManager>
+
+ <SpawnPoint team=0 position="0,8050,0" lookat="0,8000,-8000" spawnclass=SpaceShip pawndesign=shipselection />
+
+  
+	<!-- -----------------------Zylinder---------------------------- -->
+<StaticEntity position="2750,8050,6000" direction="1,0,0" roll="90"  scale="4" collisionType=static mass=100000 friction=0.01 >
+      <attached>
+	<Model position="0,0,0" mesh="cylinder.mesh" scale3D="100,100,400" />
+	<!--
+            	<Model position="0,80,600" mesh="testcube.mesh" scale3D="90,18,-600" />
+		<Model position="0,-80,600" mesh="testcube.mesh" scale3D="90,18,-600" />
+		<Model position="80,0,600" mesh="testcube.mesh" scale3D="18,90,-600" />
+		<Model position="-80,0,600" mesh="testcube.mesh" scale3D="18,09,-600" />
+	 -->
+
+      </attached>
+
+
+ 	<collisionShapes>
+          
+            	
+		<BoxCollisionShape position="0,320,2400"            halfExtents="360,72,2400" />
+		<BoxCollisionShape position="0,-320,2400"      halfExtents="360,72,2400" />
+		<BoxCollisionShape position="320,0,2400"            halfExtents="72,360,2400" />
+		<BoxCollisionShape position="-320,0,2400"     halfExtents="72,360,2400" />
+            	
+
+	
+        </collisionShapes>
+
+  </StaticEntity>
+
+<!-- ------------------Cube between gate 4 and 5----------------- -->
+<StaticEntity position="4465,8050,-500" direction="0,0,0"   scale="1" collisionType=static mass=100000 friction=0.01 >
+      <attached>
+	<Model position="0,0,0" mesh="blackcube.mesh" scale3D="450,600,50" />
+<!--
+            	<Model position="0,0,0" mesh="testcube.mesh" scale3D="450,600,50" />
+		-->
+
+      </attached>
+
+
+ 	<collisionShapes>
+          
+            	
+		<BoxCollisionShape position="0,0,0"            halfExtents="450,600,50" />
+
+        </collisionShapes>
+
+  </StaticEntity>
+
+<StaticEntity position="3535,8050,-500" direction="0,0,0"   scale="1" collisionType=static mass=100000 friction=0.01 >
+      <attached>
+	<Model position="0,0,0" mesh="blackcube.mesh" scale3D="450,600,50" />
+<!--
+            	<Model position="0,0,0" mesh="testcube.mesh" scale3D="450,600,50" />
+		 -->
+
+      </attached>
+
+
+ 	<collisionShapes>
+          
+            	
+		<BoxCollisionShape position="0,0,0"            halfExtents="450,600,50" />
+
+        </collisionShapes>
+
+  </StaticEntity>
+
+
+
+
+	<!-- ------------------Boden----------------- -->
+  <StaticEntity position="0,0,0" direction="0,0,0" collisionType=static mass=100000 friction=0.01>
+     <attached>
+        <Model position="0,0,0" mesh="CubeGround.mesh" scale3D="8000,8000,8000" />
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,50,0" halfExtents="8000,8000,8000" />um j?:P"{
+
+      </collisionShapes> 
+</StaticEntity>
+
+
+<!-- ---------------------PickUp---------------------- -->
+
+
+ <PickupSpawner position="4000,8050,0" triggerDistance="40" respawnTime="10" maxSpawnedItems="99" scale="8">
+      <pickup>
+        <SpeedPickup template=smallspeedpickup />
+      </pickup>
+    </PickupSpawner>
+
+   <PickupSpawner position="5500,8100,2000" triggerDistance="40" respawnTime="10" maxSpawnedItems="99" scale="8">
+      <pickup>
+        <SpeedPickup template=mediumspeedpickup />
+      </pickup>
+    </PickupSpawner>
+
+    <PickupSpawner position="3000,8050,-4000" triggerDistance="40" respawnTime="60"  maxSpawnedItems="5" scale="8">
+      <pickup>
+        <ShrinkPickup template ="mediumshrinkpickup"/>
+      </pickup>
+    </PickupSpawner>>
+
+
+
+
+ <!-- ---------------asteroid ellipse----------------- -->
+
+ <?lua
+    max = 15
+    for i = 0, max, 1
+    do
+	x=-12000
+	y=10000
+	z=-12000
+ 
+    ?>
+    <?lua
+    for k = 1, 15, 1
+    do
+    j = math.random()
+    ?>
+
+    <MovableEntity
+      position = "<?lua print(x + math.random() * 20000) ?>,<?lua print(y + math.random() * 5000) ?>,<?lua print(z + math.random() * 20000) ?>"
+      collisionType = "dynamic"
+      linearDamping = "0.5"
+      angularDamping = "0.5"
+      collisiondamage = "100"
+      enablecollisiondamage = "true"
+      scale="<?lua print(j * 5) ?>" >
+      <attached>
+        <Model position="0,0,0" scale="<?lua print(j * 10) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh">
+      <?lua if k == 0 then ?><attached><!-- ---------asteroid fog----- -->
+            <ParticleEmitter position="0,0,0" source="Orxonox/Steam" />
+          </attached> <?lua end ?>
+        </Model>
+      </attached>
+      <collisionShapes>
+        <SphereCollisionShape radius="<?lua print(j * 80) ?>" />
+      </collisionShapes>
+    </MovableEntity>
+    <?lua
+    end
+    ?>
+    <?lua end ?>
+
+  </Scene>
+</Level>
+
Index: code/branches/presentation2012merge/data/levels/includes/pickups.oxi
===================================================================
--- code/branches/presentation2012merge/data/levels/includes/pickups.oxi	(revision 9266)
+++ code/branches/presentation2012merge/data/levels/includes/pickups.oxi	(revision 9269)
@@ -210,4 +210,39 @@
 </PickupRepresentation>
 
+<!-- DamageBoost Pickup -->
+
+<PickupRepresentation
+    pickupName = "Small DamageBoost Pickup"
+    pickupDescription = "Multiplies the ship damage with 2."
+    spawnerTemplate = "smalldamageboostpickupRepresentation"
+    inventoryRepresentation = "SmallDamageBoost"
+>
+    <pickup>
+        <DamageBoostPickup template=smalldamageboostpickup />
+    </pickup>
+</PickupRepresentation>
+
+<PickupRepresentation
+    pickupName = "Medium DamageBoost Pickup"
+    pickupDescription = "Multiplies the ship damage with 5."
+    spawnerTemplate = "mediumdamageboostpickupRepresentation"
+    inventoryRepresentation = "MediumDamageBoost"
+>
+    <pickup>
+        <DamageBoostPickup template=mediumdamageboostpickup />
+    </pickup>
+</PickupRepresentation>
+
+<PickupRepresentation
+    pickupName = "Large DamageBoost Pickup"
+    pickupDescription = "Multiplies the ship damage with 7."
+    spawnerTemplate = "largedamageboostpickupRepresentation"
+    inventoryRepresentation = "LargeDamageBoost"
+>
+    <pickup>
+        <DamageBoostPickup template=largedamageboostpickup />
+    </pickup>
+</PickupRepresentation>
+
 <!-- Shrink Pickup -->
 
Index: code/branches/presentation2012merge/data/levels/includes/towerWeaponSettings.oxi
===================================================================
--- code/branches/presentation2012merge/data/levels/includes/towerWeaponSettings.oxi	(revision 9269)
+++ code/branches/presentation2012merge/data/levels/includes/towerWeaponSettings.oxi	(revision 9269)
@@ -0,0 +1,55 @@
+     <weaponslots>
+      <WeaponSlot position="-15.0,-1.5,0" />
+      <WeaponSlot position=" 15.0,-1.5,0" />
+      <WeaponSlot position="    0,   0,0" />
+    </weaponslots>
+    <weaponsets>
+      <WeaponSet firemode=0 />
+      <WeaponSet firemode=1 />
+      <WeaponSet firemode=2 />
+      <WeaponSet firemode=3 />
+    </weaponsets>
+    <weapons>
+      <WeaponPack>
+        <links>
+          <DefaultWeaponmodeLink firemode=0 weaponmode=0 />
+          <DefaultWeaponmodeLink firemode=1 weaponmode=1 />
+          <DefaultWeaponmodeLink firemode=2 weaponmode=2 />
+          <DefaultWeaponmodeLink firemode=3 weaponmode=3 />
+        </links>
+        <Weapon>
+          <attached>
+            <Model mesh="LightningGun.mesh" pitch="100" roll="90" yaw="90" position="0,-1.3,200" scale=1/>
+            <Model mesh="LightningGun-s.mesh" pitch="78" roll="90" yaw="90" position="0.2,-1.3,200" scale=1 />
+            <Model mesh="hs-w01_reduced.mesh" roll="45" pitch="-76" yaw="-45" position="-1.5,1,200" scale=10 />
+          </attached>
+          <HsW01 mode=0 munitionpershot=0 delay=0.005 damage=31.4159 material="Flares/point_lensflare" muzzleoffset=" 0.1, 1.6,-2" />
+          <HsW01 mode=0 munitionpershot=0 delay=0     damage=314.159 material="Flares/point_lensflare" muzzleoffset="-1.6, 1.3,-2" />
+          <LightningGun mode=1 muzzleoffset="0,0,0" damage=3.14159 shielddamage=20 />
+        </Weapon>
+        
+        <Weapon>
+          <attached>
+            <Model mesh="LightningGun.mesh" pitch="103" roll="90" yaw="90" position="0,-1.35,0" />
+            <Model mesh="LightningGun-s.mesh" pitch="103" roll="90" yaw="90" position="0.2,-1.35,0" />
+            <Model mesh="hs-w01_reduced.mesh" roll="90" pitch="-104" yaw="-90" position="0,1.3,0.3" scale=0.6 />
+          </attached>
+          <HsW01 mode=0 munitionpershot=0 delay=0     damage=3.14159 material="Flares/point_lensflare" muzzleoffset=" 1.6, 1.3, -2.0" />
+          <HsW01 mode=0 munitionpershot=0 delay=0.125 damage=3.14159 material="Flares/point_lensflare" muzzleoffset="-0.1, 1.6, -2.0" />
+          <LightningGun mode=1 muzzleoffset="0,0,0" damage=23 />
+        </Weapon>
+        <Weapon>
+          <SimpleRocketFire mode=2 muzzleoffset="0,0,0" damage=30 shielddamage=20 />
+          <RocketFire mode=3 muzzleoffset="0,0,0" damage=30 healthdamage=50 shielddamage=20 />
+        </Weapon>
+        
+      </WeaponPack>
+      <WeaponPack>
+        <links>
+          <DefaultWeaponmodeLink firemode=1 weaponmode=0 />
+        </links>
+        <!--Weapon>
+          <EnergyDrink mode=0 munitionpershot=0 delay=0  material="Flares/point_lensflare"muzzleoffset="2,-0.2,-1" />
+        </Weapon-->
+      </WeaponPack>
+    </weapons>
Index: code/branches/presentation2012merge/data/levels/pickups.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/pickups.oxw	(revision 9266)
+++ code/branches/presentation2012merge/data/levels/pickups.oxw	(revision 9269)
@@ -168,4 +168,25 @@
       </pickup>
     </PickupSpawner>
+    
+    <!-- DamageBoost pickup -->
+    
+    <PickupSpawner position="-50,75,-125" triggerDistance="10" respawnTime="30" maxSpawnedItems="10">
+      <pickup>
+        <DamageBoostPickup template=smalldamageboostpickup />
+      </pickup>
+    </PickupSpawner>
+    
+      <PickupSpawner position="-50,100,-125" triggerDistance="10" respawnTime="30" maxSpawnedItems="10">
+      <pickup>
+        <DamageBoostPickup template=mediumdamageboostpickup />
+      </pickup>
+    </PickupSpawner>
+    
+      <PickupSpawner position="-50,125,-125" triggerDistance="10" respawnTime="30" maxSpawnedItems="10">
+      <pickup>
+        <DamageBoostPickup template=largedamageboostpickup />
+      </pickup>
+    </PickupSpawner>
+    
     
     <!-- Other pickups -->
@@ -206,4 +227,61 @@
       </pickup>
     </PickupSpawner>
+    
+    <!-- @Objects: 4 boxes (uncontrolled pawns) -->
+    <Pawn team=1 health=30 position="0,0,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box RVName = "Box 4" >
+        <events>
+          <visibility>
+            <EventListener event="flying4" />
+          </visibility>
+        </events>
+        <attached>
+            <Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" />
+        </attached>
+        <collisionShapes>
+            <BoxCollisionShape position="0,0,0" halfExtents="15,15,15" />
+        </collisionShapes>
+    </Pawn>
+
+    <Pawn team=1 health=30 position="0,100,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box RVName = "Box 3">
+        <events>
+          <visibility>
+            <EventListener event="flying4" />
+          </visibility>
+        </events>
+        <attached>
+           <Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" />
+        </attached>
+        <collisionShapes>
+            <BoxCollisionShape position="0,0,0" halfExtents="15,15,15" />
+        </collisionShapes>
+    </Pawn>
+
+    <Pawn health=30 position="0,200,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box team=1 RVName = "Box 2">
+        <events>
+          <visibility>
+            <EventListener event="flying4" />
+          </visibility>
+        </events>
+        <attached>
+           <Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" />
+        </attached>
+        <collisionShapes>
+            <BoxCollisionShape position="0,0,0" halfExtents="15,15,15" />
+        </collisionShapes>
+    </Pawn>
+
+    <Pawn health=30 position="0,300,0" direction="0,-1,0" collisionType=dynamic mass=100000 name=box team=1 RVName = "Box 1">
+        <events>
+          <visibility>
+            <EventListener event="flying4" />
+          </visibility>
+        </events>
+        <attached>
+            <Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" />
+        </attached>
+        <collisionShapes>
+           <BoxCollisionShape position="0,0,0" halfExtents="15,15,15" />
+        </collisionShapes>
+    </Pawn>
 
     <!--StaticEntity position="0,-200,0" direction="0,-1,0" collisionType=static mass=500 friction=0.01 >
Index: code/branches/presentation2012merge/data/levels/portals.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/portals.oxw	(revision 9266)
+++ code/branches/presentation2012merge/data/levels/portals.oxw	(revision 9269)
@@ -29,5 +29,5 @@
         <PortalEndPoint>
             <attached>
-                <Billboard material="Portals/Default" />
+                <Model mesh="Spacegate.mesh" yaw="90"/>
             </attached>
         </PortalEndPoint>
Index: code/branches/presentation2012merge/data/levels/surfaceRace.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/surfaceRace.oxw	(revision 9269)
+++ code/branches/presentation2012merge/data/levels/surfaceRace.oxw	(revision 9269)
@@ -0,0 +1,455 @@
+<LevelInfo
+ name = "Surface Race"
+ description = "just awesome"
+ screenshot = "surfaceRace.png"
+ tags = "gametype"
+/>
+
+<?lua
+  include("stats.oxo")
+  include("HUDTemplates3.oxo")
+  include("templates/lodInformation.oxt")
+  include("templates/spaceshipRace.oxt")
+  include("templates/pickupRepresentationTemplates.oxt")
+ 
+?>
+
+
+<Level
+gametype = SpaceRace
+>
+
+  <templates>
+    <Template link=lodtemplate_default />
+  </templates>
+  <?lua include("includes/notifications.oxi") ?>
+
+  <Scene
+    ambientlight = "2.0, 2.0, 2.0"
+    skybox       = "Orxonox/skyBoxClouds"
+    gravity      = "0,-75,0"
+    negativeWorldRange = "-100000, -100000, -100000"
+    positiveWorldRange = " 100000,  100000,  100000"
+    hasPhysics   = true
+  >
+
+  <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
+
+
+
+<SpaceRaceManager>
+ <checkpoints>	
+	<RaceCheckPoint name="checkpoint1" position="0,8050,-1000" direction="0,1,0" collisionType="static" scale="4" distance="150" checkpointindex="0" islast="false" nextcheckpoints="1,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+	
+<!-- 
+		<Model position="0,0,55" mesh="testcube.mesh" scale3D="110,20,20" />
+		<Model position="0,0,-55" mesh="testcube.mesh" scale3D="110,20,20" />
+		<Model position="55,0,0" mesh="testcube.mesh" scale3D="20,20,110" />
+		<Model position="-55,0,0" mesh="testcube.mesh" scale3D="20,20,110" />
+
+-->
+
+
+        </attached>
+
+
+
+	<collisionShapes>
+
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+
+	 
+        </collisionShapes>
+
+
+
+	
+    </RaceCheckPoint>
+
+<RaceCheckPoint name="checkpoint2" position="1000,8050,-4000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="1" islast="false" nextcheckpoints="2,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       
+
+           <collisionShapes>
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+	 
+        </collisionShapes>
+    </RaceCheckPoint>
+
+
+
+<RaceCheckPoint name="checkpoint3" position="3000,8050,-4000" direction="0,1,0" roll="-45" collisionType="static" scale="4" distance="150" checkpointindex="2" islast="false" nextcheckpoints="3,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+
+	 
+        </collisionShapes>
+
+    </RaceCheckPoint>
+
+
+<RaceCheckPoint name="checkpoint4" position="4000,8050,-1000" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="3" islast="false" nextcheckpoints="4,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+        <collisionShapes>
+
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+
+	 
+        </collisionShapes>
+
+    </RaceCheckPoint>
+
+
+<RaceCheckPoint name="checkpoint5" position="4000,8050,0" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="4" islast="false" nextcheckpoints="5,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+        <collisionShapes>
+
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+
+	 
+        </collisionShapes>
+
+    </RaceCheckPoint>
+
+
+<RaceCheckPoint name="checkpoint6" position="3000,8050,1000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="5" islast="false" nextcheckpoints="6,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+
+	 
+        </collisionShapes>
+    </RaceCheckPoint>
+
+
+
+<RaceCheckPoint name="checkpoint7" position="0,8050,2000" direction="0,1,0" roll="90" collisionType="static" scale="4" distance="150" checkpointindex="6" islast="false" nextcheckpoints="7,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+      <collisionShapes>
+
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+
+	 
+        </collisionShapes>
+
+    </RaceCheckPoint>
+
+
+
+<RaceCheckPoint name="checkpoint8" position="-4000,8050,3000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="7" islast="false" nextcheckpoints="8,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+	 
+        </collisionShapes>
+    </RaceCheckPoint>
+
+
+<RaceCheckPoint name="checkpoint9" position="-4000,8050,5000" direction="0,1,0" roll="-45" collisionType="static" scale="4" distance="150" checkpointindex="8" islast="false" nextcheckpoints="9,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+         <collisionShapes>
+
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+
+	 
+        </collisionShapes>
+
+    </RaceCheckPoint>
+
+
+<RaceCheckPoint name="checkpoint10" position="-3000,8050,6000" direction="0,1,0" roll="90" collisionType="static" scale="4" distance="150" checkpointindex="9" islast="false" nextcheckpoints="10,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+
+	 
+        </collisionShapes>
+
+    </RaceCheckPoint>
+
+<RaceCheckPoint name="checkpoint11" position="0,8050,6000" direction="0,1,0" roll="90" collisionType="static" scale="4" distance="120" checkpointindex="10" islast="false" nextcheckpoints="11,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+
+	 
+        </collisionShapes>
+
+    </RaceCheckPoint>
+
+<RaceCheckPoint name="checkpoint12" position="6000,8050,6000" direction="0,1,0" roll="45" collisionType="static" scale="4" distance="150" checkpointindex="11" islast="false" nextcheckpoints="12,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+      <collisionShapes>
+
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+
+	 
+        </collisionShapes>
+
+    </RaceCheckPoint>
+
+
+
+<RaceCheckPoint name="checkpoint13" position="5500,8050,3000" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="12" islast="false" nextcheckpoints="13,-1,-1">
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+	 
+        </collisionShapes>
+    </RaceCheckPoint>
+
+
+<RaceCheckPoint name="checkpoint14" position="6000,8050,-5000" direction="0,1,0" roll="0" collisionType="static" scale="4" distance="150" checkpointindex="13" islast="true" >
+        <attached>
+            <Model mass="50" scale="50" mesh="raceCheckPoint.mesh" />
+        </attached>
+       <collisionShapes>
+
+            <BoxCollisionShape position="0,0,220"     halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="0,0,-220"      halfExtents="220, 40, 40" />
+            <BoxCollisionShape position="220,0,0"      halfExtents="40, 40, 220" />
+            <BoxCollisionShape position="-220,0,0"       halfExtents="40, 40, 220" />
+	 
+        </collisionShapes>
+    </RaceCheckPoint>
+
+
+</checkpoints>
+</SpaceRaceManager>
+
+ <SpawnPoint team=0 position="0,8050,0" lookat="0,8000,-8000" spawnclass=SpaceShip pawndesign=spaceshipRace />
+
+  
+	<!-- -----------------------Zylinder---------------------------- -->
+<StaticEntity position="2750,8050,6000" direction="1,0,0" roll="90"  scale="4" collisionType=static mass=100000 friction=0.01 >
+      <attached>
+	<Model position="0,0,0" mesh="cylinder.mesh" scale3D="100,100,400" />
+	<!--
+            	<Model position="0,80,600" mesh="testcube.mesh" scale3D="90,18,-600" />
+		<Model position="0,-80,600" mesh="testcube.mesh" scale3D="90,18,-600" />
+		<Model position="80,0,600" mesh="testcube.mesh" scale3D="18,90,-600" />
+		<Model position="-80,0,600" mesh="testcube.mesh" scale3D="18,09,-600" />
+	 -->
+
+      </attached>
+
+
+ 	<collisionShapes>
+          
+            	
+		<BoxCollisionShape position="0,320,2400"            halfExtents="360,72,2400" />
+		<BoxCollisionShape position="0,-320,2400"      halfExtents="360,72,2400" />
+		<BoxCollisionShape position="320,0,2400"            halfExtents="72,360,2400" />
+		<BoxCollisionShape position="-320,0,2400"     halfExtents="72,360,2400" />
+            	
+
+	
+        </collisionShapes>
+
+  </StaticEntity>
+
+<!-- ------------------Cube between gate 4 and 5----------------- -->
+<StaticEntity position="4465,8050,-500" direction="0,0,0"   scale="1" collisionType=static mass=100000 friction=0.01 >
+      <attached>
+	<Model position="0,0,0" mesh="blackcube.mesh" scale3D="450,600,50" />
+<!--
+            	<Model position="0,0,0" mesh="testcube.mesh" scale3D="450,600,50" />
+		-->
+
+      </attached>
+
+
+ 	<collisionShapes>
+          
+            	
+		<BoxCollisionShape position="0,0,0"            halfExtents="450,600,50" />
+
+        </collisionShapes>
+
+  </StaticEntity>
+
+<StaticEntity position="3535,8050,-500" direction="0,0,0"   scale="1" collisionType=static mass=100000 friction=0.01 >
+      <attached>
+	<Model position="0,0,0" mesh="blackcube.mesh" scale3D="450,600,50" />
+<!--
+            	<Model position="0,0,0" mesh="testcube.mesh" scale3D="450,600,50" />
+		 -->
+
+      </attached>
+
+
+ 	<collisionShapes>
+          
+            	
+		<BoxCollisionShape position="0,0,0"            halfExtents="450,600,50" />
+
+        </collisionShapes>
+
+  </StaticEntity>
+
+
+
+
+	<!-- ------------------Boden----------------- -->
+  <StaticEntity position="0,0,0" direction="0,0,0" collisionType=static mass=100000 friction=0.01>
+     <attached>
+        <Model position="0,0,0" mesh="CubeGround.mesh" scale3D="8000,8000,8000" />
+      </attached>
+      <collisionShapes>
+        <BoxCollisionShape position="0,50,0" halfExtents="8000,8000,8000" />um j?:P"{
+
+      </collisionShapes> 
+</StaticEntity>
+
+
+<!-- ---------------------PickUp---------------------- -->
+
+
+ <PickupSpawner position="4000,8050,0" triggerDistance="40" respawnTime="10" maxSpawnedItems="99" scale="8">
+      <pickup>
+        <SpeedPickup template=smallspeedpickup />
+      </pickup>
+    </PickupSpawner>
+
+   <PickupSpawner position="5500,8100,2000" triggerDistance="40" respawnTime="10" maxSpawnedItems="99" scale="8">
+      <pickup>
+        <SpeedPickup template=mediumspeedpickup />
+      </pickup>
+    </PickupSpawner>
+
+    <PickupSpawner position="3000,8050,-4000" triggerDistance="40" respawnTime="60"  maxSpawnedItems="5" scale="8">
+      <pickup>
+        <ShrinkPickup template ="mediumshrinkpickup"/>
+      </pickup>
+    </PickupSpawner>>
+
+
+
+
+ <!-- ---------------asteroid ellipse----------------- -->
+
+ <?lua
+    max = 15
+    for i = 0, max, 1
+    do
+	x=-12000
+	y=10000
+	z=-12000
+ 
+    ?>
+    <?lua
+    for k = 1, 15, 1
+    do
+    j = math.random()
+    ?>
+
+    <MovableEntity
+      position = "<?lua print(x + math.random() * 20000) ?>,<?lua print(y + math.random() * 5000) ?>,<?lua print(z + math.random() * 20000) ?>"
+      collisionType = "dynamic"
+      linearDamping = "0.5"
+      angularDamping = "0.5"
+      collisiondamage = "100"
+      enablecollisiondamage = "true"
+      scale="<?lua print(j * 5) ?>" >
+      <attached>
+        <Model position="0,0,0" scale="<?lua print(j * 10) ?>" mesh="ast<?lua print( math.mod(i,6) + 1) ?>.mesh">
+      <?lua if k == 0 then ?><attached><!-- ---------asteroid fog----- -->
+            <ParticleEmitter position="0,0,0" source="Orxonox/Steam" />
+          </attached> <?lua end ?>
+        </Model>
+      </attached>
+      <collisionShapes>
+        <SphereCollisionShape radius="<?lua print(j * 80) ?>" />
+      </collisionShapes>
+    </MovableEntity>
+    <?lua
+    end
+    ?>
+    <?lua end ?>
+
+  </Scene>
+</Level>
+
Index: code/branches/presentation2012merge/data/levels/teamDeathMatch.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/teamDeathMatch.oxw	(revision 9266)
+++ code/branches/presentation2012merge/data/levels/teamDeathMatch.oxw	(revision 9269)
@@ -25,5 +25,5 @@
   <Scene
    ambientlight = "0.7, 0.6, 0.6"
-   skybox       = "Orxonox/skypanoramagen1"
+   skybox       = "Orxonox/creeper1"
   >
     <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0" />
Index: code/branches/presentation2012merge/data/levels/templates/pickupRepresentationTemplates.oxt
===================================================================
--- code/branches/presentation2012merge/data/levels/templates/pickupRepresentationTemplates.oxt	(revision 9266)
+++ code/branches/presentation2012merge/data/levels/templates/pickupRepresentationTemplates.oxt	(revision 9269)
@@ -215,4 +215,82 @@
     </PickupRepresentation>
 </Template>
+
+<!-- DamageBoost pickups -->
+
+<Template name=smalldamageboostpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.95,0.10,0.05" material="Sphere2" scale=0.1 >
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.30,0.30,0.30" material="damageSmall" scale=0.7 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=smalldamageboostpickup>
+  <DamageBoostPickup
+    duration = 10.0
+    damageMultiplier = 2.0
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=mediumdamageboostpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.95,0.10,0.05" material="Sphere2" scale=0.1 >
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.30,0.30,0.30" material="damageMedium" scale=0.7 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=mediumdamageboostpickup>
+  <DamageBoostPickup
+    duration = 10.0
+    damageMultiplier = 5.0
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
+<Template name=largedamageboostpickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.95,0.10,0.05" material="Sphere2" scale=0.1 >
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.30,0.30,0.30" material="damageLarge" scale=0.7 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=largedamageboostpickup>
+  <DamageBoostPickup
+    duration = 10.0
+    damageMultiplier = 7.0
+    activationType = "immediate"
+    durationType = "continuous"
+  />
+</Template>
+
 
 <!-- Speed pickups -->
Index: code/branches/presentation2012merge/data/levels/templates/spaceshipPirate.oxt
===================================================================
--- code/branches/presentation2012merge/data/levels/templates/spaceshipPirate.oxt	(revision 9266)
+++ code/branches/presentation2012merge/data/levels/templates/spaceshipPirate.oxt	(revision 9269)
@@ -35,9 +35,10 @@
    angularDamping    = 0.9999999
   >
+
     <engines>
       <MultiStateEngine position=" 0, 0, 0" template=spaceshippirateengine />
     </engines>
     <attached>
-      <Model position="0,0,0" yaw=90 pitch=-90 roll=0 scale=4 mesh="pirate.mesh" />
+      <Model position="0,0,0" yaw=90 pitch=-90 roll=0 scale=20 mesh="pirate.mesh" />
       <BlinkingBillboard position=" 12.7,-3.8,0" material="Examples/Flare" colour="1.0, 1.0, 1" amplitude=0.04 frequency=1 quadratic=1 />
       <BlinkingBillboard position="-12.7,-3.8,0" material="Examples/Flare" colour="1.0, 1.0, 1" amplitude=0.04 frequency=1 quadratic=1 phase="90"/>
Index: code/branches/presentation2012merge/data/levels/templates/spaceshipRace.oxt
===================================================================
--- code/branches/presentation2012merge/data/levels/templates/spaceshipRace.oxt	(revision 9269)
+++ code/branches/presentation2012merge/data/levels/templates/spaceshipRace.oxt	(revision 9269)
@@ -0,0 +1,119 @@
+<Template name=spaceshiprace>
+  <SpaceShip
+   hudtemplate            = spaceshiphud
+   camerapositiontemplate = spaceshipassffcameras
+   spawnparticlesource    = "Orxonox/fairytwirl"
+   spawnparticleduration  = 3
+   explosionchunks        = 6
+
+   health            = 100
+   maxhealth         = 200
+   initialhealth     = 100
+
+   shieldhealth        = 30
+   initialshieldhealth = 30
+   maxshieldhealth     = 50
+   shieldabsorption    = 0.8
+   reloadrate          = 1
+   reloadwaittime      = 1
+
+   primaryThrust     = 100
+   auxilaryThrust    = 30
+   rotationThrust    = 50
+
+   lift = 1;
+   stallSpeed = 220;
+
+   boostPower            = 15
+   boostPowerRate        = 1
+   boostRate             = 5
+   boostCooldownDuration = 10
+
+   shakeFrequency = 15
+   shakeAmplitude = 9
+
+   collisionType     = "dynamic"
+   mass              = 100
+   linearDamping     = 0.7
+   angularDamping    = 0.9999999
+  >
+    <engines>
+      <MultiStateEngine position=" 7.6, 0, 6" template=spaceshipassffengine />
+      <MultiStateEngine position="-7.6, 0, 0" template=spaceshipassffengine />
+    </engines>
+    <attached>
+      <Model position="0,0,0" yaw=90 pitch=-90 roll=0 scale=4 mesh="assff.mesh" />
+      <BlinkingBillboard position="17,-1.5,0" material="Examples/Flare" colour="1.0, 0.5, 0.3" amplitude=0.1 frequency=0.5 quadratic=1 />
+      <BlinkingBillboard position="-17,-1.5,0" material="Examples/Flare" colour="0.5, 1.0, 0.3" amplitude=0.1 frequency=0.5 phase=180 quadratic=1 />
+    </attached>
+    <collisionShapes>
+
+      <BoxCollisionShape position="0,0,0"      halfExtents="10, 3, 5" />
+      <BoxCollisionShape position="13,-1.3,0"  halfExtents="3, 1, 2" />
+      <BoxCollisionShape position="-13,-1.3,0" halfExtents="3, 1, 2" />
+      <BoxCollisionShape position="0,0,7"      halfExtents="3, 2, 2" />
+      <BoxCollisionShape position="0,0.1,-11"  halfExtents="2.2, 1.8, 6" />
+      <BoxCollisionShape position="0,0.1,-19"  halfExtents="1.4, 1, 2" />
+
+    </collisionShapes>
+<?lua
+  include("../includes/weaponSettingsAssff.oxi")
+?>
+  </SpaceShip>
+</Template>
+
+<Template name=spaceshipassffcameras defaults=0>
+  <SpaceShip>
+    <camerapositions>
+      <CameraPosition position="0,10, 40" drag=true mouselook=true />
+      <CameraPosition position="0,20, 80" drag=true mouselook=true />
+      <CameraPosition position="0,30,120" drag=true mouselook=true />
+    </camerapositions>
+  </SpaceShip>
+</Template>
+
+<Template name=spaceshipassffengine baseclass=MultiStateEngine>
+  <MultiStateEngine
+   boostfactor    = 2
+
+   speedfront     = 2500
+   speedback      =  50
+   speedleftright =  50
+   speedupdown    =  50
+
+   defEngineSndNormal = "sounds/Engine_low.ogg"
+   defEngineSndBoost = "sounds/Engine_high.ogg"
+
+   accelerationfront     = 500
+   accelerationbrake     = 500
+   accelerationback      =  125
+   accelerationleftright =  125
+   accelerationupdown    =  125
+  >
+    <EffectContainer condition="idle">
+      <WorldSound mainstate="activity" source="sounds/Engine_idle.ogg" looping=1 active=false/>
+    </EffectContainer>
+    <EffectContainer condition="not idle">
+      <FadingBillboard mainstate=activity active=false scale=0.1 position="7.6, 0, 9" colour="0.2, 0.65, 1.0, 1.0" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+      <FadingBillboard mainstate=activity active=false scale=0.1 position="-7.6, 0, 9" colour="0.2, 0.65, 1.0, 1.0" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+    </EffectContainer>
+    <EffectContainer condition="normal or brake">
+
+    </EffectContainer>
+    <EffectContainer condition="normal or boost">
+      <Backlight mainstate=activity active=false scale=0.4 name=bltest position=" 7.6, 0, 6" colour="0.2, 0.65, 1.0, 1.0" width=15 length=1500 lifetime=2 elements=50 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1" />
+      <Backlight mainstate=activity active=false scale=0.4 name=bltest position="-7.6, 0, 6" colour="0.2, 0.65, 1.0, 1.0" width=15 length=1500 lifetime=2 elements=50 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Flares/ThrusterFlare1" />
+    </EffectContainer>
+    <EffectContainer condition="boost">
+      <Backlight mainstate=activity active=false scale=0.4 name=bltest position=" 7.6, 0, 6" colour="0.6, 0.75, 0.8, 0.7" width=40 length=1000 lifetime=1 elements=30 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Examples/Flare" />
+      <Backlight mainstate=activity active=false scale=0.4 name=bltest position="-7.6, 0, 6" colour="0.6, 0.75, 0.8, 0.7" width=40 length=1000 lifetime=1 elements=30 trailmaterial="Trail/backlighttrail" turnontime=1 turnofftime=1 material="Examples/Flare" />
+    </EffectContainer>
+<!--    <EffectContainer condition="brake">
+      <FadingBillboard mainstate=activity active=false scale=0.3 position=" 8, 0, 6" colour="0.5, 0.0, 0.0, 0.3" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+      <FadingBillboard mainstate=activity active=false scale=0.3 position="-8, 0, 6" colour="0.5, 0.0, 0.0, 0.3" material="Examples/Flare" turnontime=0.5 turnofftime=0.5 />
+      <FadingBillboard mainstate=activity active=false scale=0.15 position=" 8, 0, 6" colour="1.0, 0.0, 0.0, 1.0" material="Flares/backlightflare" turnontime=0.5 turnofftime=0.5 />
+      <FadingBillboard mainstate=activity active=false scale=0.15 position="-8, 0, 6" colour="1.0, 0.0, 0.0, 1.0" material="Flares/backlightflare" turnontime=0.5 turnofftime=0.5 />
+    </EffectContainer>
+-->
+  </MultiStateEngine>
+</Template>
Index: code/branches/presentation2012merge/data/levels/templates/tower.oxt
===================================================================
--- code/branches/presentation2012merge/data/levels/templates/tower.oxt	(revision 9269)
+++ code/branches/presentation2012merge/data/levels/templates/tower.oxt	(revision 9269)
@@ -0,0 +1,37 @@
+<Template name=tower>
+  <Tower
+
+ 
+   explosionchunks        = 6
+
+   reloadrate          = 3
+   reloadwaittime      = 1
+
+   collisionType     = "dynamic"
+   team = 2
+
+
+  >
+  	<controller>
+		<WaypointPatrolController alertnessradius=1000 team=5>
+			<waypoints>
+				<Model mesh="cube.mesh" scale=0 position=" 700, 200, 100" />
+			</waypoints>
+		</WaypointPatrolController>
+	</controller>
+
+
+    <attached>
+		<Model position="0,0,0" scale=45 mesh="Tower.mesh" />
+    </attached>
+
+    <!--collisionShapes>
+    
+    </collisionShapes-->
+
+<?lua
+  include("../includes/towerWeaponSettings.oxi")
+?>
+  </Tower>
+</Template>
+
Index: code/branches/presentation2012merge/data/levels/theTimeMachine.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/theTimeMachine.oxw	(revision 9266)
+++ code/branches/presentation2012merge/data/levels/theTimeMachine.oxw	(revision 9269)
@@ -57,4 +57,26 @@
 ?>
   </SpaceShip>
+</Template>
+
+<Template name=spaceshipassffengine baseclass=MultiStateEngine>
+  <MultiStateEngine
+   boostfactor    = 2
+
+   speedfront     = 150
+   speedback      =  50
+   speedleftright =  50
+   speedupdown    =  50
+
+   defEngineSndNormal = "sounds/Engine_low.ogg"
+   defEngineSndBoost = "sounds/Engine_high.ogg"
+
+   accelerationfront     = 500
+   accelerationbrake     = 500
+   accelerationback      =  125
+   accelerationleftright =  125
+   accelerationupdown    =  125
+  >
+
+  </MultiStateEngine>
 </Template>
 
Index: code/branches/presentation2012merge/data/levels/towerDefense.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/towerDefense.oxw	(revision 9269)
+++ code/branches/presentation2012merge/data/levels/towerDefense.oxw	(revision 9269)
@@ -0,0 +1,140 @@
+<!-- TODO: Update the level's image-->
+
+<!-- See TowerDefenseReadme.txt for Information on this file -->
+
+<LevelInfo
+ name = "Tower Defense"
+ description = "Defend your Spacestation from incoming waves."
+ tags = "gametype"
+ screenshot = "emptylevel.png"
+/>
+
+<?lua
+  include("stats.oxo")
+  include("HUDTemplates3.oxo")
+  include("towerdefenseHUD.oxo")
+  include("templates/lodInformation.oxt")
+?>
+
+<?lua
+  include("templates/spaceshipAssff.oxt")
+  include("templates/spaceshipPirate.oxt")
+  include("templates/tower.oxt")
+?>
+
+<!-- Specify the position of the camera -->
+<Template name=centerpointmarkcamera defaults=0>
+  <Pawn>
+    <camerapositions>
+      <CameraPosition position="0,0,1500"/>
+    </camerapositions>
+  </Pawn>
+</Template>
+
+<!-- Loads a mesh to mark the center-->
+<Template name=centerpointmark>
+  <Pawn camerapositiontemplate=centerpointmarkcamera>
+    <attached>
+      <Model position="0,0,0" mesh="cylinder.mesh" scale3D="1,1,1" /> <!-- the camera is attached to this -->
+    </attached>
+  </Pawn>
+</Template>
+
+
+<!-- Template for a tower 	EDIT: new towertemplate is included with "templates/tower" -->
+<!--Template name=towertemplate>
+  <Tower>
+    <attached>
+      <Model position="0,0,0" scale=0.25 mesh="Tower_ME.mesh" />
+    </attached>
+  </Tower>
+</Template-->
+
+
+
+
+
+<Level gametype = "TowerDefense">
+  <templates>
+    <Template link=lodtemplate_default />
+  </templates>
+  
+  <?lua include("includes/notifications.oxi") ?>
+
+  <Scene
+    ambientlight = "0.8, 0.8, 0.8"
+    skybox       = "Orxonox/Starbox"
+  >
+  
+  	<Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/>
+    
+	<!-- Spawns the camera, attached to a crate -->
+	<SpawnPoint team=0 position="0,0,0" spawnclass=Pawn pawndesign=centerpointmark />
+	<!--TeamSpawnPoint team=1 position="-7,7,4" direction="-1,0,0" roll=90 yaw=0 spawnclass=SpaceShip pawndesign=spaceshipassff /-->
+	
+ 	<!--SpawnPoint team=1 position="0,0,10" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff  /-->
+ 	<!--SpawnPoint team=0 position="0,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff /-->
+ 	
+	<SpaceShip position="-700,-500, 100" lookat="0,0,0" scale=3 team=1 >
+      <templates>
+        <Template link=spaceshipassff />
+      </templates>
+      <controller>
+        <WaypointController accuracy=60>
+          <waypoints>
+			  <!-- 1,3 10,3 10,11, 13,11 -->
+            <Model mesh="cube.mesh" scale=0 position="-700,-500, 150" />
+            <Model mesh="cube.mesh" scale=0 position=" 200,-500, 150" />
+            <Model mesh="cube.mesh" scale=0 position=" 200, 300, 150" />
+            <Model mesh="cube.mesh" scale=0 position=" 500, 300, 150" />
+			<Model mesh="cube.mesh" scale=0 position=" 500, 700, 150" />
+          </waypoints>
+        </WaypointController>
+      </controller>
+    </SpaceShip>
+    
+    
+    <!--invisible entity to attach towers to, since playfield is static and towers are dynamic-->
+    <StaticEntity position=0,0,0>
+ 
+		 <attached>
+			<Model position="-50,-50,0" mesh="Playfield_ME.mesh" scale=80 />
+			<!-- Base -->
+			<Model position="500,700,100" mesh="sphere.mesh" scale=80 />
+            <!--Model position="0,0,0" mesh="crate.mesh" scale3D="3,3,3" /--> <!-- Only temporary needed to help align the collisionshape -->
+			<!-- This was used to mark the playfield, let's let it be here for now -->
+			<!--Model position="-8,8,0" mesh="crate.mesh" scale3D="0.3,0.3,0.3" /-->
+			<!--Model position="-8,-8,0" mesh="crate.mesh" scale3D="0.3,0.3,0.3" /-->
+			<!--Model position="8,-8,0" mesh="crate.mesh" scale3D="0.3,0.3,0.3" /-->
+			<!--Model position="8,8,0" mesh="crate.mesh" scale3D="0.3,0.3,0.3" /-->
+        </attached>
+        <collisionShapes> <!-- The collisionshape forbids other worldentities that have a collisionShape to fly through it.
+        
+                               TODO: Find correct size for the collisionshape; since a collisionShape is invisible
+                               I added the crate wich currently has the same dimensions as the collisionshape.
+                               You have to adjust the crate's scale3D as well as the collisionshape's halfExtens to
+                               find the proper shape. -->
+           <BoxCollisionShape position="0,0,0" halfExtents="400,400,100" />
+        </collisionShapes>
+	</StaticEntity>
+    
+    
+    
+    
+	<!-- PlayField -->
+	<TowerDefenseCenterpoint 
+	name=towerdefensecenter 
+	width=16 
+	height=16
+	tileScale=100
+	towerTemplate=tower
+	position="0,0,0" 
+	direction="0,0,0" 
+	collisionType=dynamic 
+	mass=100000>
+		
+    </TowerDefenseCenterpoint>
+
+  </Scene>
+</Level>
+
Index: code/branches/presentation2012merge/data/levels/tutorial.oxw
===================================================================
--- code/branches/presentation2012merge/data/levels/tutorial.oxw	(revision 9266)
+++ code/branches/presentation2012merge/data/levels/tutorial.oxw	(revision 9269)
@@ -2,6 +2,7 @@
  name = "Coding Tutorial"
  description = "Level for the coding tutorial."
- tags = "tutorial"
+ tags = "tutorial, shipselection"
  screenshot = "codingtutorial.png"
+ startingships = "spaceshipassff, spaceshipghost, spaceshipspacecruiser"
 />
 
@@ -10,4 +11,6 @@
   include("stats.oxo")
   include("templates/spaceshipAssff.oxt")
+  include("templates/spaceshipGhost.oxt")
+  include("templates/spaceshipSpacecruiser.oxt")
   include("templates/lodInformation.oxt")
 ?>
@@ -23,8 +26,4 @@
    skybox       = "Orxonox/skypanoramagen1"
   >
-
-
-
-
 <Drone name="meineDrohne" primarythrust="80" auxilarythrust="10" rotationthrust="10" mass= "50" linearDamping = "0.9" angularDamping = "0.7">
   <attached>
@@ -53,5 +52,5 @@
       for i = 1, 10, 1 do
     ?>
-      <SpawnPoint position="<?lua print(math.random() * 1000 - 500) ?>,<?lua print(math.random() * 1000 - 500) ?>,<?lua print(math.random() * 1000 - 500) ?>" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+      <SpawnPoint position="<?lua print(math.random() * 1000 - 500) ?>,<?lua print(math.random() * 1000 - 500) ?>,<?lua print(math.random() * 1000 - 500) ?>" lookat="0,0,0" spawnclass=SpaceShip pawndesign=shipselection />
     <?lua end ?>
 
Index: code/branches/presentation2012merge/data/overlays/towerdefenseHUD.oxo
===================================================================
--- code/branches/presentation2012merge/data/overlays/towerdefenseHUD.oxo	(revision 9269)
+++ code/branches/presentation2012merge/data/overlays/towerdefenseHUD.oxo	(revision 9269)
@@ -0,0 +1,16 @@
+<Template name="TowerDefenseHUD">
+  <OverlayGroup name="TowerDefenseHUD" scale = "1, 1">
+    <OverlayText
+     position  = "0.05, 0.05"
+     pickpoint = "0.0, 0.0"
+     font      = "ShareTechMono"
+     textsize  = 0.05
+     colour    = "1.0, 1.0, 1.0, 1.0"
+     align     = "left"
+	 
+	 caption = "Hello World"
+    />
+	
+	
+  </OverlayGroup>
+</Template>
Index: code/branches/presentation2012merge/src/modules/CMakeLists.txt
===================================================================
--- code/branches/presentation2012merge/src/modules/CMakeLists.txt	(revision 9266)
+++ code/branches/presentation2012merge/src/modules/CMakeLists.txt	(revision 9269)
@@ -38,2 +38,3 @@
 ADD_SUBDIRECTORY(weapons)
 ADD_SUBDIRECTORY(docking)
+ADD_SUBDIRECTORY(towerdefense)
Index: code/branches/presentation2012merge/src/modules/pickup/PickupPrereqs.h
===================================================================
--- code/branches/presentation2012merge/src/modules/pickup/PickupPrereqs.h	(revision 9266)
+++ code/branches/presentation2012merge/src/modules/pickup/PickupPrereqs.h	(revision 9269)
@@ -86,5 +86,5 @@
     class ShieldPickup;
     class ShrinkPickup;
-
+    class DamageBoostPickup;
 }
 
Index: code/branches/presentation2012merge/src/modules/pickup/items/CMakeLists.txt
===================================================================
--- code/branches/presentation2012merge/src/modules/pickup/items/CMakeLists.txt	(revision 9266)
+++ code/branches/presentation2012merge/src/modules/pickup/items/CMakeLists.txt	(revision 9269)
@@ -7,3 +7,4 @@
   ShieldPickup.cc
   ShrinkPickup.cc
+  DamageBoostPickup.cc
 )
Index: code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.cc
===================================================================
--- code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.cc	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.cc	(revision 9269)
@@ -0,0 +1,240 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Kevin Lengauer
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file DamageBoostPickup.cc
+    @brief Implementation of the DamageBoostPickup class.
+*/
+
+#include "DamageBoostPickup.h"
+
+#include <sstream>
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+
+#include "pickup/PickupIdentifier.h"
+#include "worldentities/pawns/SpaceShip.h"
+
+namespace orxonox
+{
+    CreateFactory(DamageBoostPickup);
+
+    /**
+    @brief
+        Constructor. Registers the object and initializes the member variables.
+    */
+    DamageBoostPickup::DamageBoostPickup(BaseObject* creator) : Pickup(creator)
+    {
+        RegisterObject(DamageBoostPickup);
+
+        this->initialize();
+    }
+
+    /**
+    @brief
+        Destructor.
+    */
+    DamageBoostPickup::~DamageBoostPickup()
+    {
+    }
+
+    /**
+    @brief
+        Initializes the member variables.
+    */
+    void DamageBoostPickup::initialize(void)
+    {
+    	this->duration_ = 0.0f;
+    	this->damageMultiplier_ = 1.0f; //The default damage multiplier.
+        //Defines who is allowed to pick up the pickup.
+        this->addTarget(ClassIdentifier<SpaceShip>::getIdentifier());
+    }
+
+    /**
+    @brief
+        Initializes the PickupIdentifier of this pickup.
+    */
+    void DamageBoostPickup::initializeIdentifier(void)
+    {
+        std::stringstream stream;
+        stream << this->getDuration();
+        std::string type1 = "duration";
+        std::string val1 = stream.str();
+        this->pickupIdentifier_->addParameter(type1, val1);
+
+        stream.clear();
+        stream << this->getDamageMultiplier();
+        std::string type2 = "damageMultiplier";
+        std::string val2 = stream.str();
+        this->pickupIdentifier_->addParameter(type2, val2);
+
+    }
+
+    /**
+    @brief
+        Method for creating a DamageBoostPickup object through XML.
+    */
+    void DamageBoostPickup::XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode)
+    {
+        SUPER(DamageBoostPickup, XMLPort, xmlelement, mode);
+
+        XMLPortParam(DamageBoostPickup, "duration", setDuration, getDuration, xmlelement, mode);
+        XMLPortParam(DamageBoostPickup, "damageMultiplier", setDamageMultiplier, getDamageMultiplier, xmlelement, mode);
+
+        this->initializeIdentifier();
+    }
+
+    // Work in Progress setDamage Function
+    void DamageBoostPickup::setDamageMultiplier(float damageMultiplier)
+    {
+        if(damageMultiplier >= 1.0f)
+        {
+            this->damageMultiplier_ = damageMultiplier;
+        }
+    }
+
+
+    /**
+    @brief
+        Is called when the pickup has transisted from used to unused or the other way around.
+    */
+    void DamageBoostPickup::changedUsed(void)
+    {
+        SUPER(DamageBoostPickup, changedUsed);
+
+        SpaceShip* ship = this->carrierToSpaceShipHelper();
+        if(ship == NULL) // If the PickupCarrier is no SpaceShip, then this pickup is useless and therefore is destroyed.
+           	this->Pickupable::destroy();
+
+
+        // If the pickup has transited to used.
+        if(this->isUsed())
+        {
+            // If its durationType is continuous, we set a Timer to be reminded, when the time has run out.
+            if(this->isContinuous())
+            {
+                if(!this->durationTimer_.isActive() && this->durationTimer_.getRemainingTime() > 0.0f)
+                {
+                    this->durationTimer_.unpauseTimer();
+                }
+                else
+                {
+                    this->durationTimer_.setTimer(this->getDuration(), false, createExecutor(createFunctor(&DamageBoostPickup::pickupTimerCallback, this)));
+                }
+            }
+
+            // Saves the old default Damage that is needed to restore the original damage
+            this->olddamageMultiplier_ = 1.0f;
+            // Sets the new Damage with the damage multiplier
+            ship->setDamageMultiplier(this->getDamageMultiplier());
+        }
+        else
+        {
+
+            // We destroy the pickup if either, the pickup has activationType immediate and durationType once or it has durationType continuous and the duration was exceeded.
+            if((!this->isContinuous() && this->isImmediate()) || (this->isContinuous() && !this->durationTimer_.isActive() && this->durationTimer_.getRemainingTime() == this->getDuration()))
+            {
+                this->Pickupable::destroy();
+                ship->setDamageMultiplier ( this->olddamageMultiplier_);
+            }
+            // We pause the Timer if the pickup is continuous and the duration is not yet exceeded,
+            else if(this->isContinuous() && this->durationTimer_.isActive())
+            {
+                this->durationTimer_.pauseTimer();
+            }
+        }
+    }
+
+    /**
+    @brief
+        Helper to transform the PickupCarrier to a SpaceShip, and throw an error message if the conversion fails.
+    @return
+        A pointer to the SpaceShip, or NULL if the conversion failed.
+    */
+    SpaceShip* DamageBoostPickup::carrierToSpaceShipHelper(void)
+    {
+        PickupCarrier* carrier = this->getCarrier();
+        SpaceShip* ship = dynamic_cast<SpaceShip*>(carrier);
+
+        if(ship == NULL)
+        {
+            orxout(internal_error, context::pickups) << "Invalid PickupCarrier in DamageBoostPickup." << endl;
+        }
+
+        return ship;
+    }
+
+    /**
+    @brief
+        Creates a duplicate of the input OrxonoxClass.
+    @param item
+        A pointer to the Orxonox class.
+    */
+    void DamageBoostPickup::clone(OrxonoxClass*& item)
+    {
+        if(item == NULL)
+            item = new DamageBoostPickup(this);
+
+        SUPER(DamageBoostPickup, clone, item);
+
+        DamageBoostPickup* pickup = dynamic_cast<DamageBoostPickup*>(item);
+        pickup->setDuration(this->getDuration());
+        pickup->setDamageMultiplier(this->getDamageMultiplier());
+        pickup->initializeIdentifier();
+    }
+
+    /**
+    @brief
+        Sets the duration for which the DamageBoostPickup stays active.
+    @param duration
+        The duration in seconds.
+    */
+    void DamageBoostPickup::setDuration(float duration)
+    {
+        if(duration >= 0.0f)
+        {
+            this->duration_ = duration;
+        }
+        else
+        {
+            orxout(internal_error, context::pickups) << "Invalid duration in DamagePickup." << endl;
+            this->duration_ = 0.0f;
+        }
+    }
+
+    /**
+    @brief
+        Helper method. Is called by the Timer as soon as it expires.
+    */
+    void DamageBoostPickup::pickupTimerCallback(void)
+    {
+        this->setUsed(false);
+    }
+
+}
+
Index: code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.h
===================================================================
--- code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.h	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/pickup/items/DamageBoostPickup.h	(revision 9269)
@@ -0,0 +1,102 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Kevin Lengauer
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file DamageBoostPickup.h
+    @brief Declaration of the DamageBoostPickup class.
+    @ingroup PickupItems
+*/
+
+#ifndef _DamageBoostPickup_H__
+#define _DamageBoostPickup_H__
+
+#include "pickup/PickupPrereqs.h"
+
+#include <string>
+
+#include "pickup/Pickup.h"
+#include "tools/interfaces/Tickable.h"
+
+namespace orxonox {
+
+    class _PickupExport DamageBoostPickup : public Pickup, public Tickable
+    {
+        public:
+
+            DamageBoostPickup(BaseObject* creator); //!< Constructor.
+            virtual ~DamageBoostPickup(); //!< Destructor.
+
+            virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode); //!< Method for creating a DamageBoostPickup object through XML.
+
+            virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around.
+            virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass.
+
+    	    /**
+            @brief Get the time the DamagePickup lasts.
+            @return Returns the time in seconds the DamagePickup lasts.
+            */
+            inline float getDuration(void) const
+                { return this->duration_; }
+
+            inline void setDuration( float duration );
+
+
+
+            /**
+             @brief set Damage multiplier
+             @param multiplier The default damage multiplier to set
+             */
+            inline float getDamageMultiplier()
+                { return this->damageMultiplier_; }
+
+
+
+
+        protected:
+            void initializeIdentifier(void); //!< Initializes the PickupIdentifier of this pickup.
+            void setDamageMultiplier(float damageMultiplier); //!< Sets the DamageMultiplier according to the XML.
+
+
+        private:
+            void initialize(void); //!< Initializes the member variables.
+            Pawn* carrierToPawnHelper(void); //!< Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
+            SpaceShip* carrierToSpaceShipHelper(void); //!< Helper to transform the PickupCarrier to a SpaceShip, and throw an error message if the conversion fails.
+            void pickupTimerCallback(void);
+
+
+
+            float damageMultiplier_; //!< The damage boost that is transferred to the Pawn.
+            float olddamageMultiplier_; //!< Helper to remember what the actual damage of the Pawn was before we changed it.
+
+            Timer durationTimer_; //!< Timer.
+	    float duration_; //! Duration of damage boost.
+
+    };
+}
+
+#endif // _DamageBoostPickup_H__
Index: code/branches/presentation2012merge/src/modules/pickup/items/SpeedPickup.h
===================================================================
--- code/branches/presentation2012merge/src/modules/pickup/items/SpeedPickup.h	(revision 9266)
+++ code/branches/presentation2012merge/src/modules/pickup/items/SpeedPickup.h	(revision 9269)
@@ -112,5 +112,5 @@
         private:
             void initialize(void); //!< Initializes the member variables.
-            SpaceShip* carrierToSpaceShipHelper(void); //!< Helper to transform the PickupCarrier to a SpaceSHip, and throw an error message if the conversion fails.
+            SpaceShip* carrierToSpaceShipHelper(void); //!< Helper to transform the PickupCarrier to a SpaceShip, and throw an error message if the conversion fails.
 
             Timer durationTimer_; //!< Timer.
Index: code/branches/presentation2012merge/src/modules/towerdefense/CMakeLists.txt
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/CMakeLists.txt	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/CMakeLists.txt	(revision 9269)
@@ -0,0 +1,17 @@
+SET_SOURCE_FILES(TOWERDEFENSE_SRC_FILES
+  TowerDefense.cc
+  Tower.cc
+  TowerDefenseCenterpoint.cc
+  TowerDefenseHUDController.cc
+  TowerDefensePlayerStats.cc
+  
+)
+
+ORXONOX_ADD_LIBRARY(TowerDefense
+  MODULE
+  FIND_HEADER_FILES
+  LINK_LIBRARIES
+    orxonox
+	overlays
+  SOURCE_FILES ${TOWERDEFENSE_SRC_FILES}
+)
Index: code/branches/presentation2012merge/src/modules/towerdefense/Spielfeld Blender/OgreXMLConverter.log
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/Spielfeld Blender/OgreXMLConverter.log	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/Spielfeld Blender/OgreXMLConverter.log	(revision 9269)
@@ -0,0 +1,31 @@
+15:38:46: Creating resource group General
+15:38:46: Creating resource group Internal
+15:38:46: Creating resource group Autodetect
+15:38:46: Registering ResourceManager for type Mesh
+15:38:46: Registering ResourceManager for type Material
+15:38:46: Registering ResourceManager for type Skeleton
+15:38:46: XMLMeshSerializer reading mesh data from /home/mentzerf/mentzerf-extra-0/newlevel2012/src/modules/towerdefense/Spielfeld Blender/Playfield_ME.mesh.xml...
+15:38:46: Reading submeshes...
+15:38:46: Reading geometry...
+15:38:46: Geometry done...
+15:38:46: Submeshes done.
+15:38:46: XMLMeshSerializer import successful.
+15:38:46: Reorganising vertex buffers to automatic layout..
+15:38:46: MeshSerializer writing mesh data to /home/mentzerf/mentzerf-extra-0/newlevel2012/src/modules/towerdefense/Spielfeld Blender/Playfield_ME.mesh...
+15:38:46: File header written.
+15:38:46: Writing mesh data...
+15:38:46: Writing submesh...
+15:38:46: Exporting submesh texture aliases...
+15:38:46: Submesh texture aliases exported.
+15:38:46: Submesh exported.
+15:38:46: Exporting bounds information....
+15:38:46: Bounds information exported.
+15:38:46: Exporting submesh name table...
+15:38:46: Submesh name table exported.
+15:38:46: Exporting edge lists...
+15:38:46: Edge lists exported
+15:38:46: Mesh data exported.
+15:38:46: MeshSerializer export successful.
+15:38:46: Unregistering ResourceManager for type Skeleton
+15:38:46: Unregistering ResourceManager for type Material
+15:38:46: Unregistering ResourceManager for type Mesh
Index: code/branches/presentation2012merge/src/modules/towerdefense/Spielfeld Blender/Playfield_ME.mesh.xml
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/Spielfeld Blender/Playfield_ME.mesh.xml	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/Spielfeld Blender/Playfield_ME.mesh.xml	(revision 9269)
@@ -0,0 +1,144 @@
+<mesh>
+	<submeshes>
+		<submesh material="PlayField" usesharedvertices="false">
+			<faces count="12">
+				<face v1="0" v2="1" v3="3"/>
+				<face v1="1" v2="2" v3="3"/>
+				<face v1="4" v2="5" v3="7"/>
+				<face v1="5" v2="6" v3="7"/>
+				<face v1="8" v2="9" v3="11"/>
+				<face v1="9" v2="10" v3="11"/>
+				<face v1="12" v2="13" v3="15"/>
+				<face v1="13" v2="14" v3="15"/>
+				<face v1="16" v2="17" v3="19"/>
+				<face v1="17" v2="18" v3="19"/>
+				<face v1="20" v2="21" v3="23"/>
+				<face v1="21" v2="22" v3="23"/>
+			</faces>
+			<geometry vertexcount="24">
+				<vertexbuffer positions="true" normals="true" texture_coords="1" texture_coord_dimensions_0="2">
+					<vertex>
+						<position x="10.000000" y="10.000000" z="-1.000000"/>
+						<normal x="0.000000" y="-0.000000" z="-1.000000"/>
+						<texcoord u="0.000000" v="1.000000"/>
+					</vertex>
+					<vertex>
+						<position x="10.000000" y="-10.000000" z="-1.000000"/>
+						<normal x="0.000000" y="-0.000000" z="-1.000000"/>
+						<texcoord u="1.000000" v="1.000000"/>
+					</vertex>
+					<vertex>
+						<position x="-10.000000" y="-10.000000" z="-1.000000"/>
+						<normal x="0.000000" y="-0.000000" z="-1.000000"/>
+						<texcoord u="1.000000" v="0.000000"/>
+					</vertex>
+					<vertex>
+						<position x="-10.000000" y="10.000000" z="-1.000000"/>
+						<normal x="0.000000" y="-0.000000" z="-1.000000"/>
+						<texcoord u="0.000000" v="0.000000"/>
+					</vertex>
+					<vertex>
+						<position x="10.000000" y="9.999999" z="1.000000"/>
+						<normal x="0.000000" y="0.000000" z="1.000000"/>
+						<texcoord u="1.000000" v="1.000000"/>
+					</vertex>
+					<vertex>
+						<position x="-10.000000" y="10.000000" z="1.000000"/>
+						<normal x="0.000000" y="0.000000" z="1.000000"/>
+						<texcoord u="1.000000" v="0.000000"/>
+					</vertex>
+					<vertex>
+						<position x="-10.000000" y="-10.000000" z="1.000000"/>
+						<normal x="0.000000" y="0.000000" z="1.000000"/>
+						<texcoord u="0.000000" v="0.000000"/>
+					</vertex>
+					<vertex>
+						<position x="9.999999" y="-10.000000" z="1.000000"/>
+						<normal x="0.000000" y="0.000000" z="1.000000"/>
+						<texcoord u="0.000000" v="1.000000"/>
+					</vertex>
+					<vertex>
+						<position x="10.000000" y="10.000000" z="-1.000000"/>
+						<normal x="1.000000" y="-0.000000" z="-0.000000"/>
+						<texcoord u="0.000000" v="1.000000"/>
+					</vertex>
+					<vertex>
+						<position x="10.000000" y="9.999999" z="1.000000"/>
+						<normal x="1.000000" y="-0.000000" z="-0.000000"/>
+						<texcoord u="1.000000" v="1.000000"/>
+					</vertex>
+					<vertex>
+						<position x="9.999999" y="-10.000000" z="1.000000"/>
+						<normal x="1.000000" y="-0.000000" z="-0.000000"/>
+						<texcoord u="1.000000" v="0.000000"/>
+					</vertex>
+					<vertex>
+						<position x="10.000000" y="-10.000000" z="-1.000000"/>
+						<normal x="1.000000" y="-0.000000" z="-0.000000"/>
+						<texcoord u="0.000000" v="0.000000"/>
+					</vertex>
+					<vertex>
+						<position x="10.000000" y="-10.000000" z="-1.000000"/>
+						<normal x="0.000000" y="-1.000000" z="0.000000"/>
+						<texcoord u="0.000000" v="1.000000"/>
+					</vertex>
+					<vertex>
+						<position x="9.999999" y="-10.000000" z="1.000000"/>
+						<normal x="0.000000" y="-1.000000" z="0.000000"/>
+						<texcoord u="1.000000" v="1.000000"/>
+					</vertex>
+					<vertex>
+						<position x="-10.000000" y="-10.000000" z="1.000000"/>
+						<normal x="0.000000" y="-1.000000" z="0.000000"/>
+						<texcoord u="1.000000" v="0.000000"/>
+					</vertex>
+					<vertex>
+						<position x="-10.000000" y="-10.000000" z="-1.000000"/>
+						<normal x="0.000000" y="-1.000000" z="0.000000"/>
+						<texcoord u="0.000000" v="0.000000"/>
+					</vertex>
+					<vertex>
+						<position x="-10.000000" y="-10.000000" z="-1.000000"/>
+						<normal x="-1.000000" y="0.000000" z="0.000000"/>
+						<texcoord u="0.000000" v="1.000000"/>
+					</vertex>
+					<vertex>
+						<position x="-10.000000" y="-10.000000" z="1.000000"/>
+						<normal x="-1.000000" y="0.000000" z="0.000000"/>
+						<texcoord u="1.000000" v="1.000000"/>
+					</vertex>
+					<vertex>
+						<position x="-10.000000" y="10.000000" z="1.000000"/>
+						<normal x="-1.000000" y="0.000000" z="0.000000"/>
+						<texcoord u="1.000000" v="0.000000"/>
+					</vertex>
+					<vertex>
+						<position x="-10.000000" y="10.000000" z="-1.000000"/>
+						<normal x="-1.000000" y="0.000000" z="0.000000"/>
+						<texcoord u="0.000000" v="0.000000"/>
+					</vertex>
+					<vertex>
+						<position x="10.000000" y="9.999999" z="1.000000"/>
+						<normal x="0.000000" y="1.000000" z="0.000000"/>
+						<texcoord u="0.000000" v="1.000000"/>
+					</vertex>
+					<vertex>
+						<position x="10.000000" y="10.000000" z="-1.000000"/>
+						<normal x="0.000000" y="1.000000" z="0.000000"/>
+						<texcoord u="1.000000" v="1.000000"/>
+					</vertex>
+					<vertex>
+						<position x="-10.000000" y="10.000000" z="-1.000000"/>
+						<normal x="0.000000" y="1.000000" z="0.000000"/>
+						<texcoord u="1.000000" v="0.000000"/>
+					</vertex>
+					<vertex>
+						<position x="-10.000000" y="10.000000" z="1.000000"/>
+						<normal x="0.000000" y="1.000000" z="0.000000"/>
+						<texcoord u="0.000000" v="0.000000"/>
+					</vertex>
+				</vertexbuffer>
+			</geometry>
+		</submesh>
+	</submeshes>
+</mesh>
Index: code/branches/presentation2012merge/src/modules/towerdefense/TDEnemy.h
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/TDEnemy.h	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/TDEnemy.h	(revision 9269)
@@ -0,0 +1,26 @@
+/*
+ * TDEnemy.h
+ *
+ *  Created on: Mar 30, 2012
+ *      Author: weigeltm
+ */
+
+#ifndef TDENEMY_H_
+#define TDENEMY_H_
+
+class TDEnemy
+{
+
+private:
+	float health;
+	float speed;
+	float armour;
+
+
+
+
+
+};
+
+
+#endif /* TDENEMY_H_ */
Index: code/branches/presentation2012merge/src/modules/towerdefense/Tower.cc
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/Tower.cc	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/Tower.cc	(revision 9269)
@@ -0,0 +1,113 @@
+//
+//  Tower.cc
+//  Orxonox
+//
+//  Created by Fabian Mentzer on 29.04.12.
+//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
+//
+
+/* Not implemented fully */
+
+#include "Tower.h"
+
+#include "core/CoreIncludes.h"
+//#include "core/XMLPort.h"
+
+namespace orxonox
+{
+    CreateFactory(Tower);
+	
+    /**
+	 @brief
+	 Constructor. Registers and initializes the object.
+	 */
+    Tower::Tower(BaseObject* creator) : Pawn(creator)
+    {
+        RegisterObject(Tower);
+
+        this->setCollisionType(WorldEntity::Dynamic);
+
+        //this->removeAllEngines();
+
+        /*
+        this->size_ = 10.0f;
+        this->delay_ = false;
+        this->delayTimer_.setTimer(0.2f, false, createExecutor(createFunctor(&TetrisStone::enableMovement, this)));
+		*/
+    }
+	
+	void Tower::setOrientation(const Quaternion& orientation)
+	{
+		static int ori;
+		orxout() << "orientation " << ++ori << endl;
+	}
+	
+	void Tower::rotateYaw(const Vector2& value)
+	{
+		static int yaw;
+		orxout() << "rotateYaw " << ++yaw << endl;
+	}
+	
+	void Tower::rotatePitch(const Vector2& value)
+	{
+		static int pitch;
+		orxout() << "rotatePitch " << ++pitch << endl;
+	}
+	
+	void Tower::rotateRoll(const Vector2& value)
+	{
+		static int roll;
+		orxout() << "rotateRoll" << ++roll << endl;
+	}
+		
+	// This function is called whenever a player presses the up or the down key.
+    // You have to implement what happens when the up or the down key is pressed.
+    // value.x < 0 means: down key is pressed.
+    // I suggest to create a new class which is a controllable entity I will refer to as "TowerMover". This is the controllable entity that the
+    // player controls in order to move the tower along the centerpoint and in order to place the tower at the appropriate position.
+    //
+
+    // The tower itsself is controlled by a WayPointPatroController at the instance you place it on the centerpoint.
+    //(don't forget to set the team_ parameter such that all tower are in the same team)
+
+    //How to move a tower: simply attach the tower to the TowerMover
+    //How to place a tower: detach the tower from the TowerMover
+
+    /**
+	 @brief
+	 Overloaded the function to rotate the stone.
+	 @param value
+	 A vector whose first component is the angle by which to rotate.
+	 */
+		 /*
+    void Tower::moveFrontBack(const Vector2& value)
+    {
+        //orxout() << "frontBack.x: " << value.x << endl;
+    }
+	*/
+	
+    /**
+	 @brief
+	 Overloaded the function to steer the stone right and left
+	 @param value
+	 A vector whose first component is the direction in which we want to steer the stone.
+	 */
+		 /*
+    void Tower::moveRightLeft(const Vector2& value)
+    {
+		//orxout() << "rightLeft.x: " << value.x << endl;
+		
+        if(!this->delay_)
+        {
+            const Vector3& position = this->getPosition();
+            Vector3 newPos = Vector3(position.x+value.x/abs(value.x)*this->size_, position.y, position.z);
+            if(!this->tetris_->isValidMove(this, newPos))
+                return;
+			
+            this->setPosition(newPos);
+            this->delay_ = true;
+            this->delayTimer_.startTimer();
+		}
+    }
+	*/
+}
Index: code/branches/presentation2012merge/src/modules/towerdefense/Tower.h
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/Tower.h	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/Tower.h	(revision 9269)
@@ -0,0 +1,52 @@
+//
+//  Tower.h
+//  Orxonox
+//
+//  Created by Fabian Mentzer on 29.04.12.
+//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
+//
+
+/**
+@brief
+See TowerDefenseReadme.txt for Information.
+    
+@ingroup TowerDefense
+*/
+
+
+#ifndef Orxonox_Tower_h
+#define Orxonox_Tower_h
+
+#include "towerdefense/TowerDefensePrereqs.h"
+#include "worldentities/pawns/SpaceShip.h"
+	
+
+namespace orxonox
+{
+    class _TowerDefenseExport Tower : public Pawn
+    {
+	public:
+		Tower(BaseObject* creator);
+		virtual ~Tower() {};
+		
+		// Maybe later override these to move towers with cursor keys
+		/*
+		virtual void moveFrontBack(const Vector2& value);
+		virtual void moveRightLeft(const Vector2& value);
+		*/
+		
+		// Overriding these to stop towers from spasing out
+		void setOrientation(const Quaternion& orientation);
+        virtual void rotateYaw(const Vector2& value);
+        virtual void rotatePitch(const Vector2& value);
+        virtual void rotateRoll(const Vector2& value);
+		
+		void setGame(TowerDefense* towerdefense)
+		{ assert(towerdefense); game_ = towerdefense; }
+	private:
+		TowerDefense* game_;
+    };
+}
+
+
+#endif
Index: code/branches/presentation2012merge/src/modules/towerdefense/TowerDefense.cc
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/TowerDefense.cc	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/TowerDefense.cc	(revision 9269)
@@ -0,0 +1,308 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *
+ *   Co-authors:
+ *      ...
+ *
+ *NACHRICHT:
+ *
+ * Hier empfehle ich euch die gesamte Spielogik unter zu bringen. Viele Funktionen werden automatisch
+ * bei gewissen Ereignissen aufgerufen bzw. lösen Ereignisse aus
+ *
+ *Z.B:
+ * start() //wird aufgerufen, bevor das Spiel losgeht
+ * end() //wenn man diese Funktion aufruft wird
+ * pawnKilled() // wird aufgerufen, wenn ein Pawn stirbt (z.B: wenn )
+ * playerScored() // kann man aufrufen um dem Spieler Punkte zu vergeben.
+ *
+ *
+ *
+ *TIPP: Eclipse hilft euch schnell auf bereits vorhanden Funktionen zuzugreifen:
+ * einfach "this->" eingeben und kurz warten. Dann tauch eine Liste mit Vorschlägen auf. Wenn ihr jetzt weiter
+ * tippt, werden die Vorschläge entsprechend gefiltert.
+ *
+ *
+ *TIPP: schaut euch mal Tetris::createStone() an. Dort wird ein TetrisStone-Objekt (ControllableEntity) erzeugt,
+ * ihm ein Template zugewiesen (welches vorher im Level definiert wurde und dem CenterPoint übergeben wurde)
+ * Ähnlich könnt ihr vorgehen, um einen Turm zu erzeugen. (Zusätzlich braucht ein Turm noch einen Controller)
+ * z.B: WaypointPatrolController. Wenn kein Team zugewiesen wurde bekämpft ein WaypointPatrolController alles,
+ * was in seiner Reichweite liegt.
+ *
+ *
+ *HUD:
+ * Ein Gametype kann ein HUD (Head up Display haben.) Z.B: hat Pong eine Anzeige welcher Spieler wieviele Punkte hat.
+ * Generell kann man a) Grafiken oder b) Zeichen in einer HUD anzeigen.
+ * Fuer den ersten Schritt reicht reiner Text.
+ *
+ * a)
+ * PongScore.cc uebernehmen und eigene Klasse draus machen.
+ * Wenn ihr bloss anzeigen wollt wieviele Punkte der Spieler bereits erspielt hat (Punkte = Kapital fuer neue Tuerme) dann orientiert ihr euch an
+ * TetrisScore.cc (im pCuts branch): http://www.orxonox.net/browser/code/branches/pCuts/src/modules/tetris/TetrisScore.cc
+ * Ich habe TetrisScore lediglich dazu gebraucht, um eine Variable auf dem HUD auszugeben. Ein Objekt fuer statischen Text gibt es bereits.
+ *
+ * b)
+ * Im naesten Schritt erstellt man die Vorlage fuer das HUD-Objekt: siehe /data/overlays/pongHUD
+ * OverlayText ist eine Vorlage fuer statischen text zb: "Points Scored:". Aus mir nicht erklaerlichen Gruenden sollte man die OverlayText
+ * Objekte immer erst nach dem PongScore anlegen.
+ *
+ * c)  Im TowerDefense gamtype muss im Constructor noch das HUD-Template gesetzt werden.
+ *
+ * d) in CMakeLists.txt noch das Module includen das fuer die Overlays zustaendig ist. Siehe das gleiche File im Pong module.
+ *
+ *
+ *
+ */
+
+#include "TowerDefense.h"
+#include "Tower.h"
+#include "TowerDefenseCenterpoint.h"
+
+#include "worldentities/SpawnPoint.h"
+#include "worldentities/pawns/Pawn.h"
+#include "worldentities/pawns/SpaceShip.h"
+#include "controllers/WaypointController.h"
+	 
+#include "graphics/Model.h"
+#include "infos/PlayerInfo.h"
+	 
+#include "chat/ChatManager.h"
+
+/* Part of a temporary hack to allow the player to add towers */
+#include "core/command/ConsoleCommand.h"
+
+namespace orxonox
+{
+    CreateUnloadableFactory(TowerDefense);
+	
+	TowerDefense::TowerDefense(BaseObject* creator) : Deathmatch(creator)
+    {
+        RegisterObject(TowerDefense);
+		
+        this->setHUDTemplate("TowerDefenseHUD");
+
+		this->stats_ = new TowerDefensePlayerStats();
+
+		/* Temporary hack to allow the player to add towers */
+		this->dedicatedAddTower_ = createConsoleCommand( "addTower", createExecutor( createFunctor(&TowerDefense::addTower, this) ) );
+    }
+	
+    TowerDefense::~TowerDefense()
+    {
+		/* Part of a temporary hack to allow the player to add towers */
+        if (this->isInitialized())
+        {
+            if( this->dedicatedAddTower_ )
+                delete this->dedicatedAddTower_;
+        }
+    }
+	
+	void TowerDefense::setCenterpoint(TowerDefenseCenterpoint *centerpoint)
+	{
+		orxout() << "Centerpoint now setting..." << endl;
+		this->center_ = centerpoint;
+		orxout() << "Centerpoint now set..." << endl;
+	}
+	
+    void TowerDefense::start()
+    {
+        Deathmatch::start();
+		
+		const int kInitialTowerCount = 3;
+		Coordinate initialTowerCoordinates[kInitialTowerCount] = {{3,2}, {8,5}, {12,10}};
+		
+		for (int i = 0; i < kInitialTowerCount; i++)
+		{
+			Coordinate coordinate = initialTowerCoordinates[i];
+			addTower(coordinate.x, coordinate.y);
+		}
+		
+		ChatManager::message("Use the console command addTower x y to add towers");
+
+		//TODO: let the player control his controllable entity && TODO: create a new ControllableEntity for the player
+	}
+	
+	void TowerDefense::end()
+	{
+		Deathmatch::end();
+	 
+		ChatManager::message("Match is over");
+	}
+	
+	void TowerDefense::addTower(int x, int y)
+	{
+		const TowerCost towerCost = TDDefaultTowerCost;
+		
+		if (!this->hasEnoughCreditForTower(towerCost))
+		{
+			orxout() << "not enough credit: " << (this->stats_->getCredit()) << " available, " << TDDefaultTowerCost << " needed.";
+			return;
+		}
+		
+		if (this->towerExists(x,y))
+		{
+			orxout() << "tower exists!!" << endl;
+			return;
+		}		
+		
+		/*
+		unsigned int width = this->center_->getWidth();
+		unsigned int height = this->center_->getHeight();
+		*/
+		
+		int tileScale = (int) this->center_->getTileScale();
+			
+		if (x > 15 || y > 15 || x < 0 || y < 0)
+		{
+			//Hard coded: TODO: let this depend on the centerpoint's height, width and fieldsize (fieldsize doesn't exist yet)
+			orxout() << "Can not add Tower: x and y should be between 0 and 15" << endl;
+			return;
+		}
+		
+		orxout() << "Will add tower at (" << (x-8) * tileScale << "," << (y-8) * tileScale << ")" << endl;
+		
+		// Add tower to coordinatesStack
+		Coordinate newTowerCoordinates = {x, y};
+		addedTowersCoordinates_.push_back(newTowerCoordinates);
+		
+		// Reduce credit
+		this->stats_->buyTower(towerCost);
+		
+		// Create tower
+		Tower* newTower = new Tower(this->center_);
+		newTower->addTemplate(this->center_->getTowerTemplate());
+
+		newTower->setPosition((x-8) * tileScale, (y-8) * tileScale, 75);
+		newTower->setGame(this);
+	}
+	
+	bool TowerDefense::hasEnoughCreditForTower(TowerCost towerCost)
+	{
+		return ((this->stats_->getCredit()) >= towerCost);
+	}
+	
+	bool TowerDefense::towerExists(int x, int y)
+	{
+		for(std::vector<Coordinate>::iterator it = addedTowersCoordinates_.begin(); it != addedTowersCoordinates_.end(); ++it) 
+		{
+			Coordinate currentCoordinates = (Coordinate) (*it);
+			if (currentCoordinates.x == x && currentCoordinates.y == y)
+				return true;
+		}
+		
+		return false;
+	}
+	
+	
+	void TowerDefense::tick(float dt)
+    {
+        SUPER(TowerDefense, tick, dt);
+    }
+	
+	// Function to test if we can add waypoints using code only. Doesn't work yet
+	
+	// THE PROBLEM: WaypointController's getControllableEntity() returns null, so it won't track. How do we get the controlableEntity to NOT BE NULL???
+	/*
+	void TowerDefense::addWaypointsAndFirstEnemy()
+	{
+		SpaceShip *newShip = new SpaceShip(this->center_);
+		newShip->addTemplate("spaceshipassff");
+		
+		WaypointController *newController = new WaypointController(newShip);
+		newController->setAccuracy(3);
+		
+		Model *wayPoint1 = new Model(newController);
+		wayPoint1->setMeshSource("crate.mesh");	
+		wayPoint1->setPosition(7,-7,5);
+		wayPoint1->setScale(0.2);
+			
+		Model *wayPoint2 = new Model(newController);
+		wayPoint2->setMeshSource("crate.mesh");
+		wayPoint2->setPosition(7,7,5);
+		wayPoint2->setScale(0.2);
+			
+		newController->addWaypoint(wayPoint1);
+		newController->addWaypoint(wayPoint2);
+			
+		// The following line causes the game to crash
+
+		newShip->setController(newController);
+//		newController -> getPlayer() -> startControl(newShip);
+		newShip->setPosition(-7,-7,5);
+		newShip->setScale(0.1);
+		//newShip->addSpeed(1);
+		
+		
+		
+//		this->center_->attach(newShip);
+	}
+	*/
+	/*
+	 void TowerDefense::playerEntered(PlayerInfo* player)
+	 {
+	 Deathmatch::playerEntered(player);
+	 
+	 const std::string& message = player->getName() + " entered the game";
+	 ChatManager::message(message);
+	 }
+	 
+	 bool TowerDefense::playerLeft(PlayerInfo* player)
+	 {
+	 bool valid_player = Deathmatch::playerLeft(player);
+	 
+	 if (valid_player)
+	 {
+	 const std::string& message = player->getName() + " left the game";
+	 ChatManager::message(message);
+	 }
+	 
+	 return valid_player;
+	 }
+	 
+	 
+	 void TowerDefense::pawnKilled(Pawn* victim, Pawn* killer)
+	 {
+	 if (victim && victim->getPlayer())
+	 {
+	 std::string message;
+	 if (killer)
+	 {
+	 if (killer->getPlayer())
+	 message = victim->getPlayer()->getName() + " was killed by " + killer->getPlayer()->getName();
+	 else
+	 message = victim->getPlayer()->getName() + " was killed";
+	 }
+	 else
+	 message = victim->getPlayer()->getName() + " died";
+	 
+	 ChatManager::message(message);
+	 }
+	 
+	 Deathmatch::pawnKilled(victim, killer);
+	 }
+	 
+	 void TowerDefense::playerScored(PlayerInfo* player)
+	 {
+	 Gametype::playerScored(player);
+	 
+	 }*/
+}
Index: code/branches/presentation2012merge/src/modules/towerdefense/TowerDefense.h
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/TowerDefense.h	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/TowerDefense.h	(revision 9269)
@@ -0,0 +1,98 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *
+ *   Co-authors:
+ *      ...
+ *
+ */
+	 
+ /**
+	 @brief
+	 GameType class for TowerDefense. See TowerDefenseReadme.txt for Information.
+	 
+	 @ingroup TowerDefense
+ */
+	 
+
+#ifndef _TowerDefense_H__
+#define _TowerDefense_H__
+
+#include "towerdefense/TowerDefensePrereqs.h"
+#include "gametypes/Deathmatch.h"
+		 
+ #include "TowerDefensePlayerStats.h"
+		 
+namespace orxonox
+{
+	class _TowerDefenseExport TowerDefense : public Deathmatch
+    {
+	public:
+		TowerDefense(BaseObject* creator);
+		virtual ~TowerDefense();
+		
+		virtual void start(); //<! The function is called when the gametype starts
+		virtual void end();
+		virtual void tick(float dt);
+		//virtual void playerEntered(PlayerInfo* player);
+		//virtual bool playerLeft(PlayerInfo* player);
+		
+		//virtual void pawnKilled(Pawn* victim, Pawn* killer = 0);
+		//virtual void playerScored(PlayerInfo* player);
+		
+		
+		/*	Called by TowerDefenseCenterpoint upon game start 
+			The centerpoint is used to create towers
+		*/
+		void setCenterpoint(TowerDefenseCenterpoint *centerpoint);
+		
+		/* Adds a tower at x, y in the playfield */
+		void addTower(int x, int y);
+		
+		/* Part of a temporary hack to allow the player to add towers */
+		ConsoleCommand* dedicatedAddTower_;
+		
+		//TODO: void spawnNewWave()
+	    //TODO: create a timer which regularly calls the spawnNewWave function  (time driven)
+		//      or spawn a new wave when the old wave has been killed           (event driven)
+
+
+	private:
+		TowerDefenseCenterpoint *center_;
+		
+		/* handles stats */
+		TowerDefensePlayerStats *stats_;
+		bool hasEnoughCreditForTower(TowerCost towerCost);
+	
+		bool towerExists(int x, int y);
+		
+		typedef struct {
+			int x;
+			int y;
+		} Coordinate; 
+		
+		std::vector<Coordinate> addedTowersCoordinates_;
+		std::vector<Tower*> towers_;
+    };
+}
+
+#endif /* _TowerDefense_H__ */
Index: code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseCenterpoint.cc
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseCenterpoint.cc	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseCenterpoint.cc	(revision 9269)
@@ -0,0 +1,109 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      ...
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file TowerDefenseCenterpoint.cc
+    @brief Implementation of the TowerDefenseCenterpoint class.
+*/
+
+#include "TowerDefenseCenterpoint.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+
+#include "TowerDefense.h"
+
+namespace orxonox
+{
+    CreateFactory(TowerDefenseCenterpoint);
+
+    /**
+    @brief
+        Constructor. Registers and initializes the object and checks whether the gametype is actually TowerDefense.
+    */
+    TowerDefenseCenterpoint::TowerDefenseCenterpoint(BaseObject* creator) : MobileEntity(creator)
+    {
+        RegisterObject(TowerDefenseCenterpoint);
+ 
+ 	   	this->width_ = 15;
+        this->height_ = 15;
+        this->towerTemplate_ = "";
+        
+        //this->setCollisionType(Static);
+
+		this->checkGametype();
+
+    }
+
+    /**
+    @brief
+        Method to create a TowerDefenseCenterpoint through XML.
+    */
+    void TowerDefenseCenterpoint::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(TowerDefenseCenterpoint, XMLPort, xmlelement, mode);
+
+        XMLPortParam(TowerDefenseCenterpoint, "width", setWidth, getWidth, xmlelement, mode);
+        XMLPortParam(TowerDefenseCenterpoint, "height", setHeight, getHeight, xmlelement, mode);
+		XMLPortParam(TowerDefenseCenterpoint, "tileScale", setTileScale, getTileScale, xmlelement, mode);
+        XMLPortParam(TowerDefenseCenterpoint, "towerTemplate", setTowerTemplate, getTowerTemplate, xmlelement, mode);
+		
+        //TODO: add XMLPortObject(TowerDefenseCenterpoint, WorldEntity, "waypoints", addWaypoint, getWaypoint,  xmlelement, mode);
+        // This was copied and shightly modified from WaypointController.cc ; there are no getters and setters and no membervariable yet
+        // The centerpoint should have all waypoints for "attached" to it. By using this function you can seperately add waypoints
+        // When you spawn a new enemy you should let it be controlled by a WaypointController. And that controller should get the waypoints.
+
+        // Alternatively you can manage the waypoints directly in TowerDefense.cc
+    }
+
+    /**
+    @brief
+        Is called when the gametype has changed.
+    */
+    void TowerDefenseCenterpoint::changedGametype()
+    {
+        SUPER(TowerDefenseCenterpoint, changedGametype);
+
+        // Check, whether it's still TowerDefense.
+        this->checkGametype();
+    }
+
+    /**
+    @brief
+        Checks whether the gametype is TowerDefense and if it is, sets its centerpoint.
+    */
+    void TowerDefenseCenterpoint::checkGametype()
+    {
+		if (this->getGametype() != NULL && this->getGametype()->isA(Class(TowerDefense)))
+        {
+			// Sets the centerpoint of the gametype. The gametype uses this to later spawn in towers, he needs the tower template stored in the center point
+            TowerDefense* towerDefenseGametype = orxonox_cast<TowerDefense*>(this->getGametype().get());
+            towerDefenseGametype->setCenterpoint(this);
+        }
+    }
+}
Index: code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseCenterpoint.h
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseCenterpoint.h	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseCenterpoint.h	(revision 9269)
@@ -0,0 +1,102 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      ...
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @brief
+ See TowerDefenseReadme.txt for Information.
+ @ingroup TowerDefense
+ */
+
+
+#ifndef _TowerDefenseCenterpoint_H__
+#define _TowerDefenseCenterpoint_H__
+
+#include "towerdefense/TowerDefensePrereqs.h"
+
+#include <string>
+#include <util/Math.h>
+
+#include "worldentities/MobileEntity.h"
+
+namespace orxonox
+{
+    class _TowerDefenseExport TowerDefenseCenterpoint : public MobileEntity
+    {
+        public:
+            TowerDefenseCenterpoint(BaseObject* creator);
+            virtual ~TowerDefenseCenterpoint() {}
+
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void changedGametype();
+            
+            /**
+            @brief The width and hight in number of tiles. Default is 15 for both.
+            */
+            void setWidth(unsigned int width)
+                { this->width_ = width; }
+            
+			unsigned int getWidth(void) const
+                { return this->width_; }
+                
+            void setHeight(unsigned int height)
+                { this->height_ = height; }
+            
+			unsigned int getHeight(void) const
+                { return this->height_; }
+			
+			/**
+			@brief How to convert to world coordinates, e.g. that 0,15 is not at -8,-8 but at -80,-80 (if scale would be 10)
+			*/
+			void setTileScale(unsigned int tileScale)
+				{ this->tileScale_ = tileScale; }
+			
+			unsigned int getTileScale(void) const
+				{ return this->tileScale_; }
+                
+            /**
+            @brief Set the template for the towers.
+            @param template The template name to be applied to each tower.
+            */
+            void setTowerTemplate(const std::string& templateName)
+                { this->towerTemplate_ = templateName; }
+            
+			const std::string& getTowerTemplate(void) const
+                { return this->towerTemplate_; }
+
+        private:
+            void checkGametype();
+            
+            unsigned int width_;
+            unsigned int height_;
+			unsigned int tileScale_;
+			
+            std::string towerTemplate_;
+    };
+}
+
+#endif /* _TowerDefenseCenterpoint_H__ */
Index: code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseController.cc
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseController.cc	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseController.cc	(revision 9269)
@@ -0,0 +1,144 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "TowerDefenseController.h"
+
+#include "util/Math.h"
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "worldentities/pawns/Pawn.h"
+
+namespace orxonox
+{
+    CreateFactory(TowerDefenseController);
+
+    TowerDefenseController::TowerDefenseController(BaseObject* creator) : WaypointController(creator)
+    {
+        RegisterObject(TowerDefenseController);
+
+        this->alertnessradius_ = 500;
+
+        this->patrolTimer_.setTimer(rnd(), true, createExecutor(createFunctor(&TowerDefenseController::searchEnemy, this)));
+    }
+
+    void TowerDefenseController::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(TowerDefenseController, XMLPort, xmlelement, mode);
+
+        XMLPortParam(TowerDefenseController, "alertnessradius", setAlertnessRadius, getAlertnessRadius, xmlelement, mode).defaultValues(500.0f);
+    }
+
+    void TowerDefenseController::tick(float dt)
+    {
+        if (!this->isActive())
+            return;
+
+        if (this->target_)
+        {
+            this->aimAtTarget();
+
+            if (this->bHasTargetPosition_)
+                this->moveToTargetPosition();
+
+            if (this->getControllableEntity() && this->isCloseAtTarget(1000) && this->isLookingAtTarget(math::pi / 20.0f))
+                this->getControllableEntity()->fire(0);
+        }
+        else
+        {
+            SUPER(TowerDefenseController, tick, dt);
+        }
+    }
+
+
+    bool sameTeam(ControllableEntity* entity1, ControllableEntity* entity2, Gametype* gametype)
+    {
+        if (entity1 == entity2)
+            return true;
+
+        int team1 = -1;
+        int team2 = -1;
+
+        Controller* controller = 0;
+        if (entity1->getController())
+            controller = entity1->getController();
+        else
+            controller = entity1->getXMLController();
+        if (controller)
+        {
+            FormationController* ac = orxonox_cast<FormationController*>(controller);
+            if (ac)
+                team1 = ac->getTeam();
+        }
+
+        if (entity2->getController())
+            controller = entity2->getController();
+        else
+            controller = entity2->getXMLController();
+        if (controller)
+        {
+            FormationController* ac = orxonox_cast<FormationController*>(controller);
+            if (ac)
+                team2 = ac->getTeam();
+        }
+
+
+
+        return (team1 == team2 && team1 != -1);
+    }
+
+
+
+
+
+    void TowerDefenseController::searchEnemy()
+    {
+        this->patrolTimer_.setInterval(rnd());
+
+        if (!this->getControllableEntity())
+            return;
+
+        Vector3 myposition = this->getControllableEntity()->getPosition();
+        float shortestsqdistance = (float)static_cast<unsigned int>(-1);
+
+        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it != ObjectList<Pawn>::end(); ++it)
+        {
+            if (ArtificialController::sameTeam(this->getControllableEntity(), static_cast<ControllableEntity*>(*it), this->getGametype()))
+                continue;
+
+            float sqdistance = it->getPosition().squaredDistance(myposition);
+            if (sqdistance < shortestsqdistance)
+            {
+                shortestsqdistance = sqdistance;
+                this->target_ = (*it);
+            }
+        }
+
+        if (shortestsqdistance > (this->alertnessradius_ * this->alertnessradius_))
+            this->target_ = 0;
+    }
+}
Index: code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseController.h
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseController.h	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseController.h	(revision 9269)
@@ -0,0 +1,61 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _TowerDefenseController_H__
+#define _TowerDefenseController_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include "tools/Timer.h"
+#include "WaypointController.h"
+
+namespace orxonox
+{
+    class _TowerDefenseExport TowerDefenseController : public WaypointController
+    {
+        public:
+            TowerDefenseController(BaseObject* creator);
+            virtual ~TowerDefenseController() {}
+
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void tick(float dt);
+
+            inline void setAlertnessRadius(float radius)
+                { this->alertnessradius_ = radius; }
+            inline float getAlertnessRadius() const
+                { return this->alertnessradius_; }
+
+        protected:
+            void searchEnemy();
+
+            float alertnessradius_;
+            Timer patrolTimer_;
+    };
+}
+
+#endif /* _TowerDefenseController_H__ */
Index: code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseHUDController.cc
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseHUDController.cc	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseHUDController.cc	(revision 9269)
@@ -0,0 +1,70 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *
+ *   Co-authors:
+ *      ...
+ */
+ 
+#include "TowerDefenseHUDController.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "util/Convert.h"
+
+
+namespace orxonox
+{
+	CreateFactory(TowerDefenseHUDController);
+	
+    TowerDefenseHUDController::TowerDefenseHUDController(BaseObject* creator) : OverlayText(creator)
+	{
+		RegisterObject(TowerDefenseHUDController);
+	}
+	
+	TowerDefenseHUDController::~TowerDefenseHUDController()
+	{
+		
+	}
+
+    void TowerDefenseHUDController::tick(float dt)
+	{
+		SUPER(TowerDefenseHUDController, tick, dt);
+	}
+	
+    void TowerDefenseHUDController::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+	{
+		SUPER(TowerDefenseHUDController, XMLPort, xmlelement, mode);
+	}
+	
+    void TowerDefenseHUDController::changedOwner()
+    {
+        SUPER(TowerDefenseHUDController, changedOwner);
+		/*
+        if (this->getOwner() != NULL && this->getOwner()->getGametype())
+            this->owner_ = orxonox_cast<Pong*>(this->getOwner()->getGametype().get());
+        else
+            this->owner_ = 0;
+			*/
+    }
+	
+}
Index: code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseHUDController.h
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseHUDController.h	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/TowerDefenseHUDController.h	(revision 9269)
@@ -0,0 +1,60 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *
+ *   Co-authors:
+ *      ...
+ *
+ */
+	 
+ /**
+	 @brief
+	 This subclass of OverlayText is used to display the stats of the player in the HUD
+	 
+	 @ingroup TowerDefense
+ */
+	 
+
+#ifndef _TowerDefenseHUDController_H__
+#define _TowerDefenseHUDController_H__
+
+#include "towerdefense/TowerDefensePrereqs.h"
+
+#include "tools/interfaces/Tickable.h"
+#include "overlays/OverlayText.h"
+
+
+namespace orxonox
+{
+    class _TowerDefenseExport TowerDefenseHUDController : public OverlayText, public Tickable
+    {
+	public:
+		TowerDefenseHUDController(BaseObject* creator);
+        virtual ~TowerDefenseHUDController();
+
+        virtual void tick(float dt);
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+		virtual void changedOwner();
+    };
+}
+
+#endif /* _TowerDefenseHUDController_H__ */
Index: code/branches/presentation2012merge/src/modules/towerdefense/TowerDefensePlayerStats.cc
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/TowerDefensePlayerStats.cc	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/TowerDefensePlayerStats.cc	(revision 9269)
@@ -0,0 +1,44 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *
+ *   Co-authors:
+ *      ...
+ */
+ 
+#include "TowerDefensePlayerStats.h"
+
+namespace orxonox
+{
+	const int kDefaultCredit = 200;
+	
+    TowerDefensePlayerStats::TowerDefensePlayerStats()
+	{
+		this->credit_ = kDefaultCredit;
+		this->waveNumber_ = 0;
+	}
+	/*
+	TowerDefensePlayerStats::~TowerDefensePlayerStats()
+	{
+	}
+	*/		
+}
Index: code/branches/presentation2012merge/src/modules/towerdefense/TowerDefensePlayerStats.h
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/TowerDefensePlayerStats.h	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/TowerDefensePlayerStats.h	(revision 9269)
@@ -0,0 +1,76 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *
+ *   Co-authors:
+ *      ...
+ *
+ */
+	 
+ /**
+	 @brief
+	 This manages the stats of the player. It is used by 'TowerDefense', the gametype
+	
+	 @ingroup TowerDefense
+ */
+	 
+
+#ifndef _TowerDefensePlayerStats_H__
+#define _TowerDefensePlayerStats_H__
+
+#include "towerdefense/TowerDefensePrereqs.h"
+
+namespace orxonox
+{
+	typedef enum _TowerCosts {
+		// Set to 0 for debug...
+		TDDefaultTowerCost = 0
+	} TowerCost;
+	
+    class _TowerDefenseExport TowerDefensePlayerStats
+    {
+	public:
+		TowerDefensePlayerStats();
+		
+		inline int getCredit()
+			{ return credit_; }
+		
+		inline void setCredit(int credit)
+			{ credit_ = credit; }
+		
+		inline void buyTower(TowerCost cost)
+			{ credit_ -= cost;}
+		
+		inline int getWaveNumber()
+			{ return waveNumber_; }
+		
+		inline void didLoadNextWave()
+			{ waveNumber_++; }
+		
+	private:
+		int credit_;
+		int waveNumber_;
+		//int baseHealth_;
+    };
+}
+
+#endif /* _TowerDefensePlayerStats_H__ */
Index: code/branches/presentation2012merge/src/modules/towerdefense/TowerDefensePrereqs.h
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/TowerDefensePrereqs.h	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/TowerDefensePrereqs.h	(revision 9269)
@@ -0,0 +1,74 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+@file
+@brief
+    Shared library macros, enums, constants and forward declarations for the TowerDefense module
+*/
+
+#ifndef _TowerDefensePrereqs_H__
+#define _TowerDefensePrereqs_H__
+
+#include "OrxonoxConfig.h"
+#include "OrxonoxPrereqs.h"
+
+//-----------------------------------------------------------------------
+// Shared library settings
+//-----------------------------------------------------------------------
+
+#if defined(ORXONOX_PLATFORM_WINDOWS) && !defined(TOWERDEFENSE_STATIC_BUILD)
+#  ifdef TOWERDEFENSE_SHARED_BUILD
+#    define _TowerDefenseExport __declspec(dllexport)
+#  else
+#    if defined( __MINGW32__ )
+#      define _TowerDefenseExport
+#    else
+#      define _TowerDefenseExport __declspec(dllimport)
+#    endif
+#  endif
+#elif defined ( ORXONOX_GCC_VISIBILITY )
+#  define _TowerDefenseExport  __attribute__ ((visibility("default")))
+#else
+#  define _TowerDefenseExport
+#endif
+
+//-----------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------
+
+namespace orxonox
+{
+    class TowerDefense;
+	class Tower;
+    class TowerDefenseCenterpoint;
+	class TowerDefenseHUDController;
+	class TowerDefensePlayerStats;
+}
+
+#endif /* _TowerDefensePrereqs_H__ */
Index: code/branches/presentation2012merge/src/modules/towerdefense/tower/Tower.material
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/tower/Tower.material	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/tower/Tower.material	(revision 9269)
@@ -0,0 +1,25 @@
+material Material/TEXFACE/RustySteel.jpg
+{
+	receive_shadows on
+	technique
+	{
+		pass
+		{
+			ambient 0.500000 0.500000 0.500000 1.000000
+			diffuse 0.800000 0.800000 0.800000 1.000000
+			emissive 0.000000 0.000000 0.000000 1.000000
+			texture_unit
+			{
+				texture RustySteel.jpg
+				colour_op modulate
+			}
+		}
+		pass
+		{
+			ambient 0.0 0.0 0.0
+			diffuse 0.0 0.0 0.0
+			specular 0.500000 0.500000 0.500000 1.000000 12.500000
+			scene_blend add
+		}
+	}
+}
Index: code/branches/presentation2012merge/src/modules/towerdefense/towerdefensereadme.txt
===================================================================
--- code/branches/presentation2012merge/src/modules/towerdefense/towerdefensereadme.txt	(revision 9269)
+++ code/branches/presentation2012merge/src/modules/towerdefense/towerdefensereadme.txt	(revision 9269)
@@ -0,0 +1,38 @@
+===============================================================================
+Classes
+===============================================================================
+
+TowerDefense:
+GameType class
+
+TowerDefenseCenterpoint
+Centerpoint class. Store tower template
+
+Tower
+Represents a Tower
+I'm not actually sure if you have to code C++ in order to have your result. I would suggest to simply create a new spaceship template or maybe better a
+new template for a pawn. (The tower don't need to be spaceships; pawn is just fine.)
+Example for a template: /data/levels/templates/assff.oxt && /data/levels/include/weaponSettingsAssff.oxi
+@ assff.oxt: you don't need an engine (or your towers could fly away :-) and probably no Cameras. (just try what happens if you leave them out.) 
+@ weaponSettingsAssff.oxi:
+<weaponslots>: location where you want to have your tower to be equiped with weapons
+<weaponsets> : if you press fire, you actually always fire a whole set of weapons. The amount of weaponsets is defined here. (I'm not 100% sure whether this explanation is right.)
+
+There are three <Weapon> tags - one for each weaponslot. Each weapon can contain several objects which you would probably
+refer to as "weapons":
+
+LightningGun: Shoots a slow, rotation, yellow "ball".
+HsW01: the default laser weapon
+SimpleRocketFire: a weak (self steering) rocket
+RocketFire: a strong rocket
+                         
+About your Tower's Template location - either keep it in the level or do it similarly to the Assff templates.
+(If your towers behave & look nicely, I'm quite sure others want to include them in other levels, too.)
+
+
+===============================================================================
+Other files
+===============================================================================
+
+/data/levels/towerdefense.oxw
+Loads the level. In <Level>, we first create a SpawnPoint. It spawns a cylinder using the 'centerpointmark' Template, which uses the 'centerpointmarkcamera' Template to create a static camera. Then, we create an instance of TowerDefenseCenterpoint and pass the 'towertemplate' Template, so that we can later create towers using this template. We also plase the playfield.mesh in a way that maps every field on the playfield.mesh to nice coordinates: the playfield spans as a square from -8,-8 to 8,8.
Index: code/branches/presentation2012merge/src/orxonox/LevelInfo.cc
===================================================================
--- code/branches/presentation2012merge/src/orxonox/LevelInfo.cc	(revision 9266)
+++ code/branches/presentation2012merge/src/orxonox/LevelInfo.cc	(revision 9269)
@@ -93,4 +93,5 @@
             LevelInfoItem::possibleTags_s.insert("gametype");
             LevelInfoItem::possibleTags_s.insert("minigame");
+            LevelInfoItem::possibleTags_s.insert("shipselection");
         }
     }
@@ -110,4 +111,19 @@
 
         this->tagsUpdated();
+    }
+    /**
+    @brief
+        Set the starting ship models of the level
+    @param tags
+        A comma-seperated string of all the allowed ship models for the shipselection.
+    */
+    void LevelInfoItem::setShips(const std::string& ships)
+    {
+        SubString substr = SubString(ships, ",", " "); // Split the string into tags.
+        const std::vector<std::string>& strings = substr.getAllStrings();
+        for(std::vector<std::string>::const_iterator it = strings.begin(); it != strings.end(); it++)
+            this->addShip(*it, false);
+
+        this->shipsUpdated();
     }
 
@@ -137,4 +153,24 @@
     /**
     @brief
+        Add a ship model to allowed models for the shipselection
+    @param ship
+        The ship model to be added.
+    @param update
+        Whether the comma-seperated string of all ship models should be updated. Default is true.
+    @return
+        Returns true if the ship was successfully added, if the ship was already present it returns false.
+    */
+    bool LevelInfoItem::addShip(const std::string& ship, bool update)
+    {
+        bool success = this->ships_.insert(ship).second;
+        if(update && success)
+            this->shipsUpdated();
+            
+        return success;
+    }
+
+
+    /**
+    @brief
         Updates the comma-seperated string of all tags, if the set of tags has changed.
     */
@@ -155,4 +191,23 @@
     }
 
+    /**
+    @brief
+        Updates the comma-seperated string of all ships, if the set of tags has changed.
+    */
+    void LevelInfoItem::shipsUpdated(void)
+    {
+        std::stringstream stream;
+        std::set<std::string>::iterator temp;
+        for(std::set<std::string>::iterator it = this->ships_.begin(); it != this->ships_.end(); )
+        {
+            temp = it;
+            if(++it == this->ships_.end()) // If this is the last ship we don't add a comma.
+                stream << *temp;
+            else
+                stream << *temp << ", ";
+        }
+
+        this->startingShipsString_ = std::string(stream.str());
+    }
     // LevelInfo
 
@@ -192,4 +247,5 @@
         XMLPortParam(LevelInfo, "screenshot", setScreenshot, getScreenshot, xmlelement, mode);
         XMLPortParam(LevelInfo, "tags", setTags, getTags, xmlelement, mode);
+        XMLPortParam(LevelInfo, "startingships", setShips, getShips, xmlelement, mode);
     }
 
@@ -207,4 +263,5 @@
         info->setScreenshot(this->getScreenshot());
         info->setTags(this->getTags());
+        info->setShips(this->getShips());
         return info;
     }
Index: code/branches/presentation2012merge/src/orxonox/LevelInfo.h
===================================================================
--- code/branches/presentation2012merge/src/orxonox/LevelInfo.h	(revision 9266)
+++ code/branches/presentation2012merge/src/orxonox/LevelInfo.h	(revision 9269)
@@ -24,5 +24,5 @@
  *   Co-authors:
  *      ...
- *
+ *   
  */
 
@@ -43,4 +43,6 @@
 
 #include "core/BaseObject.h"
+#include <iostream>
+#include <fstream>
 #include "core/OrxonoxClass.h"
 
@@ -115,10 +117,27 @@
             */
             inline bool hasTag(const std::string& tag) const { return this->tags_.find(tag) != this->tags_.end(); } // tolua_export
-
+ 
+            void setShips(const std::string& ships); //!< Set the starting ship models of the level
+            bool addShip(const std::string& ship, bool update = true); //!< Add a model to shipselection
+            /**
+            @brief Get the set of starting ship models the Level allows
+            @return Returns a comma-seperated string of all the allowed ship models for the shipselection.
+            */
+            inline const std::string& getShips(void) const
+                { return this->startingShipsString_; }    
+            /**
+            @brief Get whether the Level allows a specific starting ship model
+            @param ship The ship model for which is checked.
+            @return Returns true if the Level allows the input ship model
+            */
+            inline bool hasShip(const std::string& ship) const { return this->ships_.find(ship) != this->ships_.end(); } // tolua_export        
             /**
             @brief Get the XML-filename of the Level.
             @return Returns the XML-filename (including *.oxw extension) of the Level.
             */
+
             inline const std::string& getXMLFilename(void) const { return this->xmlfilename_; } // tolua_export
+	    inline void selectShip (const std::string& ship) { this->changeShip(ship); } // tolua_export
+
 
         protected:
@@ -133,6 +152,33 @@
 
         private:
+
+	    inline void changeShip (const std::string& model) {
+	        static std::string shipSelectionTag = "shipselection";
+        	//HACK: Read Level XML File, find "shipselection", replace with ship model
+        	std::string levelPath = "../levels/";
+        	levelPath.append(this->getXMLFilename());
+        	std::string tempPath = "../levels/";
+        	tempPath.append("_temp.oxw");
+        	orxout(user_status) << levelPath << endl;
+        	orxout(user_status) << tempPath << endl;
+        	std::ifstream myLevel (levelPath.c_str());
+			std::ofstream tempLevel (tempPath.c_str());
+			while(!myLevel.eof())
+			{
+				std::string buff;
+				std::getline(myLevel, buff);
+				std::string pawndesignString = "pawndesign=";
+				size_t found = buff.find(pawndesignString.append(shipSelectionTag)); 
+				if (found!= std::string::npos) 
+					buff = buff.substr(0, found + 11) + model + buff.substr(found+11+shipSelectionTag.length(), std::string::npos);
+				tempLevel.write(buff.c_str(), buff.length());
+				tempLevel << std::endl;
+			}
+			myLevel.close();
+			tempLevel.close();
+			orxout(user_status) << "done" << endl;
+	    } 
             void tagsUpdated(void); //!< Updates the comma-seperated string of all tags, if the set of tags has changed.
-
+            void shipsUpdated(void); //!< Updates the comma-seperated string of all tags, if the set of tags has changed.
             static void initializeTags(void); //!< Initialize the set of allowed tags.
             /**
@@ -152,4 +198,6 @@
             std::set<std::string> tags_; //!< The set of tags the Level is tagged with.
             std::string tagsString_; //!< The comma-seperated string of all the tags the Level is tagged with.
+            std::set<std::string> ships_; //!< The set of starting ship models the Level allows.
+            std::string startingShipsString_; //!< The comma-seperated string of all the allowed ship models for the shipselection.            
     }; // tolua_export
 
@@ -161,6 +209,6 @@
         - @b description The description of the level.
         - @b screenshot The screenshot of the level.
-        - @b tags A comma-seperated string of tags. Allowed tags are: <em>test</em>, <em>singleplayer</em>, <em>multiplayer</em>, <em>showcase</em>, <em>tutorial</em>, <em>presentation</em>.
-
+        - @b tags A comma-seperated string of tags. Allowed tags are: <em>test</em>, <em>singleplayer</em>, <em>multiplayer</em>, <em>showcase</em>, <em>tutorial</em>, <em>presentation</em>, <em>shipselection</em>.
+        - @b (optional) startingships The comma-seperated string of starting ship models 
         An example would be:
         @code
@@ -176,5 +224,6 @@
     @author
         Damian 'Mozork' Frick
-
+	@edit
+		Matthias Hutter
     @ingroup Orxonox
     */
@@ -223,7 +272,17 @@
             inline const std::string& getTags(void) const
                 { return this->LevelInfoItem::getTags(); }
-
+            /**
+            @brief Set the starting ship models of the level
+            @param A comma-seperated string of all the allowed ship models for the shipselection.
+            */
+            inline void setShips(const std::string& ships)
+                { this->LevelInfoItem::setShips(ships); }
+            /**
+            @brief Get the starting ship models of the level
+            @return Returns a comma-seperated string of all the allowed ship models for the shipselection.
+            */
+            inline const std::string& getShips(void) const
+                { return this->LevelInfoItem::getShips(); }              
             LevelInfoItem* copy(void); //!< Copies the contents of this LevelInfo object to a new LevelInfoItem object.
-
     };
 
Index: code/branches/presentation2012merge/src/orxonox/ShipManager.cc
===================================================================
--- code/branches/presentation2012merge/src/orxonox/ShipManager.cc	(revision 9269)
+++ code/branches/presentation2012merge/src/orxonox/ShipManager.cc	(revision 9269)
@@ -0,0 +1,201 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Matthias Hutter
+ *   
+ */
+
+/**
+    @file ShipManager.cc
+    @brief Work-in Progress: Implementation of the ShipManager singleton.
+    	   Should make SpaceShip info available to lua handlers.
+*/
+
+#include "LevelManager.h"
+
+#include <map>
+
+#include "util/ScopedSingletonManager.h"
+#include "core/ClassTreeMask.h"
+#include "core/CommandLineParser.h"
+#include "core/ConfigValueIncludes.h"
+#include "core/CoreIncludes.h"
+#include "core/Loader.h"
+#include "core/Resource.h"
+#include "core/XMLFile.h"
+#include "Level.h"
+#include "PlayerManager.h"
+
+namespace orxonox
+{
+    SetCommandLineArgument(level, "").shortcut("l").information("Default level file (overrides LevelManager::defaultLevelName_ configValue)");
+
+    ManageScopedSingleton(LevelManager, ScopeID::Root, false);
+
+    /**
+    @brief
+        Constructor.
+    */
+    ShipManager::ShipManager()
+    {
+        RegisterRootObject(LevelManager);
+        this->compileAvailableLevelList();
+        this->nextIndex_ = 0;
+        this->nextLevel_ = this->availableLevels_.begin();
+    }
+
+    ShipManager::~ShipManager()
+    {
+        // Delete all the Ship objects because the LevelManager created them
+        std::set<SpaceShip*, LevelInfoCompare>::iterator it = availableLevels_.begin();
+        for (; it != availableLevels_.end(); ++it)
+            delete *it;
+    }
+
+   
+    /**
+    @brief
+        Get the number of available Ships.
+    @return
+        Returns the number of available Ships.
+    */
+    unsigned int LevelManager::getNumberOfLevels(){ return this->availableLevels_.size(); }
+
+    /**
+    @brief
+        Get the SpaceShip at the given index in the list of available Ships.
+        The SpaceShips are sorted in alphabetical order accoridng to the name of the Ship.
+        This method is most efficiently called with consecutive indices (or at least ascending indices).
+    @param index
+        The index of the item that should be returned.
+    @return
+        Returns a pointer to the SpaceShip at the given index.
+    */
+    SpaceShip* ShipManager::getAvailableShipListItem(unsigned int index)
+    {
+        if(index >= this->availableShips_.size())
+            return NULL;
+
+        // If this index directly follows the last we can optimize a lot.
+        if(index == this->nextIndex_)
+        {
+            this->nextIndex_++;
+            std::set<SpaceShip*, SpaceShipCompare>::iterator it = this->nextShip_;
+            this->nextLevel_++;
+            return *it;
+        }
+        else
+        {
+            // If this index is bigger than the last, we can optimize a little.
+            if(index < this->nextIndex_)
+            {
+                this->nextIndex_ = 0;
+                this->nextShip_ = this->availableShips_.begin();
+            }
+
+            while(this->nextIndex_ != index)
+            {
+                this->nextIndex_++;
+                this->nextShip_++;
+            }
+            this->nextIndex_++;
+            std::set<SpaceShip*, SpaceShipCompare>::iterator it = this->nextLevel_;
+            this->nextLevel_++;
+            return *it;
+        }
+    }
+
+    /**
+    @brief
+        Compile the list of available Levels.
+        Iterates over all *.oxw files, loads the LevelInfo objects in them and from that it creates the LevelInfoItems which are inserted in a list.
+    */
+    void ShipManager::compileAvailableShipList()
+    {
+		/*
+		// We only want to load as little as possible
+		ClassTreeMask mask;
+		    mask.exclude(Class(BaseObject));
+		    mask.include(Class(SpaceShip));
+		SpaceShip* info = NULL;
+		XMLFile file = XMLFile(ship);
+		Loader::load(&file, mask, false, true);
+		for(ObjectList<SpaceShip>::iterator item = ObjectList<SpaceShip>::begin(); item != ObjectList<SpaceShip>::end(); ++item)
+		        if(item->getXMLFilename() == *it)
+		            info = item->copy();
+		Loader::unload(&file);
+		*/
+    
+        // Get all files matching the level criteria
+        Ogre::StringVectorPtr levels = Resource::findResourceNames("*.oxw");
+
+        // We only want to load as little as possible
+        ClassTreeMask mask;
+        mask.exclude(Class(BaseObject));
+        mask.include(Class(LevelInfo));
+
+        // Iterate over all the found *.oxw files
+        orxout(internal_info) << "Loading LevelInfos..." << endl;
+        std::set<std::string> names;
+        for (Ogre::StringVector::const_iterator it = levels->begin(); it != levels->end(); ++it)
+        {
+            // TODO: Replace with tag?
+            if (it->find("old/") != 0 )
+            {
+                LevelInfoItem* info = NULL;
+
+                // Load the LevelInfo object from the level file.
+                XMLFile file = XMLFile(*it);
+                Loader::load(&file, mask, false, true);
+
+                // Find the LevelInfo object we've just loaded (if there was one)
+                for(ObjectList<LevelInfo>::iterator item = ObjectList<LevelInfo>::begin(); item != ObjectList<LevelInfo>::end(); ++item)
+                    if(item->getXMLFilename() == *it)
+                        info = item->copy();
+
+                // We don't need the loaded stuff anymore
+                Loader::unload(&file);
+
+                if(info == NULL)
+                {
+                    // Create a default LevelInfoItem object that merely contains the name
+                    std::string filenameWOExtension = it->substr(0, it->find(".oxw"));
+                    info = new LevelInfoItem(filenameWOExtension, *it);
+                }
+
+                // Warn about levels with the same name.
+                if(!names.insert(info->getName()).second)
+                    orxout(internal_warning) << "Multiple levels (" << info->getXMLFilename() << ") with name '" << info->getName() << "' found!" << endl;
+
+                // Warn about multiple items so that it gets fixed quickly
+                if(availableLevels_.find(info) != availableLevels_.end())
+                {
+                    orxout(internal_warning) << "Multiple levels (" << info->getXMLFilename() << ") with same name '" << info->getName() << "' and filename found! Exluding..." << endl;
+                    // Delete LevelInfoItem to avoid a dangling pointer
+                    delete info;
+                }
+                else
+                    this->availableLevels_.insert(info);
+            }
+        }
+    }
+}
Index: code/branches/presentation2012merge/src/orxonox/ShipManager.h
===================================================================
--- code/branches/presentation2012merge/src/orxonox/ShipManager.h	(revision 9269)
+++ code/branches/presentation2012merge/src/orxonox/ShipManager.h	(revision 9269)
@@ -0,0 +1,93 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Matthias Hutter
+ */
+
+/**
+    @file ShipManager.h
+    @brief Definition of the ShipManager singleton.
+    @ingroup Orxonox
+*/
+
+#ifndef _ShipManager_H__
+#define _ShipManager_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include <cassert>
+#include <list>
+#include <map>
+#include <string>
+#include "worldentities/pawns/SpaceShip.h"
+
+#include "util/Singleton.h"
+#include "core/OrxonoxClass.h"
+
+// tolua_begin
+namespace orxonox
+{
+
+    /**
+    @author
+       Matthias Hutter
+
+    @ingroup Orxonox
+    */
+    class _OrxonoxExport ShipManager
+    // tolua_end
+        : public Singleton<ShipManager>, public OrxonoxClass
+    { // tolua_export
+            friend class Singleton<LevelManager>;
+        public:
+            ShipManager();
+            virtual ~ShipManager();
+
+            void setConfigValues(); //!< Set the config values for this object.
+            // tolua_begin
+            /**
+            @brief Get the instance of the LevelManager.
+            @return Returns the instance of the LevelManager.
+            */
+            static ShipManager& getInstance()
+                { return Singleton<ShipManager>::getInstance(); }
+            // tolua_end
+
+        private:
+            ShipManager(const ShipManager&);
+
+
+            void compileAvailableLevelList(void); //!< Compile the list of available Levels.
+            void updateAvailableLevelList(void); //!< Update the list of available Levels.
+
+            std::list<Level*> levels_; //!< A list of all the Levels whose activity has been requested, in the order in which they will become active.
+            std::set<LevelInfoItem*, LevelInfoCompare> availableLevels_; //!< The set of available Levels sorted alphabetically according to the name of the Level.
+
+            // Helpers to allow fast access to the availableLevels list.
+            unsigned int nextIndex_; //! The next expected index to be accessed.
+            std::set<LevelInfoItem*, LevelInfoCompare>::iterator nextLevel_; //! The next expected Level to be accessed.
+
+            static LevelManager* singletonPtr_s;
+    }; // tolua_export
+} // tolua_export
+
+#endif /* _LevelManager_H__ */
Index: code/branches/presentation2012merge/src/orxonox/controllers/FormationController.cc
===================================================================
--- code/branches/presentation2012merge/src/orxonox/controllers/FormationController.cc	(revision 9266)
+++ code/branches/presentation2012merge/src/orxonox/controllers/FormationController.cc	(revision 9269)
@@ -280,7 +280,13 @@
         }
 
-        Vector2 coord = get2DViewdirection(this->getControllableEntity()->getPosition(), this->getControllableEntity()->getOrientation() * WorldEntity::FRONT, this->getControllableEntity()->getOrientation() * WorldEntity::UP, target);
+        Vector2 coord = get2DViewcoordinates(this->getControllableEntity()->getPosition(), this->getControllableEntity()->getOrientation() * WorldEntity::FRONT, this->getControllableEntity()->getOrientation() * WorldEntity::UP, target);
         float distance = (target - this->getControllableEntity()->getPosition()).length();
-
+		if(coord.x < 0.0001 && coord.y < 0.0001)
+		{
+			// if the ship reaches a direction very close to the direct one, set it to the direct one
+			Vector3 v_temp = this->getControllableEntity()->getPosition();
+			Quaternion quat = v_temp.getRotationTo(target);
+			this->getControllableEntity()->rotate(quat);
+		}
 
         if(this->state_ == FREE)
@@ -289,9 +295,9 @@
             {
                 // Multiply with ROTATEFACTOR_FREE to make them a bit slower
-                this->getControllableEntity()->rotateYaw(-1.0f * ROTATEFACTOR_FREE * sgn(coord.x) * coord.x*coord.x);
-                this->getControllableEntity()->rotatePitch(ROTATEFACTOR_FREE * sgn(coord.y) * coord.y*coord.y);
-            }
-
-            if (this->target_ && distance < 200 && this->getControllableEntity()->getVelocity().squaredLength() > this->target_->getVelocity().squaredLength())
+                this->getControllableEntity()->rotateYaw(-1.0f * ROTATEFACTOR_FREE * coord.x * 2);
+                this->getControllableEntity()->rotatePitch(ROTATEFACTOR_FREE * coord.y * 2);
+            }
+
+            if (this->target_ && distance <  200 && this->getControllableEntity()->getVelocity().squaredLength() > this->target_->getVelocity().squaredLength())
             {
               this->getControllableEntity()->moveFrontBack(-0.05f); // They don't brake with full power to give the player a chance
@@ -305,6 +311,6 @@
             if (this->target_ || distance > 10)
             {
-                this->getControllableEntity()->rotateYaw(-1.0f * ROTATEFACTOR_MASTER * sgn(coord.x) * coord.x*coord.x);
-                this->getControllableEntity()->rotatePitch(ROTATEFACTOR_MASTER * sgn(coord.y) * coord.y*coord.y);
+                this->getControllableEntity()->rotateYaw(-1.0f * ROTATEFACTOR_MASTER * coord.x * 2);
+                this->getControllableEntity()->rotatePitch(ROTATEFACTOR_MASTER * coord.y * 2);
             }
 
@@ -318,25 +324,25 @@
 
         if(this->state_ == SLAVE)
-        {
-
-           this->getControllableEntity()->rotateYaw(-2.0f * ROTATEFACTOR_MASTER * sgn(coord.x) * coord.x*coord.x);
-           this->getControllableEntity()->rotatePitch(2.0f * ROTATEFACTOR_MASTER * sgn(coord.y) * coord.y*coord.y);
-
-            if (distance < 300)
-            {
-		 if (bHasTargetOrientation_)
-		    {
-			copyTargetOrientation();
-		    }
-                if (distance < 100)
-                {   //linear speed reduction
-                    this->getControllableEntity()->moveFrontBack(distance/100.0f*0.4f*SPEED_MASTER);
-
-                } else this->getControllableEntity()->moveFrontBack(1.2f*SPEED_MASTER);
-
-            } else {
-                this->getControllableEntity()->moveFrontBack(1.2f*SPEED_MASTER + distance/300.0f);
-            }
-        }
+		{
+
+			this->getControllableEntity()->rotateYaw(-2.0f * ROTATEFACTOR_MASTER * coord.x * 2);
+			this->getControllableEntity()->rotatePitch(2.0f * ROTATEFACTOR_MASTER * coord.y * 2);
+
+			if (distance < 300)
+			{
+				if (bHasTargetOrientation_)
+				{
+					copyTargetOrientation();
+				}
+				if (distance < 100)
+				{ //linear speed reduction
+					this->getControllableEntity()->moveFrontBack(distance/100.0f*0.4f*SPEED_MASTER);
+
+				} else this->getControllableEntity()->moveFrontBack(1.2f*SPEED_MASTER);
+
+			} else {
+				this->getControllableEntity()->moveFrontBack(1.2f*SPEED_MASTER + distance/300.0f);
+			}
+		}
 
         if (distance < 10)
Index: code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.cc	(revision 9266)
+++ code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.cc	(revision 9269)
@@ -75,4 +75,7 @@
         this->lastHitOriginator_ = 0;
 
+        // set damage multiplier to default value 1, meaning nominal damage
+        this->damageMultiplier_ = 1;
+
         this->spawnparticleduration_ = 3.0f;
 
@@ -228,5 +231,12 @@
     void Pawn::damage(float damage, float healthdamage, float shielddamage, Pawn* originator)
     {
-        if (this->getGametype() && this->getGametype()->allowPawnDamage(this, originator))
+        //Applies multiplier given by the DamageBoost Pickup.
+    	Pawn *test = dynamic_cast<Pawn *>(originator);
+    	if( test != NULL )
+    	{
+    	  damage *= originator->getDamageMultiplier();
+    	}
+
+    	if (this->getGametype() && this->getGametype()->allowPawnDamage(this, originator))
         {
             if (shielddamage >= this->getShieldHealth())
Index: code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.h
===================================================================
--- code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.h	(revision 9266)
+++ code/branches/presentation2012merge/src/orxonox/worldentities/pawns/Pawn.h	(revision 9269)
@@ -162,4 +162,11 @@
                 { return this->numexplosionchunks_; }
 
+            // These are used with the Damage Boost Pickup to use the damage multiplier.
+            inline void setDamageMultiplier(float multiplier)
+                { this->damageMultiplier_ = multiplier; }
+            inline float getDamageMultiplier()
+                { return this->damageMultiplier_; }
+
+
             virtual void startLocalHumanControl();
 
@@ -208,4 +215,7 @@
             float reloadWaitCountdown_;
 
+            // Modifier
+            float damageMultiplier_; // Used by the Damage Boost Pickup.
+
             WeakPtr<Pawn> lastHitOriginator_;
 
