Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision d619338ee65ee4df303696fa8a82dbf27e594f44)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 8923ad833541d0d5da649e21cb7b6537558a282b)
@@ -178,6 +178,4 @@
   m_visible = false;
 
-  init();
-
   connect (this, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SLOT(hoverChangedSignalled(GLMoleculeObject *)));
   connect (this, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SIGNAL(changed()));
@@ -217,6 +215,4 @@
   m_visible = false;
 
-  init();
-
   connect (this, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SLOT(hoverChangedSignalled(GLMoleculeObject *)));
   connect (this, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SIGNAL(changed()));
@@ -244,42 +240,4 @@
   _atom->signOff(this, AtomObservable::BondsAdded);*/
   World::getInstance().signOff(this, World::SelectionChanged);
-}
-
-/** Initialise the WorldScene with molecules and atoms from World.
- *
- */
-void GLMoleculeObject_molecule::init()
-{
-  const molecule * const _molecule = const_cast<const World &>(World::getInstance()).
-      getMolecule(MoleculeById(moleculeid));
-  if (_molecule == NULL) {
-    ELOG(1, "GLMoleculeObject_molecule cannot init, molecule with "
-        << moleculeid << " has disappeared.");
-    return;
-  }
-  if (_molecule->begin() != _molecule->end()) {
-    int atomicid = -1;
-    for (molecule::const_iterator atomiter = _molecule->begin();
-        atomiter != _molecule->end();
-        atomiter++) {
-      // create atom objects in scene
-      atomicid = (*atomiter)->getId();
-      atomInserted(atomicid);
-      InitAtomNodesSet.insert(atomicid);
-
-      // create bond objects in scene
-      const BondList &bondlist = (*atomiter)->getListOfBonds();
-      for (BondList::const_iterator bonditer = bondlist.begin();
-          bonditer != bondlist.end();
-          ++bonditer) {
-        const bond::ptr _bond = *bonditer;
-        const GLMoleculeObject_bond::SideOfBond side = (_bond->leftatom == *atomiter) ?
-            GLMoleculeObject_bond::left : GLMoleculeObject_bond::right;
-        bondInserted(_bond, side);
-      }
-    }
-    // set id to one of the atom's as either mol or atoms is present at the same time
-    setObjectId(atomicid);
-  }
 }
 
@@ -320,32 +278,4 @@
       addAtomBonds(_bond, side);
       addAtomBonds(_bond, otherside);
-    }
-  }
-}
-
-void GLMoleculeObject_molecule::reinit()
-{
-  const molecule * const _molecule = const_cast<const World &>(World::getInstance()).
-      getMolecule(MoleculeById(moleculeid));
-  if (_molecule == NULL) {
-    ELOG(1, "GLMoleculeObject_molecule cannot reinit, molecule with "
-        << moleculeid << " has disappeared.");
-    return;
-  }
-  if (_molecule->getAtomCount() > 0) {
-    for (molecule::const_iterator atomiter = _molecule->begin();
-        atomiter != _molecule->end();
-        atomiter++) {
-      // check whether atom already exists
-      const atomId_t atomid = (*atomiter)->getId();
-      const bool atom_present = AtomsinSceneMap.count(atomid);
-      if (!atom_present)
-        atomInserted((*atomiter)->getId());
-      else
-        AtomsinSceneMap[atomid]->resetPosition();
-
-
-      // create bond objects in scene
-      addAtomBonds(*atomiter);
     }
   }
@@ -543,40 +473,27 @@
 {
   LOG(3, "INFO: GLWorldScene: Received signal atomInserted for atom "+toString(_id)+".");
-  // remove ids if second insertion via update comes in
-  if ((!InitAtomNodesSet.empty()) && (InitAtomNodesSet.find(_id) != InitAtomNodesSet.end())) {
-    // the problem is as follows:
-    // In order to get really all atoms, we first signOn to molecule and then call init()
-    // however, in init() further atoms may have been loaded which are then also
-    // instantiated by init(). Note only that but we also obtain an update() from
-    // molecule itself (because we signOn'd before) that a new atom is to be inserted
-    // hence, this would cause double insertion of the same atom and this has to be
-    // caught
-    InitAtomNodesSet.erase(_id);
-    LOG(4, "Atom with " << _id << " has already been added.");
-  } else {
-    GLMoleculeObject_atom *atomObject = new GLMoleculeObject_atom(GLMoleculeObject::meshSphere, this, _id);
-    ASSERT( atomObject != NULL,
-        "GLMoleculeObject_molecule::atomInserted - could not create atom object for "+toString(_id));
-    AtomNodeMap::iterator iter = AtomsinSceneMap.find(_id);
-    ASSERT(iter == AtomsinSceneMap.end(),
-        "GLMoleculeObject_molecule::atomInserted - same atom with id "+toString(_id)+" added again.");
-    AtomsinSceneMap.insert( make_pair(_id, atomObject) );
-
-    qRegisterMetaType<atomId_t>("atomId_t");
-    qRegisterMetaType<bond::ptr>("bond::ptr");
-    qRegisterMetaType<GLMoleculeObject_bond::SideOfBond>("GLMoleculeObject_bond::SideOfBond");
-    connect (atomObject, SIGNAL(clicked(atomId_t)), this, SIGNAL(atomClicked(atomId_t)));
-    connect (atomObject, SIGNAL(changed()), this, SIGNAL(changed()));
-    connect (atomObject, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SIGNAL(changed()));
-    connect (atomObject, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SLOT(hoverChangedSignalled(GLMoleculeObject *)));
-    connect (atomObject, SIGNAL(selectionChanged()), this, SIGNAL(changed()));
-    connect (atomObject, SIGNAL(BondsInserted(const bond::ptr , const GLMoleculeObject_bond::SideOfBond)), this, SLOT(bondInserted(const bond::ptr , const GLMoleculeObject_bond::SideOfBond)));
-    connect (atomObject, SIGNAL(indexChanged(GLMoleculeObject_atom*, int, int)), this, SLOT(changeAtomId(GLMoleculeObject_atom*, int, int)));
-
-    isBoundingBoxUptodate = false;
-
-    if (m_objectId  == -1)
-      setObjectId(_id);
-  }
+  GLMoleculeObject_atom *atomObject = new GLMoleculeObject_atom(GLMoleculeObject::meshSphere, this, _id);
+  ASSERT( atomObject != NULL,
+      "GLMoleculeObject_molecule::atomInserted - could not create atom object for "+toString(_id));
+  AtomNodeMap::iterator iter = AtomsinSceneMap.find(_id);
+  ASSERT(iter == AtomsinSceneMap.end(),
+      "GLMoleculeObject_molecule::atomInserted - same atom with id "+toString(_id)+" added again.");
+  AtomsinSceneMap.insert( make_pair(_id, atomObject) );
+
+  qRegisterMetaType<atomId_t>("atomId_t");
+  qRegisterMetaType<bond::ptr>("bond::ptr");
+  qRegisterMetaType<GLMoleculeObject_bond::SideOfBond>("GLMoleculeObject_bond::SideOfBond");
+  connect (atomObject, SIGNAL(clicked(atomId_t)), this, SIGNAL(atomClicked(atomId_t)));
+  connect (atomObject, SIGNAL(changed()), this, SIGNAL(changed()));
+  connect (atomObject, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SIGNAL(changed()));
+  connect (atomObject, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SLOT(hoverChangedSignalled(GLMoleculeObject *)));
+  connect (atomObject, SIGNAL(selectionChanged()), this, SIGNAL(changed()));
+  connect (atomObject, SIGNAL(BondsInserted(const bond::ptr , const GLMoleculeObject_bond::SideOfBond)), this, SLOT(bondInserted(const bond::ptr , const GLMoleculeObject_bond::SideOfBond)));
+  connect (atomObject, SIGNAL(indexChanged(GLMoleculeObject_atom*, int, int)), this, SLOT(changeAtomId(GLMoleculeObject_atom*, int, int)));
+
+  isBoundingBoxUptodate = false;
+
+  if (m_objectId  == -1)
+    setObjectId(_id);
 
   // add all bonds
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp	(revision d619338ee65ee4df303696fa8a82dbf27e594f44)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp	(revision 8923ad833541d0d5da649e21cb7b6537558a282b)
@@ -77,7 +77,4 @@
 
 private:
-  void init();
-  void reinit();
-
   void addAtomBonds(
       const bond::ptr &_bond,
@@ -101,7 +98,4 @@
   typedef std::map< atomId_t, GLMoleculeObject_atom* > AtomNodeMap;
   typedef std::map< BondIds , GLMoleculeObject_bond* > BondNodeMap;
-  typedef std::set< atomId_t > InitAtomNodesSet_t;
-  //!> atoms added by init() may also be added by atomsInserted, don't alarm then
-  InitAtomNodesSet_t InitAtomNodesSet;
   AtomNodeMap AtomsinSceneMap;
   BondNodeMap BondsinSceneMap;
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision d619338ee65ee4df303696fa8a82dbf27e594f44)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 8923ad833541d0d5da649e21cb7b6537558a282b)
@@ -107,13 +107,13 @@
 void GLWorldScene::init()
 {
-  const std::vector<const molecule *> &molecules =
-      const_cast<const World &>(World::getInstance()).getAllMolecules();
-
-  for (std::vector<const molecule*>::const_iterator moliter = molecules.begin();
-      moliter != molecules.end();
-      moliter++) {
-    // create molecule objects in scene
-    moleculeInserted((*moliter)->getId());
-  }
+//  const std::vector<const molecule *> &molecules =
+//      const_cast<const World &>(World::getInstance()).getAllMolecules();
+//
+//  for (std::vector<const molecule*>::const_iterator moliter = molecules.begin();
+//      moliter != molecules.end();
+//      moliter++) {
+//    // create molecule objects in scene
+//    moleculeInserted((*moliter)->getId());
+//  }
 }
 
@@ -138,4 +138,17 @@
       moleculeInserted((*moliter)->getId());
   }
+
+  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.begin();
+  for (;iter != MoleculesinSceneMap.end();) {
+    const moleculeId_t molid = iter->first;
+    const molecule * const mol = const_cast<const World &>(World::getInstance()).
+        getMolecule(MoleculeById(molid));
+    const bool mol_absent = (mol == NULL);
+    // step on to next molecule before possibly removing entry and invalidating iter
+    ++iter;
+    if (mol_absent)
+      moleculeRemoved(molid);
+  }
+
 }
 
@@ -226,5 +239,4 @@
   connect (molObject, SIGNAL(atomClicked(atomId_t)), this, SLOT(atomClicked(atomId_t)));
   connect (molObject, SIGNAL(moleculeClicked(moleculeId_t)), this, SLOT(moleculeClicked(moleculeId_t)));
-  connect (molObject, SIGNAL(changeAtomId(GLMoleculeObject_atom *, int, int)), this, SLOT(changeAtomId(GLMoleculeObject_atom *, int, int)));
   connect (molObject, SIGNAL(selectionChanged()), this, SIGNAL(changed()));
   connect (molObject, SIGNAL(selectionChanged()), this, SIGNAL(changed()));
