Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp	(revision f714763c1502a8d2a462b4e01ad3c708f9fa17cf)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp	(revision 5be7988b41312420dd9335d53345f61a79a43f07)
@@ -273,9 +273,5 @@
 atomId_t GLMoleculeObject_atom::updateIndex() const
 {
-  const atom * const _atom = World::getInstance().lastChanged<atom>();
-  if (_atom != NULL) {
-    return _atom->getId();
-  }
-  return (atomId_t)-1;
+  return const_cast<const World &>(World::getInstance()).lastChangedAtomId();
 }
 
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision f714763c1502a8d2a462b4e01ad3c708f9fa17cf)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 5be7988b41312420dd9335d53345f61a79a43f07)
@@ -429,9 +429,11 @@
 {
   const molecule * const mol = getMolecule(MolIndex.get());
-  const atomId_t id = mol->lastChanged()->getId();
-  if (mol->containsAtom(id))
-    DisplayedAtoms.insert(id);
-  else
-    DisplayedAtoms.erase(id);
+  if (mol != NULL) {
+    const atomId_t id = mol->lastChangedAtomId();
+    if (mol->containsAtom(id))
+      DisplayedAtoms.insert(id);
+    else
+      DisplayedAtoms.erase(id);
+  }
   return DisplayedAtoms;
 }
@@ -439,9 +441,5 @@
 moleculeId_t GLMoleculeObject_molecule::updateIndex() const
 {
-  const molecule * const mol = World::getInstance().lastChanged<molecule>();
-  if (mol != NULL) {
-    return mol->getId();
-  }
-  return (moleculeId_t)-1;
+  return const_cast<const World &>(World::getInstance()).lastChangedMolId();
 }
 
@@ -526,5 +524,5 @@
       case molecule::AtomInserted:
       {
-        const atomId_t _id = _molecule->lastChanged()->getId();
+        const atomId_t _id = _molecule->lastChangedAtomId();
   #ifdef LOG_OBSERVER
         observerLog().addMessage() << "++ Observer " << observerLog().getName(static_cast<Observer *>(this)) << " received notification that atom "+toString(_id)+" has been inserted.";
@@ -537,5 +535,5 @@
       case World::AtomRemoved:
       {
-        const atomId_t _id = _molecule->lastChanged()->getId();
+        const atomId_t _id = _molecule->lastChangedAtomId();
   #ifdef LOG_OBSERVER
         observerLog().addMessage() << "++ Observer " << observerLog().getName(static_cast<Observer *>(this)) << " received notification that atom "+toString(_id)+" has been removed.";
@@ -549,5 +547,5 @@
       {
   #ifdef LOG_OBSERVER
-        const atomId_t _id = _molecule->lastChanged()->getId();
+        const atomId_t _id = _molecule->lastChangedAtomId();
         observerLog().addMessage() << "++ Observer " << observerLog().getName(static_cast<Observer *>(this)) << " received notification that atom "+toString(_id)+" has been inserted.";
   #endif
@@ -559,5 +557,5 @@
       {
   #ifdef LOG_OBSERVER
-        const atomId_t _id = _molecule->lastChanged()->getId();
+        const atomId_t _id = _molecule->lastChangedAtomId();
         observerLog().addMessage() << "++ Observer " << observerLog().getName(static_cast<Observer *>(this)) << " received notification that atom "+toString(_id)+"'s index has changed.";
   #endif
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision f714763c1502a8d2a462b4e01ad3c708f9fa17cf)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 5be7988b41312420dd9335d53345f61a79a43f07)
@@ -370,5 +370,5 @@
 
     // emit removed signal
-    const moleculeId_t _id = World::getInstance().lastChanged<molecule>()->getId();
+    const moleculeId_t _id = mol->getId();
     emit moleculeRemoved(_id);
   }
@@ -394,5 +394,5 @@
       case World::MoleculeInserted:
       {
-        const moleculeId_t _id = World::getInstance().lastChanged<molecule>()->getId();
+        const moleculeId_t _id = const_cast<const World &>(World::getInstance()).lastChangedMolId();
   #ifdef LOG_OBSERVER
         observerLog().addMessage() << "++ Observer " << observerLog().getName(static_cast<Observer *>(this)) << " received notification that molecule "+toString(_id)+" has been inserted.";
@@ -428,6 +428,6 @@
   } else if (dynamic_cast<molecule *>(publisher) != NULL) {
     const molecule * mol = const_cast<const molecule * const>(dynamic_cast<molecule *>(publisher));
-    const atomId_t atomid = mol->lastChanged()->getId();
     const moleculeId_t molid = mol->getId();
+    const atomId_t atomid = mol->lastChangedAtomId();
     switch (notification->getChannelNo()) {
       case molecule::AtomInserted:
