Index: src/Actions/AtomAction/AddAction.cpp
===================================================================
--- src/Actions/AtomAction/AddAction.cpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Actions/AtomAction/AddAction.cpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -10,4 +10,5 @@
 #include "Actions/AtomAction/AddAction.hpp"
 #include "Actions/ActionRegistry.hpp"
+#include "Descriptors/AtomIdDescriptor.hpp"
 #include "atom.hpp"
 #include "element.hpp"
@@ -26,4 +27,18 @@
 #include "UIElements/Dialog.hpp"
 #include "Actions/ValueStorage.hpp"
+
+// memento to remember the state when undoing
+
+class AtomAddState : public ActionState {
+public:
+  AtomAddState(const Vector &_position, const element *_elemental, const atomId_t _id) :
+    position(_position),
+    elemental(_elemental),
+    id(_id)
+  {}
+  Vector position;
+  const element *elemental;
+  atomId_t id;
+};
 
 const char AtomAddAction::NAME[] = "add-atom";
@@ -70,27 +85,41 @@
     (*iter)->AddAtom(first);
   }
-  return Action::success;
+  return Action::state_ptr(new AtomAddState(position, elemental, first->getId()));
 }
 
 Action::state_ptr AtomAddAction::performUndo(Action::state_ptr _state) {
-//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
+  AtomAddState *state = assert_cast<AtomAddState*>(_state.get());
 
-  return Action::failure;
-//  string newName = state->mol->getName();
-//  state->mol->setName(state->lastName);
-//
-//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
+  DoLog(1) && (Log() << Verbose(1) << "Removing atom with id " << state->id << "." << endl);
+  World::getInstance().destroyAtom(state->id);
+
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr AtomAddAction::performRedo(Action::state_ptr _state){
-  return Action::failure;
+  AtomAddState *state = assert_cast<AtomAddState*>(_state.get());
+
+  atom * first = World::getInstance().createAtom();
+  first->setType(state->elemental);
+  first->setPosition(state->position);
+  DoLog(1) && (Log() << Verbose(1) << "Re-adding new atom with element " << state->elemental->getName() << " at " << state->position << "." << endl);
+  // TODO: remove when all of World's atoms are stored.
+  std::vector<molecule *> molecules = World::getInstance().getAllMolecules();
+  if (!molecules.empty()) {
+    std::vector<molecule *>::iterator iter = molecules.begin();
+    (*iter)->AddAtom(first);
+  }
+  if (first->getId() != state->id)
+    if (!first->changeId(state->id))
+      return Action::failure;
+  return Action::state_ptr(_state);
 }
 
 bool AtomAddAction::canUndo() {
-  return false;
+  return true;
 }
 
 bool AtomAddAction::shouldUndo() {
-  return false;
+  return true;
 }
 
Index: src/Actions/AtomAction/ChangeElementAction.cpp
===================================================================
--- src/Actions/AtomAction/ChangeElementAction.cpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Actions/AtomAction/ChangeElementAction.cpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -10,4 +10,5 @@
 #include "Actions/AtomAction/ChangeElementAction.hpp"
 #include "Actions/ActionRegistry.hpp"
+#include "Descriptors/AtomIdDescriptor.hpp"
 #include "atom.hpp"
 #include "element.hpp"
@@ -19,4 +20,5 @@
 
 #include <iostream>
+#include <map>
 #include <string>
 
@@ -26,4 +28,18 @@
 #include "UIElements/Dialog.hpp"
 #include "Actions/ValueStorage.hpp"
+
+typedef std::map<int, const element *> ElementMap;
+
+// memento to remember the state when undoing
+
+class AtomChangeElementState : public ActionState {
+public:
+  AtomChangeElementState(ElementMap _Elements, const element *_elemental) :
+    Elements(_Elements),
+    elemental(_elemental)
+  {}
+  ElementMap Elements;
+  const element *elemental;
+};
 
 const char AtomChangeElementAction::NAME[] = "change-element";
@@ -56,4 +72,11 @@
   ValueStorage::getInstance().queryCurrentValue(NAME, elemental);
 
+  // create undo state
+  ElementMap Elements;
+  for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) {
+    Elements.insert(std::pair<int, const element *> (iter->second->getId(), iter->second->getType()));
+  }
+  AtomChangeElementState *UndoState = new AtomChangeElementState(Elements, elemental);
+
   for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) {
     first = iter->second;
@@ -64,27 +87,45 @@
     mol->AddAtom(first);  // add atom to ensure correctness of formula
   }
