Index: src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.cpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.cpp	(revision 59eabc83f7f01a0f2797b83aea97182aa3c14b71)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.cpp	(revision 1a58ce8105d4937e5093f614ba56c6d4688852bc)
@@ -144,5 +144,5 @@
           const ObservedValue_Index_t index = static_cast<const Observable *>(_molecule);
           moleculeObservedValues.insert(index, observedmolecule);
-          moleculeids_lookup.insert( std::make_pair(_id, index) );
+          moleculeids_lookup.left.insert( std::make_pair(_id, index) );
           // we need to check for index changes
           LOG(3, "DEBUG: InformationBoard signOn()s to molecule " << _id);
@@ -172,5 +172,5 @@
           const ObservedValue_Index_t index = static_cast<const Observable *>(_atom);
           atomObservedValues.insert(index, observedatom);
-          atomids_lookup.insert( std::make_pair(_id, index) );
+          atomids_lookup.left.insert( std::make_pair(_id, index) );
           // we need to check for index changes
           LOG(3, "DEBUG: InformationBoard signOn()s to atom " << _id);
@@ -196,11 +196,11 @@
         LOG(3, "DEBUG: InformationBoard got IndexChanged from molecule " << molid << " to " << newmoleculeId);
         {
-          typename IdtoIndex_t<moleculeId_t>::iterator iter = moleculeids_lookup.find(molid);
-          ASSERT( iter != moleculeids_lookup.end(),
+          typename IdtoIndex_t<moleculeId_t>::left_iterator iter = moleculeids_lookup.left.find(molid);
+          ASSERT( iter != moleculeids_lookup.left.end(),
               "QtObservedInstanceBoard::recieveNotification() - mol id "
               +toString(molid)+" unknown to lookup.");
           const ObservedValue_Index_t index = iter->second;
-          moleculeids_lookup.erase(iter);
-          moleculeids_lookup.insert( std::pair<moleculeId_t, ObservedValue_Index_t>(newmoleculeId, index) );
+          moleculeids_lookup.left.erase(iter);
+          moleculeids_lookup.left.insert( std::pair<moleculeId_t, ObservedValue_Index_t>(newmoleculeId, index) );
         }
         // no need update SignedOn, ref does not change
@@ -220,11 +220,11 @@
         LOG(3, "DEBUG: InformationBoard got IndexChanged from atom " << oldatomId << " to " << newatomId);
         {
-          typename IdtoIndex_t<atomId_t>::iterator iter = atomids_lookup.find(oldatomId);
-          ASSERT( iter != atomids_lookup.end(),
+          typename IdtoIndex_t<atomId_t>::left_iterator iter = atomids_lookup.left.find(oldatomId);
+          ASSERT( iter != atomids_lookup.left.end(),
               "QtObservedInstanceBoard::recieveNotification() - atom id "
               +toString(oldatomId)+" unknown to lookup.");
           const ObservedValue_Index_t index = iter->second;
-          atomids_lookup.erase(iter);
-          atomids_lookup.insert( std::pair<atomId_t, ObservedValue_Index_t>(newatomId, index) );
+          atomids_lookup.left.erase(iter);
+          atomids_lookup.left.insert( std::pair<atomId_t, ObservedValue_Index_t>(newatomId, index) );
         }
         // no need update SignedOn, ref does not change
@@ -253,12 +253,30 @@
 }
 
+const atomId_t QtObservedInstanceBoard::getAtomIdToIndex(ObservedValue_Index_t _id) const
+{
+  typename IdtoIndex_t<atomId_t>::right_const_iterator iter = atomids_lookup.right.find(_id);
+  ASSERT( iter != atomids_lookup.right.end(),
+      "QtObservedInstanceBoard::getAtomIdToIndex() - index "
+      +toString(_id)+" is unknown.");
+  return iter->second;
+}
+
+const moleculeId_t QtObservedInstanceBoard::getMoleculeIdToIndex(ObservedValue_Index_t _id) const
+{
+  typename IdtoIndex_t<moleculeId_t>::right_const_iterator iter = moleculeids_lookup.right.find(_id);
+  ASSERT( iter != moleculeids_lookup.right.end(),
+      "QtObservedInstanceBoard::getMoleculeIdToIndex() - index "
+      +toString(_id)+" is unknown.");
+  return iter->second;
+}
+
 QtObservedAtom::ptr QtObservedInstanceBoard::getObservedAtom(const atomId_t _id)
 {
-  return atomObservedValues.get(atomids_lookup[_id]);
+  return atomObservedValues.get(atomids_lookup.left.at(_id));
 }
 
 QtObservedMolecule::ptr QtObservedInstanceBoard::getObservedMolecule(const moleculeId_t _id)
 {
-  return moleculeObservedValues.get(moleculeids_lookup[_id]);
+  return moleculeObservedValues.get(moleculeids_lookup.left.at(_id));
 }
 
@@ -276,4 +294,5 @@
 {
   atomObservedValues.eraseObservedValues(_id);
+  atomids_lookup.right.erase(_id);
 }
 
@@ -291,3 +310,4 @@
 {
   moleculeObservedValues.eraseObservedValues(_id);
-}
+  moleculeids_lookup.right.erase(_id);
+}
Index: src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.hpp
===================================================================
--- src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.hpp	(revision 59eabc83f7f01a0f2797b83aea97182aa3c14b71)
+++ src/UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.hpp	(revision 1a58ce8105d4937e5093f614ba56c6d4688852bc)
@@ -21,4 +21,5 @@
 
 #include <map>
