Index: code/branches/cegui0.8_ogre1.9/src/orxonox/graphics/AnimatedModel.cc
===================================================================
--- code/branches/cegui0.8_ogre1.9/src/orxonox/graphics/AnimatedModel.cc	(revision 11787)
+++ code/branches/cegui0.8_ogre1.9/src/orxonox/graphics/AnimatedModel.cc	(revision 11795)
@@ -49,6 +49,6 @@
     AnimatedModel::~AnimatedModel()
     {
-        if (this->isInitialized() && this->mesh_.getEntity())
-            this->detachOgreObject(this->mesh_.getEntity());
+        if (this->isInitialized() && this->getMesh().getEntity())
+            this->detachOgreObject(this->getMesh().getEntity());
     }
 
@@ -66,15 +66,15 @@
         if (GameMode::showsGraphics())
         {
-            if (this->mesh_.getEntity())
-                this->detachOgreObject(this->mesh_.getEntity());
+            if (this->getMesh().getEntity())
+                this->detachOgreObject(this->getMesh().getEntity());
 
-            this->mesh_.setMeshSource(this->getScene()->getSceneManager(), this->meshSrc_);
+            this->getMesh().setMeshSource(this->getScene()->getSceneManager(), this->getMeshSource());
 
-            if (this->mesh_.getEntity())
+            if (this->getMesh().getEntity())
             {
-                this->attachOgreObject(this->mesh_.getEntity());
-                this->mesh_.getEntity()->setCastShadows(this->bCastShadows_);
+                this->attachOgreObject(this->getMesh().getEntity());
+                this->getMesh().getEntity()->setCastShadows(this->getCastShadows());
                 this->setAnimationState(this->bAnimLoop_, this->bAnimEnabled_, this->anims_);
-                this->mesh_.setVisible(this->isVisible());
+                this->getMesh().setVisible(this->isVisible());
             }
         }
