Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision f01769bf04baacedde88443ce16ab2f2dd809f30)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 084304e6dfbb4c6567df7dac36d3cb925b2a0b8e)
@@ -266,4 +266,5 @@
       atomicid = (*atomiter)->getId();
       atomInserted(atomicid);
+      InitAtomNodesSet.insert(atomicid);
 
       // create bond objects in scene
@@ -542,27 +543,40 @@
 {
   LOG(3, "INFO: GLWorldScene: Received signal atomInserted for atom "+toString(_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, SIGNAL(changeAtomId(GLMoleculeObject_atom*, int, int)));
-
-  isBoundingBoxUptodate = false;
-
-  if (m_objectId  == -1)
-    setObjectId(_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, SIGNAL(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 f01769bf04baacedde88443ce16ab2f2dd809f30)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp	(revision 084304e6dfbb4c6567df7dac36d3cb925b2a0b8e)
@@ -101,4 +101,7 @@
   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 f01769bf04baacedde88443ce16ab2f2dd809f30)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 084304e6dfbb4c6567df7dac36d3cb925b2a0b8e)
@@ -276,5 +276,5 @@
 void GLWorldScene::moleculeInserted(const moleculeId_t _id)
 {
-  LOG(3, "INFO: GLWorldScene: Received signal moleculeRemoved for molecule "+toString(_id)+".");
+  LOG(3, "INFO: GLWorldScene: Received signal moleculeInserted for molecule "+toString(_id)+".");
   MoleculeNodeMap::const_iterator iter = MoleculesinSceneMap.find(_id);
   ASSERT( iter == MoleculesinSceneMap.end(),
