Index: src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_atomcount.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_atomcount.hpp	(revision cc297688a2f09a635ccb45323617573684f51f9d)
+++ src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_atomcount.hpp	(revision ca1535f36cf69069e69bd2f95dfffcb3dca61a70)
@@ -16,10 +16,4 @@
 #include "UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp"
 
-#include "CodePatterns/ObservedValue.hpp"
-
-#include "Descriptors/MoleculeIdDescriptor.hpp"
-#include "molecule.hpp"
-#include "World.hpp"
-
 class QtMoleculeItemFactory;
 
@@ -33,33 +27,10 @@
 
   QtMoleculeItem_atomcount(
-      const moleculeId_t _molid,
-      const emitDirtyState_t &_emitDirtyState,
-      const emitSubjectKilledState_t &_emitSubjectKilledState) :
-        QtMoleculeItem(_molid, channellist_atomcount, QtMoleculeItem::NeedsMove, _emitDirtyState, _emitSubjectKilledState),
-        molref(getMolecule()),
-        atomcount(
-            molref,
-            boost::bind(&QtMoleculeItem_atomcount::updateAtomCount, this),
-            "MoleculeItem_atomcount_"+toString(_molid),
-            updateAtomCount(),
-            channellist_atomcount)
+      QtObservedMolecule::ptr &_ObservedMolecule,
+      const emitDirtyState_t &_emitDirtyState) :
+        QtMoleculeItem(_ObservedMolecule, QtMoleculeItem::NeedsMove, _emitDirtyState)
   {
-    signOnToMolecule();
     // cannot call pure virtual function in QtMoleculeItem's cstor
     internal_updateState();
-  }
-
-  ~QtMoleculeItem_atomcount()
-  {
-    signOffFromMolecule();
-  }
-
-  int updateAtomCount() const
-  {
-    const molecule * const mol = getMolecule();
-    if (mol != NULL)
-      return mol->getAtomCount();
-    else
-      return -1;
   }
 
@@ -69,18 +40,9 @@
   void internal_updateState()
   {
-    setText(QString::number(atomcount.get()));
+    setText(QString::number(ObservedMolecule->getAtomCount()));
   }
 
   QtMoleculeItem::COLUMNTYPES getType() const
   { return QtMoleculeItem::ATOMCOUNT; }
-
-  //!> notification channels of molecule specific to this molecule item, required for update
-  static const QtMoleculeItem::channellist_t channellist_atomcount;
-
-  //!> temporary value for molecule
-  const molecule * const molref;
-
-  //!> contains visibility state
-  ObservedValue<int> atomcount;
 };
 
Index: src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_formula.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_formula.hpp	(revision cc297688a2f09a635ccb45323617573684f51f9d)
+++ src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_formula.hpp	(revision ca1535f36cf69069e69bd2f95dfffcb3dca61a70)
@@ -18,11 +18,4 @@
 #include <string>
 
-#include "CodePatterns/ObservedValue.hpp"
-
-#include "Descriptors/MoleculeIdDescriptor.hpp"
-#include "Formula.hpp"
-#include "molecule.hpp"
-#include "World.hpp"
-
 class QtMoleculeItemFactory;
 
@@ -36,33 +29,10 @@
 
   QtMoleculeItem_formula(
-      const moleculeId_t _molid,
-      const emitDirtyState_t &_emitDirtyState,
-      const emitSubjectKilledState_t &_emitSubjectKilledState) :
-        QtMoleculeItem(_molid, channellist_formula, QtMoleculeItem::NeedsMove, _emitDirtyState, _emitSubjectKilledState),
-        molref(getMolecule()),
-        formula(
-            molref,
-            boost::bind(&QtMoleculeItem_formula::updateFormula, this),
-            "MoleculeItem_formula_"+toString(_molid),
-            updateFormula(),
-            channellist_formula)
+      QtObservedMolecule::ptr &_ObservedMolecule,
+      const emitDirtyState_t &_emitDirtyState) :
+        QtMoleculeItem(_ObservedMolecule, QtMoleculeItem::NeedsMove, _emitDirtyState)
   {
-    signOnToMolecule();
     // cannot call pure virtual function in QtMoleculeItem's cstor
     internal_updateState();
-  }
-
-  ~QtMoleculeItem_formula()
-  {
-    signOffFromMolecule();
-  }
-
-  std::string updateFormula() const
-  {
-    const molecule * const mol = getMolecule();
-    if (mol != NULL)
-      return mol->getFormula().toString();
-    else
-      return std::string();
   }
 
@@ -72,18 +42,9 @@
   void internal_updateState()
   {
-    setText(QString(formula.get().c_str()));
+    setText(QString(ObservedMolecule->getMolFormula().c_str()));
   }
 
   QtMoleculeItem::COLUMNTYPES getType() const
   { return QtMoleculeItem::FORMULA; }
-
-  //!> notification channels of molecule specific to this molecule item, required for update
-  static const QtMoleculeItem::channellist_t channellist_formula;
-
-  //!> temporary value for molecule
-  const molecule * const molref;
-
-  //!> contains visibility state
-  ObservedValue<std::string> formula;
 };
 
Index: src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_name.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_name.hpp	(revision cc297688a2f09a635ccb45323617573684f51f9d)
+++ src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_name.hpp	(revision ca1535f36cf69069e69bd2f95dfffcb3dca61a70)
@@ -16,10 +16,4 @@
 #include "UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp"
 
