Index: src/Actions/Action.hpp
===================================================================
--- src/Actions/Action.hpp	(revision a5041ec8d039f68329ca096fda2b8fc1c40b82ab)
+++ src/Actions/Action.hpp	(revision 1fa107dbc34a3e62d63a552642956a2a6ec3c408)
@@ -20,8 +20,8 @@
 {
 protected:
+public:
   Action();
   virtual ~Action();
 
-public:
   virtual void call()=0;
   virtual void undo()=0;
Index: src/Actions/ActionSequence.cpp
===================================================================
--- src/Actions/ActionSequence.cpp	(revision a5041ec8d039f68329ca096fda2b8fc1c40b82ab)
+++ src/Actions/ActionSequence.cpp	(revision 1fa107dbc34a3e62d63a552642956a2a6ec3c408)
@@ -12,13 +12,8 @@
 
 ActionSequence::ActionSequence()
-{
-  // TODO Auto-generated constructor stub
-
-}
+{}
 
 ActionSequence::~ActionSequence()
-{
-  // TODO Auto-generated destructor stub
-}
+{}
 
 
@@ -28,8 +23,13 @@
 
 Action* ActionSequence::removeLastAction(){
-  Action* theAction;
-  theAction = actions.back();
-  actions.pop_back();
-  return theAction;
+  if(actions.empty()) {
+    return 0;
+  }
+  else {
+    Action* theAction;
+    theAction = actions.back();
+    actions.pop_back();
+    return theAction;
+  }
 }
 
Index: src/Actions/MakroAction.cpp
===================================================================
--- src/Actions/MakroAction.cpp	(revision 1fa107dbc34a3e62d63a552642956a2a6ec3c408)
+++ src/Actions/MakroAction.cpp	(revision 1fa107dbc34a3e62d63a552642956a2a6ec3c408)
@@ -0,0 +1,37 @@
+/*
+ * MakroAction.cpp
+ *
+ *  Created on: Dec 17, 2009
+ *      Author: crueger
+ */
+
+#include "Actions/MakroAction.hpp"
+#include "Actions/Action.hpp"
+#include "Actions/ActionSequence.hpp"
+
+MakroAction::MakroAction(ActionSequence* _actions) :
+actions(_actions)
+{
+}
+
+MakroAction::~MakroAction()
+{
+  Action* action;
+  while(action=actions->removeLastAction()){
+    delete action;
+  }
+  delete actions;
+}
+
+
+void MakroAction::call(){
+  actions->callAll();
+}
+
+void MakroAction::undo() {
+  actions->undoAll();
+}
+
+bool MakroAction::canUndo() {
+  return actions->canUndo();
+}
Index: src/Actions/MakroAction.hpp
===================================================================
--- src/Actions/MakroAction.hpp	(revision 1fa107dbc34a3e62d63a552642956a2a6ec3c408)
+++ src/Actions/MakroAction.hpp	(revision 1fa107dbc34a3e62d63a552642956a2a6ec3c408)
@@ -0,0 +1,34 @@
+/*
+ * MakroAction.hpp
+ *
+ *  Created on: Dec 17, 2009
+ *      Author: crueger
+ */
+
+#ifndef MAKROACTION_HPP_
+#define MAKROACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+class ActionSequence;
+
+/**
+ * Action to allow producing bigger Actions from sequences of small actions.
+ *
+ * Destruction of the Actions and the sequence is handled by this class.
+ */
+class MakroAction : public Action
+{
+public:
+  MakroAction(ActionSequence*);
+  virtual ~MakroAction();
+
+  virtual void call();
+  virtual void undo();
+  virtual bool canUndo();
+
+private:
+  ActionSequence *actions;
+};
+
+#endif /* MAKROACTION_HPP_ */
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision a5041ec8d039f68329ca096fda2b8fc1c40b82ab)
+++ src/Makefile.am	(revision 1fa107dbc34a3e62d63a552642956a2a6ec3c408)
@@ -5,6 +5,6 @@
 ANALYSISHEADER = analysis_bonds.hpp analysis_correlation.hpp
 
-ACTIONSSOURCE = Actions/Action.cpp Actions/MethodAction.cpp Actions/ActionSequence.cpp
-ACTIONSHEADER = Actions/Action.hpp Actions/MethodAction.hpp Actions/ActionSequence.hpp
+ACTIONSSOURCE = Actions/Action.cpp Actions/MethodAction.cpp Actions/ActionSequence.cpp Actions/MakroAction.cpp
+ACTIONSHEADER = Actions/Action.hpp Actions/MethodAction.hpp Actions/ActionSequence.hpp Actions/MakroAction.hpp
 
 VIEWSOURCE = Views/View.cpp Views/StringView.cpp Views/MethodStringView.cpp Views/StreamStringView.cpp
Index: src/menu.cpp
===================================================================
--- src/menu.cpp	(revision a5041ec8d039f68329ca096fda2b8fc1c40b82ab)
+++ src/menu.cpp	(revision 1fa107dbc34a3e62d63a552642956a2a6ec3c408)
@@ -1242,33 +1242,33 @@
   new SeperatorItem(main_menu);
 
-  MethodAction *setMoleculeAction = new MethodAction(boost::bind(&oldmenu::flipChosen,this,molecules));
+  Action *setMoleculeAction = new MethodAction(boost::bind(&oldmenu::flipChosen,this,molecules));
   new ActionMenuItem('a',"set molecule (in)active",main_menu,setMoleculeAction);
 
-  MethodAction *editMoleculeAction = new MethodAction(boost::bind(&oldmenu::EditMolecules,this,periode, molecules));
+  Action *editMoleculeAction = new MethodAction(boost::bind(&oldmenu::EditMolecules,this,periode, molecules));
   new ActionMenuItem('e',"edit molecules (load, parse, save)",main_menu,editMoleculeAction);
 
-  MethodAction *manipulateMoleculeAction = new MethodAction(boost::bind(&oldmenu::ManipulateMolecules,this,periode, molecules, configuration));
+  Action *manipulateMoleculeAction = new MethodAction(boost::bind(&oldmenu::ManipulateMolecules,this,periode, molecules, configuration));
   new ActionMenuItem('g',"globally manipulate atoms in molecule",main_menu,manipulateMoleculeAction);
 
-  MethodAction *mergeMoleculeAction = new MethodAction(boost::bind(&oldmenu::MergeMolecules,this,periode, molecules));
+  Action *mergeMoleculeAction = new MethodAction(boost::bind(&oldmenu::MergeMolecules,this,periode, molecules));
   new ActionMenuItem('M',"Merge molecules",main_menu,mergeMoleculeAction);
 
-  MethodAction *manipulateAtomsAction = new MethodAction(boost::bind(&oldmenu::ManipulateAtoms,this,periode, molecules, configuration));
+  Action *manipulateAtomsAction = new MethodAction(boost::bind(&oldmenu::ManipulateAtoms,this,periode, molecules, configuration));
   new ActionMenuItem('m',"manipulate atoms",main_menu,manipulateAtomsAction);
 
   new SeperatorItem(main_menu);
 
-  MethodAction *editConfigAction = new MethodAction(boost::bind(&config::Edit,configuration));
+  Action *editConfigAction = new MethodAction(boost::bind(&config::Edit,configuration));
   new ActionMenuItem('c',"edit the current configuration",main_menu,editConfigAction);
 
   new SeperatorItem(main_menu);
 
-  MethodAction *saveConfigAction = new MethodAction(boost::bind(&oldmenu::SaveConfig,this,ConfigFileName, configuration, periode, molecules));
+  Action *saveConfigAction = new MethodAction(boost::bind(&oldmenu::SaveConfig,this,ConfigFileName, configuration, periode, molecules));
   new ActionMenuItem('s',"save current setup to config file",main_menu,saveConfigAction);
 
-  MethodAction *doTestAction = new MethodAction(boost::bind(&oldmenu::testroutine,this,molecules));
+  Action *doTestAction = new MethodAction(boost::bind(&oldmenu::testroutine,this,molecules));
   new ActionMenuItem('T',"call the current test routine",main_menu,doTestAction);
 
-  MethodAction *quitAction = new MethodAction(boost::bind(&TextMenu::doQuit,main_menu));
+  Action *quitAction = new MethodAction(boost::bind(&TextMenu::doQuit,main_menu));
   new ActionMenuItem('q',"quit",main_menu,quitAction);
 
