Index: src/World.cpp
===================================================================
--- src/World.cpp	(revision f714763c1502a8d2a462b4e01ad3c708f9fa17cf)
+++ src/World.cpp	(revision fb95a5645025c4f145cfcbf9ef41a1f12c86a506)
@@ -82,5 +82,7 @@
 
 atom* World::_lastchangedatom = NULL;
+atomId_t World::_lastchangedatomid = -1;
 molecule* World::_lastchangedmol = NULL;
+moleculeId_t World::_lastchangedmolid = -1;
 
 /******************************* getter and setter ************************/
@@ -317,4 +319,5 @@
   molecules[mol->getId()] = mol;
   _lastchangedmol = mol;
+  _lastchangedmolid = mol->getId();
   NOTIFY(MoleculeInserted);
   return mol;
@@ -333,4 +336,5 @@
     OBSERVE;
     _lastchangedmol = mol;
+    _lastchangedmolid = mol->getId();
     NOTIFY(MoleculeRemoved);
   }
@@ -353,4 +357,5 @@
   atoms[res->getId()] = res;
   _lastchangedatom = res;
+  _lastchangedatomid = res->getId();
   NOTIFY(AtomInserted);
   return res;
@@ -365,4 +370,5 @@
   atoms[atom->getId()] = atom;
   _lastchangedatom = atom;
+  _lastchangedatomid = atom->getId();
   NOTIFY(AtomInserted);
   return atom->getId();
@@ -381,4 +387,5 @@
     OBSERVE;
     _lastchangedatom = atom;
+    _lastchangedatomid = atom->getId();
     NOTIFY(AtomRemoved);
   }
Index: src/World.hpp
===================================================================
--- src/World.hpp	(revision f714763c1502a8d2a462b4e01ad3c708f9fa17cf)
+++ src/World.hpp	(revision fb95a5645025c4f145cfcbf9ef41a1f12c86a506)
@@ -126,4 +126,10 @@
   template <class T> const T* lastChanged() const
   { return detail::lastChanged<T>(); }
+
+  const atomId_t lastChangedAtomId() const
+  { return _lastchangedatomid; }
+
+  const moleculeId_t lastChangedMolId() const
+  { return _lastchangedmolid; }
 
     /***** getter and setter *****/
@@ -520,5 +526,7 @@
   friend const molecule *detail::lastChanged<molecule>();
   static atom *_lastchangedatom;
+  static atomId_t _lastchangedatomid;
   static molecule*_lastchangedmol;
+  static moleculeId_t _lastchangedmolid;
 
   BondGraph *BG;
Index: src/molecule.cpp
===================================================================
--- src/molecule.cpp	(revision f714763c1502a8d2a462b4e01ad3c708f9fa17cf)
+++ src/molecule.cpp	(revision fb95a5645025c4f145cfcbf9ef41a1f12c86a506)
@@ -83,4 +83,6 @@
   BondCount(this,boost::bind(&molecule::doCountBonds,this),"BondCount"),
   atomIdPool(1, 20, 100),
+  _lastchangedatom(NULL),
+  _lastchangedatomid(-1),
   last_atom(0)
 {
@@ -153,5 +155,4 @@
   OBSERVE;
   if(atomIdPool.reserveId(newNr)){
-    _lastchangedatom = target;
     NOTIFY(AtomNrChanged);
     if (oldNr != -1)  // -1 is reserved and indicates no number
@@ -161,4 +162,6 @@
         "molecule::changeAtomNr() - given target is NULL, cannot set Nr or name.");
     target->setNr(newNr);
+    _lastchangedatom = target;
+    _lastchangedatomid = target->getId();
     InsertLocalToGlobalId(target);
     setAtomName(target);
@@ -222,4 +225,5 @@
   {
     _lastchangedatom = _atom;
+    _lastchangedatomid = _atom->getId();
     NOTIFY(AtomRemoved);
   }
@@ -242,4 +246,5 @@
   {
     _lastchangedatom = key;
+    _lastchangedatomid = key->getId();
     NOTIFY(AtomRemoved);
   }
@@ -266,4 +271,5 @@
   NOTIFY(AtomInserted);
   _lastchangedatom = key;
+  _lastchangedatomid = key->getId();
   std::pair<iterator,bool> res = atomIds.insert(key->getId());
   if (res.second) { // push atom if went well
@@ -1056,4 +1062,5 @@
         // emit others about one of our atoms moved
         _lastchangedatom = const_cast<atom *>(_atom);
+        _lastchangedatomid = _atom->getId();
         OBSERVE;
         NOTIFY(AtomMoved);
@@ -1064,4 +1071,5 @@
         // emit others about one of our atoms moved
         _lastchangedatom = const_cast<atom *>(_atom);
+        _lastchangedatomid = _atom->getId();
         OBSERVE;
         NOTIFY(FormulaChanged);
Index: src/molecule.hpp
===================================================================
--- src/molecule.hpp	(revision f714763c1502a8d2a462b4e01ad3c708f9fa17cf)
+++ src/molecule.hpp	(revision fb95a5645025c4f145cfcbf9ef41a1f12c86a506)
@@ -122,4 +122,6 @@
   const atom* lastChanged() const
   { return _lastchangedatom; }
+  const atomId_t lastChangedAtomId() const
+  { return _lastchangedatomid; }
 
 public:
@@ -344,6 +346,6 @@
 
 private:
-  friend const atom *detail::lastChanged<atom>();
-  atom *_lastchangedatom;
+  atom* _lastchangedatom;
+  atomId_t _lastchangedatomid;
 
   int last_atom; //!< number given to last atom
