Index: src/UIElements/Makefile.am
===================================================================
--- src/UIElements/Makefile.am	(revision bed759c3580c014ab9c1b68a1a4aac91cd7ea811)
+++ src/UIElements/Makefile.am	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
@@ -230,4 +230,9 @@
   UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp \
   UIElements/Views/Qt4/MoleculeList/QtMoleculeItemFactory.hpp \
+  UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_atomcount.hpp \
+  UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_formula.hpp \
+  UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_name.hpp \
+  UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_occurrence.hpp \
+  UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_visibility.hpp \
   UIElements/Views/Qt4/QDebugStream.hpp
 
Index: src/UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.cpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.cpp	(revision bed759c3580c014ab9c1b68a1a4aac91cd7ea811)
+++ src/UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.cpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
@@ -43,51 +43,55 @@
 #include "CodePatterns/Observer/Notification.hpp"
 
+#include <algorithm>
+
 #include "molecule.hpp"
 
-// some attributes need to be easier to find for molecules
-// these attributes are skipped so far
-const int QtMoleculeItem::COLUMNCOUNT = COLUMNTYPES_MAX;
-const char *QtMoleculeItem::COLUMNNAMES[QtMoleculeItem::COLUMNCOUNT]={"Name","Visibility", "Atoms","Formula","Occurrence"/*,"Size"*/};
-
-
-QList<QStandardItem *> createMoleculeItemRow(const molecule *_mol)
+QtMoleculeItem::QtMoleculeItem(
+     const molecule *_mol,
+     const channellist_t &_channellist,
+     const enum MoveTypes _movetype,
+     const emitDirtyState_t _emitDirtyState) :
+  Observer("QtMoleculeItem"),
+  mol(_mol),
+  movetype(_movetype),
+  channellist(_channellist),
+  IsSignedOn(false),
+  dirty(true),
+  emitDirtyState(_emitDirtyState)
 {
-  QList<QStandardItem *> molItems;
-  QStandardItem *mainitem = new QtMoleculeItem(_mol);
-  mainitem->setText(QString(_mol->getName().c_str()));
-  mainitem->setFlags(mainitem->flags() | Qt::ItemIsSelectable);
-  molItems << mainitem;
-
-  QStandardItem *visitem = new QStandardItem();
-  visitem->setCheckState(Qt::Unchecked);
-  visitem->setFlags(visitem->flags() | Qt::ItemIsUserCheckable);
-  molItems << visitem;
-
-  molItems << new QStandardItem(QString::number(_mol->getAtomCount()));
-  molItems << new QStandardItem(QString(_mol->getFormula().toString().c_str()));
-  molItems << new QStandardItem(QString(""));
-  return molItems;
+  signOnToMolecule();
+  setFlags(flags() | Qt::ItemIsSelectable);
 }
 