-  return Action::success;
+  return Action::state_ptr(UndoState);
 }
 
 Action::state_ptr AtomChangeElementAction::performUndo(Action::state_ptr _state) {
-//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
+  AtomChangeElementState *state = assert_cast<AtomChangeElementState*>(_state.get());
+  atom *first = NULL;
+  molecule *mol = NULL;
 
-  return Action::failure;
-//  string newName = state->mol->getName();
-//  state->mol->setName(state->lastName);
-//
-//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
+  for(ElementMap::const_iterator iter = state->Elements.begin(); iter != state->Elements.end(); ++iter) {
+    first = World::getInstance().getAtom(AtomById(iter->first));
+    mol = first->getMolecule();
+    first->removeFromMolecule(); // remove atom
+    first->setType(iter->second);
+    mol->AddAtom(first);  // add atom to ensure correctness of formula
+  }
+
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr AtomChangeElementAction::performRedo(Action::state_ptr _state){
-  return Action::failure;
+  AtomChangeElementState *state = assert_cast<AtomChangeElementState*>(_state.get());
+  atom *first = NULL;
+  molecule *mol = NULL;
+
+  for(ElementMap::const_iterator iter = state->Elements.begin(); iter != state->Elements.end(); ++iter) {
+    first = World::getInstance().getAtom(AtomById(iter->first));
+    mol = first->getMolecule();
+    first->removeFromMolecule(); // remove atom
+    first->setType(state->elemental);
+    mol->AddAtom(first);  // add atom to ensure correctness of formula
+  }
+
+  return Action::state_ptr(_state);
 }
 
 bool AtomChangeElementAction::canUndo() {
-  return false;
+  return true;
 }
 
 bool AtomChangeElementAction::shouldUndo() {
-  return false;
+  return true;
 }
 
Index: src/Actions/AtomAction/RemoveAction.cpp
===================================================================
--- src/Actions/AtomAction/RemoveAction.cpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Actions/AtomAction/RemoveAction.cpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -11,4 +11,5 @@
 #include "Actions/ActionRegistry.hpp"
 #include "atom.hpp"
+#include "AtomicInfo.hpp"
 #include "Descriptors/AtomDescriptor.hpp"
 #include "Helpers/Log.hpp"
@@ -25,4 +26,14 @@
 #include "UIElements/Dialog.hpp"
 #include "Actions/ValueStorage.hpp"
+
+// memento to remember the state when undoing
+
+class AtomRemoveState : public ActionState {
+public:
+  AtomRemoveState(std::vector<AtomicInfo> _Walkers) :
+    Walkers(_Walkers)
+  {}
+  std::vector<AtomicInfo> Walkers;
+};
 
 const char AtomRemoveAction::NAME[] = "remove-atom";
@@ -50,38 +61,68 @@
   atom *first = NULL;
 
-  std::vector<molecule *> molecules = World::getInstance().getAllMolecules();
+  // create undo state
+  std::vector<AtomicInfo> Walkers;
+  for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) {
+    Walkers.push_back(AtomicInfo(*(iter->second)));
+  }
+  AtomRemoveState *UndoState = new AtomRemoveState(Walkers);
+
+  // remove all selected atoms
+//  std::vector<molecule *> molecules = World::getInstance().getAllMolecules();
   for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) {
     first = iter->second;
     DoLog(1) && (Log() << Verbose(1) << "Removing atom " << first->getId() << "." << endl);
-    // TODO: this is not necessary when atoms and their storing to file are handled by the World
-    // simply try to erase in every molecule found
-    for (std::vector<molecule *>::iterator iter = molecules.begin();iter != molecules.end(); ++iter) {
-      (*iter)->erase(first);
-    }
+//    // TODO: this is not necessary when atoms and their storing to file are handled by the World
+//    // simply try to erase in every molecule found
+//    for (std::vector<molecule *>::iterator iter = molecules.begin();iter != molecules.end(); ++iter) {
+//      (*iter)->erase(first);
+//    }
     World::getInstance().destroyAtom(first);
   }
