Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.cpp	(revision a3900675b96bc0f90f73a7fecc419561b8effaa9)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.cpp	(revision 3927ef32aa0c52dd73d5c9a4fe5eccea8715a379)
@@ -97,5 +97,5 @@
   painter->setFaceMaterial(QGL::AllFaces, m_selectionBoxMaterial);
   QVector3DArray array;
-  qreal radius = 0.3f;
+  qreal radius = 1.0;
   array.append(-radius, -radius, -radius); array.append( radius, -radius, -radius);
   array.append( radius, -radius, -radius); array.append( radius,  radius, -radius);
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp	(revision a3900675b96bc0f90f73a7fecc419561b8effaa9)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp	(revision 3927ef32aa0c52dd73d5c9a4fe5eccea8715a379)
@@ -41,5 +41,5 @@
 {
   QGLBuilder builder;
-  builder << QGLSphere(0.5);
+  builder << QGLSphere(2.0);
   QGLSceneNode *n = builder.finalizedSceneNode();
   n->setParent(parent);
@@ -114,5 +114,5 @@
     radius = 0.5;
   }
-  setScale( radius );
+  setScale( radius / 4. );
 }
 
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision a3900675b96bc0f90f73a7fecc419561b8effaa9)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 3927ef32aa0c52dd73d5c9a4fe5eccea8715a379)
@@ -60,8 +60,10 @@
   molref->signOn(this, AtomObservable::ElementChanged);
   molref->signOn(this, AtomObservable::BondsAdded);*/
+  setMaterial(getMaterial(1));
   World::getInstance().signOn(this, World::SelectionChanged);
-  setPosition(QVector3D(0,0,0));
-  setScale(5.0f);
-  setMaterial(getMaterial(1));
+  Shape shape = _molecule->getBoundingShape();
+  Vector v = shape.getCenter();
+  setPosition(QVector3D(v[0], v[1], v[2]));
+  setScale(shape.getRadius() + 0.3); // getBoundingShape() only sees atoms as points, so make the box a bit bigger
 }
 
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision a3900675b96bc0f90f73a7fecc419561b8effaa9)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 3927ef32aa0c52dd73d5c9a4fe5eccea8715a379)
@@ -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();
+  }
 }
 
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision a3900675b96bc0f90f73a7fecc419561b8effaa9)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 3927ef32aa0c52dd73d5c9a4fe5eccea8715a379)
@@ -72,6 +72,6 @@
   void atomInserted(const atom *_atom);
   void atomRemoved(const atom *_atom);
-  void moleculeInserted(const molecule *_molecule);
   void moleculeRemoved(const molecule *_molecule);
+  void worldSelectionChanged();
   void bondInserted(const bond *_bond, const GLMoleculeObject_bond::SideOfBond side);
   void bondRemoved(const atomId_t leftnr, const atomId_t rightnr);
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision a3900675b96bc0f90f73a7fecc419561b8effaa9)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 3927ef32aa0c52dd73d5c9a4fe5eccea8715a379)
@@ -42,5 +42,5 @@
   connect(this, SIGNAL(atomInserted(const atom *)), worldscene, SLOT(atomInserted(const atom *)));
   connect(this, SIGNAL(atomRemoved(const atom *)), worldscene, SLOT(atomRemoved(const atom *)));
-  connect(this, SIGNAL(moleculeInserted(const molecule *)), worldscene, SLOT(moleculeInserted(const molecule *)));
+  connect(this, SIGNAL(worldSelectionChanged()), worldscene, SLOT(worldSelectionChanged()));
   connect(this, SIGNAL(moleculeRemoved(const molecule *)), worldscene, SLOT(moleculeRemoved(const molecule *)));
   connect(this, SIGNAL(changed()), this, SLOT(updateGL()));
@@ -51,6 +51,6 @@
   World::getInstance().signOn(this, World::AtomRemoved);
   World::getInstance().signOn(this, World::AtomPositionChanged);
-  World::getInstance().signOn(this, World::MoleculeInserted);
   World::getInstance().signOn(this, World::MoleculeRemoved);
+  World::getInstance().signOn(this, World::SelectionChanged);
 }
 
@@ -61,6 +61,6 @@
   World::getInstance().signOff(this, World::AtomRemoved);
   World::getInstance().signOff(this, World::AtomPositionChanged);
-  World::getInstance().signOff(this, World::MoleculeInserted);
   World::getInstance().signOff(this, World::MoleculeRemoved);
+  World::getInstance().signOff(this, World::SelectionChanged);
   delete worldscene;
 }
@@ -115,11 +115,10 @@
       break;
     }
-    case World::MoleculeInserted:
+    case World::SelectionChanged:
     {
-      const molecule *_molecule = World::getInstance().lastChanged<molecule>();
 #ifdef LOG_OBSERVER
-      observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that molecule "+toString(_molecule->getId())+" has been inserted.";
+      observerLog().addMessage() << "++ Observer " << observerLog().getName(this) << " received notification that selection has changed.";
 #endif
-      emit moleculeInserted(_molecule);
+      emit worldSelectionChanged();
       break;
     }
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision a3900675b96bc0f90f73a7fecc419561b8effaa9)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision 3927ef32aa0c52dd73d5c9a4fe5eccea8715a379)
@@ -47,6 +47,6 @@
   void atomInserted(const atom *_atom);
   void atomRemoved(const atom *_atom);
-  void moleculeInserted(const molecule *_molecule);
   void moleculeRemoved(const molecule *_molecule);
+  void worldSelectionChanged();
 
 protected:
@@ -59,4 +59,5 @@
 
   bool changesPresent;
+  bool processingSelectionChanged; // workaround to prevent a loop in (atom_iterator <-> observer)
 };
 
