Index: src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp	(revision 7f185f928e77138d9f68a9af929ddf86c7ed5bf1)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp	(revision 273c8a207d79d5a69b073ffc4c58dd18220aa90b)
@@ -82,5 +82,5 @@
 QtObservedAtom::AtomElementChannels(1, AtomObservable::ElementChanged);
 const Observable::channels_t
-QtObservedAtom::MoleculeIndexChannels(1, AtomObservable::MoleculeChanged);
+QtObservedAtom::MoleculeChangedChannels(1, AtomObservable::MoleculeChanged);
 const Observable::channels_t
 QtObservedAtom::AtomNameChannels(1, AtomObservable::NameChanged);
@@ -120,5 +120,5 @@
   boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, ObservedValue_Index_t> *>(ObservedValues[AtomBonds])->noteCallBackIsGone();
   boost::any_cast<ObservedValue_wCallback<atomicNumber_t, ObservedValue_Index_t> *>(ObservedValues[AtomElement])->noteCallBackIsGone();
-  boost::any_cast<ObservedValue_wCallback<QtObservedMolecule*, ObservedValue_Index_t> *>(ObservedValues[MoleculeIndex])->noteCallBackIsGone();
+  boost::any_cast<ObservedValue_wCallback<QtObservedMolecule*, ObservedValue_Index_t> *>(ObservedValues[MoleculeRef])->noteCallBackIsGone();
   boost::any_cast<ObservedValue_wCallback<std::string, ObservedValue_Index_t> *>(ObservedValues[AtomName])->noteCallBackIsGone();
   boost::any_cast<ObservedValue_wCallback<Vector, ObservedValue_Index_t> *>(ObservedValues[AtomPosition])->noteCallBackIsGone();
@@ -178,12 +178,16 @@
 inline
 #endif
-moleculeId_t QtObservedAtom::updateMoleculeIndex(
+QtObservedMolecule* QtObservedAtom::updateMoleculeRef(
     const atom &_atom)
 {
   if (_atom.getMolecule() != NULL) {
     const moleculeId_t molid = _atom.getMolecule()->getId();
-    return molid;
+    const QtObservedMolecule::ptr mol = board.getObservedMolecule(molid);
+    ASSERT(mol,
+        "QtObservedAtom::updateMoleculeRef() - could not update the ref, "
+        +toString(molid)+" unknown to Instance board?");
+    return mol.get();
   } else {
-    return (moleculeId_t)-1;
+    return (QtObservedMolecule*)NULL;
   }
 }
@@ -340,6 +344,4 @@
   const boost::function<atomicNumber_t ()> AtomElementUpdater(
       boost::bind(&QtObservedAtom::updateElement, boost::cref(*_atomref)));
-  const boost::function<moleculeId_t ()> MoleculeIndexUpdater(
-      boost::bind(&QtObservedAtom::updateMoleculeIndex, this, boost::cref(*_atomref)));
   const boost::function<std::string ()> AtomNameUpdater(
       boost::bind(&QtObservedAtom::updateName, boost::cref(*_atomref)));
@@ -348,4 +350,6 @@
   const boost::function<bool ()> AtomSelectedUpdater(
       boost::bind(&QtObservedAtom::updateSelected, boost::cref(*_atomref)));
+  const boost::function<QtObservedMolecule* ()> MoleculeRefUpdater(
+      boost::bind(&QtObservedAtom::updateMoleculeRef, this, boost::cref(*_atomref)));
 
   _ObservedValues[AtomIndex] = new ObservedValue_wCallback<atomId_t, ObservedValue_Index_t>(
@@ -370,11 +374,4 @@
       AtomElementChannels,
       _subjectKilled);
-  _ObservedValues[MoleculeIndex] = new ObservedValue_wCallback<moleculeId_t, ObservedValue_Index_t>(
-      _atomref,
-      MoleculeIndexUpdater,
-      "AtomMoleculeIndex"+toString(_id),
-      MoleculeIndexUpdater(),
-      MoleculeIndexChannels,
-      _subjectKilled);
   _ObservedValues[AtomName] = new ObservedValue_wCallback<std::string, ObservedValue_Index_t>(
       _atomref,
@@ -398,4 +395,11 @@
       AtomSelectedChannels,
       _subjectKilled);
+  _ObservedValues[MoleculeRef] = new ObservedValue_wCallback<QtObservedMolecule*, ObservedValue_Index_t>(
+      _atomref,
+      MoleculeRefUpdater,
+      "AtomMoleculeIndex"+toString(_id),
+      MoleculeRefUpdater(),
+      MoleculeChangedChannels,
+      _subjectKilled);
 }
 
