Index: code/branches/overlay/src/orxonox/gamestates/GSLevel.cc
===================================================================
--- code/branches/overlay/src/orxonox/gamestates/GSLevel.cc	(revision 1914)
+++ code/branches/overlay/src/orxonox/gamestates/GSLevel.cc	(revision 2036)
@@ -58,4 +58,5 @@
         , startLevel_(0)
         , hud_(0)
+        , stats_(0)
     {
         RegisterObject(GSLevel);
@@ -93,4 +94,9 @@
         hud_ = new Level(Settings::getDataPath() + "overlay/hud.oxo");
         Loader::load(hud_);
+
+        // Load statistics
+        COUT(3) << "Orxonox: Loading statistics overlay" << std::endl;
+        stats_ = new Level(Settings::getDataPath() + "overlay/stats.oxo");
+        Loader::load(stats_);
 
         // reset game speed to normal
@@ -115,4 +121,7 @@
         Loader::unload(hud_);
         delete this->hud_;
+
+        Loader::unload(stats_);
+        delete this->stats_;
 
         // this call will delete every BaseObject!
Index: code/branches/overlay/src/orxonox/gamestates/GSLevel.h
===================================================================
--- code/branches/overlay/src/orxonox/gamestates/GSLevel.h	(revision 1914)
+++ code/branches/overlay/src/orxonox/gamestates/GSLevel.h	(revision 2036)
@@ -70,4 +70,5 @@
         Level*                startLevel_;       //!< current hard coded default level
         Level*                hud_;              //!< 'level' object fo the HUD
+        Level*                stats_;            //!< 'level' object fo the stats overlay
 
         // config values
Index: code/branches/overlay/src/orxonox/overlays/OrxonoxOverlay.cc
===================================================================
--- code/branches/overlay/src/orxonox/overlays/OrxonoxOverlay.cc	(revision 1914)
+++ code/branches/overlay/src/orxonox/overlays/OrxonoxOverlay.cc	(revision 2036)
@@ -60,4 +60,28 @@
     {
         RegisterObject(OrxonoxOverlay);
+
+        // add this overlay to the static map of OrxonoxOverlays
+        if (overlays_s.find(this->getName()) != overlays_s.end())
+        {
+            COUT(1) << "Overlay names should be unique or you cannnot access them via console." << std::endl;
+        }
+        overlays_s[this->getName()] = this;
+
+        // create the Ogre::Overlay
+        overlay_ = Ogre::OverlayManager::getSingleton().create("OrxonoxOverlay_overlay_"
+            + convertToString(hudOverlayCounter_s++));
+
+        // create background panel (can be used to show any picture)
+        this->background_ = static_cast<Ogre::PanelOverlayElement*>(
+            Ogre::OverlayManager::getSingleton().createOverlayElement("Panel",
+            "OrxonoxOverlay_background_" + convertToString(hudOverlayCounter_s++)));
+        this->overlay_->add2D(this->background_);
+
+        // We'll have to get the aspect ratio manually for the first time. Afterwards windowResized() gets
+        // called automatically by the GraphicsEngine.
+        this->windowResized(GraphicsEngine::getInstance().getWindowWidth(),
+            GraphicsEngine::getInstance().getWindowHeight());
+
+        this->changedVisibility();
     }
 
@@ -93,31 +117,4 @@
     {
         SUPER(OrxonoxOverlay, XMLPort, xmlElement, mode);
-
-        if (mode == XMLPort::LoadObject)
-        {
-            // add this overlay to the static map of OrxonoxOverlays
-            if (overlays_s.find(this->getName()) != overlays_s.end())
-            {
-                COUT(1) << "Overlay names should be unique or you cannnot access them via console." << std::endl;
-            }
-            overlays_s[this->getName()] = this;
-
-            // create the Ogre::Overlay
-            overlay_ = Ogre::OverlayManager::getSingleton().create("OrxonoxOverlay_overlay_"
-                + convertToString(hudOverlayCounter_s++));
-
-            // create background panel (can be used to show any picture)
-            this->background_ = static_cast<Ogre::PanelOverlayElement*>(
-                Ogre::OverlayManager::getSingleton().createOverlayElement("Panel",
-                "OrxonoxOverlay_background_" + convertToString(hudOverlayCounter_s++)));
-            this->overlay_->add2D(this->background_);
-
-            // We'll have to get the aspect ratio manually for the first time. Afterwards windowResized() gets
-            // called automatically by the GraphicsEngine.
-            this->windowResized(GraphicsEngine::getInstance().getWindowWidth(),
-                GraphicsEngine::getInstance().getWindowHeight());
-
-            this->changedVisibility();
-        }
 
         XMLPortParam(OrxonoxOverlay, "size",      setSize,      getSize,      xmlElement, mode)
Index: code/branches/overlay/src/orxonox/overlays/OverlayText.cc
===================================================================
--- code/branches/overlay/src/orxonox/overlays/OverlayText.cc	(revision 1914)
+++ code/branches/overlay/src/orxonox/overlays/OverlayText.cc	(revision 2036)
@@ -31,5 +31,4 @@
 
 #include <OgreOverlayManager.h>
-#include <OgreTextAreaOverlayElement.h>
 #include <OgrePanelOverlayElement.h>
 
@@ -46,9 +45,15 @@
     {
         RegisterObject(OverlayText);
+
+        this->text_ = static_cast<Ogre::TextAreaOverlayElement*>(Ogre::OverlayManager::getSingleton()
+            .createOverlayElement("TextArea", "OverlayText_text_" + getUniqueNumberStr()));
+        this->text_->setCharHeight(1.0);
+
+        this->background_->addChild(this->text_);
     }
 
     OverlayText::~OverlayText()
     {
-        if (this->text_)
+        if (this->isInitialized())
             Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->text_);
     }
@@ -57,13 +62,4 @@
     {
         SUPER(OverlayText, XMLPort, xmlElement, mode);
-
-        if (mode == XMLPort::LoadObject)
-        {
-            this->text_ = static_cast<Ogre::TextAreaOverlayElement*>(Ogre::OverlayManager::getSingleton()
-                .createOverlayElement("TextArea", "OverlayText_text_" + getUniqueNumberStr()));
-            this->text_->setCharHeight(1.0);
-
-            this->background_->addChild(this->text_);
-        }
 
         XMLPortParam(OverlayText, "font",     setFont,     getFont,     xmlElement, mode).defaultValues("Monofur");
@@ -74,5 +70,5 @@
     void OverlayText::setFont(const std::string& font)
     {
-        if (this->text_ && font != "")
+        if (font != "")
             this->text_->setFontName(font);
     }
@@ -80,8 +76,5 @@
     const std::string& OverlayText::getFont() const
     {
-        if (this->text_)
-            return this->text_->getFontName();
-        else
-            return blankString;
+        return this->text_->getFontName();
     }
 
Index: code/branches/overlay/src/orxonox/overlays/OverlayText.h
===================================================================
--- code/branches/overlay/src/orxonox/overlays/OverlayText.h	(revision 1914)
+++ code/branches/overlay/src/orxonox/overlays/OverlayText.h	(revision 2036)
@@ -34,4 +34,5 @@
 #include <string>
 #include <OgrePrerequisites.h>
+#include <OgreTextAreaOverlayElement.h>
 #include "OrxonoxOverlay.h"
 
@@ -46,9 +47,6 @@
         virtual void XMLPort(Element& xmlElement, XMLPort::Mode mode);
 
-    protected:
-        virtual void sizeChanged();
-
-        void setCaption(const std::string& caption) { this->caption_ = caption; }
-        const std::string& getCaption() const       { return this->caption_; }
+        void setCaption(const std::string& caption) { this->text_->setCaption(caption); }
+        std::string getCaption() const              { return this->text_->getCaption(); }
 
         void setFont(const std::string& font);
@@ -58,8 +56,10 @@
         float getTextSize() const    { return this->getSize().y; }
 
-        Ogre::TextAreaOverlayElement* text_;
+    protected:
+        virtual void sizeChanged();
 
     private:
-        std::string caption_;
+
+        Ogre::TextAreaOverlayElement* text_;
     };
 }