@@ -89,7 +89,7 @@
         if(state!="")
         {
-        if(this->mesh_.getEntity()->getAnimationState(state))
+        if(this->getMesh().getEntity()->getAnimationState(state))
         {
-        Ogre::AnimationState* as = this->mesh_.getEntity()->getAnimationState(state);
+        Ogre::AnimationState* as = this->getMesh().getEntity()->getAnimationState(state);
         as->setLoop(loop);
         as->setEnabled(enabled);
@@ -109,9 +109,9 @@
     void AnimatedModel::tick(float dt)
     {
-        if(this->mesh_.getEntity()->getAnimationState(anims_))
+        if(this->getMesh().getEntity()->getAnimationState(anims_))
         {
 // Test to change Material at runtime!
 
-//            Ogre::MaterialPtr mat = this->mesh_.getEntity()->getSubEntity(0)->getMaterial();
+//            Ogre::MaterialPtr mat = this->getMesh().getEntity()->getSubEntity(0)->getMaterial();
 //            mat->setDiffuse(0.4, 0.3, 0.1, 0.1);
 //            mat->setAmbient(0.3, 0.7, 0.8);
@@ -121,5 +121,5 @@
 //            mat->setSceneBlending(sbt);
 
-            Ogre::AnimationState* as = this->mesh_.getEntity()->getAnimationState(anims_);
+            Ogre::AnimationState* as = this->getMesh().getEntity()->getAnimationState(anims_);
             as->addTime(dt);
     }
Index: code/branches/cegui0.8_ogre1.9/src/orxonox/graphics/Camera.cc
===================================================================
--- code/branches/cegui0.8_ogre1.9/src/orxonox/graphics/Camera.cc	(revision 11787)
+++ code/branches/cegui0.8_ogre1.9/src/orxonox/graphics/Camera.cc	(revision 11795)
@@ -62,5 +62,10 @@
 
         this->camera_ = this->getScene()->getSceneManager()->createCamera(getUniqueNumberString());
-        static_cast<Ogre::MovableObject*>(this->camera_)->setUserAny(Ogre::Any(static_cast<OrxonoxClass*>(this)));
+        Ogre::MovableObject* movable = static_cast<Ogre::MovableObject*>(this->camera_);
+#if OGRE_VERSION >= 0x010900
+        movable->getUserObjectBindings().setUserAny(Ogre::Any(static_cast<OrxonoxClass*>(this)));
+#else
+        movable->setUserAny(Ogre::Any(static_cast<OrxonoxClass*>(this)));
+#endif
         this->cameraNode_ = this->getScene()->getRootSceneNode()->createChildSceneNode();
         this->attachNode(this->cameraNode_);
Index: code/branches/cegui0.8_ogre1.9/src/orxonox/graphics/Model.cc
===================================================================
--- code/branches/cegui0.8_ogre1.9/src/orxonox/graphics/Model.cc	(revision 11787)
+++ code/branches/cegui0.8_ogre1.9/src/orxonox/graphics/Model.cc	(revision 11795)
@@ -30,5 +30,10 @@
 
 #include <OgreEntity.h>
-#include <OgreProgressiveMesh.h>
+#if OGRE_VERSION >= 0x010900
+#   include <OgreProgressiveMeshGenerator.h>
+#   include <OgreDistanceLodStrategy.h>
+#else
+#   include <OgreProgressiveMesh.h>
+#endif
 
 #include "core/CoreIncludes.h"
@@ -203,19 +208,9 @@
             {
                 float volume = this->mesh_.getEntity()->getBoundingBox().volume();
-/*
-                float scaleFactor = 1;
-
-                BaseObject* creatorPtr = this;
-
-                while(creatorPtr!=nullptr&&orxonox_cast<WorldEntity*>(creatorPtr))
-                {
-                    scaleFactor *= getBiggestScale(((WorldEntity*) creatorPtr)->getScale3D());
-                    creatorPtr = creatorPtr->getCreator();
-                }
-                orxout() << "name: " << this->meshSrc_ << "scaleFactor: " << scaleFactor << ", volume: " << volume << endl;
-*/
                 orxout(verbose, context::lod) << "Setting lodLevel for " << this->meshSrc_<< " with lodLevel_: " << this->lodLevel_ <<" and volume: "<< volume << ":" << endl;
 
-#if OGRE_VERSION >= 0x010800
+#if OGRE_VERSION >= 0x010900
+                Ogre::LodConfig::LodLevelList distList;
+#elif OGRE_VERSION >= 0x010800
                 Ogre::ProgressiveMesh::LodValueList distList;
 #elif OGRE_VERSION >= 0x010700
@@ -227,19 +222,18 @@
                 if( lodLevel_>0 )
                 {
-//                    float factor = scaleFactor*5/lodLevel_;
                     float factor = pow(volume, 2.0f / 3.0f) * 15.0f / lodLevel_;
 
                     orxout(verbose, context::lod) << "LodLevel set with factor: " << factor << endl;
 
-                    distList.push_back(70.0f*factor);
-                    distList.push_back(140.0f*factor);
-                    distList.push_back(170.0f*factor);
-                    distList.push_back(200.0f*factor);
-                    distList.push_back(230.0f*factor);
-                    distList.push_back(250.0f*factor);
-                    distList.push_back(270.0f*factor);
-                    distList.push_back(290.0f*factor);
-                    distList.push_back(310.0f*factor);
-                    distList.push_back(330.0f*factor);
+                    addLodDistanceToList(distList, 70.0f*factor);
+                    addLodDistanceToList(distList, 140.0f*factor);
+                    addLodDistanceToList(distList, 170.0f*factor);
+                    addLodDistanceToList(distList, 200.0f*factor);
+                    addLodDistanceToList(distList, 230.0f*factor);
+                    addLodDistanceToList(distList, 250.0f*factor);
+                    addLodDistanceToList(distList, 270.0f*factor);
+                    addLodDistanceToList(distList, 290.0f*factor);
+                    addLodDistanceToList(distList, 310.0f*factor);
+                    addLodDistanceToList(distList, 330.0f*factor);
                     while(distList.size()>this->numLodLevels_)
                         distList.pop_back();
@@ -247,5 +241,13 @@
 
                     //Generiert LOD-Levels
-#if OGRE_VERSION >= 0x010800
+#if OGRE_VERSION >= 0x010900
+                    Ogre::LodConfig config;
+                    config.mesh = this->mesh_.getEntity()->getMesh();
+                    config.levels = distList;
+                    config.strategy = Ogre::DistanceLodSphereStrategy::getSingletonPtr();
+
+                    Ogre::ProgressiveMeshGenerator generator;
+                    generator.generateLodLevels(config);
+#elif OGRE_VERSION >= 0x010800
                     Ogre::ProgressiveMesh::generateLodLevels(this->mesh_.getEntity()->getMesh().get(), distList, Ogre::ProgressiveMesh::VRQ_PROPORTIONAL,
                         this->lodReductionRate_);
@@ -270,3 +272,13 @@
 #endif
     }
+
+    template <class T>
+    void Model::addLodDistanceToList(T& list, float distance)
+    {
+#if OGRE_VERSION >= 0x010900
+        list.push_back({distance, Ogre::LodLevel::VRM_COLLAPSE_COST, this->lodReductionRate_, 0, false});
+#else
+        list.push_back(distance);
+#endif
+    }
 }
Index: code/branches/cegui0.8_ogre1.9/src/orxonox/graphics/Model.h
===================================================================
--- code/branches/cegui0.8_ogre1.9/src/orxonox/graphics/Model.h	(revision 11787)
+++ code/branches/cegui0.8_ogre1.9/src/orxonox/graphics/Model.h	(revision 11795)
@@ -89,4 +89,11 @@
 
         protected:
+            inline Mesh& getMesh()
+                { return this->mesh_; }
+
+            inline void setLodEnabled(bool bLodEnabled)
+                { this->bLodEnabled_ = bLodEnabled; }
+
+        private:
             /**
             @brief
@@ -108,4 +115,7 @@
             //LoD
             void enableLod();
+
+            template <class T>
+            void addLodDistanceToList(T& list, float distance);
 
             inline void setLodLevel(float lodLevel)