+#include <boost/bimap.hpp>
 #include <boost/function.hpp>
 
@@ -79,4 +80,7 @@
   void recieveNotification(Observable *publisher, Notification_ptr notification);
 
+  const atomId_t getAtomIdToIndex(ObservedValue_Index_t _id) const;
+  const moleculeId_t getMoleculeIdToIndex(ObservedValue_Index_t _id) const;
+
   QtObservedAtom::ptr getObservedAtom(const atomId_t _id);
   QtObservedMolecule::ptr getObservedMolecule(const moleculeId_t _id);
@@ -113,5 +117,5 @@
   //!> "templated typedef" for an id to index map.
   template <class id>
-  struct IdtoIndex_t : std::map<id, ObservedValue_Index_t> {};
+  struct IdtoIndex_t : boost::bimap<id, ObservedValue_Index_t> {};
   IdtoIndex_t<atomId_t> atomids_lookup;
   IdtoIndex_t<moleculeId_t> moleculeids_lookup;
Index: src/UIElements/Views/Qt4/ElementList/QtObservedAtomObserver.cpp
===================================================================
--- src/UIElements/Views/Qt4/ElementList/QtObservedAtomObserver.cpp	(revision 59eabc83f7f01a0f2797b83aea97182aa3c14b71)
+++ src/UIElements/Views/Qt4/ElementList/QtObservedAtomObserver.cpp	(revision 1a58ce8105d4937e5093f614ba56c6d4688852bc)
@@ -69,2 +69,7 @@
   emit AtomRemoved(_atomid);
 }
+
+const atomId_t QtObservedAtomObserver::getIdtoIndex(ObservedValue_Index_t _index) const
+{
+  return board->getAtomIdToIndex(_index);
+}
Index: src/UIElements/Views/Qt4/ElementList/QtObservedAtomObserver.hpp
===================================================================
--- src/UIElements/Views/Qt4/ElementList/QtObservedAtomObserver.hpp	(revision 59eabc83f7f01a0f2797b83aea97182aa3c14b71)
+++ src/UIElements/Views/Qt4/ElementList/QtObservedAtomObserver.hpp	(revision 1a58ce8105d4937e5093f614ba56c6d4688852bc)
@@ -37,4 +37,6 @@
   QtObservedAtomObserver(QtObservedInstanceBoard *_board, QWidget * _parent = NULL);
 
+  const atomId_t getIdtoIndex(ObservedValue_Index_t _index) const;
+
 signals:
   void ElementChanged(const QtObservedAtom::ptr _atom);
Index: src/UIElements/Views/Qt4/MoleculeList/QtObservedMoleculeObserver.cpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/QtObservedMoleculeObserver.cpp	(revision 59eabc83f7f01a0f2797b83aea97182aa3c14b71)
+++ src/UIElements/Views/Qt4/MoleculeList/QtObservedMoleculeObserver.cpp	(revision 1a58ce8105d4937e5093f614ba56c6d4688852bc)
@@ -94,2 +94,6 @@
 }
 
+const moleculeId_t QtObservedMoleculeObserver::getIdtoIndex(ObservedValue_Index_t _index) const
+{
+  return board->getMoleculeIdToIndex(_index);
+}
Index: src/UIElements/Views/Qt4/MoleculeList/QtObservedMoleculeObserver.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/QtObservedMoleculeObserver.hpp	(revision 59eabc83f7f01a0f2797b83aea97182aa3c14b71)
+++ src/UIElements/Views/Qt4/MoleculeList/QtObservedMoleculeObserver.hpp	(revision 1a58ce8105d4937e5093f614ba56c6d4688852bc)
@@ -37,4 +37,6 @@
   QtObservedMoleculeObserver(QtObservedInstanceBoard *_board, QWidget * _parent = NULL);
 
+  const moleculeId_t getIdtoIndex(ObservedValue_Index_t _index) const;
+
 signals:
   void AtomCountChanged(const QtObservedMolecule::ptr _molecule);
