Index: src/UIElements/Qt4/QtMainWindow.cpp
===================================================================
--- src/UIElements/Qt4/QtMainWindow.cpp	(revision 6770fae428b376912daabc349a23817dfb4f32e9)
+++ src/UIElements/Qt4/QtMainWindow.cpp	(revision 8ccf3bf66a4ce9f95ab6fdbedd40c087b343c68d)
@@ -95,5 +95,7 @@
   QVBoxLayout *layout = new QVBoxLayout(layoutwidget);
 
-  moleculeList = new QtMoleculeList(worldTab);
+  QTreeView *moleculeListView = new QTreeView(worldTab);
+  moleculeList = new QtMoleculeList;
+  moleculeListView->setModel(moleculeList);
   elementList = new QtElementList(worldTab);
   homologyList = new QtHomologyList(worldTab);
@@ -129,5 +131,5 @@
   layout->addWidget(worldTab);
   splitter2->addWidget(layoutwidget);
-  worldTab->addTab(moleculeList, "Molecules");
+  worldTab->addTab(moleculeListView, "Molecules");
   worldTab->addTab(elementList, "All Elements");
   worldTab->addTab(fragmentList, "All Fragments");
Index: src/UIElements/Views/Qt4/QtMoleculeList.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtMoleculeList.cpp	(revision 6770fae428b376912daabc349a23817dfb4f32e9)
+++ src/UIElements/Views/Qt4/QtMoleculeList.cpp	(revision 8ccf3bf66a4ce9f95ab6fdbedd40c087b343c68d)
@@ -59,19 +59,17 @@
 const char *QtMoleculeList::COLUMNNAMES[QtMoleculeList::COLUMNCOUNT]={"Name","Visibility", "Atoms","Formula","Occurrence"/*,"Size"*/};
 
-QtMoleculeList::QtMoleculeList(QWidget * _parent) :
-  QTreeWidget (_parent),
+QtMoleculeList::QtMoleculeList() :
   Observer("QtMoleculeList")
 {
   setColumnCount(COLUMNCOUNT);
-  setSelectionMode(QAbstractItemView::MultiSelection);
-
-  QStringList header;
-  for(int i=0; i<COLUMNCOUNT;++i)
-    header << COLUMNNAMES[i];
-  setHeaderLabels(header);
+//  setSelectionMode(QAbstractItemView::MultiSelection);
+
+//  QStringList header;
+//  for(int i=0; i<COLUMNCOUNT;++i)
+//    header << COLUMNNAMES[i];
+//  setHeaderLabels(header);
 
   World::getInstance().signOn(this, World::MoleculeInserted);
   World::getInstance().signOn(this, World::MoleculeRemoved);
-
 
   dirty = true;
@@ -82,8 +80,8 @@
   refill();
 
-  qRegisterMetaType<QItemSelection>("QItemSelection");
+//  qRegisterMetaType<QItemSelection>("QItemSelection");
   //connect(this,SIGNAL(cellChanged(int,int)),this,SLOT(moleculeChanged(int,int)));
-  connect(selectionModel(),SIGNAL(selectionChanged(QItemSelection, QItemSelection)),this,SLOT(rowsSelected(QItemSelection, QItemSelection)));
-  connect(this, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(visibilityChanged(QTreeWidgetItem*, int)));
+//  connect(selectionModel(),SIGNAL(selectionChanged(QItemSelection, QItemSelection)),this,SLOT(rowsSelected(QItemSelection, QItemSelection)));
+//  connect(this, SIGNAL(itemChanged(QStandardItem*, int)), this, SLOT(visibilityChanged(QStandardItem*, int)));
 }
 
@@ -97,4 +95,13 @@
   ASSERT(0,
       "QtMoleculeList::update() - we did not sign up for any global updates.");
+}
+
+QStandardItem * QtMoleculeList::MoleculeToItem(const molecule * const _mol)
+{
+  MoleculeItemBiMap_t::left_const_iterator iter =
+      MoleculeItemBiMap.left.find(_mol);
+  ASSERT( iter != MoleculeItemBiMap.left.end(),
+      "QtMoleculeList - could not find molecule "+_mol->getName()+" in my list.");
+  return iter->second;
 }
 
@@ -106,5 +113,5 @@
       {
         const molecule * const mol = World::getInstance().lastChanged<molecule>();
-        addItem(mol);
+        addItem( mol );
         break;
       }
@@ -112,5 +119,5 @@
       {
         const molecule * const mol = World::getInstance().lastChanged<molecule>();
-        removeItem(mol);
+        removeItem(  mol );
         break;
       }
@@ -129,33 +136,45 @@
 
 void QtMoleculeList::addGroupItem(
-    QTreeWidgetItem *&_groupItem,
+    QStandardItem *&mainitem,
     const std::string &_molecule_formula)
 {
-  _groupItem = new QTreeWidgetItem(this);
-  formula.insert( std::make_pair(_molecule_formula, _groupItem) );
-  // fill item
-  _groupItem->setText(NAME, QString("default"));
-  _groupItem->setFlags((_groupItem->flags() | Qt::ItemIsUserCheckable) ^ Qt::ItemIsSelectable);
-  _groupItem->setCheckState(VISIBILITY, Qt::Unchecked);
-  _groupItem->setText(ATOMCOUNT, QString::number(0));
-  _groupItem->setText(FORMULA, QString(""));
-  _groupItem->setText(OCCURRENCE, "0");
-  _groupItem->setData(0, Qt::UserRole, QVariant(-1));
+  QList<QStandardItem *> groupItems;
+  // fill item list
+  mainitem = new QStandardItem(QString("default"));
+  mainitem->setFlags(mainitem->flags() ^ Qt::ItemIsSelectable);
+  formula.insert( std::make_pair(_molecule_formula, mainitem) );
+  groupItems << mainitem;
+  QStandardItem *visitem = new QStandardItem;
+  visitem->setCheckState(Qt::Unchecked);
+  visitem->setFlags(mainitem->flags() | Qt::ItemIsUserCheckable);
+  groupItems << visitem;
+  groupItems << new QStandardItem(QString::number(0));
+  groupItems << new QStandardItem(QString(""));
+  groupItems << new QStandardItem(QString::number(0));
+  invisibleRootItem()->appendRow(groupItems);
+//  _groupItem->setData(0, Qt::UserRole, QVariant(-1));
 }
 
 void QtMoleculeList::addMoleculeItem(
-    QTreeWidgetItem *&_groupItem,
+    QStandardItem *_groupitem,
     const molecule *_mol,
     const std::string &_molecule_formula)
 {
-  QTreeWidgetItem *molItem = new QTreeWidgetItem(_groupItem);
-  molItem->setText(NAME, QString(_mol->getName().c_str()));
-  molItem->setFlags(molItem->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable);
-  molItem->setCheckState(VISIBILITY, Qt::Unchecked);
-  molItem->setText(ATOMCOUNT, QString::number(_mol->getAtomCount()));
-  molItem->setText(FORMULA, QString(_molecule_formula.c_str()));
-  const int index = _mol->getId();
-  molItem->setData(0, Qt::UserRole, QVariant(index));
-  molItem->setSelected(World::getInstance().isSelected(_mol));
+  QList<QStandardItem *> molItems;
+  QStandardItem *mainitem = new QStandardItem(QString(_mol->getName().c_str()));
+  mainitem->setFlags(mainitem->flags() | Qt::ItemIsSelectable);
+//  mainitem->setSelected(World::getInstance().isSelected(_mol));
+  MoleculeItemBiMap.left.insert( std::make_pair(_mol, mainitem) );
+  molItems << mainitem;
+  QStandardItem *visitem = new QStandardItem();
+  visitem->setCheckState(Qt::Unchecked);
+  visitem->setFlags(mainitem->flags() | Qt::ItemIsUserCheckable);
+  molItems << visitem;
+  molItems << new QStandardItem(QString::number(_mol->getAtomCount()));
+  molItems << new QStandardItem(QString(_molecule_formula.c_str()));
+  molItems << new QStandardItem(QString::number(0));
+//  const int index = _mol->getId();
+//  molItem->setData(0, Qt::UserRole, QVariant(index));
+  _groupitem->appendRow(molItems);
 }
 
@@ -166,5 +185,5 @@
   changing = true;
   // find group if already in list
-  QTreeWidgetItem *groupItem = NULL;
+  QStandardItem *groupItem = NULL;
 
   const std::string &molecule_formula = _mol->getFormula().toString();
@@ -197,6 +216,8 @@
 
   // increase group occurrence
-  int count = groupItem->text(OCCURRENCE).toInt() + 1;
-  groupItem->setText(OCCURRENCE, QString::number(count));
+  const int index = groupItem->index().row();
+  QStandardItem *occ_item = invisibleRootItem()->child(index, OCCURRENCE);
+  int count = occ_item->text().toInt() + 1;
+  occ_item->setText(QString::number(count));
 
   changing = false;
