Index: molecuilder/src/Actions/Action.cpp
===================================================================
--- molecuilder/src/Actions/Action.cpp	(revision 53f5e61fe983c4b454f53987ff161a14b81eefbd)
+++ molecuilder/src/Actions/Action.cpp	(revision 3e83253093790b64cd8c7fe3603b6cb3227e6b4f)
@@ -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: molecuilder/src/Actions/Action.hpp
===================================================================
--- molecuilder/src/Actions/Action.hpp	(revision 53f5e61fe983c4b454f53987ff161a14b81eefbd)
+++ molecuilder/src/Actions/Action.hpp	(revision 3e83253093790b64cd8c7fe3603b6cb3227e6b4f)
@@ -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: molecuilder/src/Actions/ActionRegistry.cpp
===================================================================
--- molecuilder/src/Actions/ActionRegistry.cpp	(revision 3e83253093790b64cd8c7fe3603b6cb3227e6b4f)
+++ molecuilder/src/Actions/ActionRegistry.cpp	(revision 3e83253093790b64cd8c7fe3603b6cb3227e6b4f)
@@ -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: molecuilder/src/Actions/ActionRegistry.hpp
===================================================================
--- molecuilder/src/Actions/ActionRegistry.hpp	(revision 3e83253093790b64cd8c7fe3603b6cb3227e6b4f)
+++ molecuilder/src/Actions/ActionRegistry.hpp	(revision 3e83253093790b64cd8c7fe3603b6cb3227e6b4f)
@@ -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: molecuilder/src/Actions/ErrorAction.cpp
===================================================================
--- molecuilder/src/Actions/ErrorAction.cpp	(revision 53f5e61fe983c4b454f53987ff161a14b81eefbd)
+++ molecuilder/src/Actions/ErrorAction.cpp	(revision 3e83253093790b64cd8c7fe3603b6cb3227e6b4f)
@@ -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: molecuilder/src/Actions/ErrorAction.hpp
===================================================================
--- molecuilder/src/Actions/ErrorAction.hpp	(revision 53f5e61fe983c4b454f53987ff161a14b81eefbd)
+++ molecuilder/src/Actions/ErrorAction.hpp	(revision 3e83253093790b64cd8c7fe3603b6cb3227e6b4f)
@@ -15,5 +15,5 @@
 {
 public:
-  ErrorAction(const char *);
+  ErrorAction(std::string _name,const char * _errorMsg,bool _doRegister=true);
   virtual ~ErrorAction();
 
Index: molecuilder/src/Actions/MakroAction.cpp
===================================================================
--- molecuilder/src/Actions/MakroAction.cpp	(revision 53f5e61fe983c4b454f53987ff161a14b81eefbd)
+++ molecuilder/src/Actions/MakroAction.cpp	(revision 3e83253093790b64cd8c7fe3603b6cb3227e6b4f)
@@ -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: molecuilder/src/Actions/MakroAction.hpp
===================================================================
--- molecuilder/src/Actions/MakroAction.hpp	(revision 53f5e61fe983c4b454f53987ff161a14b81eefbd)
+++ molecuilder/src/Actions/MakroAction.hpp	(revision 3e83253093790b64cd8c7fe3603b6cb3227e6b4f)
@@ -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: molecuilder/src/Actions/MethodAction.cpp
===================================================================
--- molecuilder/src/Actions/MethodAction.cpp	(revision 53f5e61fe983c4b454f53987ff161a14b81eefbd)
+++ molecuilder/src/Actions/MethodAction.cpp	(revision 3e83253093790b64cd8c7fe3603b6cb3227e6b4f)
@@ -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: molecuilder/src/Actions/MethodAction.hpp
===================================================================
--- molecuilder/src/Actions/MethodAction.hpp	(revision 53f5e61fe983c4b454f53987ff161a14b81eefbd)
+++ molecuilder/src/Actions/MethodAction.hpp	(revision 3e83253093790b64cd8c7fe3603b6cb3227e6b4f)
@@ -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();
 
