Index: src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp	(revision 1b6415a5788dfb3c4db5f526ae11cb7c65e04a4c)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp	(revision fe493f0b6a5c03db3a98e1675bb7eb8dab1a974a)
@@ -64,8 +64,10 @@
   channels +=
       AtomObservable::IndexChanged,
-      AtomObservable::PositionChanged,
+      AtomObservable::BondsAdded,
+      AtomObservable::BondsRemoved,
+      AtomObservable::MoleculeChanged,
+      AtomObservable::NameChanged,
       AtomObservable::ElementChanged,
-      AtomObservable::BondsAdded,
-      AtomObservable::BondsRemoved;
+      AtomObservable::PositionChanged;
   return channels;
 }
@@ -75,9 +77,13 @@
 QtObservedAtom::AtomIndexChannels(1, AtomObservable::IndexChanged);
 const Observable::channels_t
+QtObservedAtom::AtomBondsChannels(getAtomBondsChannels());
+const Observable::channels_t
+QtObservedAtom::AtomElementChannels(1, AtomObservable::ElementChanged);
+const Observable::channels_t
+QtObservedAtom::AtomMoleculeIndexChannels(1, AtomObservable::MoleculeChanged);
+const Observable::channels_t
+QtObservedAtom::AtomNameChannels(1, AtomObservable::NameChanged);
+const Observable::channels_t
 QtObservedAtom::AtomPositionChannels(1, AtomObservable::PositionChanged);
-const Observable::channels_t
-QtObservedAtom::AtomElementChannels(1, AtomObservable::ElementChanged);
-const Observable::channels_t
-QtObservedAtom::AtomBondsChannels(getAtomBondsChannels());
 
 QtObservedAtom::QtObservedAtom(
@@ -120,26 +126,4 @@
 }
 
-Vector QtObservedAtom::updatePosition(
-    const boost::function<const atomId_t ()> &_getAtomIndex)
-{
-  const atom * const _atom = getAtomConst(_getAtomIndex());
-  if (_atom != NULL) {
-    return _atom->getPosition();
-  } else {
-    return zeroVec;
-  }
-}
-
-atomicNumber_t QtObservedAtom::updateElement(
-    const boost::function<const atomId_t ()> &_getAtomIndex)
-{
-  const atom * const _atom = getAtomConst(_getAtomIndex());
-  if (_atom != NULL) {
-    return _atom->getElementNo();
-  } else {
-    return (atomicNumber_t)-1;
-  }
-}
-
 QtObservedAtom::ListOfBonds_t QtObservedAtom::updateBonds(
     const boost::function<const atomId_t ()> &_getAtomIndex)
@@ -160,4 +144,48 @@
 }
 
+atomicNumber_t QtObservedAtom::updateElement(
+    const boost::function<const atomId_t ()> &_getAtomIndex)
+{
+  const atom * const _atom = getAtomConst(_getAtomIndex());
+  if (_atom != NULL) {
+    return _atom->getElementNo();
+  } else {
+    return (atomicNumber_t)-1;
+  }
+}
+
+moleculeId_t QtObservedAtom::updateMoleculeIndex(
+    const boost::function<const atomId_t ()> &_getAtomIndex)
+{
+  const atom * const _atom = getAtomConst(_getAtomIndex());
+  if ((_atom != NULL) && (_atom->getMolecule() != NULL)) {
+    return _atom->getMolecule()->getId();
+  } else {
+    return (moleculeId_t)0;
+  }
+}
+
+std::string QtObservedAtom::updateName(
+    const boost::function<const atomId_t ()> &_getAtomIndex)
+{
+  const atom * const _atom = getAtomConst(_getAtomIndex());
+  if (_atom != NULL) {
+    return _atom->getName();
+  } else {
+    return std::string("");
+  }
+}
+
+Vector QtObservedAtom::updatePosition(
+    const boost::function<const atomId_t ()> &_getAtomIndex)
+{
+  const atom * const _atom = getAtomConst(_getAtomIndex());
+  if (_atom != NULL) {
+    return _atom->getPosition();
+  } else {
+    return zeroVec;
+  }
+}
+
 void QtObservedAtom::update(Observable *publisher)
 {
@@ -174,4 +202,6 @@
 
     board.markObservedAtomAsDisconnected(getAtomIndex());
+
+    emit atomRemoved();
   }
 }
