Index: src/UIElements/Qt4/QtMainWindow.cpp
===================================================================
--- src/UIElements/Qt4/QtMainWindow.cpp	(revision 7b59843c6e0fcf96629146aac977053a6deaab43)
+++ src/UIElements/Qt4/QtMainWindow.cpp	(revision 2b596f94d8d4eaae7f603d8c5e7e9546cc3cfe3f)
@@ -148,5 +148,6 @@
   qRegisterMetaType<moleculeId_t>("moleculeId_t");
 
-  connect(glWorldView,SIGNAL(hoverChanged(const atom*)), infoBox,SLOT(atomHover(const atom*)));
+  connect(glWorldView,SIGNAL(hoverChanged(const atom&)), infoBox,SLOT(atomHover(const atom&)));
+  connect(glWorldView,SIGNAL(hoverChanged(const molecule&, int)), infoBox,SLOT(moleculeHover(const molecule&)));
   connect(moleculeList,SIGNAL(moleculesVisibilityChanged(const moleculeId_t,bool)), glWorldView, SIGNAL(moleculesVisibilityChanged(const moleculeId_t,bool)));
 }
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.cpp	(revision 7b59843c6e0fcf96629146aac977053a6deaab43)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.cpp	(revision 2b596f94d8d4eaae7f603d8c5e7e9546cc3cfe3f)
@@ -166,7 +166,8 @@
    painter->modelViewMatrix().push();
    painter->modelViewMatrix().translate(m_position);
+   if ((m_scaleX != 1.0f) || (m_scaleY != 1.0f) || (m_scaleZ != 1.0f))
+     painter->modelViewMatrix().scale(m_scaleX, m_scaleY, m_scaleZ);
    if (m_rotationAngle != 0.0f)
      painter->modelViewMatrix().rotate(m_rotationAngle, m_rotationVector);
-   painter->modelViewMatrix().scale(m_scaleX, m_scaleY, m_scaleZ);
 
    // Apply the material and effect to the painter.
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 7b59843c6e0fcf96629146aac977053a6deaab43)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 2b596f94d8d4eaae7f603d8c5e7e9546cc3cfe3f)
@@ -133,4 +133,5 @@
   GLMoleculeObject(createMoleculeMesh(molref, parent), parent),
   Observer(std::string("GLMoleculeObject_molecule")+toString(molref->getId())),
+  isBoundingBoxUptodate(true),
   isSignedOn(false),
   _molecule(molref),
@@ -155,4 +156,7 @@
 
   init();
+
+  connect (this, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SLOT(hoverChangedSignalled(GLMoleculeObject *)));
+  connect (this, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SIGNAL(changed()));
 }
 
@@ -160,4 +164,5 @@
   GLMoleculeObject(mesh, parent),
   Observer(std::string("GLMoleculeObject_molecule")+toString(molref->getId())),
+  isBoundingBoxUptodate(true),
   isSignedOn(false),
   _molecule(molref),
@@ -182,4 +187,7 @@
 
   init();
+
+  connect (this, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SLOT(hoverChangedSignalled(GLMoleculeObject *)));
+  connect (this, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SIGNAL(changed()));
 }
 
@@ -204,9 +212,11 @@
 {
   if (_molecule->begin() != _molecule->end()) {
+    int atomicid = -1;
     for (molecule::const_iterator atomiter = _molecule->begin();
         atomiter != _molecule->end();
         atomiter++) {
       // create atom objects in scene
-      atomInserted((*atomiter)->getId());
+      atomicid = (*atomiter)->getId();
+      atomInserted(atomicid);
 
       // create bond objects in scene
@@ -221,4 +231,6 @@
       }
     }
+    // set id to one of the atom's as either mol or atoms is present at the same time
+    setObjectId(atomicid);
   }
 }
@@ -287,4 +299,5 @@
 void GLMoleculeObject_molecule::updateBoundingBox()
 {
+  isBoundingBoxUptodate = true;
   Shape shape = _molecule->getBoundingSphere();
   Vector v = shape.getCenter();
@@ -323,4 +336,5 @@
   #endif
         TesselationHullUptodate = false;
+        isBoundingBoxUptodate = false;
         atomInserted(_id);
         break;
@@ -333,4 +347,5 @@
   #endif
         TesselationHullUptodate = false;
+        isBoundingBoxUptodate = false;
         atomRemoved(_id);
         break;
@@ -338,9 +353,10 @@
       case molecule::AtomMoved:
       {
+  #ifdef LOG_OBSERVER
         const atomId_t _id = _molecule->lastChanged()->getId();
-  #ifdef LOG_OBSERVER
         observerLog().addMessage() << "++ Observer " << observerLog().getName(static_cast<Observer *>(this)) << " received notification that atom "+toString(_id)+" has been inserted.";
   #endif
         TesselationHullUptodate = false;
+        isBoundingBoxUptodate = false;
         break;
       }
@@ -368,5 +384,7 @@
 {
   // Initialize all of the mesh objects that we have as children.
-  GLMoleculeObject::initialize(view, painter);
+  if (m_visible) {
+    GLMoleculeObject::initialize(view, painter);
+  } else {
    foreach (QObject *obj, children()) {
      GLMoleculeObject *meshobj = qobject_cast<GLMoleculeObject *>(obj);
@@ -374,4 +392,5 @@
          meshobj->initialize(view, painter);
    }
+  }
 }
 
@@ -409,8 +428,4 @@
     m_mesh[0]->draw(painter);
 
-    // Draw a box around the mesh, if selected.
-    if (m_selected)
-      drawSelectionBox(painter);
-
     // Turn off the user effect, if present.
     if (m_effect)
@@ -431,4 +446,22 @@
         meshobj->draw(painter, cameraPlane);
     }
+
+    // update bounding box prior to selection
+    if (!isBoundingBoxUptodate)
+      updateBoundingBox();
+
+    painter->modelViewMatrix().push();
+    painter->modelViewMatrix().translate(m_position);
+    if ((m_scaleX != 1.0f) || (m_scaleY != 1.0f) || (m_scaleZ != 1.0f))
+      painter->modelViewMatrix().scale(m_scaleX, m_scaleY, m_scaleZ);
+    if (m_rotationAngle != 0.0f)
+      painter->modelViewMatrix().rotate(m_rotationAngle, m_rotationVector);
+
+    // Draw a box around the mesh, if selected.
+    if (m_selected)
+      drawSelectionBox(painter);
+
+    // Restore the modelview matrix.
+    painter->modelViewMatrix().pop();
   }
 }
@@ -458,5 +491,8 @@
   connect (atomObject, SIGNAL(indexChanged(GLMoleculeObject_atom*, int, int)), this, SIGNAL(changeAtomId(GLMoleculeObject_atom*, int, int)));
 
-  updateBoundingBox();
+  isBoundingBoxUptodate = false;
+
+  if (m_objectId  == -1)
+    setObjectId(_id);
 
   //bondsChanged(_atom);
@@ -474,4 +510,8 @@
   LOG(3, "INFO: GLWorldScene: Received signal atomRemoved for atom "+toString(_id)+".");
   // bonds are removed by signal coming from ~bond
+
+  if (m_objectId == _id)
+    setObjectId(-1);
+
   // remove atoms
   AtomNodeMap::iterator iter = AtomsinSceneMap.find(_id);
@@ -483,5 +523,5 @@
   delete atomObject;
 
-  updateBoundingBox();
+  isBoundingBoxUptodate = false;
 
   emit changeOccured();
@@ -498,8 +538,15 @@
         hoverAtom = World::getInstance().getAtom(AtomById(iter->first));
     }
-  }
-
-  // Propagate signal.
-  emit hoverChanged(hoverAtom);
+
+    // Propagate signal.
+    emit hoverChanged(*hoverAtom);
+  } else {
+    // Find the atom, ob corresponds to.
+    GLMoleculeObject_molecule *moleculeObject = dynamic_cast<GLMoleculeObject_molecule *>(ob);
+    if (moleculeObject == this){
+      // Propagate signal.
+      emit hoverChanged(*_molecule, 0);
+    }
+  }
 }
 
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp	(revision 7b59843c6e0fcf96629146aac977053a6deaab43)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp	(revision 2b596f94d8d4eaae7f603d8c5e7e9546cc3cfe3f)
@@ -57,5 +57,6 @@
   void changed();
   void changeOccured();
-  void hoverChanged(const atom*);
+  void hoverChanged(const atom&);
+  void hoverChanged(const molecule&, int);
   void atomClicked(atomId_t no);
   void changeAtomId(GLMoleculeObject_atom *, int, int);
@@ -87,4 +88,5 @@
   //!> states whether selection box is additionally drawn or not
   bool isSelected;
+  bool isBoundingBoxUptodate;
 
   //!> whether we are signed on to the associated molecule
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 7b59843c6e0fcf96629146aac977053a6deaab43)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 2b596f94d8d4eaae7f603d8c5e7e9546cc3cfe3f)
@@ -262,5 +262,6 @@
   connect (molObject, SIGNAL(selectionChanged()), this, SIGNAL(changed()));
   connect (molObject, SIGNAL(selectionChanged()), this, SIGNAL(changed()));
-  connect (molObject, SIGNAL(hoverChanged(const atom *)), this, SIGNAL(hoverChanged(const atom *)));
+  connect (molObject, SIGNAL(hoverChanged(const atom &)), this, SIGNAL(hoverChanged(const atom &)));
+  connect (molObject, SIGNAL(hoverChanged(const molecule &, int)), this, SIGNAL(hoverChanged(const molecule &, int)));
   emit changed();
   emit changeOccured();
@@ -460,3 +461,2 @@
   molObject->atomInserted(oldId);
 }
-
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 7b59843c6e0fcf96629146aac977053a6deaab43)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 2b596f94d8d4eaae7f603d8c5e7e9546cc3cfe3f)
@@ -75,5 +75,6 @@
   void clicked(atomId_t);
   void doubleClicked();
-  void hoverChanged(const atom *);
+  void hoverChanged(const atom &);
+  void hoverChanged(const molecule &, int);
 
 private slots:
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 7b59843c6e0fcf96629146aac977053a6deaab43)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 2b596f94d8d4eaae7f603d8c5e7e9546cc3cfe3f)
@@ -86,5 +86,6 @@
   connect(worldscene, SIGNAL(changeOccured()), this, SLOT(changeSignalled()));
   connect(worldscene, SIGNAL(changed()), this, SIGNAL(changed()));
-  connect(worldscene, SIGNAL(hoverChanged(const atom *)), this, SLOT(sceneHoverSignalled(const atom *)));
+  connect(worldscene, SIGNAL(hoverChanged(const atom &)), this, SLOT(sceneHoverSignalled(const atom &)));
+  connect(worldscene, SIGNAL(hoverChanged(const molecule &, int)), this, SLOT(sceneHoverSignalled(const molecule &, int)));
   connect(this, SIGNAL(worldSelectionChanged()), worldscene, SLOT(worldSelectionChanged()));
   connect(this, SIGNAL(moleculeRemoved(const moleculeId_t)), worldscene, SLOT(moleculeRemoved(const moleculeId_t)));
@@ -730,6 +731,11 @@
 }
 
-void GLWorldView::sceneHoverSignalled(const atom *_atom)
+void GLWorldView::sceneHoverSignalled(const atom &_atom)
 {
   emit hoverChanged(_atom);
 }
+
+void GLWorldView::sceneHoverSignalled(const molecule &_mol, int _i)
+{
+  emit hoverChanged(_mol, _i);
+}
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision 7b59843c6e0fcf96629146aac977053a6deaab43)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision 2b596f94d8d4eaae7f603d8c5e7e9546cc3cfe3f)
@@ -51,5 +51,6 @@
   void checkChanges();
   void sceneChangeSignalled();
-  void sceneHoverSignalled(const atom *_atom);
+  void sceneHoverSignalled(const atom &_atom);
+  void sceneHoverSignalled(const molecule &_mol, int);
   void changeDreiBein();
   void changeDomain();
@@ -61,5 +62,6 @@
   void moleculeRemoved(const moleculeId_t _id);
   void worldSelectionChanged();
-  void hoverChanged(const atom *_atom);
+  void hoverChanged(const atom &_atom);
+  void hoverChanged(const molecule &_mol, int);
   void ShapeAdded();
   void ShapeRemoved();
Index: src/UIElements/Views/Qt4/QtInfoBox.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtInfoBox.cpp	(revision 7b59843c6e0fcf96629146aac977053a6deaab43)
+++ src/UIElements/Views/Qt4/QtInfoBox.cpp	(revision 2b596f94d8d4eaae7f603d8c5e7e9546cc3cfe3f)
@@ -50,4 +50,5 @@
     QTabWidget(),
     curAtom(NULL), nextAtom(NULL),
+    curMolecule(NULL), nextMolecule(NULL),
     page_mol(NULL), page_atom(NULL)
 {
@@ -67,7 +68,13 @@
 }
 
-void QtInfoBox::atomHover(const atom *_atom)
-{
-  nextAtom = _atom;
+void QtInfoBox::atomHover(const atom &_atom)
+{
+  nextAtom = &_atom;
+  timer->start(500);
+}
+
+void QtInfoBox::moleculeHover(const molecule &_mol)
+{
+  nextMolecule = &_mol;
   timer->start(500);
 }
@@ -77,4 +84,6 @@
   if (nextAtom)
     showAtom(nextAtom);
+  if (nextMolecule)
+    showMolecule(nextMolecule);
 }
 
@@ -101,4 +110,6 @@
 
   curAtom = _atom;
+  nextAtom = NULL;
+  nextMolecule = NULL;
 
   // Show new tabs.
@@ -116,4 +127,26 @@
         setCurrentIndex(currentPage);
     }
+  }
+}
+
+void QtInfoBox::showMolecule(const molecule *_mol)
+{
+  currentPage = currentIndex();
+
+  // Remove old tabs.
+  clearTabs();
+
+  curMolecule = _mol;
+  nextAtom = NULL;
+  nextMolecule = NULL;
+
+  // Show new tabs.
+  if (curMolecule){
+    page_mol = new QtMoleculeInfoPage(curMolecule, this);
+    addTab(page_mol, "Molecule");
+    connect(page_mol, SIGNAL(moleculeKilled()), this, SLOT(clearTabs()));
+
+    if (currentPage > 0)
+      setCurrentIndex(currentPage);
   }
 }
Index: src/UIElements/Views/Qt4/QtInfoBox.hpp
===================================================================
--- src/UIElements/Views/Qt4/QtInfoBox.hpp	(revision 7b59843c6e0fcf96629146aac977053a6deaab43)
+++ src/UIElements/Views/Qt4/QtInfoBox.hpp	(revision 2b596f94d8d4eaae7f603d8c5e7e9546cc3cfe3f)
@@ -36,7 +36,9 @@
 
   void showAtom(const atom *_atom);
+  void showMolecule(const molecule *_mol);
 
 public slots:
-  void atomHover(const atom *_atom);
+  void atomHover(const atom &_atom);
+  void moleculeHover(const molecule &_mol);
   void timerTimeout();
 
@@ -46,4 +48,6 @@
   const atom *curAtom;
   const atom *nextAtom;
+  const molecule *curMolecule;
+  const molecule *nextMolecule;
   QtMoleculeInfoPage *page_mol;
   QtAtomInfoPage *page_atom;