-QtMoleculeItem::QtMoleculeItem(const molecule *_mol) :
-  Observer("QtMoleculeItem"),
-  mol(_mol),
-  IsSignedOn(false)
+void QtMoleculeItem::signOnToMolecule()
 {
-  mol->signOn(this, molecule::AtomInserted);
-  mol->signOn(this, molecule::AtomRemoved);
-  mol->signOn(this, molecule::MoleculeNameChanged);
+  if (!IsSignedOn)
+    for (channellist_t::const_iterator channeliter = channellist.begin();
+        channeliter != channellist.end(); ++channeliter)
+      mol->signOn(this, *channeliter);
   IsSignedOn = true;
+}
+
+void QtMoleculeItem::signOffFromMolecule()
+{
+  if (IsSignedOn)
+    for (channellist_t::const_iterator channeliter = channellist.begin();
+        channeliter != channellist.end(); ++channeliter)
+      mol->signOff(this, *channeliter);
+  IsSignedOn = false;
 }
 
 QtMoleculeItem::~QtMoleculeItem()
 {
-  if (IsSignedOn) {
-    mol->signOff(this, molecule::AtomInserted);
-    mol->signOff(this, molecule::AtomRemoved);
-    mol->signOff(this, molecule::MoleculeNameChanged);
+  signOffFromMolecule();
+}
+
+void QtMoleculeItem::updateState()
+{
+  if (dirty) {
+    internal_updateState();
+    dirty = false;
   }
 }
-
 
 void QtMoleculeItem::update(Observable *publisher)
@@ -97,32 +101,20 @@
 {
   if (dynamic_cast<molecule *>(publisher) != NULL) {
-    switch (notification->getChannelNo()) {
-      case molecule::AtomInserted:
-      case molecule::AtomRemoved:
-      {
-        // change atomcount
-        QStandardItem *count_item = parent()->child(index().row(), ATOMCOUNT);
-        count_item->setText(QString::number(mol->getAtomCount()));
-
-        // change formula
-        const std::string molecule_formula = mol->getFormula().toString();
-        QStandardItem *formula_item = parent()->child(index().row(), FORMULA);
-        formula_item->setText(QString(molecule_formula.c_str()));
-
-        // re-position in model's tree
-//        static_cast<QtMoleculeList*>(model())->readdItem(this, molecule_formula);
-        break;
+    if (notification->getChannelNo() == molecule::AboutToBeRemoved) {
+      signOffFromMolecule();
+      // prevent any remaining updates from accessing the molecule
+      mol = NULL;
+      dirty = false;
+    } else {
+      channellist_t::const_iterator iter =
+          std::find(channellist.begin(), channellist.end(), notification->getChannelNo());
+      if (iter != channellist.end()) {
+        dirty = true;
+        emitDirtyState(this, movetype);
+      } else {
+        ASSERT(0,
+            "QtMoleculeItem::recieveNotification() - received notification to channel "
+            +toString(notification->getChannelNo())+" we are not subscribed to.");
       }
-      case molecule::MoleculeNameChanged:
-      {
-        // change name
-        QStandardItem *name_item = parent()->child(index().row(), NAME);
-        name_item->setText(QString(mol->getName().c_str()));
-        break;
-      }
-      default:
-        ASSERT(0, "QtMoleculeItem::recieveNotification() - cannot get here, not subscribed to channel "
-            +toString(notification->getChannelNo()));
-        break;
     }
   }
Index: src/UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp	(revision bed759c3580c014ab9c1b68a1a4aac91cd7ea811)
+++ src/UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
@@ -19,30 +19,80 @@
 #include "CodePatterns/Observer/Observer.hpp"
 
+#include <boost/function.hpp>
+#include <list>
 #include <string>
 
-class molecule;
+#include "molecule.hpp"
 
-QList<QStandardItem *> createMoleculeItemRow(const molecule *_mol);
-
+/** This class describes the general interface for a specific item in a QtAbstractItemModel
+ * to contain a specific piece of information about a specific molecule.
+ *
+ * To this end, we need a ref to the molecule for updating the information when
+ * necessary and we need to know the channels we have to listen to know when an
+ * update is necessary.
+ *
+ * This class takes care of of all the rest:
+ * -# informing QtMoleculeList about required update ("dirty")
+ * -# relaying updateState() call from QtMoleculeList to the specific internal_updateState()
+ */
 class QtMoleculeItem : public QStandardItem, public Observer
 {
 public:
-  QtMoleculeItem(const molecule *_mol);
+  //!> typedef for a list of notification channels required, to know when to update
+  typedef std::list<molecule::NotificationType> channellist_t;
+
+  //!> enum states whether an item's formula changed or not
+  enum MoveTypes {
+    NeedsMove,
+    DoesNotMove
+  };
+
+  //!> typedef for callback function to model to inform when we need update
+  typedef const boost::function<void (QtMoleculeItem*, enum MoveTypes)> emitDirtyState_t;
+
+  QtMoleculeItem(
+      const molecule *_mol,
+      const channellist_t &_channellist,
+      const enum MoveTypes _movetype,
+      const emitDirtyState_t _emitDirtyState);
   virtual ~QtMoleculeItem();
 
-  static const int COLUMNCOUNT;
-  enum {NAME,VISIBILITY,ATOMCOUNT,FORMULA,OCCURRENCE,COLUMNTYPES_MAX} COLUMNTYPES;
-  static const char *COLUMNNAMES[];
+  /** Update the state of this item.
+   *
+   */
+  void updateState();
+
+private:
+  void update(Observable *publisher);
+  void recieveNotification(Observable *publisher, Notification_ptr notification);
+  void subjectKilled(Observable *publisher);
+
+  void signOnToMolecule();
+  void signOffFromMolecule();
 
 protected:
-  virtual void update(Observable *publisher);
-  virtual void recieveNotification(Observable *publisher, Notification_ptr notification);
-  virtual void subjectKilled(Observable *publisher);
+  /** This function needs to be implemented to make the specific update.
+   *
+   */
+  virtual void internal_updateState() = 0;
+
+  //!> molecule we are signed on to
+  const molecule *mol;
 
 private:
-  //!> molecule we are signed on to
-  const molecule *mol;
+  //!> move type for this specific item, set this when implementing
+  const enum MoveTypes movetype;
+
+  //!> ref to the specific static list of channels we are signed on to
+  const channellist_t &channellist;
+
   //!> states whether we are still signed on to molecule
   bool IsSignedOn;
+
+  //!> states that this item needs to be updated
+  bool dirty;
+
+  //!> bound callback function to inform model about change
+  const emitDirtyState_t emitDirtyState;
 };
 
Index: src/UIElements/Views/Qt4/MoleculeList/QtMoleculeItemFactory.cpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/QtMoleculeItemFactory.cpp	(revision bed759c3580c014ab9c1b68a1a4aac91cd7ea811)
+++ src/UIElements/Views/Qt4/MoleculeList/QtMoleculeItemFactory.cpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
@@ -33,8 +33,96 @@
 #endif
 
+#include "QtMoleculeItemFactory.hpp"
+
+#include "UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp"
+#include "UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_atomcount.hpp"
+#include "UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_formula.hpp"
+#include "UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_name.hpp"
+#include "UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_occurrence.hpp"
+#include "UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_visibility.hpp"
+
 #include "CodePatterns/MemDebug.hpp"
 
-#include "QtMoleculeItemFactory.hpp"
+#include "CodePatterns/Singleton_impl.hpp"
 
+#include <boost/assign.hpp>
 
+#include "molecule.hpp"
 
+using namespace boost::assign;
+
+// instantiate static items of specific QtMoleculeItems
+const QtMoleculeItem::channellist_t QtMoleculeItem_atomcount::channellist_atomcount;
+const QtMoleculeItem::channellist_t QtMoleculeItem_formula::channellist_formula;
+const QtMoleculeItem::channellist_t QtMoleculeItem_name::channellist_name;
+const QtMoleculeItem::channellist_t QtMoleculeItem_occurrence::channellist_occurrence;
+const QtMoleculeItem::channellist_t QtMoleculeItem_visibility::channellist_visibility;
+
+// some attributes need to be easier to find for molecules
+// these attributes are skipped so far
+const int
+QtMoleculeItemFactory::COLUMNCOUNT =
+    COLUMNTYPES_MAX;
+const char *
+QtMoleculeItemFactory::COLUMNNAMES[QtMoleculeItemFactory::COLUMNCOUNT] =
+    {"Name","Visibility", "Atoms","Formula","Occurrence"/*,"Size"*/};
+
+QtMoleculeItemFactory::QtMoleculeItemFactory()
+{
+  // fill all the static channels lists
+  const_cast<QtMoleculeItem::channellist_t &>(
+      QtMoleculeItem_name::channellist_name) +=
+          molecule::MoleculeNameChanged;
+  const_cast<QtMoleculeItem::channellist_t &>(
+      QtMoleculeItem_atomcount::channellist_atomcount) +=
+          molecule::AtomInserted,
+          molecule::AtomRemoved;
+  const_cast<QtMoleculeItem::channellist_t &>(
+      QtMoleculeItem_formula::channellist_formula) =
+          QtMoleculeItem_atomcount::channellist_atomcount;
+}
+
+QList<QStandardItem *>
+QtMoleculeItemFactory::createMoleculeItems(
+    const molecule *_mol,
+    const QtMoleculeItem::emitDirtyState_t &_emitDirtyState)
+{
+  QList<QStandardItem *> molItems;
+  molItems << new QtMoleculeItem_name(_mol, _emitDirtyState);
+  molItems << new QtMoleculeItem_visibility(_mol, _emitDirtyState);
+  molItems << new QtMoleculeItem_atomcount(_mol, _emitDirtyState);
+  molItems << new QtMoleculeItem_formula(_mol, _emitDirtyState);
+  molItems << new QtMoleculeItem_occurrence(_mol, _emitDirtyState);
+  return molItems;
+}
+
+QList<QStandardItem *>
+QtMoleculeItemFactory::createGroupItems(const std::string &_formula)
+{
+  QList<QStandardItem *> groupItems;
+  // fill item list
+  QStandardItem *mainitem = new QStandardItem(QString(""));
+  mainitem->setFlags(mainitem->flags() ^ Qt::ItemIsSelectable);
+  groupItems << mainitem;
+
+  QStandardItem *visitem = new QStandardItem;
+  visitem->setCheckState(Qt::Unchecked);
+  visitem->setFlags((visitem->flags() | Qt::ItemIsUserCheckable) ^ Qt::ItemIsSelectable);
+  groupItems << visitem;
+
+  QStandardItem *count_item = new QStandardItem(QString::number(0));
+  count_item->setFlags(count_item->flags() ^ Qt::ItemIsSelectable);
+  groupItems << count_item;
+
+  QStandardItem *formula_item = new QStandardItem(QString(""));
+  formula_item->setFlags(formula_item->flags() ^ Qt::ItemIsSelectable);
+  groupItems << formula_item;
+
+  QStandardItem *occ_item = new QStandardItem(QString::number(0));
+  occ_item->setFlags(occ_item->flags() ^ Qt::ItemIsSelectable);
+  groupItems << occ_item;
+
+  return groupItems;
+}
+
+CONSTRUCT_SINGLETON(QtMoleculeItemFactory)
Index: src/UIElements/Views/Qt4/MoleculeList/QtMoleculeItemFactory.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/QtMoleculeItemFactory.hpp	(revision bed759c3580c014ab9c1b68a1a4aac91cd7ea811)
+++ src/UIElements/Views/Qt4/MoleculeList/QtMoleculeItemFactory.hpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
@@ -14,7 +14,50 @@
 #endif
 
-class QtMoleculeItemFactory
+#include "CodePatterns/Singleton.hpp"
+
+#include <QList>
+
+#include <string>
+
+class molecule;
+
+#include "UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp"
+
+/** This class is a factory for a list of QtMoleculeItem's.
+ *
+ * QtMoleculeList contains these per row, either a group item which combines
+ * molecules of the same formula, or a molecule item which represents a single
+ * molecule.
+ */
+class QtMoleculeItemFactory : public Singleton<QtMoleculeItemFactory>
 {
+  //!> grant Singleton access to cstor and dstor.
+  friend class Singleton<QtMoleculeItemFactory>;
+private:
+  // private constructor and destructor due to singleton
+  QtMoleculeItemFactory();
+  virtual ~QtMoleculeItemFactory() {}
 
+public:
+  static const int COLUMNCOUNT;
+  enum {NAME,VISIBILITY,ATOMCOUNT,FORMULA,OCCURRENCE,COLUMNTYPES_MAX} COLUMNTYPES;
+  static const char *COLUMNNAMES[];
+
+  /** Creates all QtMoleculeItem's that make up the row for a single molecule.
+   *
+   * \param _mol ref to molecule which is stored internally
+   * \param _emitDirtyState callback function to model to inform about required state update
+   * \return list of prepared items to be appended to a group item
+   */
+  QList<QStandardItem *> createMoleculeItems(
+      const molecule *_mol,
+      const QtMoleculeItem::emitDirtyState_t &_emitDirtyState);
+
+  /** Creates all QtMoleculeItem's that make up a row of a group item.
+   *
+   * \param _formula chemical formula which describes all molecules in this group
+   * \return list of prepared items to be appended to the invisibleRootItem()
+   */
+  QList<QStandardItem *> createGroupItems(const std::string &_formula);
 };
 
Index: src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_atomcount.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_atomcount.hpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
+++ src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_atomcount.hpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
@@ -0,0 +1,53 @@
+/*
+ * QtMoleculeItem_atomcount.hpp
+ *
+ *  Created on: Jan 18, 2015
+ *      Author: heber
+ */
+
+#ifndef QTMOLECULEITEM_ATOMCOUNT_HPP_
+#define QTMOLECULEITEM_ATOMCOUNT_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp"
+
+#include "molecule.hpp"
+
+class QtMoleculeItemFactory;
+
+/** This class contains the atomcount of a molecule and keeps it up to date.
+ *
+ */
+class QtMoleculeItem_atomcount : public QtMoleculeItem
+{
+  //!> only allow factory to instantiate items
+  friend class QtMoleculeItemFactory;
+
+  QtMoleculeItem_atomcount(
+      const molecule * const _mol,
+      emitDirtyState_t _emitDirtyState) :
+        QtMoleculeItem(_mol, channellist_atomcount, QtMoleculeItem::NeedsMove, _emitDirtyState)
+  {
+    // cannot call pure virtual function in QtMoleculeItem's cstor
+    internal_updateState();
+  }
+
+  /** Performs the update of the molecule's atomcount.
+   *
+   */
+  void internal_updateState()
+  {
+    setText(QString::number(mol->getAtomCount()));
+  }
+
+  //!> notification channels of molecule specific to this molecule item, required for update
+  static const QtMoleculeItem::channellist_t channellist_atomcount;
+};
+
+
+
+#endif /* QTMOLECULEITEM_ATOMCOUNT_HPP_ */
Index: src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_formula.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_formula.hpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
+++ src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_formula.hpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
@@ -0,0 +1,56 @@
+/*
+ * QtMoleculeItem_formula.hpp
+ *
+ *  Created on: Jan 18, 2015
+ *      Author: heber
+ */
+
+#ifndef QTMOLECULEITEM_FORMULA_HPP_
+#define QTMOLECULEITEM_FORMULA_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp"
+
+#include <string>
+
+#include "Formula.hpp"
+#include "molecule.hpp"
+
+class QtMoleculeItemFactory;
+
+/** This class contains the formula of a molecule and keeps it up to date.
+ *
+ */
+class QtMoleculeItem_formula : public QtMoleculeItem
+{
+  //!> only allow factory to instantiate items
+  friend class QtMoleculeItemFactory;
+
+  QtMoleculeItem_formula(
+      const molecule * const _mol,
+      emitDirtyState_t _emitDirtyState) :
+        QtMoleculeItem(_mol, channellist_formula, QtMoleculeItem::NeedsMove, _emitDirtyState)
+  {
+    // cannot call pure virtual function in QtMoleculeItem's cstor
+    internal_updateState();
+  }
+
+  /** Performs the update of the molecule's formula.
+   *
+   */
+  void internal_updateState()
+  {
+    setText(QString(mol->getFormula().toString().c_str()));
+  }
+
+  //!> notification channels of molecule specific to this molecule item, required for update
+  static const QtMoleculeItem::channellist_t channellist_formula;
+};
+
+
+
+#endif /* QTMOLECULEITEM_FORMULA_HPP_ */
Index: src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_name.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_name.hpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
+++ src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_name.hpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
@@ -0,0 +1,52 @@
+/*
+ * QtMoleculeItem_name.hpp
+ *
+ *  Created on: Jan 18, 2015
+ *      Author: heber
+ */
+
+#ifndef QTMOLECULEITEM_NAME_HPP_
+#define QTMOLECULEITEM_NAME_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp"
+
+#include "molecule.hpp"
+
+class QtMoleculeItemFactory;
+
+/** This class contains the name of a molecule and keeps it up to date.
+ *
+ */
+class QtMoleculeItem_name : public QtMoleculeItem
+{
+  //!> only allow factory to instantiate items
+  friend class QtMoleculeItemFactory;
+
+  QtMoleculeItem_name(
+      const molecule * const _mol,
+      emitDirtyState_t _emitDirtyState) :
+        QtMoleculeItem(_mol, channellist_name, QtMoleculeItem::DoesNotMove, _emitDirtyState)
+  {
+    // cannot call pure virtual function in QtMoleculeItem's cstor
+    internal_updateState();
+  }
+
+  /** Performs the update of the molecule's name.
+   *
+   */
+  void internal_updateState()
+  {
+    setText(QString(mol->getName().c_str()));
+  }
+
+  //!> notification channels of molecule specific to this molecule item, required for update
+  static const QtMoleculeItem::channellist_t channellist_name;
+};
+
+
+#endif /* QTMOLECULEITEM_NAME_HPP_ */
Index: src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_occurrence.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_occurrence.hpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
+++ src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_occurrence.hpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
@@ -0,0 +1,51 @@
+/*
+ * QtMoleculeItem_occurrence.hpp
+ *
+ *  Created on: Jan 18, 2015
+ *      Author: heber
+ */
+
+#ifndef QTMOLECULEITEM_OCCURRENCE_HPP_
+#define QTMOLECULEITEM_OCCURRENCE_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp"
+
+class QtMoleculeItemFactory;
+
+/** This class contains the occurrence of a molecule.
+ *
+ */
+class QtMoleculeItem_occurrence : public QtMoleculeItem
+{
+  //!> only allow factory to instantiate items
+  friend class QtMoleculeItemFactory;
+
+  QtMoleculeItem_occurrence(
+      const molecule * const _mol,
+      emitDirtyState_t _emitDirtyState) :
+        QtMoleculeItem(_mol, channellist_occurrence, QtMoleculeItem::DoesNotMove, _emitDirtyState)
+  {
+    // cannot call pure virtual function in QtMoleculeItem's cstor
+    internal_updateState();
+  }
+
+  /** Performs the update of the molecule's occurrence.
+   *
+   */
+  void internal_updateState()
+  {
+    setText(QString(""));
+  }
+
+  //!> notification channels of molecule specific to this molecule item, required for update
+  static const QtMoleculeItem::channellist_t channellist_occurrence;
+};
+
+
+
+#endif /* QTMOLECULEITEM_OCCURRENCE_HPP_ */
Index: src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_visibility.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_visibility.hpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
+++ src/UIElements/Views/Qt4/MoleculeList/SpecificItems/QtMoleculeItem_visibility.hpp	(revision 6d1e0a20c242ab6c7b0ace4bf93ff53336b9cc26)
@@ -0,0 +1,51 @@
+/*
+ * QtMoleculeItem_visibility.hpp
+ *
+ *  Created on: Jan 18, 2015
+ *      Author: heber
+ */
+
+#ifndef QTMOLECULEITEM_VISIBILITY_HPP_
+#define QTMOLECULEITEM_VISIBILITY_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp"
+
+class QtMoleculeItemFactory;
+
+/** This class contains the visibility of a molecule and keeps it up to date.
+ *
+ */
+class QtMoleculeItem_visibility : public QtMoleculeItem
+{
+  //!> only allow factory to instantiate items
+  friend class QtMoleculeItemFactory;
+
+  QtMoleculeItem_visibility(
+      const molecule * const _mol,
+      emitDirtyState_t _emitDirtyState) :
+        QtMoleculeItem(_mol, channellist_visibility, QtMoleculeItem::DoesNotMove, _emitDirtyState)
+  {
+    setFlags(flags() | Qt::ItemIsUserCheckable);
+    setCheckState(Qt::Unchecked);
+    // cannot call pure virtual function in QtMoleculeItem's cstor
+    internal_updateState();
+  }
+
+  /** Performs the update of the molecule's visibility.
+   *
+   */
+  void internal_updateState()
+  {}
+
+  //!> notification channels of molecule specific to this molecule item, required for update
+  static const QtMoleculeItem::channellist_t channellist_visibility;
+};
+
+
+
+#endif /* QTMOLECULEITEM_VISIBILITY_HPP_ */