Index: code/branches/overlay/src/orxonox/overlays/debug/DebugFPSText.cc
===================================================================
--- code/branches/overlay/src/orxonox/overlays/debug/DebugFPSText.cc	(revision 1914)
+++ code/branches/overlay/src/orxonox/overlays/debug/DebugFPSText.cc	(revision 2036)
@@ -50,5 +50,5 @@
     {
         float fps = GraphicsEngine::getInstance().getAverageFramesPerSecond();
-        this->text_->setCaption(this->getCaption() + convertToString(fps));
+        this->setCaption(convertToString(fps));
     }
 }
Index: code/branches/overlay/src/orxonox/overlays/debug/DebugRTRText.cc
===================================================================
--- code/branches/overlay/src/orxonox/overlays/debug/DebugRTRText.cc	(revision 1914)
+++ code/branches/overlay/src/orxonox/overlays/debug/DebugRTRText.cc	(revision 2036)
@@ -50,5 +50,5 @@
     {
         float rtr = GraphicsEngine::getInstance().getAverageTickTime();
-        this->text_->setCaption(this->getCaption() + convertToString(rtr));
+        this->setCaption(convertToString(rtr));
     }
 }
Index: code/branches/overlay/src/orxonox/overlays/stats/StatsTest.cc
===================================================================
--- code/branches/overlay/src/orxonox/overlays/stats/StatsTest.cc	(revision 2036)
+++ code/branches/overlay/src/orxonox/overlays/stats/StatsTest.cc	(revision 2036)
@@ -0,0 +1,51 @@
+/*
+ *   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:
+ *      ...
+ *
+ */
+
+#include "OrxonoxStableHeaders.h"
+#include "StatsTest.h"
+
+#include <OgreTextAreaOverlayElement.h>
+#include "core/CoreIncludes.h"
+
+namespace orxonox
+{
+    CreateFactory(StatsTest);
+
+    StatsTest::StatsTest()
+    {
+        RegisterObject(StatsTest);
+    }
+
+    StatsTest::~StatsTest()
+    {
+    }
+
+    void StatsTest::tick(float dt)
+    {
+    }
+}
Index: code/branches/overlay/src/orxonox/overlays/stats/StatsTest.h
===================================================================
--- code/branches/overlay/src/orxonox/overlays/stats/StatsTest.h	(revision 2036)
+++ code/branches/overlay/src/orxonox/overlays/stats/StatsTest.h	(revision 2036)
@@ -0,0 +1,48 @@
+/*
+ *   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:
+ *      ...
+ *
+ */
+
+#ifndef _StatsTest_H__
+#define _StatsTest_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include "overlays/OrxonoxOverlay.h"
+#include "objects/Tickable.h"
+
+namespace orxonox
+{
+    class _OrxonoxExport StatsTest : public OrxonoxOverlay, public Tickable
+    {
+    public:
+        StatsTest();
+        ~StatsTest();
+
+        virtual void tick(float dt);
+    };
+}
+#endif /* _StatsTest_H__ */
