Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.cpp	(revision 8c001aeb40538cff3bf30540d0cc0b8359472d75)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.cpp	(revision 739ee9365702db570a88ff6eecfa0f87be1ec93b)
@@ -82,4 +82,5 @@
    m_hovering = false;
    m_selected = false;
+   m_visible = true;
    m_material = 0;
    initStaticMaterials();
@@ -328,2 +329,10 @@
   }
 }
+
+void GLMoleculeObject::setVisible(bool value)
+{
+  if (value != m_visible){
+    m_visible = value;
+    emit changed();
+  }
+}
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.hpp	(revision 8c001aeb40538cff3bf30540d0cc0b8359472d75)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.hpp	(revision 739ee9365702db570a88ff6eecfa0f87be1ec93b)
@@ -74,4 +74,7 @@
    void setSelected(bool value);
 
+   bool visible() const { return m_visible; }
+   void setVisible(bool value);
+
    void initStaticMaterials();
    virtual void initialize(QGLView *view, QGLPainter *painter);
@@ -124,4 +127,5 @@
    bool m_hovering;
    bool m_selected;
+   bool m_visible;
 };
 
Index: src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 8c001aeb40538cff3bf30540d0cc0b8359472d75)
+++ src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp	(revision 739ee9365702db570a88ff6eecfa0f87be1ec93b)
@@ -74,4 +74,7 @@
   World::getInstance().signOn(this, World::SelectionChanged);
   updateBoundingBox();
+
+  // initially, atoms and bonds should be visible
+  m_visible = false;
 
   init();
@@ -256,11 +259,15 @@
 void GLMoleculeObject_molecule::draw(QGLPainter *painter, const QVector4D &cameraPlane)
 {
-   // Draw all of the mesh objects that we have as children.
-  GLMoleculeObject::draw(painter, cameraPlane);
-   foreach (QObject *obj, children()) {
-     GLMoleculeObject *meshobj = qobject_cast<GLMoleculeObject *>(obj);
-       if (meshobj)
-         meshobj->draw(painter, cameraPlane);
-   }
+  // draw either molecule's mesh or all atoms and bonds
+  if (m_visible) {
+    GLMoleculeObject::draw(painter, cameraPlane);
+  } else {
+    // Draw all of the mesh objects that we have as children.
+    foreach (QObject *obj, children()) {
+      GLMoleculeObject *meshobj = qobject_cast<GLMoleculeObject *>(obj);
+      if (meshobj)
+        meshobj->draw(painter, cameraPlane);
+    }
+  }
 }
 
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 8c001aeb40538cff3bf30540d0cc0b8359472d75)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp	(revision 739ee9365702db570a88ff6eecfa0f87be1ec93b)
@@ -286,4 +286,17 @@
 }
 
+void GLWorldScene::moleculesVisibilityChanged(const moleculeId_t _id, bool _visible)
+{
+  MoleculeNodeMap::iterator iter = MoleculesinSceneMap.find(_id);
+  ASSERT( iter != MoleculesinSceneMap.end(),
+      "GLWorldScene::moleculeInserted() - molecule's id "+toString(_id)+" is unknown.");
+
+  GLMoleculeObject_molecule *molObject = iter->second;
+  molObject->setVisible(_visible);
+
+  emit changed();
+  emit changeOccured();
+}
+
 /** Adds a bond to the scene.
  *
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 8c001aeb40538cff3bf30540d0cc0b8359472d75)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp	(revision 739ee9365702db570a88ff6eecfa0f87be1ec93b)
@@ -92,4 +92,5 @@
   void removeShape();
   void update();
+  void moleculesVisibilityChanged(const moleculeId_t _id, bool _visible);
 
 public:
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 8c001aeb40538cff3bf30540d0cc0b8359472d75)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp	(revision 739ee9365702db570a88ff6eecfa0f87be1ec93b)
@@ -92,4 +92,5 @@
   //connect(this, SIGNAL(changed()), this, SLOT(updateGL()));
   connect(this, SIGNAL(changed()), this, SLOT(sceneChangeSignalled()));
+  connect(this, SIGNAL(moleculesVisibilityChanged(const moleculeId_t,bool)), worldscene, SLOT(moleculesVisibilityChanged(const moleculeId_t,bool)));
 
   // sign on to changes in the world
Index: src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp
===================================================================
--- src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision 8c001aeb40538cff3bf30540d0cc0b8359472d75)
+++ src/UIElements/Views/Qt4/Qt3D/GLWorldView.hpp	(revision 739ee9365702db570a88ff6eecfa0f87be1ec93b)
@@ -64,4 +64,5 @@
   void ShapeAdded();
   void ShapeRemoved();
+  void moleculesVisibilityChanged(const moleculeId_t,bool);
 
 protected:
