Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp	(revision 3b9aa1d67a8d8ea7123888eda5cdd0f9d1ac1060)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp	(revision b4358580663f9c1c016fb856bc7bb23862101215)
@@ -78,4 +78,5 @@
   connect( ObservedAtom.get(), SIGNAL(positionChanged()), this, SLOT(resetPosition()));
   connect( ObservedAtom.get(), SIGNAL(bondsChanged()), this, SLOT(resetPosition()));
+  connect( ObservedAtom.get(), SIGNAL(selectedChanged()), this, SLOT(resetSelected()));
 
   // use that ObservedValues::AtomBonds is always up-to-date
@@ -162,22 +163,13 @@
 }
 
-void GLMoleculeObject_atom::Selected()
+void GLMoleculeObject_atom::resetSelected()
 {
-  ASSERT( !m_selected,
-      "GLMoleculeObject_atom::Selected() - 3D rep of atom is already selected.");
-  m_selected = true;
+  const bool new_selected = ObservedAtom->getAtomSelected();
+  ASSERT( m_selected != new_selected,
+      "GLMoleculeObject_atom::resetSelected() - new and old selection state are the same.");
+  m_selected = new_selected;
 
   emit changed();
 }
-
-void GLMoleculeObject_atom::Unselected()
-{
-  ASSERT( m_selected,
-      "GLMoleculeObject_atom::Unselected() - 3D rep of atom is already unselected.");
-  m_selected = false;
-
-  emit changed();
-}
-
 
 void GLMoleculeObject_atom::draw(QGLPainter *painter, const QVector4D &cameraPlane)
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.hpp	(revision 3b9aa1d67a8d8ea7123888eda5cdd0f9d1ac1060)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.hpp	(revision b4358580663f9c1c016fb856bc7bb23862101215)
@@ -41,8 +41,4 @@
   void draw(QGLPainter *painter, const QVector4D &cameraPlane);
 
-public slots:
-  void Selected();
-  void Unselected();
-
 private slots:
   void wasClicked();
@@ -51,4 +47,5 @@
   void resetPosition();
   void resetBonds();
+  void resetSelected();
 
 signals:
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 3b9aa1d67a8d8ea7123888eda5cdd0f9d1ac1060)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision b4358580663f9c1c016fb856bc7bb23862101215)
@@ -151,4 +151,5 @@
   connect (ObservedMolecule.get(), SIGNAL(atomInserted(const atomId_t)), this, SLOT(atomInserted(const atomId_t)));
   connect (ObservedMolecule.get(), SIGNAL(atomRemoved(const atomId_t)), this, SLOT(atomRemoved(const atomId_t)));
+  connect (ObservedMolecule.get(), SIGNAL(selectedChanged()), this, SLOT(resetSelected()));
 
   connect( this, SIGNAL(clicked()), this, SLOT(wasClicked()));
@@ -280,45 +281,13 @@
 }
 
-void GLMoleculeObject_molecule::AtomSelected(const atomId_t _id)
-{
-  AtomNodeMap::iterator iter = AtomsinSceneMap.find(_id);
-  if (iter != AtomsinSceneMap.end())
-    QMetaObject::invokeMethod(iter->second,        // pointer to a QObject
-                            "Selected",       // member name (no parameters here)
-                            Qt::QueuedConnection);     // connection type
-  else
-    ELOG(2, "GLMoleculeObject_molecule::AtomSelected() - atom "
-        << _id << " unknown to GLMoleculeObject_molecule.");
-}
-
-void GLMoleculeObject_molecule::AtomUnselected(const atomId_t _id)
-{
-  AtomNodeMap::iterator iter = AtomsinSceneMap.find(_id);
-  if (iter != AtomsinSceneMap.end())
-    QMetaObject::invokeMethod(iter->second,        // pointer to a QObject
-                            "Unselected",       // member name (no parameters here)
-                            Qt::QueuedConnection);     // connection type
-  else ELOG(2,  "GLMoleculeObject_molecule::AtomUnselected() - atom "
-      << _id << " unknown to GLMoleculeObject_molecule.");
-}
-
-void GLMoleculeObject_molecule::Selected()
-{
-  ASSERT( !m_selected,
-      "GLMoleculeObject_molecule::Selected() - 3D rep of molecule is already selected.");
-  m_selected = true;
+void GLMoleculeObject_molecule::resetSelected()
+{
+  const bool new_selected = ObservedMolecule->getMolSelected();
+  ASSERT( m_selected != new_selected,
+      "GLMoleculeObject_molecule::resetSelected() - new and old selection state are the same.");
+  m_selected = new_selected;
 
   emit changed();
 }
-
-void GLMoleculeObject_molecule::Unselected()
-{
-  ASSERT( m_selected,
-      "GLMoleculeObject_molecule::Unselected() - 3D rep of molecule is already unselected.");
-  m_selected = false;
-
-  emit changed();
-}
-
 
 void GLMoleculeObject_molecule::initialize(QGLView *view, QGLPainter *painter)
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp	(revision 3b9aa1d67a8d8ea7123888eda5cdd0f9d1ac1060)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp	(revision b4358580663f9c1c016fb856bc7bb23862101215)
@@ -90,9 +90,5 @@
   void resetBoundingBox();
   void resetIndex();
-
-  void AtomSelected(const atomId_t _id);
-  void AtomUnselected(const atomId_t _id);
-  void Selected();
-  void Unselected();
+  void resetSelected();
 
 private:
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 3b9aa1d67a8d8ea7123888eda5cdd0f9d1ac1060)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision b4358580663f9c1c016fb856bc7bb23862101215)
@@ -50,5 +50,4 @@
 
 #include "UIElements/Qt4/InstanceBoard/QtObservedInstanceBoard.hpp"
-#include "UIElements/Views/Qt4/QtSelectionChangedAgent.hpp"
 
 #include "CodePatterns/MemDebug.hpp"
@@ -438,17 +437,4 @@
 }
 
-void GLWorldScene::setSelectionChangedAgent(QtSelectionChangedAgent *agent)
-{
-  connect(agent, SIGNAL(atomSelected(const moleculeId_t, const atomId_t)),
-      this, SLOT(AtomSelected(const moleculeId_t, const atomId_t)));
-  connect(agent, SIGNAL(atomUnselected(const moleculeId_t, const atomId_t)),
-      this, SLOT(AtomUnselected(const moleculeId_t, const atomId_t)));
-
-  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)));
-}
-
 void GLWorldScene::setSelectionModeAtom()
 {
@@ -500,57 +486,2 @@
 }
 
-void GLWorldScene::AtomSelected(const moleculeId_t _molid, const atomId_t _id)
-{
-  boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
-  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_molid);
-  // use direct connection as it's lightweight and we avoid index change troubles
-  if (iter != MoleculesinSceneMap.end())
-    QMetaObject::invokeMethod(iter->second,        // pointer to a QObject
-                            "AtomSelected",       // member name (no parameters here)
-                            Qt::DirectConnection,     // connection type
-                            Q_ARG(const atomId_t, _id));     // parameters
-  else
-    ELOG(2, "DEBUG: GLWorldScene::AtomSelected() - molecule " <<
-        _molid << " unknown to GLWorldScene.");
-}
-
-void GLWorldScene::AtomUnselected(const moleculeId_t _molid, const atomId_t _id)
-{
-  boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
-  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_molid);
-  // use direct connection as it's lightweight and we avoid index change troubles
-  if (iter != MoleculesinSceneMap.end())
-    QMetaObject::invokeMethod(iter->second,        // pointer to a QObject
-                            "AtomUnselected",       // member name (no parameters here)
-                            Qt::DirectConnection,     // connection type
-                            Q_ARG(const atomId_t, _id));     // parameters
-  else
-    ELOG(2, "GLWorldScene::AtomUnselected() - molecule "
-        << _molid << " unknown to GLWorldScene.");
-}
-
-void GLWorldScene::MoleculeSelected(const moleculeId_t _molid)
-{
-  boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
-MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_molid);
-  if (iter != MoleculesinSceneMap.end())
-    QMetaObject::invokeMethod(iter->second,        // pointer to a QObject
-                            "Selected",       // member name (no parameters here)
-                            Qt::QueuedConnection);     // connection type
-  else
-    ELOG(2, "GLWorldScene::MoleculeSelected() - molecule "
-        << _molid << " unknown to GLWorldScene.");
-}
-
-void GLWorldScene::MoleculeUnselected(const moleculeId_t _molid)
-{
-  boost::recursive_mutex::scoped_lock lock(MoleculeinSceneMap_mutex);
-  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_molid);
-  if (iter != MoleculesinSceneMap.end())
-    QMetaObject::invokeMethod(iter->second,        // pointer to a QObject
-                            "Unselected",       // member name (no parameters here)
-                            Qt::QueuedConnection);     // connection type
-  else
-    ELOG(2, "GLWorldScene::MoleculeUnselected() - molecule "
-        << _molid << " unknown to GLWorldScene.");
-}
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 3b9aa1d67a8d8ea7123888eda5cdd0f9d1ac1060)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision b4358580663f9c1c016fb856bc7bb23862101215)
@@ -39,5 +39,4 @@
 class GLMoleculeObject_molecule;
 class GLMoleculeObject_shape;
-class QtSelectionChangedAgent;
 
 class QtObservedInstanceBoard;
@@ -73,6 +72,4 @@
   void setSelectionMode(SelectionModeType mode);
 
-  void setSelectionChangedAgent(QtSelectionChangedAgent *agent);
-
 signals:
   void changed();
@@ -102,9 +99,4 @@
   void moleculesVisibilityChanged(const moleculeId_t _id, bool _visible);
   void changeMoleculeId(GLMoleculeObject_molecule *, const moleculeId_t, const moleculeId_t);
-
-  void AtomSelected(const moleculeId_t _molid, const atomId_t);
-  void AtomUnselected(const moleculeId_t _molid, const atomId_t);
-  void MoleculeSelected(const moleculeId_t);
-  void MoleculeUnselected(const moleculeId_t);
 
 public:
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 3b9aa1d67a8d8ea7123888eda5cdd0f9d1ac1060)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision b4358580663f9c1c016fb856bc7bb23862101215)
@@ -313,9 +313,4 @@
 }
 
-void GLWorldView::setSelectionChangedAgent(QtSelectionChangedAgent *agent)
-{
-  worldscene->setSelectionChangedAgent(agent);
-}
-
 /**
  * Update operation which can be invoked by the observable (which should be the
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision 3b9aa1d67a8d8ea7123888eda5cdd0f9d1ac1060)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision b4358580663f9c1c016fb856bc7bb23862101215)
@@ -26,5 +26,4 @@
 class QToolBar;
 class QTimer;
-class QtSelectionChangedAgent;
 
 class QtObservedInstanceBoard;
@@ -46,6 +45,4 @@
   void createDomainBox();
   void createDreiBein();
-
-  void setSelectionChangedAgent(QtSelectionChangedAgent *agent);
 
   // Observer functions