@@ -184,13 +214,19 @@
       emit indexChanged();
       break;
-    case AtomObservable::PositionChanged:
-      emit positionChanged();
-      break;
-    case AtomObservable::ElementChanged:
-      emit elementChanged();
-      break;
     case AtomObservable::BondsAdded:
     case AtomObservable::BondsRemoved:
       emit bondsChanged();
+      break;
+    case AtomObservable::ElementChanged:
+      emit elementChanged();
+      break;
+    case AtomObservable::MoleculeChanged:
+      emit moleculeindexChanged();
+      break;
+    case AtomObservable::NameChanged:
+      emit nameChanged();
+      break;
+    case AtomObservable::PositionChanged:
+      emit positionChanged();
       break;
     default:
@@ -264,11 +300,47 @@
 
   // fill ObservedValues: then all the other that need index
+  const boost::function<ListOfBonds_t ()> AtomBondsUpdater(
+      boost::bind(&QtObservedAtom::updateBonds, AtomIndexGetter));
+  const boost::function<atomicNumber_t ()> AtomElementUpdater(
+      boost::bind(&QtObservedAtom::updateElement, AtomIndexGetter));
+  const boost::function<moleculeId_t ()> AtomMoleculeIndexUpdater(
+      boost::bind(&QtObservedAtom::updateMoleculeIndex, AtomIndexGetter));
+  const boost::function<std::string ()> AtomNameUpdater(
+      boost::bind(&QtObservedAtom::updateName, AtomIndexGetter));
   const boost::function<Vector ()> AtomPositionUpdater(
       boost::bind(&QtObservedAtom::updatePosition, AtomIndexGetter));
-  const boost::function<atomicNumber_t ()> AtomElementUpdater(
-      boost::bind(&QtObservedAtom::updateElement, AtomIndexGetter));
-  const boost::function<ListOfBonds_t ()> AtomBondsUpdater(
-      boost::bind(&QtObservedAtom::updateBonds, AtomIndexGetter));
-
+
+  _ObservedValues[AtomBonds] = new ObservedValue_wCallback<ListOfBonds_t, atomId_t>(
+      _atomref,
+      AtomBondsUpdater,
+      "AtomBonds_"+toString(_id),
+      AtomBondsUpdater(),
+      AtomBondsChannels,
+      _subjectKilled,
+      AtomIndexGetter);
+  _ObservedValues[AtomElement] = new ObservedValue_wCallback<atomicNumber_t, atomId_t>(
+      _atomref,
+      AtomElementUpdater,
+      "AtomElement"+toString(_id),
+      AtomElementUpdater(),
+      AtomElementChannels,
+      _subjectKilled,
+      AtomIndexGetter);
+  _ObservedValues[AtomMoleculeIndex] = new ObservedValue_wCallback<moleculeId_t, atomId_t>(
+      _atomref,
+      AtomMoleculeIndexUpdater,
+      "AtomMoleculeIndex"+toString(_id),
+      AtomMoleculeIndexUpdater(),
+      AtomMoleculeIndexChannels,
+      _subjectKilled,
+      AtomIndexGetter);
+  _ObservedValues[AtomName] = new ObservedValue_wCallback<std::string, atomId_t>(
+      _atomref,
+      AtomNameUpdater,
+      "AtomName"+toString(_id),
+      AtomNameUpdater(),
+      AtomNameChannels,
+      _subjectKilled,
+      AtomIndexGetter);
   _ObservedValues[AtomPosition] = new ObservedValue_wCallback<Vector, atomId_t>(
       _atomref,
@@ -279,20 +351,4 @@
       _subjectKilled,
       AtomIndexGetter);
