Index: src/UIElements/Qt4/QtMainWindow.cpp
===================================================================
--- src/UIElements/Qt4/QtMainWindow.cpp	(revision 8c001aeb40538cff3bf30540d0cc0b8359472d75)
+++ src/UIElements/Qt4/QtMainWindow.cpp	(revision 739ee9365702db570a88ff6eecfa0f87be1ec93b)
@@ -146,5 +146,8 @@
   settings.endGroup();
 
+  qRegisterMetaType<moleculeId_t>("moleculeId_t");
+
   connect(glWorldView,SIGNAL(hoverChanged(const atom*)), infoBox,SLOT(atomHover(const atom*)));
+  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 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:
Index: src/UIElements/Views/Qt4/QtMoleculeList.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtMoleculeList.cpp	(revision 8c001aeb40538cff3bf30540d0cc0b8359472d75)
+++ src/UIElements/Views/Qt4/QtMoleculeList.cpp	(revision 739ee9365702db570a88ff6eecfa0f87be1ec93b)
@@ -55,5 +55,5 @@
 // these attributes are skipped so far
 const int QtMoleculeList::COLUMNCOUNT = COLUMNTYPES_MAX;
-const char *QtMoleculeList::COLUMNNAMES[QtMoleculeList::COLUMNCOUNT]={"Name","Atoms","Formula","Occurrence"/*,"Size"*/};
+const char *QtMoleculeList::COLUMNNAMES[QtMoleculeList::COLUMNCOUNT]={"Name","Visibility", "Atoms","Formula","Occurrence"/*,"Size"*/};
 
 QtMoleculeList::QtMoleculeList(QWidget * _parent) :
@@ -81,5 +81,5 @@
   //connect(this,SIGNAL(cellChanged(int,int)),this,SLOT(moleculeChanged(int,int)));
   connect(selectionModel(),SIGNAL(selectionChanged(QItemSelection, QItemSelection)),this,SLOT(rowsSelected(QItemSelection, QItemSelection)));
-
+  connect(this, SIGNAL(itemChanged(QTreeWidgetItem*, int)), this, SLOT(visibilityChanged(QTreeWidgetItem*, int)));
 }
 
@@ -128,8 +128,10 @@
       formula.push_back((*iter)->getFormula());
       groupItem = new QTreeWidgetItem(this);
-      groupItem->setText(0, QString("default"));
-      groupItem->setText(1, QString::number(0));
-      groupItem->setText(2, QString(""));
-      groupItem->setText(3, "0");
+      groupItem->setText(NAME, QString("default"));
+//      groupItem->setFlags(groupItem->flags() | Qt::ItemIsUserCheckable);
+//      groupItem->setCheckState(VISIBILITY, Qt::Checked);
+      groupItem->setText(ATOMCOUNT, QString::number(0));
+      groupItem->setText(FORMULA, QString(""));
+      groupItem->setText(OCCURRENCE, "0");
       groupItem->setData(0, Qt::UserRole, QVariant(-1));
     }
@@ -137,7 +139,9 @@
     // add molecule
     QTreeWidgetItem *molItem = new QTreeWidgetItem(groupItem);
-    molItem->setText(0, QString((*iter)->getName().c_str()));
-    molItem->setText(1, QString::number((*iter)->getAtomCount()));
-    molItem->setText(2, QString((*iter)->getFormula().toString().c_str()));
+    molItem->setText(NAME, QString((*iter)->getName().c_str()));
+    molItem->setFlags(groupItem->flags() | Qt::ItemIsUserCheckable);
+    molItem->setCheckState(VISIBILITY, Qt::Unchecked);
+    molItem->setText(ATOMCOUNT, QString::number((*iter)->getAtomCount()));
+    molItem->setText(FORMULA, QString((*iter)->getFormula().toString().c_str()));
     const int index = (*iter)->getId();
     molItem->setData(0, Qt::UserRole, QVariant(index));
@@ -146,6 +150,6 @@
 
     // increase group occurrence
-    int count = groupItem->text(3).toInt() + 1;
-    groupItem->setText(3, QString::number(count));
+    int count = groupItem->text(4).toInt() + 1;
+    groupItem->setText(OCCURRENCE, QString::number(count));
   }
   dirty = false;
@@ -161,4 +165,13 @@
 
 void QtMoleculeList::subjectKilled(Observable *publisher) {
+}
+
+void QtMoleculeList::visibilityChanged(QTreeWidgetItem* item, int column)
+{
+  if (column == VISIBILITY) {
+    const moleculeId_t molid = item->data(0, Qt::UserRole).toInt();
+    const bool visible = item->checkState(VISIBILITY);
+    emit moleculesVisibilityChanged(molid, visible);
+  }
 }
 
Index: src/UIElements/Views/Qt4/QtMoleculeList.hpp
===================================================================
--- src/UIElements/Views/Qt4/QtMoleculeList.hpp	(revision 8c001aeb40538cff3bf30540d0cc0b8359472d75)
+++ src/UIElements/Views/Qt4/QtMoleculeList.hpp	(revision 739ee9365702db570a88ff6eecfa0f87be1ec93b)
@@ -18,4 +18,6 @@
 #include "CodePatterns/Observer/Observer.hpp"
 
+#include "types.hpp"
+
 class molecule;
 class MoleculeListClass;
@@ -36,9 +38,10 @@
 
   static const int COLUMNCOUNT;
-  enum {NAME,ATOMCOUNT,FORMULA,OCCURRENCE,COLUMNTYPES_MAX} COLUMNTYPES;
+  enum {NAME,VISIBILITY,ATOMCOUNT,FORMULA,OCCURRENCE,COLUMNTYPES_MAX} COLUMNTYPES;
   static const char *COLUMNNAMES[];
 
 private slots:
   void moleculeChanged();
+  void visibilityChanged(QTreeWidgetItem*, int);
 
   void rowsSelected(const QItemSelection & selected, const QItemSelection & deselected);
@@ -47,4 +50,5 @@
   void moleculeSelected(molecule*);
   void moleculeUnSelected(molecule*);
+  void moleculesVisibilityChanged(const moleculeId_t, bool);
 
 private:
