Index: src/LinkedCell/LinkedCell_Model.cpp
===================================================================
--- src/LinkedCell/LinkedCell_Model.cpp	(revision 8c318650ec230fdda3b798297d3d0a0d7b7c3776)
+++ src/LinkedCell/LinkedCell_Model.cpp	(revision 54f3d11a82854765641343eac08c593e5d58b8ad)
@@ -282,5 +282,6 @@
 void LinkedCell::LinkedCell_Model::addNode(const TesselPoint *Walker)
 {
-  addNode_internal(Walker);
+  LOG(2, "INFO: Requesting update to add node " << *Walker << ".");
+  Changes->addUpdate(Walker, 0, boost::bind(&LinkedCell_Model::addNode_internal, this, _1));
 }
 
@@ -293,5 +294,6 @@
 void LinkedCell::LinkedCell_Model::deleteNode(const TesselPoint *Walker)
 {
-  deleteNode_internal(Walker);
+  LOG(2, "INFO: Requesting update to delete node " << *Walker << ".");
+  Changes->addUpdate(Walker, 0, boost::bind(&LinkedCell_Model::deleteNode_internal, this, _1));
 }
 
@@ -302,5 +304,7 @@
 void LinkedCell::LinkedCell_Model::moveNode(const TesselPoint *Walker)
 {
-  moveNode_internal(Walker);
+  LOG(2, "INFO: Requesting update to move node " << *Walker << " to position "
+      << Walker->getPosition() << ".");
+  Changes->addUpdate(Walker, 10, boost::bind(&LinkedCell_Model::moveNode_internal, this, _1));
 }
 
Index: src/LinkedCell/LinkedCell_Model_LinkedCellArrayCache.hpp
===================================================================
--- src/LinkedCell/LinkedCell_Model_LinkedCellArrayCache.hpp	(revision 8c318650ec230fdda3b798297d3d0a0d7b7c3776)
+++ src/LinkedCell/LinkedCell_Model_LinkedCellArrayCache.hpp	(revision 54f3d11a82854765641343eac08c593e5d58b8ad)
@@ -33,4 +33,6 @@
     //!> grant LinkedCell_Model access to N for its write operations.
     friend class LinkedCell_Model;
+    //!> grant access to model's unit test (to externally allow for update before checking internals)
+    friend class ::LinkedCell_ModelTest;
   public:
     LinkedCellArrayCache(
Index: src/LinkedCell/LinkedCell_Model_changeModel.cpp
===================================================================
--- src/LinkedCell/LinkedCell_Model_changeModel.cpp	(revision 8c318650ec230fdda3b798297d3d0a0d7b7c3776)
+++ src/LinkedCell/LinkedCell_Model_changeModel.cpp	(revision 54f3d11a82854765641343eac08c593e5d58b8ad)
@@ -22,4 +22,5 @@
 #include "LinkedCell_Model_changeModel.hpp"
 
+#include "CodePatterns/Log.hpp"
 #include "CodePatterns/toString.hpp"
 
@@ -63,7 +64,10 @@
       delete iter->second;
       iter->second = new Update(_updateMethod, Walker, priority);
+    } else {
+      LOG(1, "INFO: Rejecting update for LinkedCell_Model as higher prioritized one is present.");
     }
   } else {
     // insert new update
+    LOG(1, "INFO: Placing new update into queue for LinkedCell_Model.");
     OBSERVE;
     queue.insert( std::make_pair(Walker, new Update(_updateMethod, Walker, priority)) );
@@ -76,7 +80,9 @@
 void LinkedCell::LinkedCell_Model::changeModel::performUpdates()
 {
+  LOG(1, "INFO: Performing "+toString(queue.size())+" updates on LinkedCell_Model.");
   for (UpdateQueueMap::iterator iter = queue.begin();
       !queue.empty();
       iter = queue.begin()) {
+    LOG(1, "INFO: Performing update ...");
     // perform update
     (*iter->second)();
Index: src/LinkedCell/LinkedCell_Model_changeModel.hpp
===================================================================
--- src/LinkedCell/LinkedCell_Model_changeModel.hpp	(revision 8c318650ec230fdda3b798297d3d0a0d7b7c3776)
+++ src/LinkedCell/LinkedCell_Model_changeModel.hpp	(revision 54f3d11a82854765641343eac08c593e5d58b8ad)
@@ -31,6 +31,10 @@
    * Observable which we need for the Cacheable LinkedCell_Model::N.
    */
-  class LinkedCell_Model::changeModel : public Observable {
+  class LinkedCell_Model::changeModel : public Observable
+  {
+    //!> grant LinkedCell_ModelTest test access to queue
+    friend class ::LinkedCell_ModelTest;
   public:
+
     explicit changeModel(const double distance);
     ~changeModel();
Index: src/LinkedCell/unittests/LinkedCell_ModelUnitTest.cpp
===================================================================
--- src/LinkedCell/unittests/LinkedCell_ModelUnitTest.cpp	(revision 8c318650ec230fdda3b798297d3d0a0d7b7c3776)
+++ src/LinkedCell/unittests/LinkedCell_ModelUnitTest.cpp	(revision 54f3d11a82854765641343eac08c593e5d58b8ad)
@@ -32,5 +32,7 @@
 #include "LinkedCell/LinkedCell.hpp"
 #include "LinkedCell/LinkedCell_Model.hpp"
+#include "LinkedCell/LinkedCell_Model_changeModel.hpp"
 #include "LinkedCell/LinkedCell_Model_LinkedCellArrayCache.hpp"
+#include "LinkedCell/LinkedCell_Model_Update.hpp"
 #include "LinkedCell/PointCloudAdaptor.hpp"
 #include "LinkedCell/unittests/defs.hpp"
@@ -141,4 +143,6 @@
   LC->insertPointCloud(cloud);
 
+  // assure that we are updated before accessing internals
+  CPPUNIT_ASSERT_EQUAL( true, *(LC->N->UpToDate) );
   // test structure
   CPPUNIT_ASSERT_EQUAL(((size_t)floor(NUMBERCELLS)), LC->CellLookup.size());
@@ -236,4 +240,6 @@
   {
     LC->addNode(Walker);
+    // assure that we are updated before accessing internals
+    CPPUNIT_ASSERT_EQUAL( true, *(LC->N->UpToDate) );
     CPPUNIT_ASSERT_EQUAL( NodeList.size()+1, LC->CellLookup.size());
     LinkedCell::tripleIndex index1 = LC->getIndexToVector(Walker->getPosition());
@@ -251,4 +257,6 @@
     // we have to call moveNode ourselves, as we have just added TesselPoints, not via World
     LC->moveNode(Walker);
+    // assure that we are updated before accessing internals
+    CPPUNIT_ASSERT_EQUAL( true, *(LC->N->UpToDate) );
     const LinkedCell::tripleIndex &newindex2 = LC->CellLookup[Walker]->getIndices();
     CPPUNIT_ASSERT( index2 != newindex2);
@@ -258,4 +266,6 @@
   {
     LC->deleteNode(Walker);
+    // assure that we are updated before accessing internals
+    CPPUNIT_ASSERT_EQUAL( true, *(LC->N->UpToDate) );
     CPPUNIT_ASSERT_EQUAL( NodeList.size(), LC->CellLookup.size());
   }
@@ -263,2 +273,51 @@
   delete Walker;
 }
+
+/** UnitTest whether lazy updates are working.
+ */
+void LinkedCell_ModelTest::lazyUpdatesTest()
+{
+  // create point
+  TesselPoint * Walker = new TesselPoint();
+  Walker->setName(std::string("Walker9"));
+  Walker->setPosition(Vector(9.8,7.6,5.4));
+  TesselPoint * Walker2 = new TesselPoint();
+  Walker2->setName(std::string("Walker10"));
+  Walker2->setPosition(Vector(9.8,7.6,5.4));
+  PointCloudAdaptor< PointSet > cloud(&NodeList, std::string("NodeList"));
+  LC->insertPointCloud(cloud);
+
+  // initial read operation
+  {
+    CPPUNIT_ASSERT( !NodeList.empty() );
+    LinkedCell::tripleIndex index = LC->getIndexToVector((*NodeList.begin())->getPosition());
+    const size_t size = LC->N->getN()(index)->size(); // this will cause the update
+    CPPUNIT_ASSERT( size >= (size_t)1 );
+  }
+
+  // do some write ops
+  LC->addNode(Walker);
+  LC->addNode(Walker2);
+  CPPUNIT_ASSERT( LC->Changes->queue.find(Walker) != LC->Changes->queue.end() );
+  LinkedCell::LinkedCell_Model::Update *update = LC->Changes->queue[Walker];
+  Walker->setPosition(Vector(0.,0.,0.));
+  LC->moveNode(Walker);
+
+  // check that they all reside in cache and nothing is changed so far
+  CPPUNIT_ASSERT( LC->Changes->queue.size() > (size_t)0 );
+
+  // check that add priority is prefered over move
+  CPPUNIT_ASSERT( LC->Changes->queue[Walker] == update );
+
+  // perform read op
+  {
+    LinkedCell::tripleIndex index = LC->getIndexToVector(Walker->getPosition());
+    CPPUNIT_ASSERT( LC->N->getN()(index)->size() >= (size_t)1 );
+  }
+
+  // check that cache is emptied
+  CPPUNIT_ASSERT( LC->Changes->queue.size() == (size_t)0 );
+
+  delete Walker;
+  delete Walker2;
+}
Index: src/LinkedCell/unittests/LinkedCell_ModelUnitTest.hpp
===================================================================
--- src/LinkedCell/unittests/LinkedCell_ModelUnitTest.hpp	(revision 8c318650ec230fdda3b798297d3d0a0d7b7c3776)
+++ src/LinkedCell/unittests/LinkedCell_ModelUnitTest.hpp	(revision 54f3d11a82854765641343eac08c593e5d58b8ad)
@@ -35,4 +35,5 @@
     CPPUNIT_TEST ( getIndexToVectorTest );
     CPPUNIT_TEST ( nodeTest );
+    CPPUNIT_TEST ( lazyUpdatesTest );
     CPPUNIT_TEST_SUITE_END();
 
@@ -49,4 +50,5 @@
       void getIndexToVectorTest();
       void nodeTest();
+      void lazyUpdatesTest();
 
 private:
