Index: src/Actions/Action.cpp
===================================================================
--- src/Actions/Action.cpp	(revision 7ca80618ed8bb20b2ffc293ef03e46c6b5299ae1)
+++ src/Actions/Action.cpp	(revision e73a8a2f90ce3ebc52e5a08bae476c290ee4cee0)
@@ -17,5 +17,5 @@
 {
   if(_doRegister){
-    ActionRegistry::getRegistry()->registerAction(this);
+    ActionRegistry::getInstance().registerAction(this);
   }
 }
Index: src/Actions/ActionRegistry.cpp
===================================================================
--- src/Actions/ActionRegistry.cpp	(revision 7ca80618ed8bb20b2ffc293ef03e46c6b5299ae1)
+++ src/Actions/ActionRegistry.cpp	(revision e73a8a2f90ce3ebc52e5a08bae476c290ee4cee0)
@@ -9,4 +9,6 @@
 #include "Actions/Action.hpp"
 
+#include "Patterns/Singleton_impl.hpp"
+
 #include <string>
 #include <cassert>
@@ -14,6 +16,4 @@
 
 using namespace std;
-
-ActionRegistry *ActionRegistry::theInstance=0;
 
 ActionRegistry::ActionRegistry()
@@ -43,16 +43,3 @@
 }
 
-// singleton stuff
-ActionRegistry* ActionRegistry::getRegistry(){
-  if(!theInstance){
-    theInstance = new ActionRegistry();
-  }
-  return theInstance;
-}
-
-void ActionRegistry::purgeRegistry(){
-  if(theInstance){
-    delete theInstance;
-    theInstance = 0;
-  }
-}
+CONSTRUCT_SINGLETON(ActionRegistry)
Index: src/Actions/ActionRegistry.hpp
===================================================================
--- src/Actions/ActionRegistry.hpp	(revision 7ca80618ed8bb20b2ffc293ef03e46c6b5299ae1)
+++ src/Actions/ActionRegistry.hpp	(revision e73a8a2f90ce3ebc52e5a08bae476c290ee4cee0)
@@ -12,8 +12,11 @@
 #include <map>
 
+#include "Patterns/Singleton.hpp"
+
 class Action;
 
-class ActionRegistry
+class ActionRegistry : public Singleton<ActionRegistry>
 {
+  friend class Singleton<ActionRegistry>;
 public:
   Action* getActionByName(const std::string);
@@ -23,12 +26,7 @@
   std::map<const std::string,Action*> actionMap;
 
-// singleton stuff
-public:
-  static ActionRegistry* getRegistry();
-  static void purgeRegistry();
 private:
   ActionRegistry();
   virtual ~ActionRegistry();
-  static ActionRegistry *theInstance;
 };
 
Index: src/builder.cpp
===================================================================
--- src/builder.cpp	(revision 7ca80618ed8bb20b2ffc293ef03e46c6b5299ae1)
+++ src/builder.cpp	(revision e73a8a2f90ce3ebc52e5a08bae476c290ee4cee0)
@@ -2177,5 +2177,5 @@
   logger::purgeInstance();
   errorLogger::purgeInstance();
-  ActionRegistry::purgeRegistry();
+  ActionRegistry::purgeInstance();
 }
 
Index: src/unittests/SingletonTest.cpp
===================================================================
--- src/unittests/SingletonTest.cpp	(revision 7ca80618ed8bb20b2ffc293ef03e46c6b5299ae1)
+++ src/unittests/SingletonTest.cpp	(revision e73a8a2f90ce3ebc52e5a08bae476c290ee4cee0)
@@ -87,4 +87,7 @@
   CPPUNIT_ASSERT_EQUAL(1,SingletonStub1::count1);
   CPPUNIT_ASSERT_EQUAL(1,SingletonStub2::count1);
+  // no calls to the destructor should have occured so far
+  CPPUNIT_ASSERT_EQUAL(0,SingletonStub1::count2);
+  CPPUNIT_ASSERT_EQUAL(0,SingletonStub2::count2);
 
   SingletonStub1::purgeInstance();
Index: src/unittests/atomsCalculationTest.cpp
===================================================================
--- src/unittests/atomsCalculationTest.cpp	(revision 7ca80618ed8bb20b2ffc293ef03e46c6b5299ae1)
+++ src/unittests/atomsCalculationTest.cpp	(revision e73a8a2f90ce3ebc52e5a08bae476c290ee4cee0)
@@ -63,5 +63,5 @@
 void atomsCalculationTest::tearDown(){
   World::purgeInstance();
-  ActionRegistry::purgeRegistry();
+  ActionRegistry::purgeInstance();
 }
 
Index: src/unittests/manipulateAtomsTest.cpp
===================================================================
--- src/unittests/manipulateAtomsTest.cpp	(revision 7ca80618ed8bb20b2ffc293ef03e46c6b5299ae1)
+++ src/unittests/manipulateAtomsTest.cpp	(revision e73a8a2f90ce3ebc52e5a08bae476c290ee4cee0)
@@ -78,5 +78,5 @@
 void manipulateAtomsTest::tearDown(){
   World::purgeInstance();
-  ActionRegistry::purgeRegistry();
+  ActionRegistry::purgeInstance();
 }
 
