Index: src/LinkedCell/LinkedCell_Controller.cpp
===================================================================
--- src/LinkedCell/LinkedCell_Controller.cpp	(revision 4a816966425096ec9bd0a17aa70a3dbfe04c7665)
+++ src/LinkedCell/LinkedCell_Controller.cpp	(revision b1c5ddb6c2dc1792b43fa42d24a01b1fcdb3fe98)
@@ -30,4 +30,5 @@
 #include "LinkedCell_Model.hpp"
 #include "LinkedCell_View.hpp"
+#include "LinkedCell_View_ModelWrapper.hpp"
 #include "IPointCloud.hpp"
 
@@ -184,4 +185,5 @@
  *
  * The main problem are the views currently in use.
+ *
  * We make use of LinkedCell:LinkedCell_View::RAIIMap as there all present are
  * listed. We go through the list, create a map with old model ref as keys to
@@ -192,4 +194,6 @@
 void LinkedCell_Controller::updateModelsForNewBoxMatrix()
 {
+  LOG(1, "INFO: Updating all models.");
+
   typedef std::map<const LinkedCell_Model *, LinkedCell_Model *>  ModelLookup;
   ModelLookup models;
@@ -201,11 +205,13 @@
     std::pair< ModelLookup::iterator, bool > inserter =
 #endif
-        models.insert( std::pair<const LinkedCell_Model *, LinkedCell_Model *>( &((*iter)->LC), NULL) );
+        models.insert( std::pair<const LinkedCell_Model *, LinkedCell_Model *>( (*iter)->LC->getModel(), NULL) );
+    LOG(2, "INFO: Added " << (*iter)->LC->getModel() << " to list of models to replace.");
     ASSERT( inserter.second,
         "LinkedCell_Controller::updateModelsForNewBoxMatrix() - failed to insert old model "
-        +toString( &((*iter)->LC))+","+toString(NULL)+" into models, is already present");
+        +toString( (*iter)->LC->getModel() )+","+toString(NULL)+" into models, is already present");
   }
 
   // invert MapEdgelengthModel
+  LOG(2, "INFO: ModelsMap is " << ModelsMap << ".");
   typedef std::map<const LinkedCell_Model*, double > MapEdgelengthModel_inverted;
   MapEdgelengthModel_inverted ModelsMap_inverted;
@@ -214,5 +220,5 @@
 #ifndef NDEBUG
     MapEdgelengthModel_inverted::const_iterator assertiter = ModelsMap_inverted.find(iter->second);
-    ASSERT( assertiter != ModelsMap_inverted.end(),
+    ASSERT( assertiter == ModelsMap_inverted.end(),
         "LinkedCell_Controller::updateModelsForNewBoxMatrix() - ModelsMap is not invertible, value "
         +toString(iter->second)+" is already present.");
@@ -220,4 +226,5 @@
     ModelsMap_inverted.insert( std::make_pair(iter->second, iter->first) );
   }
+  LOG(2, "INFO: Inverted ModelsMap is " << ModelsMap_inverted << ".");
 
   // go through map and re-create models
@@ -232,8 +239,10 @@
 #endif
     const double distance = ModelsMap_inverted[oldref];
+    // create new one
+    LinkedCell_Model * const newref = new LinkedCell_Model(distance, domain);
+    // delete old one (this way to make sure, unit test notices different pointer addresses)
     delete oldref;
     ModelsMap.erase(distance);
-    // create new one
-    LinkedCell_Model * const newref = new LinkedCell_Model(distance, domain);
+    LOG(2, "INFO: oldref is " << oldref << ", newref is " << newref << ".");
     iter->second = newref;
     // replace in ModelsMap
@@ -253,11 +262,13 @@
   for (LinkedCell_View::ModelInstanceMap::const_iterator iter = LinkedCell_View::RAIIMap.begin();
       iter != LinkedCell_View::RAIIMap.end(); ++iter) {
-    ModelLookup::const_iterator modeliter = models.find(&((*iter)->LC));
+    ModelLookup::const_iterator modeliter = models.find((*iter)->LC->getModel());
     ASSERT( modeliter != models.end(),
         "LinkedCell_Controller::updateModelsForNewBoxMatrix() - we miss a model "
-        +toString(&((*iter)->LC))+" in ModelLookup.");
+        +toString((*iter)->LC->getModel())+" in ModelLookup.");
     // this is ugly but the only place where we have to set ourselves over the constness of the member variable
-    //if (modeliter != models.end())
-      //const_cast<LinkedCell_Model &>((*iter)->LC) = *modeliter->second;
+    if (modeliter != models.end()) {
+      LOG(2, "INFO: Setting model to " << modeliter->second << " in view " << *iter << ".");
+      (*iter)->LC->setModel(modeliter->second);
+    }
   }
 }
Index: src/LinkedCell/LinkedCell_View.cpp
===================================================================
--- src/LinkedCell/LinkedCell_View.cpp	(revision 4a816966425096ec9bd0a17aa70a3dbfe04c7665)
+++ src/LinkedCell/LinkedCell_View.cpp	(revision b1c5ddb6c2dc1792b43fa42d24a01b1fcdb3fe98)
@@ -31,4 +31,5 @@
 #include "LinkedCell.hpp"
 #include "LinkedCell_Model.hpp"
+#include "LinkedCell_View_ModelWrapper.hpp"
 #include "tripleIndex.hpp"
 
@@ -43,5 +44,5 @@
  */
 LinkedCell_View::LinkedCell_View(const LinkedCell_Model &_LC) :
