diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp
index 3982b9b12..37cc23f5f 100644
--- a/apps/openmw/mwworld/scene.cpp
+++ b/apps/openmw/mwworld/scene.cpp
@@ -304,60 +304,62 @@ namespace MWWorld
 
     void Scene::changeToInteriorCell (const std::string& cellName, const ESM::Position& position)
     {
-        std::cout << "Changing to interior\n";
-
-
+        CellStore *cell = MWBase::Environment::get().getWorld()->getInterior(cellName);
         bool loadcell = (mCurrentCell == NULL);
+        if(!loadcell)
+            loadcell = *mCurrentCell != *cell;
+        
         if(!loadcell)
         {
-            std::string nam = std::string(cellName);
-            std::string curnam = std::string(mCurrentCell->cell->mName);
-            std::transform(nam.begin(), nam.end(), nam.begin(), ::tolower);
-            std::transform(curnam.begin(), curnam.end(), curnam.begin(), ::tolower);
-            loadcell = nam != curnam;
+            MWBase::World *world = MWBase::Environment::get().getWorld();
+            world->moveObject(world->getPlayer().getPlayer(), position.pos[0], position.pos[1], position.pos[2]);
+
+            float x = Ogre::Radian(position.rot[0]).valueDegrees();
+            float y = Ogre::Radian(position.rot[1]).valueDegrees();
+            float z = Ogre::Radian(position.rot[2]).valueDegrees();
+            world->rotateObject(world->getPlayer().getPlayer(), x, y, z);
+            return;
         }
-        if(loadcell)
+        
+        std::cout << "Changing to interior\n";
+
+        // remove active
+        CellStoreCollection::iterator active = mActiveCells.begin();
+
+        // count number of cells to unload
+        int numUnload = 0;
+        while (active!=mActiveCells.end())
         {
-            CellStore *cell = MWBase::Environment::get().getWorld()->getInterior(cellName);
-
-            // remove active
-            CellStoreCollection::iterator active = mActiveCells.begin();
-
-            // count number of cells to unload
-            int numUnload = 0;
-            while (active!=mActiveCells.end())
-            {
-                ++active;
-                ++numUnload;
-            }
-
-            // unload
-            int current = 0;
-            active = mActiveCells.begin();
-            while (active!=mActiveCells.end())
-            {
-                MWBase::Environment::get().getWindowManager ()->setLoadingProgress ("Unloading cells", 0, current, numUnload);
-
-                unloadCell (active++);
-                ++current;
-            }
-
-            // Load cell.
-            std::cout << "cellName:" << cellName << std::endl;
-
-
-            MWBase::Environment::get().getWindowManager ()->setLoadingProgress ("Loading cells", 0, 0, 1);
-            loadCell (cell);
-
-            mCurrentCell = cell;
-
-            // adjust fog
-            mRendering.switchToInterior();
-            mRendering.configureFog(*cell);
+            ++active;
+            ++numUnload;
         }
+
+        // unload
+        int current = 0;
+        active = mActiveCells.begin();
+        while (active!=mActiveCells.end())
+        {
+            MWBase::Environment::get().getWindowManager ()->setLoadingProgress ("Unloading cells", 0, current, numUnload);
+
+            unloadCell (active++);
+            ++current;
+        }
+
+        // Load cell.
+        std::cout << "cellName: " << cell->cell->mName << std::endl;
+
+        MWBase::Environment::get().getWindowManager ()->setLoadingProgress ("Loading cells", 0, 0, 1);
+        loadCell (cell);
+
+        mCurrentCell = cell;
+
+        // adjust fog
+        mRendering.switchToInterior();
+        mRendering.configureFog(*mCurrentCell);
+        
         // adjust player
         playerCellChange (mCurrentCell, position);
-        
+
         // Sky system
         MWBase::Environment::get().getWorld()->adjustSky();