Index: src/Actions/Action.cpp
===================================================================
--- src/Actions/Action.cpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/Actions/Action.cpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -6,9 +6,23 @@
  */
 
-#include "Action.hpp"
+#include <string>
 
-Action::Action()
-{}
+#include "Actions/Action.hpp"
+#include "Actions/ActionRegistry.hpp"
+
+using namespace std;
+
+Action::Action(std::string _name,bool _doRegister) :
+name(_name)
+{
+  if(_doRegister){
+    ActionRegistry::getRegistry()->registerAction(this);
+  }
+}
 
 Action::~Action()
 {}
+
+const string Action::getName(){
+  return name;
+}
Index: src/Actions/Action.hpp
===================================================================
--- src/Actions/Action.hpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/Actions/Action.hpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -8,4 +8,6 @@
 #ifndef ACTION_H_
 #define ACTION_H_
+
+#include <string>
 
 /**
@@ -21,5 +23,5 @@
 protected:
 public:
-  Action();
+  Action(std::string _name,bool _doRegister=true);
   virtual ~Action();
 
@@ -28,4 +30,8 @@
   virtual bool canUndo()=0;
 
+  virtual const std::string getName();
+
+private:
+  std::string name;
 };
 
Index: src/Actions/ActionRegistry.cpp
===================================================================
--- src/Actions/ActionRegistry.cpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
+++ src/Actions/ActionRegistry.cpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -0,0 +1,56 @@
+/*
+ * ActionRegistry.cpp
+ *
+ *  Created on: Jan 7, 2010
+ *      Author: crueger
+ */
+
+#include "Actions/ActionRegistry.hpp"
+#include "Actions/Action.hpp"
+
+#include <string>
+#include <cassert>
+#include <iostream>
+
+using namespace std;
+
+ActionRegistry *ActionRegistry::theInstance=0;
+
+ActionRegistry::ActionRegistry()
+{
+  // TODO Auto-generated constructor stub
+
+}
+
+ActionRegistry::~ActionRegistry()
+{
+  // TODO Auto-generated destructor stub
+}
+
+Action* ActionRegistry::getActionByName(const std::string name){
+  map<const string,Action*>::iterator iter;
+  iter = actionMap.find(name);
+  assert(iter!=actionMap.end() && "Query for an action not stored in registry");
+  return iter->second;
+}
+
+void ActionRegistry::registerAction(Action* action){
+  pair<map<const string,Action*>::iterator,bool> ret;
+  ret = actionMap.insert(pair<const string,Action*>(action->getName(),action));
+  assert(ret.second && "Two actions with the same name added to registry");
+}
+
+// singleton stuff
+ActionRegistry* ActionRegistry::getRegistry(){
+  if(!theInstance){
+    theInstance = new ActionRegistry();
+  }
+  return theInstance;
+}
+
+void ActionRegistry::purgeRegistry(){
+  if(theInstance){
+    delete theInstance;
+    theInstance = 0;
+  }
+}
Index: src/Actions/ActionRegistry.hpp
===================================================================
--- src/Actions/ActionRegistry.hpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
+++ src/Actions/ActionRegistry.hpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -0,0 +1,35 @@
+/*
+ * ActionRegistry.hpp
+ *
+ *  Created on: Jan 7, 2010
+ *      Author: crueger
+ */
+
+#ifndef ACTIONREGISTRY_HPP_
+#define ACTIONREGISTRY_HPP_
+
+#include <string>
+#include <map>
+
+class Action;
+
+class ActionRegistry
+{
+public:
+  Action* getActionByName(const std::string);
+  void registerAction(Action*);
+
+private:
+  std::map<const std::string,Action*> actionMap;
+
+// singleton stuff
+public:
+  static ActionRegistry* getRegistry();
+  static void purgeRegistry();
+private:
+  ActionRegistry();
+  virtual ~ActionRegistry();
+  static ActionRegistry *theInstance;
+};
+
+#endif /* ACTIONREGISTRY_HPP_ */
Index: src/Actions/ErrorAction.cpp
===================================================================
--- src/Actions/ErrorAction.cpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/Actions/ErrorAction.cpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -14,5 +14,6 @@
 using namespace std;
 
-ErrorAction::ErrorAction(const char * _errorMsg) :
+ErrorAction::ErrorAction(string _name,const char * _errorMsg,bool _doRegister) :
+Action(_name,_doRegister),
 errorMsg(_errorMsg)
 {
Index: src/Actions/ErrorAction.hpp
===================================================================
--- src/Actions/ErrorAction.hpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/Actions/ErrorAction.hpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -15,5 +15,5 @@
 {
 public:
-  ErrorAction(const char *);
+  ErrorAction(std::string _name,const char * _errorMsg,bool _doRegister=true);
   virtual ~ErrorAction();
 
Index: src/Actions/MakroAction.cpp
===================================================================
--- src/Actions/MakroAction.cpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/Actions/MakroAction.cpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -6,9 +6,14 @@
  */
 
+#include <string>
+
 #include "Actions/MakroAction.hpp"
 #include "Actions/Action.hpp"
 #include "Actions/ActionSequence.hpp"
 
-MakroAction::MakroAction(ActionSequence* _actions) :
+using namespace std;
+
+MakroAction::MakroAction(string _name,ActionSequence* _actions,bool _doRegister) :
+Action(_name,_doRegister),
 actions(_actions)
 {
Index: src/Actions/MakroAction.hpp
===================================================================
--- src/Actions/MakroAction.hpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/Actions/MakroAction.hpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -8,4 +8,6 @@
 #ifndef MAKROACTION_HPP_
 #define MAKROACTION_HPP_
+
+#include <string>
 
 #include "Actions/Action.hpp"
@@ -21,5 +23,5 @@
 {
 public:
-  MakroAction(ActionSequence*);
+  MakroAction(std::string _name,ActionSequence* _actions,bool _doRegister=true);
   virtual ~MakroAction();
 
Index: src/Actions/MethodAction.cpp
===================================================================
--- src/Actions/MethodAction.cpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/Actions/MethodAction.cpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -8,4 +8,5 @@
 #include <iostream>
 #include <boost/function.hpp>
+#include <string>
 
 #include "MethodAction.hpp"
@@ -13,5 +14,6 @@
 using namespace std;
 
-MethodAction::MethodAction(boost::function<void()> _executeMethod) :
+MethodAction::MethodAction(string _name,boost::function<void()> _executeMethod,bool _doRegister) :
+   Action(_name,_doRegister),
 executeMethod(_executeMethod)
 {
Index: src/Actions/MethodAction.hpp
===================================================================
--- src/Actions/MethodAction.hpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/Actions/MethodAction.hpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -10,4 +10,5 @@
 
 #include <boost/function.hpp>
+#include <string>
 
 #include "Actions/Action.hpp"
@@ -19,5 +20,5 @@
 {
 public:
-  MethodAction(boost::function<void()>);
+  MethodAction(std::string _name,boost::function<void()> _executeMethod,bool _doRegister=true);
   virtual ~MethodAction();
 
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/Makefile.am	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -5,6 +5,6 @@
 ANALYSISHEADER = analysis_bonds.hpp analysis_correlation.hpp
 
-ACTIONSSOURCE = Actions/Action.cpp Actions/MethodAction.cpp Actions/ActionSequence.cpp Actions/MakroAction.cpp Actions/ErrorAction.cpp
-ACTIONSHEADER = Actions/Action.hpp Actions/MethodAction.hpp Actions/ActionSequence.hpp Actions/MakroAction.hpp Actions/ErrorAction.hpp
+ACTIONSSOURCE = Actions/Action.cpp Actions/MethodAction.cpp Actions/ActionSequence.cpp Actions/MakroAction.cpp Actions/ErrorAction.cpp Actions/ActionRegistry.cpp
+ACTIONSHEADER = Actions/Action.hpp Actions/MethodAction.hpp Actions/ActionSequence.hpp Actions/MakroAction.hpp Actions/ErrorAction.hpp Actions/ActionRegistry.hpp
 
 VIEWSOURCE = Views/View.cpp Views/StringView.cpp Views/MethodStringView.cpp Views/StreamStringView.cpp
@@ -14,6 +14,6 @@
 MENUHEADER = Menu/Menu.hpp Menu/TextMenu.hpp Menu/MenuItem.hpp Menu/SubMenuItem.hpp Menu/ActionMenuItem.hpp Menu/SeperatorItem.hpp Menu/DisplayMenuItem.hpp
 
-UISOURCE = ${ACTIONSSOURCE} ${VIEWSOURCE} ${MENUSOURCE} UIElements/UIFactory.cpp UIElements/TextUIFactory.cpp UIElements/Dialog.cpp UIElements/TextDialog.cpp
-UIHEADER = ${ACTIONSHEADER} ${VIEWHEADER} ${MENUHEADER} UIElements/UIFactory.hpp UIElements/TextUIFactory.hpp UIElements/Dialog.hpp UIElements/TextDialog.hpp
+UISOURCE = ${ACTIONSSOURCE} ${VIEWSOURCE} ${MENUSOURCE} UIElements/UIFactory.cpp UIElements/TextUIFactory.cpp UIElements/MainWindow.cpp UIElements/TextWindow.cpp UIElements/Dialog.cpp UIElements/TextDialog.cpp
+UIHEADER = ${ACTIONSHEADER} ${VIEWHEADER} ${MENUHEADER} UIElements/UIFactory.hpp UIElements/TextUIFactory.hpp UIElements/MainWindow.hpp UIElements/TextWindow.hpp UIElements/Dialog.hpp UIElements/TextDialog.hpp
 
 SOURCE = ${ANALYSISSOURCE} ${ATOMSOURCE} ${UISOURCE} bond.cpp bondgraph.cpp boundary.cpp config.cpp element.cpp ellipsoid.cpp errorlogger.cpp graph.cpp helpers.cpp leastsquaremin.cpp linkedcell.cpp log.cpp logger.cpp memoryusageobserver.cpp moleculelist.cpp molecule.cpp molecule_dynamics.cpp molecule_fragmentation.cpp molecule_geometry.cpp molecule_graph.cpp molecule_pointcloud.cpp parser.cpp periodentafel.cpp tesselation.cpp tesselationhelpers.cpp vector.cpp verbose.cpp menu.cpp
Index: src/UIElements/TextUIFactory.cpp
===================================================================
--- src/UIElements/TextUIFactory.cpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/UIElements/TextUIFactory.cpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -7,5 +7,7 @@
 
 #include "UIElements/TextUIFactory.hpp"
+#include "UIElements/TextWindow.hpp"
 #include "UIElements/TextDialog.hpp"
+
 
 TextUIFactory::TextUIFactory()
@@ -25,3 +27,6 @@
 }
 
+MainWindow* TextUIFactory::makeMainWindow() {
+  return new TextWindow();
+}
 
Index: src/UIElements/TextUIFactory.hpp
===================================================================
--- src/UIElements/TextUIFactory.hpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/UIElements/TextUIFactory.hpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -19,4 +19,5 @@
 
   virtual Dialog* makeDialog();
+  virtual MainWindow* makeMainWindow();
 
 protected:
Index: src/UIElements/TextWindow.cpp
===================================================================
--- src/UIElements/TextWindow.cpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/UIElements/TextWindow.cpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -8,4 +8,8 @@
 #include "UIElements/TextWindow.hpp"
 #include "../menu.hpp"
+
+#include <iostream>
+
+using namespace std;
 
 TextWindow::TextWindow()
@@ -21,4 +25,5 @@
 
 void TextWindow::display(MoleculeListClass *molecules, config *configuration, periodentafel *periode, char *ConfigFileName) {
+  cout << "creating main window" <<endl;
   oldmenu *main_menu;
   main_menu = new oldmenu;
Index: src/UIElements/UIFactory.cpp
===================================================================
--- src/UIElements/UIFactory.cpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/UIElements/UIFactory.cpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -12,4 +12,6 @@
 // all factories that can be used:
 #include "UIElements/TextUIFactory.hpp"
+
+UIFactory *UIFactory::theFactory = 0;
 
 UIFactory::UIFactory()
@@ -41,2 +43,10 @@
   return theFactory;
 }
+
+
+void UIFactory::purgeInstance(){
+  if(theFactory) {
+    delete theFactory;
+    theFactory = 0;
+  }
+}
Index: src/UIElements/UIFactory.hpp
===================================================================
--- src/UIElements/UIFactory.hpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/UIElements/UIFactory.hpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -9,4 +9,5 @@
 #define UIFACTORY_HPP_
 
+class MainWindow;
 class Dialog;
 
@@ -14,9 +15,10 @@
 {
 
+public:
   enum InterfaceTypes {Text};
-public:
   virtual ~UIFactory();
 
   // methods for creating UIElements
+  virtual MainWindow* makeMainWindow()=0;
   virtual Dialog* makeDialog()=0;
 
@@ -25,10 +27,11 @@
 
 // singleton stuff
+private:
+  static UIFactory *theFactory;
+
 public:
   static void makeUserInterface(InterfaceTypes type);
   static UIFactory* get();
-
-private:
-  static UIFactory *theFactory;
+  static void purgeInstance();
 };
 
Index: src/builder.cpp
===================================================================
--- src/builder.cpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/builder.cpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -65,5 +65,6 @@
 #include "molecule.hpp"
 #include "periodentafel.hpp"
-#include "menu.hpp"
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/MainWindow.hpp"
 
 /** Parses the command line options.
@@ -904,6 +905,4 @@
     char *ConfigFileName = NULL;
     int j;
-    oldmenu *main_menu;
-    main_menu = new oldmenu;
     setVerbosity(0);
     /* structure of ParseCommandLineOptions will be refactored later */
@@ -940,6 +939,7 @@
 
 
-
-    main_menu->perform(molecules, configuration, periode, ConfigFileName);
+    UIFactory::makeUserInterface(UIFactory::Text);
+    MainWindow *mainWindow = UIFactory::get()->makeMainWindow();
+    mainWindow->display(molecules, configuration, periode, ConfigFileName);
 
     if(periode->StorePeriodentafel(configuration->databasepath))
@@ -952,4 +952,6 @@
     delete(periode);
   delete(configuration);
+
+  delete mainWindow;
 
   Log() << Verbose(0) <<  "Maximum of allocated memory: "
@@ -960,5 +962,5 @@
   logger::purgeInstance();
   errorLogger::purgeInstance();
-
+  UIFactory::purgeInstance();
   return (0);
 }
Index: src/menu.cpp
===================================================================
--- src/menu.cpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/menu.cpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -993,20 +993,20 @@
   TextMenu *MergeMoleculesMenu = new TextMenu(Log() << Verbose(0), "Merge Molecules");
 
-  Action *simpleAddAction = new MethodAction(boost::bind(&oldmenu::SimpleAddMolecules,this,molecules));
+  Action *simpleAddAction = new MethodAction("simpleAddAction",boost::bind(&oldmenu::SimpleAddMolecules,this,molecules),false);
   new ActionMenuItem('a',"simple add of one molecule to another",MergeMoleculesMenu,simpleAddAction);
 
-  Action *embeddAction = new MethodAction(boost::bind(&oldmenu::embeddMolecules,this,molecules));
+  Action *embeddAction = new MethodAction("embeddAction",boost::bind(&oldmenu::embeddMolecules,this,molecules),false);
   new ActionMenuItem('e',"embedding merge of two molecules",MergeMoleculesMenu,embeddAction);
 
-  Action *multiMergeAction = new MethodAction(boost::bind(&oldmenu::multiMergeMolecules,this,molecules));
+  Action *multiMergeAction = new MethodAction("multiMergeAction",boost::bind(&oldmenu::multiMergeMolecules,this,molecules),false);
   new ActionMenuItem('m',"multi-merge of all molecules",MergeMoleculesMenu,multiMergeAction);
 
-  Action *scatterMergeAction = new ErrorAction("Not Implemented yet");
+  Action *scatterMergeAction = new ErrorAction("scatterMergeAction","Not Implemented yet",false);
   new ActionMenuItem('s',"scatter merge of two molecules",MergeMoleculesMenu,scatterMergeAction);
 
-  Action *simpleMergeAction = new MethodAction(boost::bind(&oldmenu::simpleMergeMolecules,this,molecules));
+  Action *simpleMergeAction = new MethodAction("simpleMergeAction",boost::bind(&oldmenu::simpleMergeMolecules,this,molecules),false);
   new ActionMenuItem('t',"simple merge of two molecules",MergeMoleculesMenu,simpleMergeAction);
 
-  Action *returnAction = new MethodAction(boost::bind(&TextMenu::doQuit,MergeMoleculesMenu));
+  Action *returnAction = new MethodAction("returnAction",boost::bind(&TextMenu::doQuit,MergeMoleculesMenu),false);
   MenuItem *returnItem = new ActionMenuItem('q',"return to Main menu",MergeMoleculesMenu,returnAction);
 
@@ -1125,5 +1125,5 @@
   new SeperatorItem(main_menu);
 
-  Action *setMoleculeAction = new MethodAction(boost::bind(&MoleculeListClass::flipChosen,molecules));
+  Action *setMoleculeAction = new MethodAction("setMoleculeAction",boost::bind(&MoleculeListClass::flipChosen,molecules));
   new ActionMenuItem('a',"set molecule (in)active",main_menu,setMoleculeAction);
 
@@ -1131,27 +1131,27 @@
   new SubMenuItem('e',"edit molecules (load, parse, save)",main_menu,editMoleculesMenu);
 
-  Action *manipulateMoleculeAction = new MethodAction(boost::bind(&oldmenu::ManipulateMolecules,this,periode, molecules, configuration));
+  Action *manipulateMoleculeAction = new MethodAction("manipulateMoleculeAction",boost::bind(&oldmenu::ManipulateMolecules,this,periode, molecules, configuration));
   new ActionMenuItem('g',"globally manipulate atoms in molecule",main_menu,manipulateMoleculeAction);
 
-  Action *mergeMoleculeAction = new MethodAction(boost::bind(&oldmenu::MergeMolecules,this,periode, molecules));
+  Action *mergeMoleculeAction = new MethodAction("mergeMoleculeAction",boost::bind(&oldmenu::MergeMolecules,this,periode, molecules));
   new ActionMenuItem('M',"Merge molecules",main_menu,mergeMoleculeAction);
 
-  Action *manipulateAtomsAction = new MethodAction(boost::bind(&oldmenu::ManipulateAtoms,this,periode, molecules, configuration));
+  Action *manipulateAtomsAction = new MethodAction("manipulateAtomsAction",boost::bind(&oldmenu::ManipulateAtoms,this,periode, molecules, configuration));
   new ActionMenuItem('m',"manipulate atoms",main_menu,manipulateAtomsAction);
 
   new SeperatorItem(main_menu);
 
-  Action *editConfigAction = new MethodAction(boost::bind(&config::Edit,configuration));
+  Action *editConfigAction = new MethodAction("editConfigAction",boost::bind(&config::Edit,configuration));
   new ActionMenuItem('c',"edit the current configuration",main_menu,editConfigAction);
 
   new SeperatorItem(main_menu);
 
-  Action *saveConfigAction = new MethodAction(boost::bind(&config::SaveAll,configuration, ConfigFileName, periode, molecules));
+  Action *saveConfigAction = new MethodAction("saveConfigAction",boost::bind(&config::SaveAll,configuration, ConfigFileName, periode, molecules));
   new ActionMenuItem('s',"save current setup to config file",main_menu,saveConfigAction);
 
-  Action *doTestAction = new MethodAction(boost::bind(&oldmenu::testroutine,this,molecules));
+  Action *doTestAction = new MethodAction("doTestAction",boost::bind(&oldmenu::testroutine,this,molecules));
   new ActionMenuItem('T',"call the current test routine",main_menu,doTestAction);
 
-  Action *quitAction = new MethodAction(boost::bind(&TextMenu::doQuit,main_menu));
+  Action *quitAction = new MethodAction("quitAction",boost::bind(&TextMenu::doQuit,main_menu),false);
   new ActionMenuItem('q',"quit",main_menu,quitAction);
 
@@ -1159,23 +1159,23 @@
 
   // build the EditMoleculesMenu
-  Action *createMoleculeAction = new MethodAction(boost::bind(&MoleculeListClass::createNewMolecule,molecules,periode));
+  Action *createMoleculeAction = new MethodAction("createMoleculeAction",boost::bind(&MoleculeListClass::createNewMolecule,molecules,periode));
   new ActionMenuItem('c',"create new molecule",editMoleculesMenu,createMoleculeAction);
 
-  Action *loadMoleculeAction = new MethodAction(boost::bind(&MoleculeListClass::loadFromXYZ,molecules,periode));
+  Action *loadMoleculeAction = new MethodAction("loadMoleculeAction",boost::bind(&MoleculeListClass::loadFromXYZ,molecules,periode));
   new ActionMenuItem('l',"load molecule from xyz file",editMoleculesMenu,loadMoleculeAction);
 
-  Action *changeFilenameAction = new MethodAction(boost::bind(&MoleculeListClass::changeName,molecules));
+  Action *changeFilenameAction = new MethodAction("changeFilenameAction",boost::bind(&MoleculeListClass::changeName,molecules));
   new ActionMenuItem('n',"change molecule's name",editMoleculesMenu,changeFilenameAction);
 
-  Action *giveFilenameAction = new MethodAction(boost::bind(&MoleculeListClass::setMoleculeFilename,molecules));
+  Action *giveFilenameAction = new MethodAction("giveFilenameAction",boost::bind(&MoleculeListClass::setMoleculeFilename,molecules));
   new ActionMenuItem('N',"give molecules filename",editMoleculesMenu,giveFilenameAction);
 
-  Action *parseAtomsAction = new MethodAction(boost::bind(&MoleculeListClass::parseXYZIntoMolecule,molecules));
+  Action *parseAtomsAction = new MethodAction("parseAtomsAction",boost::bind(&MoleculeListClass::parseXYZIntoMolecule,molecules));
   new ActionMenuItem('p',"parse atoms in xyz file into molecule",editMoleculesMenu,parseAtomsAction);
 
-  Action *eraseMoleculeAction = new MethodAction(boost::bind(&MoleculeListClass::eraseMolecule,molecules));
+  Action *eraseMoleculeAction = new MethodAction("eraseMoleculeAction",boost::bind(&MoleculeListClass::eraseMolecule,molecules));
   new ActionMenuItem('r',"remove a molecule",editMoleculesMenu,eraseMoleculeAction);
 
-  Action *returnAction = new MethodAction(boost::bind(&TextMenu::doQuit,editMoleculesMenu));
+  Action *returnAction = new MethodAction("returnAction",boost::bind(&TextMenu::doQuit,editMoleculesMenu),false);
   MenuItem *returnItem = new ActionMenuItem('q',"return to Main menu",editMoleculesMenu,returnAction);
 
@@ -1208,3 +1208,4 @@
   delete eraseMoleculeAction;
   delete returnAction;
+
 };
Index: src/unittests/ActionSequenceTest.cpp
===================================================================
--- src/unittests/ActionSequenceTest.cpp	(revision a562758de7d719868053e4339076c0d99b31a95f)
+++ src/unittests/ActionSequenceTest.cpp	(revision cc04b7dcf53d227c2347afab510d4041e1140de4)
@@ -26,5 +26,5 @@
 {
 public:
-  canUndoActionStub(){}
+  canUndoActionStub(): Action("canUndoActionStub",false){}
   virtual ~canUndoActionStub(){}
 
@@ -39,5 +39,5 @@
 {
 public:
-  cannotUndoActionStub(){}
+  cannotUndoActionStub() : Action("cannotUndoActionStub",false){}
   virtual ~cannotUndoActionStub(){}
 
@@ -53,4 +53,5 @@
 public:
   wasCalledActionStub() :
+      Action("wasCalledActionStub",false),
       called(false)
   {}