@@ -406,8 +410,8 @@
   delete boost::any_cast<ObservedValue_wCallback<ListOfBonds_t, ObservedValue_Index_t> *>(_ObservedValues[AtomBonds]);
   delete boost::any_cast<ObservedValue_wCallback<atomicNumber_t, ObservedValue_Index_t> *>(_ObservedValues[AtomElement]);
-  delete boost::any_cast<ObservedValue_wCallback<moleculeId_t, ObservedValue_Index_t> *>(_ObservedValues[MoleculeIndex]);
   delete boost::any_cast<ObservedValue_wCallback<std::string, ObservedValue_Index_t> *>(_ObservedValues[AtomName]);
   delete boost::any_cast<ObservedValue_wCallback<Vector, ObservedValue_Index_t> *>(_ObservedValues[AtomPosition]);
   delete boost::any_cast<ObservedValue_wCallback<bool, ObservedValue_Index_t> *>(_ObservedValues[AtomSelected]);
+  delete boost::any_cast<ObservedValue_wCallback<QtObservedMolecule*, ObservedValue_Index_t> *>(_ObservedValues[MoleculeRef]);
   _ObservedValues.clear();
 }
@@ -435,9 +439,4 @@
 }
 
-const moleculeId_t& QtObservedAtom::getMoleculeIndex() const
-{
-  return boost::any_cast<ObservedValue_wCallback<moleculeId_t, ObservedValue_Index_t> *>(ObservedValues[MoleculeIndex])->get();
-}
-
 const std::string& QtObservedAtom::getAtomName() const
 {
@@ -454,2 +453,7 @@
   return boost::any_cast<ObservedValue_wCallback<bool, ObservedValue_Index_t> *>(ObservedValues[AtomSelected])->get();
 }
+
+const QtObservedMolecule* const QtObservedAtom::getMoleculeRef() const
+{
+  return boost::any_cast<ObservedValue_wCallback<QtObservedMolecule*, ObservedValue_Index_t> *>(ObservedValues[MoleculeRef])->get();
+}
Index: src/UIElements/Qt4/InstanceBoard/QtObservedAtom.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedAtom.hpp	(revision 7f185f928e77138d9f68a9af929ddf86c7ed5bf1)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedAtom.hpp	(revision 273c8a207d79d5a69b073ffc4c58dd18220aa90b)
@@ -136,9 +136,9 @@
   const Vector& getAtomPosition() const;
 
-  /** Getter to atom's molecule index contained in \a ObservedValues.
-   *
-   * \return atom's molecule index
-   */
-  const moleculeId_t& getMoleculeIndex() const;
+  /** Getter to the observed state of the associated molecule.
+   *
+   * \return const ref to observed state of molecule
+   */
+  const QtObservedMolecule* const getMoleculeRef() const;
 
   /** Getter to atom's selected status.
@@ -171,5 +171,5 @@
   static ListOfBonds_t updateBonds(const atom &_atom);
   static atomicNumber_t updateElement(const atom &_atom);
-  moleculeId_t updateMoleculeIndex(const atom &_atom);
+  QtObservedMolecule* updateMoleculeRef(const atom &_atom);
   static std::string updateName(const atom &_atom);
   static Vector updatePosition(const atom &_atom);
@@ -184,6 +184,4 @@
     //!> contains the current atom element
     AtomElement,
-    //!> contains the current atom's molecule index
-    MoleculeIndex,
     //!> contains the current atom position
     AtomName,
@@ -192,4 +190,6 @@
     //!> contains the current atom's selection status
     AtomSelected,
+    //!> contains the current atom's molecule index
+    MoleculeRef,
     //!> gives the size of the enumeration
     MAX_ObservedTypes
@@ -248,5 +248,5 @@
   static const Observable::channels_t AtomElementChannels;
   //!> list of channels when molecule index needs to update
-  static const Observable::channels_t MoleculeIndexChannels;
+  static const Observable::channels_t MoleculeChangedChannels;
   //!> list of channels when name needs to update
   static const Observable::channels_t AtomNameChannels;
Index: src/UIElements/Qt4/InstanceBoard/QtObservedBond.cpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedBond.cpp	(revision 7f185f928e77138d9f68a9af929ddf86c7ed5bf1)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedBond.cpp	(revision 273c8a207d79d5a69b073ffc4c58dd18220aa90b)
@@ -52,28 +52,4 @@
 using namespace boost::assign;
 
-static const Observable::channels_t getAllObservedAtomChannels()
-{
-  Observable::channels_t channels;
-  channels +=
-      AtomObservable::IndexChanged,
-      AtomObservable::ElementChanged,
-      AtomObservable::PositionChanged;
-  return channels;
-}
-
-static const molecule * getMolecule(const bond::ptr _bond)
-{
-  ASSERT( _bond->leftatom->getMolecule() == _bond->rightatom->getMolecule(),
-      "getMolecule() - leftatom and rightatom belong to different molecules.");
-  return _bond->leftatom->getMolecule();
-}
-
-static const molecule * const getMoleculeConst(const bond::ptr _bond)
-{
-  ASSERT( _bond->leftatom->getMolecule() == _bond->rightatom->getMolecule(),
-      "getMolecule() - leftatom and rightatom belong to different molecules.");
-  return _bond->leftatom->getMolecule();
-}
-
 template <class T>
 Observable * const getObservable(const T * _ptr)
@@ -87,11 +63,7 @@
   const QtObservedBond::ObservableCount_t returnlist =
       boost::assign::list_of< QtObservedBond::ObservableCount_t::value_type >
-            ( getObservable(_bond.get()), 1)
-            ( getObservable(_bond->leftatom), getAllObservedAtomChannels().size())
-            ( getObservable(_bond->rightatom), getAllObservedAtomChannels().size())
-            ( getObservable(getMolecule(_bond)), 1);
+            ( getObservable(_bond.get()), 1);
   return returnlist;
 }
-
 
 // static entities
@@ -388,5 +360,8 @@
 const moleculeId_t QtObservedBond::getLeftMoleculeIndex() const
 {
-  return leftatom->getMoleculeIndex();
+  if (leftatom->getMoleculeRef() != NULL)
+    return leftatom->getMoleculeRef()->getMolIndex();
+  else
+    return (moleculeId_t)-1;
 }
 
@@ -408,4 +383,7 @@
 const moleculeId_t QtObservedBond::getRightMoleculeIndex() const
 {
-  return rightatom->getMoleculeIndex();
-}
+  if (rightatom->getMoleculeRef() != NULL)
+    return rightatom->getMoleculeRef()->getMolIndex();
+  else
+    return (moleculeId_t)-1;
+}
Index: src/UIElements/Views/Qt4/QtInfoBox.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtInfoBox.cpp	(revision 7f185f928e77138d9f68a9af929ddf86c7ed5bf1)
+++ src/UIElements/Views/Qt4/QtInfoBox.cpp	(revision 273c8a207d79d5a69b073ffc4c58dd18220aa90b)
@@ -139,7 +139,6 @@
     connect(curAtom.get(), SIGNAL(atomRemoved()), this, SLOT(clearAtomTab()));
 
-    const moleculeId_t molid = curAtom->getMoleculeIndex();
-    if (molid != (moleculeId_t)-1) {
-      QtObservedMolecule::ptr curMolecule = board->getObservedMolecule(molid);
+    if (curAtom->getMoleculeRef() != NULL) {
+      QtObservedMolecule::ptr curMolecule = curAtom->getMoleculeRef()->getRef();
       if (curMolecule) {
         page_mol = new QtMoleculeInfoPage(curMolecule, this);
