Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision f714763c1502a8d2a462b4e01ad3c708f9fa17cf)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 015f8c18d74c335a5af0741c3ff7f82dfcbfa0d1)
@@ -43,9 +43,11 @@
 #include <Qt3D/qglcylinder.h>
 
-#include "GLMoleculeObject.hpp"
-#include "GLMoleculeObject_atom.hpp"
-#include "GLMoleculeObject_bond.hpp"
-#include "GLMoleculeObject_molecule.hpp"
-#include "GLMoleculeObject_shape.hpp"
+#include "UIElements/Views/Qt4/Qt3D/GLMoleculeObject.hpp"
+#include "UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.hpp"
+#include "UIElements/Views/Qt4/Qt3D/GLMoleculeObject_bond.hpp"
+#include "UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp"
+#include "UIElements/Views/Qt4/Qt3D/GLMoleculeObject_shape.hpp"
+
+#include "UIElements/Views/Qt4/QtSelectionChangedAgent.hpp"
 
 #include "CodePatterns/MemDebug.hpp"
@@ -417,4 +419,17 @@
 }
 
+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()
 {
@@ -463,2 +478,48 @@
   }
 }
+
+void GLWorldScene::AtomSelected(const moleculeId_t _molid, const atomId_t _id)
+{
+  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_molid);
+  ASSERT( iter != MoleculesinSceneMap.end(),
+      "GLWorldScene::AtomSelected() - molecule "+toString(_molid)
+      +" unknown to GLWorldScene.");
+  QMetaObject::invokeMethod(iter->second,        // pointer to a QObject
+                            "AtomSelected",       // member name (no parameters here)
+                            Qt::QueuedConnection,     // connection type
+                            Q_ARG(const atomId_t, _id));     // parameters
+}
+
+void GLWorldScene::AtomUnselected(const moleculeId_t _molid, const atomId_t _id)
+{
+  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_molid);
+  ASSERT( iter != MoleculesinSceneMap.end(),
+      "GLWorldScene::AtomUnselected() - molecule "+toString(_molid)
+      +" unknown to GLWorldScene.");
+  QMetaObject::invokeMethod(iter->second,        // pointer to a QObject
+                            "AtomUnselected",       // member name (no parameters here)
+                            Qt::QueuedConnection,     // connection type
+                            Q_ARG(const atomId_t, _id));     // parameters
+}
+
+void GLWorldScene::MoleculeSelected(const moleculeId_t _molid)
+{
+  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_molid);
+  ASSERT( iter != MoleculesinSceneMap.end(),
+      "GLWorldScene::MoleculeSelected() - molecule "+toString(_molid)
+      +" unknown to GLWorldScene.");
+  QMetaObject::invokeMethod(iter->second,        // pointer to a QObject
+                            "Selected",       // member name (no parameters here)
+                            Qt::QueuedConnection);     // connection type
+}
+
+void GLWorldScene::MoleculeUnselected(const moleculeId_t _molid)
+{
+  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_molid);
+  ASSERT( iter != MoleculesinSceneMap.end(),
+      "GLWorldScene::MoleculeUnselected() - molecule "+toString(_molid)
+      +" unknown to GLWorldScene.");
+  QMetaObject::invokeMethod(iter->second,        // pointer to a QObject
+                            "Unselected",       // member name (no parameters here)
+                            Qt::QueuedConnection);     // connection type
+}