@@ -225,4 +246,5 @@
   formula.clear();
   FormulaVisibilityCountMap.clear();
+  MoleculeItemBiMap.clear();
 
   for (std::vector<molecule*>::const_iterator iter = molecules.begin();
@@ -236,4 +258,5 @@
 }
 
+/*
 void QtMoleculeList::paintEvent(QPaintEvent * event)
 {
@@ -242,9 +265,11 @@
   QTreeWidget::paintEvent(event);
 }
+*/
 
 void QtMoleculeList::subjectKilled(Observable *publisher) {
 }
 
-void QtMoleculeList::visibilityChanged(QTreeWidgetItem* item, int column)
+/*
+void QtMoleculeList::visibilityChanged(QStandardItem* item, int column)
 {
   if ((!changing) && (!clearing) && (!ChangingChildrensVisibility))
@@ -313,4 +338,5 @@
     }
 }
+*/
 
 void QtMoleculeList::moleculeChanged() {
@@ -326,4 +352,5 @@
 }
 
+/*
 void QtMoleculeList::rowsSelected(const QItemSelection & selected, const QItemSelection & deselected){
 
@@ -369,2 +396,4 @@
   selecting = false;
 }
+
+*/
Index: src/UIElements/Views/Qt4/QtMoleculeList.hpp
===================================================================
--- src/UIElements/Views/Qt4/QtMoleculeList.hpp	(revision 6770fae428b376912daabc349a23817dfb4f32e9)
+++ src/UIElements/Views/Qt4/QtMoleculeList.hpp	(revision 8ccf3bf66a4ce9f95ab6fdbedd40c087b343c68d)
@@ -14,6 +14,8 @@
 #endif
 
-#include <QtGui/QTreeWidget>
+#include <QtGui/QStandardItem>
+#include <QtGui/QStandardItemModel>
 
+#include <boost/bimap.hpp>
 #include <map>
 #include <string>
@@ -26,10 +28,10 @@
 class MoleculeListClass;
 
-class QtMoleculeList : public QTreeWidget, public Observer
+class QtMoleculeList : public QStandardItemModel, public Observer
 {
   Q_OBJECT
 
 public:
-  QtMoleculeList(QWidget * _parent=0);
+  QtMoleculeList();
   virtual ~QtMoleculeList();
 
@@ -38,5 +40,5 @@
   virtual void recieveNotification(Observable *publisher, Notification_ptr notification);
   virtual void subjectKilled(Observable *publisher);
-  virtual void paintEvent(QPaintEvent * event);
+//  virtual void paintEvent(QPaintEvent * event);
   void refill();
 
@@ -47,7 +49,8 @@
 private slots:
   void moleculeChanged();
-  void visibilityChanged(QTreeWidgetItem*, int);
+//  void visibilityChanged(QStandardItem*, int);
 
-  void rowsSelected(const QItemSelection & selected, const QItemSelection & deselected);
+//  void rowsSelected(const QItemSelection & selected, const QItemSelection & deselected);
+
 
 signals:
@@ -63,15 +66,20 @@
   bool ChangingChildrensVisibility;
 
-  void addItem(const molecule *_mol);
-  void addGroupItem(QTreeWidgetItem *&_groupItem, const std::string &_molecule_formula);
-  void addMoleculeItem(QTreeWidgetItem *&_groupItem, const molecule *_mol, const std::string &molecule_formula);
-  void removeItem(const molecule *_mol);
+  QStandardItem * MoleculeToItem(const molecule * const _mol);
+
+  void addItem(const molecule * const _mol);
+  void addGroupItem(QStandardItem *&mainitem, const std::string &_molecule_formula);
+  void addMoleculeItem(QStandardItem *_groupitem, const molecule *_mol, const std::string &molecule_formula);
+  void removeItem(const molecule * const _mol);
 
   typedef std::map<std::string, unsigned int> FormulaVisibilityCountMap_t;
   FormulaVisibilityCountMap_t FormulaVisibilityCountMap;
 
-  typedef std::map<std::string, QTreeWidgetItem*> FormulaTreeItemMap_t;
+  typedef std::map<std::string, QStandardItem*> FormulaTreeItemMap_t;
   //!> map of (unique) formulas in the world
   FormulaTreeItemMap_t formula;
+
+  typedef boost::bimap<const molecule *, QStandardItem*> MoleculeItemBiMap_t;
+  MoleculeItemBiMap_t MoleculeItemBiMap;
 };
 