-    LC(_LC)
+    LC( new LinkedCell_View_ModelWrapper(&_LC) )
 {
   // add us to RAII counting map
@@ -60,5 +61,5 @@
  */
 LinkedCell_View::LinkedCell_View(const LinkedCell_View &_view) :
-    LC(_view.LC)
+    LC( new LinkedCell_View_ModelWrapper(_view.LC->getModel()) )
 {
   if (this != &_view) {
@@ -90,4 +91,5 @@
     ELOG(1, "Failed to remove instance "+toString(this)+" from RAIIMap.");
   }
+  delete LC;
 }
 
@@ -104,9 +106,10 @@
   LinkedList TesselList;  // we do not need a set, as nodes are uniquely associated to a cell.
 
+  const LinkedCell_Model * const LCmodel = LC->getModel();  // get quick ref to model
   // get relative bounds
-  const tripleIndex step = LC.getStep(radius);
-  const tripleIndex index = LC.getIndexToVector(center);
+  const tripleIndex step = LCmodel->getStep(radius);
+  const tripleIndex index = LCmodel->getIndexToVector(center);
   LinkedCell_Model::LinkedCellNeighborhoodBounds neighbors =
-      LC.getNeighborhoodBounds(index, step);
+      LCmodel->getNeighborhoodBounds(index, step);
 
   tripleIndex n;
@@ -115,7 +118,7 @@
       for (n[2] = 0; n[2] < neighbors.second[2]; n[2]++) {
         tripleIndex absolute_n = neighbors.first + n;
-        if (!LC.checkArrayBounds(absolute_n))
-          LC.applyBoundaryConditions(absolute_n);
-        const LinkedCell &List = LC.getCell(absolute_n);
+        if (!LCmodel->checkArrayBounds(absolute_n))
+          LCmodel->applyBoundaryConditions(absolute_n);
+        const LinkedCell &List = LCmodel->getCell(absolute_n);
         LOG(1, "Current cell is " << neighbors.first << " plus " << n << ", yielding " << absolute_n << ".");
         for (LinkedCell::const_iterator Runner = List.begin(); Runner != List.end(); Runner++)
Index: src/LinkedCell/LinkedCell_View.hpp
===================================================================
--- src/LinkedCell/LinkedCell_View.hpp	(revision 4a816966425096ec9bd0a17aa70a3dbfe04c7665)
+++ src/LinkedCell/LinkedCell_View.hpp	(revision b1c5ddb6c2dc1792b43fa42d24a01b1fcdb3fe98)
@@ -24,5 +24,7 @@
 namespace LinkedCell {
 
+  class LinkedCell_Controller;
   class LinkedCell_Model;
+  class LinkedCell_View_ModelWrapper;
 
   /** This is the view of the MVC ansatz for the LinkedCell structure.
@@ -58,5 +60,5 @@
     static ModelInstanceMap RAIIMap;
     //!> internal reference to the underlying model
-    const LinkedCell_Model &LC;
+    LinkedCell_View_ModelWrapper * const LC;
   };
 
Index: src/LinkedCell/LinkedCell_View_ModelWrapper.hpp
===================================================================
--- src/LinkedCell/LinkedCell_View_ModelWrapper.hpp	(revision b1c5ddb6c2dc1792b43fa42d24a01b1fcdb3fe98)
+++ src/LinkedCell/LinkedCell_View_ModelWrapper.hpp	(revision b1c5ddb6c2dc1792b43fa42d24a01b1fcdb3fe98)
@@ -0,0 +1,42 @@
+/*
+ * LinkedCell_View_ModelWrapper.hpp
+ *
+ *  Created on: Dec 22, 2011
+ *      Author: heber
+ */
+
+#ifndef LINKEDCELL_VIEW_MODELWRAPPER_HPP_
+#define LINKEDCELL_VIEW_MODELWRAPPER_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+namespace LinkedCell {
+
+  class LinkedCell_Model;
+
+  /** This class wraps the LinkedCell_Model.
+   *
+   * This shall prevent any function in LinkedCell_View from tampering with
+   * the Model ref. This is only allowed for the Controller.
+   */
+  class LinkedCell_View_ModelWrapper
+  {
+  public:
+    LinkedCell_View_ModelWrapper(const LinkedCell_Model *_model) :
+      model(_model)
+    {}
+    ~LinkedCell_View_ModelWrapper() {}
+    const LinkedCell_Model * const getModel() const { return model; }
+  private:
+    friend class LinkedCell_Controller;
+    void setModel(const LinkedCell_Model *_model) { model = _model; }
+  private:
+    const LinkedCell_Model * model;
+  };
+
+} // namespace LinkedCell
+
+#endif /* LINKEDCELL_VIEW_MODELWRAPPER_HPP_ */
Index: src/LinkedCell/Makefile.am
===================================================================
--- src/LinkedCell/Makefile.am	(revision 4a816966425096ec9bd0a17aa70a3dbfe04c7665)
+++ src/LinkedCell/Makefile.am	(revision b1c5ddb6c2dc1792b43fa42d24a01b1fcdb3fe98)
@@ -23,4 +23,5 @@
   LinkedCell/LinkedCell_Model_Update.hpp \
   LinkedCell/LinkedCell_View.hpp \
+  LinkedCell/LinkedCell_View_ModelWrapper.hpp \
   LinkedCell/PointCloudAdaptor.hpp \
   LinkedCell/tripleIndex.hpp
Index: src/LinkedCell/unittests/stubs/LinkedCell_ViewStub.cpp
===================================================================
--- src/LinkedCell/unittests/stubs/LinkedCell_ViewStub.cpp	(revision 4a816966425096ec9bd0a17aa70a3dbfe04c7665)
+++ src/LinkedCell/unittests/stubs/LinkedCell_ViewStub.cpp	(revision b1c5ddb6c2dc1792b43fa42d24a01b1fcdb3fe98)
@@ -21,13 +21,14 @@
 
 #include "LinkedCell/LinkedCell_View.hpp"
+#include "LinkedCell/LinkedCell_View_ModelWrapper.hpp"
 
 using namespace LinkedCell;
 
 LinkedCell_View::LinkedCell_View(const LinkedCell_Model &_LC) :
-    LC(_LC)
+    LC( new LinkedCell_View_ModelWrapper(&_LC) )
 {}
 
 LinkedCell_View::LinkedCell_View(const LinkedCell_View &_view) :
-    LC(_view.LC)
+    LC( new LinkedCell_View_ModelWrapper(_view.LC->getModel()) )
 {}
 
