Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision c6751895e249ac3b8b055b048e09886c9e6b6faf)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 53059ec2dd3238b5576917fc5f3b886c51b6c88d)
@@ -75,7 +75,4 @@
         Runner != molecules.end();
         Runner++) {
-
-      // create molecule
-      moleculeInserted(*Runner);
 
       for (molecule::const_iterator atomiter = (*Runner)->begin();
@@ -140,37 +137,62 @@
 }
 
-/** Adds a molecule to the scene.
- *
- * @param _molecule molecule to add
- */
-void GLWorldScene::moleculeInserted(const molecule*_molecule)
-{
-  LOG(3, "INFO: GLWorldScene: Received signal moleculeInserted for atom "+toString(_molecule->getId())+".");
-  GLMoleculeObject_molecule *molObject = new GLMoleculeObject_molecule(this, _molecule);
+/** ....
+ *
+ */
+void GLWorldScene::worldSelectionChanged()
+{
+  LOG(3, "INFO: GLWorldScene: Received signal selectionChanged.");
+
+  const std::vector<molecule*> &molecules = World::getInstance().getAllMolecules();
+
+  if (molecules.size() > 0) {
+    for (std::vector<molecule*>::const_iterator Runner = molecules.begin();
+        Runner != molecules.end();
+        Runner++) {
+
+      MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find((*Runner)->getId());
+      bool isSelected = World::getInstance().isSelected(*Runner);
+
+      // molecule selected but not in scene?
+      if (isSelected && (iter == MoleculesinSceneMap.end())){
+        // -> create new mesh
+        GLMoleculeObject_molecule *molObject = new GLMoleculeObject_molecule(this, *Runner);
+        MoleculesinSceneMap.insert( make_pair((*Runner)->getId(), molObject) );
+        connect (molObject, SIGNAL(changed()), this, SIGNAL(changed()));
+        connect (molObject, SIGNAL(selectionChanged()), this, SIGNAL(changed()));
+        connect (molObject, SIGNAL(selectionChanged()), this, SIGNAL(changed()));
+        emit changed();
+        emit changeOccured();
+      }
+
+      // molecule not selected but in scene?
+      if (!isSelected && (iter != MoleculesinSceneMap.end())){
+        // -> remove from scene
+        moleculeRemoved(*Runner);
+      }
+
+    }
+  }
+}
+
+/** Removes a molecule from the scene.
+ *
+ * @param _molecule molecule to remove
+ */
+void GLWorldScene::moleculeRemoved(const molecule *_molecule)
+{
+  LOG(3, "INFO: GLWorldScene: Received signal moleculeRemoved for molecule "+toString(_molecule->getId())+".");
   MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_molecule->getId());
-  ASSERT(iter == MoleculesinSceneMap.end(),
-      "GLWorldScene::moleculeInserted() - same molecule "+_molecule->getName()+" added again.");
-  MoleculesinSceneMap.insert( make_pair(_molecule->getId(), molObject) );
-  connect (molObject, SIGNAL(changed()), this, SIGNAL(changed()));
-  connect (molObject, SIGNAL(selectionChanged()), this, SIGNAL(changed()));
-  connect (molObject, SIGNAL(selectionChanged()), this, SIGNAL(changed()));
-  emit changeOccured();
-}
-
-/** Removes a molecule from the scene.
- *
- * @param _molecule molecule to remove
- */
-void GLWorldScene::moleculeRemoved(const molecule *_molecule)
-{
-  LOG(3, "INFO: GLWorldScene: Received signal moleculeRemoved for atom "+toString(_molecule->getId())+".");
-  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_molecule->getId());
-  ASSERT(iter != MoleculesinSceneMap.end(),
-      "GLWorldScene::moleculeRemoved() - molecule "+_molecule->getName()+" not on display.");
-  GLMoleculeObject_molecule *molObject = iter->second;
-  molObject->disconnect();
-  MoleculesinSceneMap.erase(iter);
-  delete molObject;
-  emit changeOccured();
+
+  // only remove if the molecule is in the scene
+  //  (= is selected)
+  if (iter != MoleculesinSceneMap.end()){
+    GLMoleculeObject_molecule *molObject = iter->second;
+    molObject->disconnect();
+    MoleculesinSceneMap.erase(iter);
+    delete molObject;
+    emit changed();
+    emit changeOccured();
+  }
 }
 