-  _ObservedValues[AtomElement] = new ObservedValue_wCallback<atomicNumber_t, atomId_t>(
-      _atomref,
-      AtomElementUpdater,
-      "AtomElement"+toString(_id),
-      AtomElementUpdater(),
-      AtomElementChannels,
-      _subjectKilled,
-      AtomIndexGetter);
-  _ObservedValues[AtomBonds] = new ObservedValue_wCallback<ListOfBonds_t, atomId_t>(
-      _atomref,
-      AtomBondsUpdater,
-      "AtomBonds_"+toString(_id),
-      AtomBondsUpdater(),
-      AtomBondsChannels,
-      _subjectKilled,
-      AtomIndexGetter);
 }
 
@@ -301,7 +357,9 @@
 {
   delete boost::any_cast<ObservedValue_wCallback<atomId_t> *>(_ObservedValues[AtomIndex]);
+  delete boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, atomId_t> *>(_ObservedValues[AtomBonds]);
+  delete boost::any_cast<ObservedValue_wCallback<atomicNumber_t, atomId_t> *>(_ObservedValues[AtomElement]);
+  delete boost::any_cast<ObservedValue_wCallback<moleculeId_t, atomId_t> *>(_ObservedValues[AtomMoleculeIndex]);
+  delete boost::any_cast<ObservedValue_wCallback<std::string, atomId_t> *>(_ObservedValues[AtomName]);
   delete boost::any_cast<ObservedValue_wCallback<Vector, atomId_t> *>(_ObservedValues[AtomPosition]);
-  delete boost::any_cast<ObservedValue_wCallback<atomicNumber_t, atomId_t> *>(_ObservedValues[AtomElement]);
-  delete boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, atomId_t> *>(_ObservedValues[AtomBonds]);
   _ObservedValues.clear();
 }
@@ -312,16 +370,26 @@
 }
 
+QtObservedAtom::ListOfBonds_t QtObservedAtom::getAtomBonds() const
+{
+  return boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, atomId_t> *>(ObservedValues[AtomBonds])->get();
+}
+
+atomicNumber_t QtObservedAtom::getAtomElement() const
+{
+  return boost::any_cast<ObservedValue_wCallback<atomicNumber_t, atomId_t> *>(ObservedValues[AtomElement])->get();
+}
+
+moleculeId_t QtObservedAtom::getAtomMoleculeIndex() const
+{
+  return boost::any_cast<ObservedValue_wCallback<moleculeId_t, atomId_t> *>(ObservedValues[AtomMoleculeIndex])->get();
+}
+
+std::string QtObservedAtom::getAtomName() const
+{
+  return boost::any_cast<ObservedValue_wCallback<std::string, atomId_t> *>(ObservedValues[AtomName])->get();
+}
+
 Vector QtObservedAtom::getAtomPosition() const
 {
   return boost::any_cast<ObservedValue_wCallback<Vector, atomId_t> *>(ObservedValues[AtomPosition])->get();
 }
-
-atomicNumber_t QtObservedAtom::getAtomElement() const
-{
-  return boost::any_cast<ObservedValue_wCallback<atomicNumber_t, atomId_t> *>(ObservedValues[AtomElement])->get();
-}
-
-QtObservedAtom::ListOfBonds_t QtObservedAtom::getAtomBonds() const
-{
-  return boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, atomId_t> *>(ObservedValues[AtomBonds])->get();
-}
Index: src/UIElements/Qt4/InstanceBoard/QtObservedAtom.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedAtom.hpp	(revision 1b6415a5788dfb3c4db5f526ae11cb7c65e04a4c)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedAtom.hpp	(revision fe493f0b6a5c03db3a98e1675bb7eb8dab1a974a)
@@ -89,16 +89,4 @@
   atomId_t getAtomIndex() const;
 
