Index: src/UIElements/Views/Qt4/MoleculeList/QtMoleculeList.cpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/QtMoleculeList.cpp	(revision a39d72c6d5edf5fa534720d234e4a54c6dcfc17a)
+++ src/UIElements/Views/Qt4/MoleculeList/QtMoleculeList.cpp	(revision 5b61e5e3ff8d5a18604de0315358ab7a74c40a48)
@@ -51,4 +51,12 @@
 
 #include "Atom/atom.hpp"
+#include "Actions/MoleculeAction/ChangeNameAction.hpp"
+#include "Actions/SelectionAction/Molecules/PopMoleculesAction.hpp"
+#include "Actions/SelectionAction/Molecules/PushMoleculesAction.hpp"
+#include "Actions/SelectionAction/Molecules/MoleculeByIdAction.hpp"
+#include "Actions/ActionQueue.hpp"
+#include "Actions/ActionSequence.hpp"
+#include "Actions/ActionTrait.hpp"
+#include "Actions/MakroAction.hpp"
 #include "Descriptors/MoleculeIdDescriptor.hpp"
 #include "Formula.hpp"
@@ -73,7 +81,5 @@
   refill();
 
-//  qRegisterMetaType<QItemSelection>("QItemSelection");
-  //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(QStandardItem*)),this,SLOT(moleculeNameChanged(QStandardItem*)));
   connect(this, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(checkForVisibilityChange(QStandardItem*)), Qt::DirectConnection);
 }
@@ -507,15 +513,58 @@
 }
 
-
-void QtMoleculeList::moleculeChanged() {
-  /*int idx = verticalHeaderItem(row)->data(Qt::UserRole).toInt();
-  molecule *mol = molecules->ReturnIndex(idx);
-  string cellValue = item(row,QtMoleculeItem::NAME)->text().toStdString();
-  if(mol->getName() != cellValue && cellValue !="") {
-    mol->setName(cellValue);
-  }
-  else if(cellValue==""){
-    item(row,QtMoleculeItem::NAME)->setText(QString(mol->getName().c_str()));
-  }*/
+static
+MoleCuilder::MakroAction *constructMakroRenameAction(
+    MoleCuilder::ActionSequence &sequence,
+    const std::string &_new_name,
+    const moleculeId_t _molid
+    )
+{
+  MoleCuilder::ActionQueue &AQ = MoleCuilder::ActionQueue::getInstance();
+  MoleCuilder::ActionTrait trait("change-single-molecule-name");
+  sequence.addAction(AQ.getActionByName("push-molecule-selection").clone(MoleCuilder::Action::NonInteractive));
+  MoleCuilder::Action * const selectaction =
+      AQ.getActionByName("select-molecule-by-id").clone(MoleCuilder::Action::NonInteractive);
+  {
+    std::stringstream molid_string;
+    molid_string << toString(_molid);
+    selectaction->setOptionValue("select-molecule-by-id", molid_string.str());
+  }
+  sequence.addAction(selectaction);
+  MoleCuilder::Action * const changeaction =
+      AQ.getActionByName("change-molname").clone(MoleCuilder::Action::NonInteractive);
+  changeaction->setOptionValue("change-molname", _new_name);
+  sequence.addAction(changeaction);
+  sequence.addAction(AQ.getActionByName("pop-molecule-selection").clone(MoleCuilder::Action::NonInteractive));
+
+  MoleCuilder::MakroAction* makroaction =
+      new MoleCuilder::MakroAction(trait, sequence);
+  return makroaction;
+}
+
+void QtMoleculeList::moleculeNameChanged(QStandardItem* item)
+{
+  boost::recursive_mutex::scoped_lock lock(refill_mutex);
+  // obtain molecule id
+  if ( item->index().column() == QtMoleculeItem::NAME) {
+    QtMoleculeItem *molitem = assert_cast<QtMoleculeItem *>(item);
+    MoleculeItemBiMap_t::right_const_iterator iter = MoleculeItemBiMap.right.find(molitem);
+    ASSERT( iter != MoleculeItemBiMap.right.end(),
+        "QtMoleculeList::moleculeChanged() - name of unknown molecule changed.");
+    const moleculeId_t molid = iter->second;
+    // change the name
+    molecule * const mol = World::getInstance().getMolecule(MoleculeById(molid));
+    std::string cellValue = item->text().toStdString();
+    if ((mol->getName() != cellValue) && (!cellValue.empty())) {
+      // create actions such that we may undo
+      static MoleCuilder::ActionSequence sequence;
+      MoleCuilder::MakroAction *makroaction =
+          constructMakroRenameAction(sequence, cellValue, molid);
+      MoleCuilder::ActionQueue &AQ = MoleCuilder::ActionQueue::getInstance();
+      AQ.registerAction(makroaction);
+      AQ.queueAction("change-single-molecule-name", MoleCuilder::Action::NonInteractive);
+    } else if(cellValue=="") {
+      item->setText(QString(mol->getName().c_str()));
+    }
+}
 }
 
Index: src/UIElements/Views/Qt4/MoleculeList/QtMoleculeList.hpp
===================================================================
--- src/UIElements/Views/Qt4/MoleculeList/QtMoleculeList.hpp	(revision a39d72c6d5edf5fa534720d234e4a54c6dcfc17a)
+++ src/UIElements/Views/Qt4/MoleculeList/QtMoleculeList.hpp	(revision 5b61e5e3ff8d5a18604de0315358ab7a74c40a48)
@@ -54,6 +54,5 @@
 
 private slots:
-  void moleculeChanged();
-//  void visibilityChanged(QStandardItem*, int);
+  void moleculeNameChanged(QStandardItem*);
   void checkForVisibilityChange(QStandardItem*);
   void checkState();
