Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.hpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.hpp	(revision 15c8a9b3bc531ef54d3a92deddc382002414247c)
@@ -29,4 +29,5 @@
 
 class GLWorldScene;
+class QtInstanceInformationBoard;
 
 class GLMoleculeObject_atom : public GLMoleculeObject, Observer
@@ -108,4 +109,5 @@
 
 private:
+  friend class QtInstanceInformationBoard;
   /** Observed Values **/
 
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp	(revision 15c8a9b3bc531ef54d3a92deddc382002414247c)
@@ -34,4 +34,5 @@
 class GLMoleculeObject_atom;
 class GLWorldScene;
+class QtInstanceInformationBoard;
 
 class GLMoleculeObject_molecule : public GLMoleculeObject, public Observer
@@ -147,4 +148,5 @@
 
 private:
+  friend class QtInstanceInformationBoard;
   /** Observed Values **/
 
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 15c8a9b3bc531ef54d3a92deddc382002414247c)
@@ -49,4 +49,5 @@
 #include "UIElements/Views/Qt4/Qt3D/GLMoleculeObject_shape.hpp"
 
+#include "UIElements/Views/Qt4/QtInstanceInformationBoard.hpp"
 #include "UIElements/Views/Qt4/QtSelectionChangedAgent.hpp"
 
@@ -72,7 +73,10 @@
 using namespace MoleCuilder;
 
-GLWorldScene::GLWorldScene(QObject *parent) :
-    QObject(parent),
-    selectionMode(SelectAtom)
+GLWorldScene::GLWorldScene(
+    QtInstanceInformationBoard * _board,
+    QObject *parent) :
+  QObject(parent),
+  selectionMode(SelectAtom),
+  board(_board)
 {
   int sphereDetails[] = {5, 3, 2, 0};
@@ -90,4 +94,12 @@
     GLMoleculeObject::meshCylinder[i]->setOption(QGLSceneNode::CullBoundingBox, true);
   }
+  connect(board, SIGNAL(moleculeIndexChanged(const moleculeId_t, const moleculeId_t)),
+      this, SLOT(moleculeIndexChanged(const moleculeId_t, const moleculeId_t)));
+  connect(board, SIGNAL(moleculeInserted(const moleculeId_t)),
+      this, SLOT(moleculeInserted(const moleculeId_t)));
+  connect(board, SIGNAL(moleculeRemoved(const moleculeId_t)),
+      this, SLOT(moleculeRemoved(const moleculeId_t)));
+  connect(board, SIGNAL(moleculeIndexChanged(const moleculeId_t, const moleculeId_t)),
+      this, SLOT(moleculeIndexChanged(const moleculeId_t, const moleculeId_t)));
 
 //  connect(this, SIGNAL(updated()), this, SLOT(update()));
@@ -359,4 +371,23 @@
 }
 
+void GLWorldScene::moleculeIndexChanged(const moleculeId_t _oldid, const moleculeId_t _newid)
+{
+  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_oldid);
+  if ( iter == MoleculesinSceneMap.end()) {
+    RemovalMolecule_t::iterator removeiter =
+        RemovalMolecules.find(_oldid);
+    ASSERT( removeiter != RemovalMolecules.end(),
+        "GLWorldScene::moleculeIndexChanged() - cannot find id "+toString(_oldid)+" in any map.");
+    RemovalMolecules.erase(removeiter);
+    RemovalMolecules.insert(_newid);
+  } else {
+    LOG(1, "DEBUG: Changing GLMoleculeObject_molecule from " << _oldid << " to id " << _newid);
+    GLMoleculeObject_molecule* molObject = iter->second;
+    MoleculesinSceneMap.erase(iter);
+    MoleculesinSceneMap.insert(
+        std::make_pair( _newid, molObject) );
+  }
+}
+
 void GLWorldScene::moleculesVisibilityChanged(const moleculeId_t _id, bool _visible)
 {
@@ -506,8 +537,9 @@
   boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
   MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_molid);
+  // use direct connection as it's lightweight and we avoid index change troubles
   if (iter != MoleculesinSceneMap.end())
     QMetaObject::invokeMethod(iter->second,        // pointer to a QObject
                             "AtomSelected",       // member name (no parameters here)
-                            Qt::QueuedConnection,     // connection type
+                            Qt::DirectConnection,     // connection type
                             Q_ARG(const atomId_t, _id));     // parameters
   else
@@ -520,8 +552,9 @@
   boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
   MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_molid);
+  // use direct connection as it's lightweight and we avoid index change troubles
   if (iter != MoleculesinSceneMap.end())
     QMetaObject::invokeMethod(iter->second,        // pointer to a QObject
                             "AtomUnselected",       // member name (no parameters here)
-                            Qt::QueuedConnection,     // connection type
+                            Qt::DirectConnection,     // connection type
                             Q_ARG(const atomId_t, _id));     // parameters
   else
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 15c8a9b3bc531ef54d3a92deddc382002414247c)
@@ -41,4 +41,6 @@
 class QtSelectionChangedAgent;
 
+class QtInstanceInformationBoard;
+
 /** This class contains a list of all molecules in the world.
  *
@@ -48,5 +50,7 @@
   Q_OBJECT
 public:
-  GLWorldScene(QObject *parent=0);
+  GLWorldScene(
+      QtInstanceInformationBoard * _board,
+      QObject *parent=0);
   virtual ~GLWorldScene();
 
@@ -88,4 +92,5 @@
   void moleculeRemoved(const moleculeId_t _id);
   void moleculeInserted(const moleculeId_t _id);
+  void moleculeIndexChanged(const moleculeId_t _oldid, const moleculeId_t _newid);
   void atomRemoved(const moleculeId_t _molid, const atomId_t _atomid);
   void atomInserted(const moleculeId_t _molid, const atomId_t _atomid);
@@ -133,4 +138,6 @@
 
   SelectionModeType selectionMode;
+
+  QtInstanceInformationBoard * board;
 };
 
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 15c8a9b3bc531ef54d3a92deddc382002414247c)
@@ -65,8 +65,14 @@
 #include "WorldTime.hpp"
 
-GLWorldView::GLWorldView(QWidget *parent)
-  : QGLView(parent), Observer("GLWorldView"), worldscene(NULL), changesPresent(false), needsRedraw(false)
-{
-  worldscene = new GLWorldScene(this);
+GLWorldView::GLWorldView(
+    QtInstanceInformationBoard * _board,
+    QWidget *parent) :
+  QGLView(parent),
+  Observer("GLWorldView"),
+  worldscene(NULL),
+  changesPresent(false),
+  needsRedraw(false)
+{
+  worldscene = new GLWorldScene(_board, this);
 
   setOption(QGLView::ObjectPicking, true);
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision 026bef57c11cf9d09d87056dab378f0b357f2a4c)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision 15c8a9b3bc531ef54d3a92deddc382002414247c)
@@ -28,4 +28,6 @@
 class QtSelectionChangedAgent;
 
+class QtInstanceInformationBoard;
+
 /** This class is the view on the 3D representation of the World, i.e. the whole
  * of all molecules (consisting of atoms).
@@ -36,5 +38,7 @@
   Q_OBJECT
 public:
-  GLWorldView(QWidget *parent=0);
+  GLWorldView(
+      QtInstanceInformationBoard * _board,
+      QWidget *parent=0);
   virtual ~GLWorldView();
 