-  return Action::success;
+  return Action::state_ptr(UndoState);
 }
 
 Action::state_ptr AtomRemoveAction::performUndo(Action::state_ptr _state) {
-//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
+  AtomRemoveState *state = assert_cast<AtomRemoveState*>(_state.get());
 
-  return Action::failure;
-//  string newName = state->mol->getName();
-//  state->mol->setName(state->lastName);
-//
-//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
+  size_t i=0;
+  for (; i<state->Walkers.size(); ++i) {
+    // re-create the atom
+    DoLog(1) && (Log() << Verbose(1) << "Re-adding atom " << state->Walkers[i].getId() << "." << endl);
+    atom *Walker = World::getInstance().createAtom();
+    if (!state->Walkers[i].setAtom(*Walker)) {
+      DoeLog(1) && (eLog() << Verbose(1) << "Failed to set id." << endl);
+      World::getInstance().destroyAtom(Walker);
+      break;
+    }
+  }
+  if (i<state->Walkers.size()) {
+    // remove all previous ones, too
+    for (size_t j=0;j<i;++j)
+      World::getInstance().destroyAtom(state->Walkers[j].getId());
+    // and announce the failure of the undo
+    return Action::failure;
+  }
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr AtomRemoveAction::performRedo(Action::state_ptr _state){
-  return Action::failure;
+  AtomRemoveState *state = assert_cast<AtomRemoveState*>(_state.get());
+
+  // simple remove again all previously added atoms
+  for (size_t i=0; i<state->Walkers.size(); ++i) {
+    DoLog(1) && (Log() << Verbose(1) << "Re-removing atom " << state->Walkers[i].getId() << "." << endl);
+    World::getInstance().destroyAtom(state->Walkers[i].getId());
+  }
+
+  return Action::state_ptr(_state);
 }
 
 bool AtomRemoveAction::canUndo() {
-  return false;
+  return true;
 }
 
 bool AtomRemoveAction::shouldUndo() {
-  return false;
+  return true;
 }
 
Index: src/Actions/CmdAction/FastParsingAction.cpp
===================================================================
--- src/Actions/CmdAction/FastParsingAction.cpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Actions/CmdAction/FastParsingAction.cpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -28,8 +28,10 @@
 class CommandLineFastParsingState : public ActionState {
 public:
-  CommandLineFastParsingState(bool _bool) :
-    boolean(_bool)
+  CommandLineFastParsingState(const bool _oldvalue, const bool _newvalue) :
+    oldvalue(_oldvalue),
+    newvalue(_newvalue)
   {}
-  bool boolean;
+  bool oldvalue;
+  bool newvalue;
 };
 
@@ -58,12 +60,14 @@
 
 Action::state_ptr CommandLineFastParsingAction::performCall() {
-
   config *configuration = World::getInstance().getConfig();
-  ValueStorage::getInstance().queryCurrentValue(NAME, configuration->FastParsing);
+  bool oldvalue = configuration->FastParsing;
+  bool newvalue;
+  ValueStorage::getInstance().queryCurrentValue(NAME, newvalue);
+  configuration->FastParsing = newvalue;
   if (configuration->FastParsing)
     DoLog(0) && (Log() << Verbose(0) << "I won't parse trajectories." << endl);
   else
     DoLog(0) && (Log() << Verbose(0) << "I will parse trajectories." << endl);
-  return Action::success;
+  return Action::state_ptr(new CommandLineFastParsingState(oldvalue, newvalue));
 }
 
@@ -72,11 +76,24 @@
 
   config *configuration = World::getInstance().getConfig();
-  configuration->FastParsing = state->boolean;
+  configuration->FastParsing = state->oldvalue;
+  if (configuration->FastParsing)
+    DoLog(0) && (Log() << Verbose(0) << "I won't parse trajectories." << endl);
+  else
+    DoLog(0) && (Log() << Verbose(0) << "I will parse trajectories." << endl);
 
-  return Action::state_ptr(new CommandLineFastParsingState(!state->boolean));
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr CommandLineFastParsingAction::performRedo(Action::state_ptr _state){
-  return performUndo(_state);
+  CommandLineFastParsingState *state = assert_cast<CommandLineFastParsingState*>(_state.get());
+
+  config *configuration = World::getInstance().getConfig();
+  configuration->FastParsing = state->newvalue;
+  if (configuration->FastParsing)
+    DoLog(0) && (Log() << Verbose(0) << "I won't parse trajectories." << endl);
+  else
+    DoLog(0) && (Log() << Verbose(0) << "I will parse trajectories." << endl);
+
+  return Action::state_ptr(_state);
 }
 
Index: src/Actions/CmdAction/VerboseAction.cpp
===================================================================
--- src/Actions/CmdAction/VerboseAction.cpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Actions/CmdAction/VerboseAction.cpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -26,8 +26,10 @@
 class CommandLineVerboseState : public ActionState {
 public:
-  CommandLineVerboseState(int _verbosity) :
-    verbosity(_verbosity)
+  CommandLineVerboseState(const int _oldverbosity, const int _newverbosity) :
+    oldverbosity(_oldverbosity),
+    newverbosity(_newverbosity)
   {}
-  int verbosity;
+  int oldverbosity;
+  int newverbosity;
 };
 
@@ -56,11 +58,18 @@
 
 Action::state_ptr CommandLineVerboseAction::performCall() {
-  int verbosity = 2;
+  int oldverbosity = getVerbosity();
+  int newverbosity = 2;
 
-  ValueStorage::getInstance().queryCurrentValue(NAME, verbosity);
+  ValueStorage::getInstance().queryCurrentValue(NAME, newverbosity);
 
-  setVerbosity(verbosity);
-  DoLog(0) && (Log() << Verbose(0) << "Setting verbosity to " << verbosity << "." << endl);
-  return Action::success;
+  if (oldverbosity != newverbosity) {
+    CommandLineVerboseState *UndoState = new CommandLineVerboseState(oldverbosity, newverbosity);
+    setVerbosity(newverbosity);
+    DoLog(0) && (Log() << Verbose(0) << "Setting verbosity from " << oldverbosity << " to " << newverbosity << "." << endl);
+    return Action::state_ptr(UndoState);
+  } else {
+    DoLog(0) && (Log() << Verbose(0) << "Verbosity remains unchanged at " << oldverbosity << "." << endl);
+    return Action::failure;
+  }
 }
 
@@ -68,13 +77,17 @@
   CommandLineVerboseState *state = assert_cast<CommandLineVerboseState*>(_state.get());
 
-  int verbosity = 2;
-  ValueStorage::getInstance().queryCurrentValue(NAME, verbosity);
+  DoLog(0) && (Log() << Verbose(0) << "Setting verbosity from " << state->newverbosity << " to " << state->oldverbosity << "." << endl);
+  setVerbosity(state->oldverbosity);
 
-  setVerbosity(state->verbosity);
-  return Action::state_ptr(new CommandLineVerboseState(verbosity));
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr CommandLineVerboseAction::performRedo(Action::state_ptr _state){
-  return performUndo(_state);
+  CommandLineVerboseState *state = assert_cast<CommandLineVerboseState*>(_state.get());
+
+  DoLog(0) && (Log() << Verbose(0) << "Setting verbosity from " << state->oldverbosity << " to " << state->newverbosity << "." << endl);
+  setVerbosity(state->newverbosity);
+
+  return Action::state_ptr(_state);
 }
 
Index: src/Actions/WorldAction/SetDefaultNameAction.cpp
===================================================================
--- src/Actions/WorldAction/SetDefaultNameAction.cpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Actions/WorldAction/SetDefaultNameAction.cpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -62,9 +62,10 @@
 
   defaultname = World::getInstance().getDefaultName();
+  WorldSetDefaultNameState *UndoState = new WorldSetDefaultNameState(defaultname);
   ValueStorage::getInstance().queryCurrentValue(NAME, defaultname);
 
   World::getInstance().setDefaultName(defaultname);
   DoLog(0) && (Log() << Verbose(0) << "Default name of new molecules set to " << World::getInstance().getDefaultName() << "." << endl);
-  return Action::success;
+  return Action::state_ptr(UndoState);
 }
 
@@ -74,4 +75,5 @@
   string newName = World::getInstance().getDefaultName();
   World::getInstance().setDefaultName(state->lastName);
+  DoLog(0) && (Log() << Verbose(0) << "Default name of new molecules set to " << World::getInstance().getDefaultName() << "." << endl);
 
   return Action::state_ptr(new WorldSetDefaultNameState(newName));
Index: src/AtomicInfo.cpp
===================================================================
--- src/AtomicInfo.cpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
+++ src/AtomicInfo.cpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -0,0 +1,62 @@
+/*
+ * AtomicInfo.cpp
+ *
+ *  Created on: Aug 10, 2010
+ *      Author: heber
+ */
+
+#include "atom.hpp"
+#include "AtomicInfo.hpp"
+#include "element.hpp"
+#include "LinearAlgebra/Vector.hpp"
+
+/********************************** Functions for class AtomicInfo **********************************/
+
+AtomicInfo::AtomicInfo() :
+    Type(NULL),
+    Father(NULL),
+    Id(-1)
+{}
+AtomicInfo::AtomicInfo(const atom &_atom) :
+    Position(_atom.getPosition()),
+    Type(_atom.getType()),
+    Velocity(_atom.AtomicVelocity),
+    Father(_atom.father),
+    Mol(_atom.getMolecule()),
+    Id(_atom.getId())
+{}
+
+AtomicInfo::~AtomicInfo()
+{}
+
+
+bool AtomicInfo::setAtom(atom &_atom) const
+{
+  _atom.setPosition(Position);
+  _atom.setType(Type);
+  _atom.father = const_cast<atom *>(Father); // TODO: Actually, atom::father should be const atom *!
+  _atom.setMolecule(const_cast<molecule *>(Mol)); // this is ok, mol is const within AtomicInfo, but not outside (atoms need to register)
+  _atom.AtomicVelocity = Velocity;
+  if (_atom.getId() == Id)
+    return true;
+  else
+    return (_atom.changeId(Id));
+}
+
+atomId_t AtomicInfo::getId() const {
+  return Id;
+}
+
+AtomicInfo& AtomicInfo::operator=(const AtomicInfo& AI)
+{
+  if (&AI == this)  // check self-assignment
+    return *this;
+  Position = AI.Position;
+  Type = AI.Type;
+  Father = AI.Father;
+  Mol = AI.Mol;
+  Velocity = AI.Velocity;
+  Id = AI.Id;
+  return *this;
+}
+
Index: src/AtomicInfo.hpp
===================================================================
--- src/AtomicInfo.hpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
+++ src/AtomicInfo.hpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -0,0 +1,40 @@
+/*
+ * AtomicInfo.hpp
+ *
+ *  Created on: Aug 10, 2010
+ *      Author: heber
+ */
+
+#ifndef ATOMICINFO_HPP_
+#define ATOMICINFO_HPP_
+
+class atom;
+class element;
+class molecule;
+class Vector;
+
+/** This is for storing and transfering the information contained within an atom.
+ * This is needed for Undo/Redo operations of AtomActions.
+ */
+class AtomicInfo {
+public:
+  AtomicInfo();
+  AtomicInfo(const atom &_atom);
+  ~AtomicInfo();
+
+  bool setAtom(atom &_atom) const;
+  atomId_t getId() const;
+
+  AtomicInfo& operator=(const AtomicInfo&);
+
+private:
+  Vector Position;
+  const element * Type;
+  Vector Velocity;
+  const atom * Father;
+  const molecule * Mol;
+  atomId_t Id;
+};
+
+
+#endif /* ATOMICINFO_HPP_ */
Index: src/Helpers/Log.cpp
===================================================================
--- src/Helpers/Log.cpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Helpers/Log.cpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -18,4 +18,13 @@
 void setVerbosity(int verbosityLevel) {
   logger::getInstance().setVerbosity(verbosityLevel);
+}
+
+/**
+ * Gets verbosity for the error logger and the standard logger.
+ *
+ * \param int verbosity level
+ */
+int getVerbosity() {
+  return logger::getInstance().getVerbosity();
 }
 
Index: src/Helpers/Log.hpp
===================================================================
--- src/Helpers/Log.hpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Helpers/Log.hpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -15,4 +15,5 @@
 class errorLogger & eLog();
 void setVerbosity(int verbosityLevel);
+int getVerbosity();
 bool DoLog(int verbose);
 bool DoeLog(int verbose);
Index: src/Helpers/errorlogger.cpp
===================================================================
--- src/Helpers/errorlogger.cpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Helpers/errorlogger.cpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -41,4 +41,14 @@
 void errorLogger::setVerbosity(int verbosityLevel) {
   verbosity = verbosityLevel;
+}
+
+/**
+ * Gets the verbosity.
+ *
+ * \return verbosity level
+ */
+int errorLogger::getVerbosity()
+{
+  return verbosity;
 }
 
Index: src/Helpers/errorlogger.hpp
===================================================================
--- src/Helpers/errorlogger.hpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Helpers/errorlogger.hpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -25,4 +25,5 @@
   static bool DoOutput();
   static void setVerbosity(int verbosityLevel);
+  static int getVerbosity();
 
 protected:
Index: src/Helpers/logger.cpp
===================================================================
--- src/Helpers/logger.cpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Helpers/logger.cpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -44,4 +44,14 @@
 
 /**
+ * Gets the verbosity.
+ *
+ * \return verbosity level
+ */
+int logger::getVerbosity()
+{
+  return verbosity;
+}
+
+/**
  * Operator for the Binary(arg) call.
  * Constructs temporary a Verbose class object, wherein the Binary is stored.
Index: src/Helpers/logger.hpp
===================================================================
--- src/Helpers/logger.hpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Helpers/logger.hpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -25,4 +25,5 @@
   static bool DoOutput();
   static void setVerbosity(int verbosityLevel);
+  static int getVerbosity();
 
 protected:
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/Makefile.am	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -6,4 +6,5 @@
 ATOMSOURCE = \
   atom.cpp \
+  AtomicInfo.cpp \
   atom_atominfo.cpp \
   atom_bondedparticle.cpp \
@@ -16,4 +17,5 @@
 ATOMHEADER = \
   atom.hpp \
+  AtomicInfo.hpp \
   atom_atominfo.hpp \
   atom_bondedparticle.hpp \
Index: src/atom.cpp
===================================================================
--- src/atom.cpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/atom.cpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -353,5 +353,5 @@
 }
 
-molecule* atom::getMolecule(){
+molecule* atom::getMolecule() const {
   return mol;
 }
Index: src/atom.hpp
===================================================================
--- src/atom.hpp	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ src/atom.hpp	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -92,5 +92,5 @@
 
    void setMolecule(molecule*);
-   molecule* getMolecule();
+   molecule* getMolecule() const;
    void removeFromMolecule();
 
Index: tests/regression/Simple_configuration/3/post/empty.conf
===================================================================
--- tests/regression/Simple_configuration/3/post/empty.conf	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
+++ tests/regression/Simple_configuration/3/post/empty.conf	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -0,0 +1,70 @@
+# ParallelCarParinello - main configuration file - created with molecuilder
+
+mainname	pcp	# programm name (for runtime files)
+defaultpath	not specified	# where to put files during runtime
+pseudopotpath	not specified	# where to find pseudopotentials
+
+ProcPEGamma	8	# for parallel computing: share constants
+ProcPEPsi	1	# for parallel computing: share wave functions
+DoOutVis	0	# Output data for OpenDX
+DoOutMes	1	# Output data for measurements
+DoOutOrbitals	0	# Output all Orbitals
+DoOutCurr	0	# Ouput current density for OpenDx
+DoOutNICS	0	# Output Nucleus independent current shieldings
+DoPerturbation	0	# Do perturbation calculate and determine susceptibility and shielding
+DoFullCurrent	0	# Do full perturbation
+DoConstrainedMD	0	# Do perform a constrained (>0, relating to current MD step) instead of unconstrained (0) MD
+Thermostat	Berendsen	2.5	# Which Thermostat and its parameters to use in MD case.
+CommonWannier	0	# Put virtual centers at indivual orbits, all common, merged by variance, to grid point, to cell center
+SawtoothStart	0.01	# Absolute value for smooth transition at cell border 
+VectorPlane	0	# Cut plane axis (x, y or z: 0,1,2) for two-dim current vector plot
+VectorCut	0	# Cut plane axis value
+AddGramSch	1	# Additional GramSchmidtOrtogonalization to be safe
+Seed		1	# initial value for random seed for Psi coefficients
+
+MaxOuterStep	0	# number of MolecularDynamics/Structure optimization steps
+Deltat	0.01	# time per MD step
+OutVisStep	10	# Output visual data every ...th step
+OutSrcStep	5	# Output "restart" data every ..th step
+TargetTemp	0.000950045	# Target temperature
+MaxPsiStep	0	# number of Minimisation steps per state (0 - default)
+EpsWannier	1e-07	# tolerance value for spread minimisation of orbitals
+
+# Values specifying when to stop
+MaxMinStep	100	# Maximum number of steps
+RelEpsTotalE	1e-07	# relative change in total energy
+RelEpsKineticE	1e-05	# relative change in kinetic energy
+MaxMinStopStep	0	# check every ..th steps
+MaxMinGapStopStep	0	# check every ..th steps
+
+# Values specifying when to stop for INIT, otherwise same as above
+MaxInitMinStep	100	# Maximum number of steps
+InitRelEpsTotalE	1e-05	# relative change in total energy
+InitRelEpsKineticE	0.0001	# relative change in kinetic energy
+InitMaxMinStopStep	0	# check every ..th steps
+InitMaxMinGapStopStep	0	# check every ..th steps
+
+BoxLength			# (Length of a unit cell)
+20	
+0	20	
+0	0	20	
+
+ECut		128	# energy cutoff for discretization in Hartrees
+MaxLevel	5	# number of different levels in the code, >=2
+Level0Factor	2	# factor by which node number increases from S to 0 level
+RiemannTensor	0	# (Use metric)
+PsiType		0	# 0 - doubly occupied, 1 - SpinUp,SpinDown
+MaxPsiDouble	0	# here: specifying both maximum number of SpinUp- and -Down-states
+PsiMaxNoUp	0	# here: specifying maximum number of SpinUp-states
+PsiMaxNoDown	0	# here: specifying maximum number of SpinDown-states
+AddPsis		0	# Additional unoccupied Psis for bandgap determination
+
+RCut		20	# R-cut for the ewald summation
+StructOpt	0	# Do structure optimization beforehand
+IsAngstroem	1	# 0 - Bohr, 1 - Angstroem
+RelativeCoord	0	# whether ion coordinates are relative (1) or absolute (0)
+MaxTypes	0	# maximum number of different ion types
+
+# Ion type data (PP = PseudoPotential, Z = atomic number)
+#Ion_TypeNr.	Amount	Z	RGauss	L_Max(PP)L_Loc(PP)IonMass	# chemical name, symbol
+#Ion_TypeNr._Nr.R[0]    R[1]    R[2]    MoveType (0 MoveIon, 1 FixedIon)
Index: tests/regression/Simple_configuration/5/pre/test.conf
===================================================================
--- tests/regression/Simple_configuration/5/pre/test.conf	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ tests/regression/Simple_configuration/5/pre/test.conf	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -28,5 +28,5 @@
 OutSrcStep	5	# Output "restart" data every ..th step
 TargetTemp	0.000950045	# Target temperature
-MaxPsiStep	0	# number of Minimisation steps per state (0 - default)
+MaxPsiStep	3	# number of Minimisation steps per state (0 - default)
 EpsWannier	1e-07	# tolerance value for spread minimisation of orbitals
 
@@ -35,6 +35,6 @@
 RelEpsTotalE	1e-07	# relative change in total energy
 RelEpsKineticE	1e-05	# relative change in kinetic energy
-MaxMinStopStep	0	# check every ..th steps
-MaxMinGapStopStep	0	# check every ..th steps
+MaxMinStopStep	1	# check every ..th steps
+MaxMinGapStopStep	1	# check every ..th steps
 
 # Values specifying when to stop for INIT, otherwise same as above
@@ -42,6 +42,6 @@
 InitRelEpsTotalE	1e-05	# relative change in total energy
 InitRelEpsKineticE	0.0001	# relative change in kinetic energy
-InitMaxMinStopStep	0	# check every ..th steps
-InitMaxMinGapStopStep	0	# check every ..th steps
+InitMaxMinStopStep	1	# check every ..th steps
+InitMaxMinGapStopStep	1	# check every ..th steps
 
 BoxLength			# (Length of a unit cell)
@@ -54,8 +54,8 @@
 Level0Factor	2	# factor by which node number increases from S to 0 level
 RiemannTensor	0	# (Use metric)
-PsiType		0	# 0 - doubly occupied, 1 - SpinUp,SpinDown
+PsiType		1	# 0 - doubly occupied, 1 - SpinUp,SpinDown
 MaxPsiDouble	0	# here: specifying both maximum number of SpinUp- and -Down-states
 PsiMaxNoUp	0	# here: specifying maximum number of SpinUp-states
-PsiMaxNoDown	0	# here: specifying maximum number of SpinDown-states
+PsiMaxNoDown	1	# here: specifying maximum number of SpinDown-states
 AddPsis		0	# Additional unoccupied Psis for bandgap determination
 
Index: tests/regression/testsuite-simple_configuration.at
===================================================================
--- tests/regression/testsuite-simple_configuration.at	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ tests/regression/testsuite-simple_configuration.at	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -31,4 +31,13 @@
 AT_CHECK([../../molecuilder -i test2.conf -e ${abs_top_srcdir}/src/ -o mpqc pcp xyz -a 1 --position "0., 0., -1."], 134, [ignore], [ignore])
 AT_CLEANUP
+AT_SETUP([Simple configuration - adding atom with Undo/Redo])
+AT_KEYWORDS([configuration])
+AT_CHECK([../../molecuilder -i empty.conf -o pcp -a 1 --position "10., 10., 10." --undo], 0, [ignore], [ignore])
+AT_CHECK([file=empty.conf; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/3/post/$file], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i test.conf -o mpqc pcp xyz -a 1 --position "10., 10., 10." --undo --redo], 0, [ignore], [ignore])
+AT_CHECK([file=test.conf; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/3/post/$file], 0, [ignore], [ignore])
+AT_CHECK([file=test.in; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/3/post/$file], 0, [ignore], [ignore])
+AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/3/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
 
 # 4. change the element
@@ -37,4 +46,13 @@
 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/pre/test.xyz test.xyz], 0)
 AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ --select-atom-by-id 0 -E 6 ], 0, [ignore], [ignore])
+AT_CHECK([file=test.xyz; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
+AT_SETUP([Simple configuration - Changing element with Undo/Redo])
+AT_KEYWORDS([configuration])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/pre/test.xyz test.xyz], 0)
+AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ --select-atom-by-id 0 -E 6 --undo], 0, [ignore], [ignore])
+AT_CHECK([file=test.xyz; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/pre/test.xyz test.xyz], 0)
+AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ --select-atom-by-id 0 -E 6 --undo --redo], 0, [ignore], [ignore])
 AT_CHECK([file=test.xyz; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/4/post/$file], 0, [ignore], [ignore])
 AT_CLEANUP
@@ -48,4 +66,13 @@
 AT_CHECK([file=test.in; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/5/post/$file], 0, [ignore], [ignore])
 AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/5/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
+AT_SETUP([Simple configuration - Atom removal with Undo/Redo])
+AT_KEYWORDS([configuration])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/5/pre/test.conf .], 0)
+AT_CHECK([../../molecuilder -i test.conf --select-atom-by-id 0 -r --undo], 0, [ignore], [ignore])
+AT_CHECK([file=test.conf; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/5/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/5/pre/test.conf .], 0)
+AT_CHECK([../../molecuilder -i test.conf --select-atom-by-id 0 -r --undo --redo], 0, [ignore], [ignore])
+AT_CHECK([file=test.conf; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/5/post/$file], 0, [ignore], [ignore])
 AT_CLEANUP
 
@@ -86,4 +113,23 @@
 AT_CHECK([file=test.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
 AT_CLEANUP
+AT_SETUP([Simple configuration - Removing sphere of atoms with Undo/Redo])
+AT_KEYWORDS([configuration])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz .], 0)
+AT_CHECK([../../molecuilder -i test.xyz --select-atoms-inside-sphere 7. --position "7.283585982, 3.275186040, 3.535886037" -r --undo], 0, [stdout], [stderr])
+AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-withoutsphere.xyz], 0)
+AT_CHECK([../../molecuilder -i test-withoutsphere.xyz --select-atoms-inside-sphere 7. --position "7.283585982, 3.275186040, 3.535886037" -r --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([sort -n test-withoutsphere.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-withoutsphere.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test-withoutsphere.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz .], 0)
+AT_CHECK([../../molecuilder -i test.xyz --select-all-atoms --unselect-atoms-inside-sphere 7. --position "7.283585982, 3.275186040, 3.535886037" -r --undo], 0, [stdout], [stderr])
+AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-sphere.xyz], 0)
+AT_CHECK([../../molecuilder -i test-sphere.xyz --select-all-atoms --unselect-atoms-inside-sphere 7. --position "7.283585982, 3.275186040, 3.535886037" -r --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([sort -n test-sphere.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-sphere.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test-sphere.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CHECK([cat test-sphere.xyz-sorted test-withoutsphere.xyz-sorted | sort -n >test.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
 
 AT_SETUP([Simple configuration - Removing cuboid of atoms])
@@ -95,4 +141,23 @@
 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-cuboid.xyz], 0)
 AT_CHECK([../../molecuilder -i test-cuboid.xyz --select-all-atoms --unselect-atoms-inside-cuboid "2,2,2" --position "9.78,2.64,2.64" -r], 0, [stdout], [stderr])
+AT_CHECK([sort -n test-cuboid.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-cuboid.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test-cuboid.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CHECK([cat test-cuboid.xyz-sorted test-withoutcuboid.xyz-sorted | sort -n >test.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
+AT_SETUP([Simple configuration - Removing cuboid of atoms with Undo/Redo])
+AT_KEYWORDS([configuration])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz .], 0)
+AT_CHECK([../../molecuilder -i test.xyz --select-atoms-inside-cuboid "2,2,2" --position "9.78,2.64,2.64" -r --undo], 0, [stdout], [stderr])
+AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-withoutcuboid.xyz], 0)
+AT_CHECK([../../molecuilder -i test-withoutcuboid.xyz --select-atoms-inside-cuboid "2,2,2" --position "9.78,2.64,2.64" -r --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([sort -n test-withoutcuboid.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-withoutcuboid.xyz-sorted], 0, [ignore], [ignore])
+AT_CHECK([file=test-withoutcuboid.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz .], 0)
+AT_CHECK([../../molecuilder -i test.xyz --select-all-atoms --unselect-atoms-inside-cuboid "2,2,2" --position "9.78,2.64,2.64" -r --undo], 0, [stdout], [stderr])
+AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.xyz test-cuboid.xyz], 0)
+AT_CHECK([../../molecuilder -i test-cuboid.xyz --select-all-atoms --unselect-atoms-inside-cuboid "2,2,2" --position "9.78,2.64,2.64" -r --undo --redo], 0, [stdout], [stderr])
 AT_CHECK([sort -n test-cuboid.xyz | grep -v -E "^[[[:digit:]]]+" | grep -v "Created by" >test-cuboid.xyz-sorted], 0, [ignore], [ignore])
 AT_CHECK([file=test-cuboid.xyz-sorted; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/$file], 0, [ignore], [ignore])
Index: tests/regression/testsuite-standard_options.at
===================================================================
--- tests/regression/testsuite-standard_options.at	(revision 61951bf7003a204e8280efea5cd01f49ec7e6e94)
+++ tests/regression/testsuite-standard_options.at	(revision 95e6b132cb0973feda4ff43eba6ed2a7366ca78d)
@@ -5,5 +5,12 @@
 AT_CHECK([pwd],[ignore],[ignore])
 AT_CHECK([../../molecuilder -v 1], 0, [stdout], [ignore])
-AT_CHECK([fgrep olecuilder stdout], 0, [ignore], [ignore])
+AT_CHECK([grep "Setting verbosity from .* to 1" stdout], 0, [ignore], [ignore])
+AT_CLEANUP
+AT_SETUP([Standard Options - verbosity with Undo/Redo])
+AT_KEYWORDS([options])
+AT_CHECK([../../molecuilder -v 1 --undo], 0, [stdout], [ignore])
+AT_CHECK([grep "Setting verbosity from 1 to .*" stdout], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -v 1 --undo --redo], 0, [stdout], [ignore])
+AT_CHECK([grep "Setting verbosity from .* to 1" stdout], 0, [ignore], [ignore])
 AT_CLEANUP
 
@@ -53,4 +60,12 @@
 AT_CHECK([fgrep "I won't parse trajectories" stdout], 0, [ignore], [ignore])
 AT_CLEANUP
+AT_SETUP([Standard Options - fast trajectories with Undo/Redo])
+AT_KEYWORDS([options])
+AT_CHECK([../../molecuilder -i test.conf -n 1 --undo], 0, [stdout], [stderr])
+AT_CHECK([fgrep "I will parse trajectories." stdout], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i test.conf -n 1 --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([grep -c "I won't parse trajectories" stdout], 0, 2
+, [ignore])
+AT_CLEANUP
 
 # 7. molecule default name
@@ -60,2 +75,9 @@
 AT_CHECK([fgrep "Default name of new molecules set to test." stdout], 0, [ignore], [ignore])
 AT_CLEANUP
+AT_SETUP([Standard Options - molecule default name with Undo/Redo])
+AT_KEYWORDS([options])
+AT_CHECK([../../molecuilder -i test.conf -X test --undo], 0, [stdout], [stderr])
+AT_CHECK([fgrep "Default name of new molecules set to none." stdout], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i test.conf -X test --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([fgrep "Default name of new molecules set to test." stdout], 0, [ignore], [ignore])
+AT_CLEANUP