-#include "CodePatterns/ObservedValue.hpp"
-
-#include "Descriptors/MoleculeIdDescriptor.hpp"
-#include "molecule.hpp"
-#include "World.hpp"
-
 class QtMoleculeItemFactory;
 
@@ -33,33 +27,10 @@
 
   QtMoleculeItem_name(
-      const moleculeId_t _molid,
-      const emitDirtyState_t &_emitDirtyState,
-      const emitSubjectKilledState_t &_emitSubjectKilledState) :
-        QtMoleculeItem(_molid, channellist_name, QtMoleculeItem::DoesNotMove, _emitDirtyState, _emitSubjectKilledState),
-        molref(getMolecule()),
-        name(
-            molref,
-            boost::bind(&QtMoleculeItem_name::updateName, this),
-            "MoleculeItem_name_"+toString(_molid),
-            updateName(),
-            channellist_name)
+      QtObservedMolecule::ptr &_ObservedMolecule,
+      const emitDirtyState_t &_emitDirtyState) :
+        QtMoleculeItem(_ObservedMolecule, QtMoleculeItem::DoesNotMove, _emitDirtyState)
   {
-    signOnToMolecule();
     // cannot call pure virtual function in QtMoleculeItem's cstor
     internal_updateState();
-  }
-
-  ~QtMoleculeItem_name()
-  {
-    signOffFromMolecule();
-  }
-
-  std::string updateName() const
-  {
-    const molecule * const mol = getMolecule();
-    if (mol != NULL)
-      return mol->getName();
-    else
-      return std::string();
   }
 
@@ -69,18 +40,9 @@
   void internal_updateState()
   {
-    setText(QString(name.get().c_str()));
+    setText(QString(ObservedMolecule->getMolName().c_str()));
   }
 
   QtMoleculeItem::COLUMNTYPES getType() const
   { return QtMoleculeItem::NAME; }
-
-  //!> notification channels of molecule specific to this molecule item, required for update
-  static const QtMoleculeItem::channellist_t channellist_name;
-
-  //!> temporary value for molecule
-  const molecule * const molref;
-
-  //!> contains visibility state
-  ObservedValue<std::string> name;
 };
 
Index: src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_occurrence.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_occurrence.hpp	(revision cc297688a2f09a635ccb45323617573684f51f9d)
+++ src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_occurrence.hpp	(revision ca1535f36cf69069e69bd2f95dfffcb3dca61a70)
@@ -27,17 +27,10 @@
 
   QtMoleculeItem_occurrence(
-      const moleculeId_t _molid,
-      const emitDirtyState_t &_emitDirtyState,
-      const emitSubjectKilledState_t &_emitSubjectKilledState) :
-        QtMoleculeItem(_molid, channellist_occurrence, QtMoleculeItem::DoesNotMove, _emitDirtyState, _emitSubjectKilledState)
+      QtObservedMolecule::ptr &_ObservedMolecule,
+      const emitDirtyState_t &_emitDirtyState) :
+        QtMoleculeItem(_ObservedMolecule, QtMoleculeItem::DoesNotMove, _emitDirtyState)
   {
-    signOnToMolecule();
     // cannot call pure virtual function in QtMoleculeItem's cstor
     internal_updateState();
-  }
-
-  ~QtMoleculeItem_occurrence()
-  {
-    signOffFromMolecule();
   }
 
@@ -52,7 +45,4 @@
   QtMoleculeItem::COLUMNTYPES getType() const
   { return QtMoleculeItem::OCCURRENCE; }
-
-  //!> notification channels of molecule specific to this molecule item, required for update
-  static const QtMoleculeItem::channellist_t channellist_occurrence;
 };
 
Index: src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_visibility.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_visibility.hpp	(revision cc297688a2f09a635ccb45323617573684f51f9d)
+++ src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_visibility.hpp	(revision ca1535f36cf69069e69bd2f95dfffcb3dca61a70)
@@ -27,19 +27,12 @@
 
   QtMoleculeItem_visibility(
-      const moleculeId_t _molid,
-      const emitDirtyState_t &_emitDirtyState,
-      const emitSubjectKilledState_t &_emitSubjectKilledState) :
-        QtMoleculeItem(_molid, channellist_visibility, QtMoleculeItem::DoesNotMove, _emitDirtyState, _emitSubjectKilledState)
+      QtObservedMolecule::ptr &_ObservedMolecule,
+      const emitDirtyState_t &_emitDirtyState) :
+        QtMoleculeItem(_ObservedMolecule, QtMoleculeItem::DoesNotMove, _emitDirtyState)
   {
-    signOnToMolecule();
     setFlags(flags() | Qt::ItemIsUserCheckable);
     setCheckState(Qt::Unchecked);
     // cannot call pure virtual function in QtMoleculeItem's cstor
     internal_updateState();
-  }
-
-  ~QtMoleculeItem_visibility()
-  {
-    signOffFromMolecule();
   }
 
@@ -52,7 +45,4 @@
   QtMoleculeItem::COLUMNTYPES getType() const
   { return QtMoleculeItem::VISIBILITY; }
-
-  //!> notification channels of molecule specific to this molecule item, required for update
-  static const QtMoleculeItem::channellist_t channellist_visibility;
 };
 