-  /** Getter to atom position contained in \a ObservedValues.
-   *
-   * \return atom's position
-   */
-  Vector getAtomPosition() const;
-
-  /** Getter to atom element contained in \a ObservedValues.
-   *
-   * \return atom's elemnt
-   */
-  atomicNumber_t getAtomElement() const;
-
   //!> typedef for list of bonds, defined by pairs of atom ids
   typedef std::vector< std::pair<atomId_t, atomId_t> > ListOfBonds_t;
@@ -110,9 +98,36 @@
   ListOfBonds_t getAtomBonds() const;
 
+  /** Getter to atom element contained in \a ObservedValues.
+   *
+   * \return atom's element
+   */
+  atomicNumber_t getAtomElement() const;
+
+  /** Getter to atom name contained in \a ObservedValues.
+   *
+   * \return atom's name
+   */
+  std::string getAtomName() const;
+
+  /** Getter to atom position contained in \a ObservedValues.
+   *
+   * \return atom's position
+   */
+  Vector getAtomPosition() const;
+
+  /** Getter to atom's molecule index contained in \a ObservedValues.
+   *
+   * \return atom's molecule index
+   */
+  moleculeId_t getAtomMoleculeIndex() const;
+
 signals:
   void indexChanged();
+  void bondsChanged();
+  void elementChanged();
+  void moleculeindexChanged();
+  void nameChanged();
   void positionChanged();
-  void elementChanged();
-  void bondsChanged();
+  void atomRemoved();
 
 //private slots:
@@ -127,9 +142,13 @@
 private:
   static atomId_t updateIndex();
+  static ListOfBonds_t updateBonds(
+      const boost::function<const atomId_t ()> &_getAtomIndex);
+  static atomicNumber_t updateElement(
+      const boost::function<const atomId_t ()> &_getAtomIndex);
+  static moleculeId_t updateMoleculeIndex(
+      const boost::function<const atomId_t ()> &_getAtomIndex);
+  static std::string updateName(
+      const boost::function<const atomId_t ()> &_getAtomIndex);
   static Vector updatePosition(
-      const boost::function<const atomId_t ()> &_getAtomIndex);
-  static atomicNumber_t updateElement(
-      const boost::function<const atomId_t ()> &_getAtomIndex);
-  static ListOfBonds_t updateBonds(
       const boost::function<const atomId_t ()> &_getAtomIndex);
 
@@ -138,10 +157,14 @@
     //!> contains the current atom index
     AtomIndex,
+    //!> contains the current set of bonds atoms for the atom
+    AtomBonds,
+    //!> contains the current atom element
+    AtomElement,
+    //!> contains the current atom's molecule index
+    AtomMoleculeIndex,
+    //!> contains the current atom position
+    AtomName,
     //!> contains the current atom position
     AtomPosition,
-    //!> contains the current atom element
-    AtomElement,
-    //!> contains the current set of bonds atoms fort the atom
-    AtomBonds,
     //!> gives the size of the enumeration
     MAX_ObservedTypes
@@ -175,10 +198,14 @@
   //!> list of channels when index needs to update
   static const Observable::channels_t AtomIndexChannels;
+  //!> list of channels when bonds needs to update
+  static const Observable::channels_t AtomBondsChannels;
+  //!> list of channels when element needs to update
+  static const Observable::channels_t AtomElementChannels;
+  //!> list of channels when molecule index needs to update
+  static const Observable::channels_t AtomMoleculeIndexChannels;
+  //!> list of channels when name needs to update
+  static const Observable::channels_t AtomNameChannels;
   //!> list of channels when position needs to update
   static const Observable::channels_t AtomPositionChannels;
-  //!> list of channels when element needs to update
-  static const Observable::channels_t AtomElementChannels;
-  //!> list of channels when bonds needs to update
-  static const Observable::channels_t AtomBondsChannels;
 
   //!> we get multiple subjectKilled(), count and call callback() only on last
