Index: src/UIElements/Views/Qt4/MoleculeList/QtMoleculeListView.cpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/QtMoleculeListView.cpp	(revision 5cd3a33dde0272c791c7c835e2462b3665503c8f)
+++ src/UIElements/Views/Qt4/MoleculeList/QtMoleculeListView.cpp	(revision 0f368b73ae46e213e4c9d728e86e305aa897fa50)
@@ -35,7 +35,8 @@
 #include "QtMoleculeListView.hpp"
 
+#include <QtCore/QMetaType>
+
 #include "UIElements/Views/Qt4/MoleculeList/QtMoleculeList.hpp"
 #include "UIElements/Views/Qt4/MoleculeList/QtMoleculeItem.hpp"
-#include "UIElements/Views/Qt4/QtSelectionChangedAgent.hpp"
 
 #include "CodePatterns/MemDebug.hpp"
@@ -45,5 +46,6 @@
 #include "Actions/SelectionAction/Molecules/MoleculeByIdAction.hpp"
 #include "Actions/SelectionAction/Molecules/NotMoleculeByIdAction.hpp"
-
+#include "MoleculeObserver.hpp"
+#include "molecule.hpp"
 #include "World.hpp"
 
@@ -54,8 +56,14 @@
 {
   setSelectionMode(QAbstractItemView::MultiSelection);
+
+  qRegisterMetaType<QItemSelection>("QItemSelection");
+
+  MoleculeObserver::getInstance().signOn(this, molecule::SelectionChanged);
 }
 
 QtMoleculeListView::~QtMoleculeListView()
-{}
+{
+  MoleculeObserver::getInstance().signOff(this, molecule::SelectionChanged);
+}
 
 void QtMoleculeListView::setModel(QtMoleculeList *_moleculelist)
@@ -66,13 +74,4 @@
       selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
       this, SLOT(rowsSelected(const QItemSelection &, const QItemSelection &)), Qt::DirectConnection);
-}
-
-
-void QtMoleculeListView::setSelectionChangedAgent(QtSelectionChangedAgent *agent)
-{
-  connect(agent, SIGNAL(moleculeSelected(const moleculeId_t)),
-      this, SLOT(MoleculeSelected(const moleculeId_t)));
-  connect(agent, SIGNAL(moleculeUnselected(const moleculeId_t)),
-      this, SLOT(MoleculeUnselected(const moleculeId_t)));
 }
 
@@ -243,8 +242,27 @@
       }
       default:
-        ASSERT(0, "QtMoleculeListView::recieveNotification() - cannot get here, not subscribed to channel "
+        ASSERT(0, "QtMoleculeListView::recieveNotification() - cannot get here, not subscribed to World's channel "
             +toString(notification->getChannelNo()));
         break;
     }
+  } else if (dynamic_cast<molecule*>(publisher) != NULL) {
+    const molecule * const mol = dynamic_cast<molecule *>(publisher);
+    switch (notification->getChannelNo()) {
+      case molecule::SelectionChanged:
+      {
+        if (mol->getSelected())
+          MoleculeSelected(mol->getId());
+        else
+          MoleculeUnselected(mol->getId());
+        break;
+      }
+      default:
+        ASSERT(0, "QtMoleculeListView::recieveNotification() - cannot get here, not subscribed to mol's channel "
+            +toString(notification->getChannelNo()));
+        break;
+    }
+  } else {
+    ASSERT(0,
+        "QtMoleculeListView::recieveNotification() - cannot get here, unknown publisher "+toString(publisher));
   }
 }
Index: src/UIElements/Views/Qt4/MoleculeList/QtMoleculeListView.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/QtMoleculeListView.hpp	(revision 5cd3a33dde0272c791c7c835e2462b3665503c8f)
+++ src/UIElements/Views/Qt4/MoleculeList/QtMoleculeListView.hpp	(revision 0f368b73ae46e213e4c9d728e86e305aa897fa50)
@@ -22,5 +22,4 @@
 
 class QtMoleculeList;
-class QtSelectionChangedAgent;
 
 class QtMoleculeListView : public QTreeView, public Observer
@@ -34,11 +33,6 @@
   void setModel(QtMoleculeList *_moleculelist);
 
-  void setSelectionChangedAgent(QtSelectionChangedAgent *agent);
-
 public slots:
   void rowsSelected(const QItemSelection&, const QItemSelection&);
-
-  void MoleculeSelected(const moleculeId_t _id);
-  void MoleculeUnselected(const moleculeId_t _id);
 
 protected:
@@ -48,4 +42,7 @@
 
 private:
+  void MoleculeSelected(const moleculeId_t _id);
+  void MoleculeUnselected(const moleculeId_t _id);
+
   QModelIndex setIndexToLastColumn(const QModelIndex &_index) const;
 
