Index: src/Actions/Action_impl_header.hpp
===================================================================
--- src/Actions/Action_impl_header.hpp	(revision d9f2b33b806913c901266dd646463bfa637d037e)
+++ src/Actions/Action_impl_header.hpp	(revision c09f94cdc954e2f3fdb4fb3874c75bef78adc1f7)
@@ -194,5 +194,9 @@
 };
 
+#if defined BASECLASS
+class ACTION : public BASECLASS {
+#else
 class ACTION : public Action {
+#endif
   #if defined paramtypes && defined paramreferences
   friend void COMMAND(
@@ -271,4 +275,5 @@
 #undef MENUPOSITION
 #undef TOKEN
+#undef BASECLASS
 
 #undef DESCRIPTION
Index: src/Actions/Action_impl_pre.hpp
===================================================================
--- src/Actions/Action_impl_pre.hpp	(revision d9f2b33b806913c901266dd646463bfa637d037e)
+++ src/Actions/Action_impl_pre.hpp	(revision c09f94cdc954e2f3fdb4fb3874c75bef78adc1f7)
@@ -264,5 +264,9 @@
 // =========== constructor ===========
 ACTION::ACTION () :
+#if defined BASECLASS
+  BASECLASS(ActionTraits< ACTION >())
+#else
   Action(ActionTraits< ACTION >())
+#endif
 {}
 
Index: src/Actions/Calculation_impl.hpp
===================================================================
--- src/Actions/Calculation_impl.hpp	(revision d9f2b33b806913c901266dd646463bfa637d037e)
+++ src/Actions/Calculation_impl.hpp	(revision c09f94cdc954e2f3fdb4fb3874c75bef78adc1f7)
@@ -24,8 +24,10 @@
 template<typename T>
 Calculation<T>::Calculation(int _maxSteps, const ActionTrait &_trait) :
-  Process(_maxSteps,_trait),
+  Process(_trait),
   result(0),
   done(false)
-{}
+{
+  setMaxSteps(_maxSteps);
+}
 
 template<typename T>
Index: src/Actions/FragmentationAction/FragmentationAction.def
===================================================================
--- src/Actions/FragmentationAction/FragmentationAction.def	(revision d9f2b33b806913c901266dd646463bfa637d037e)
+++ src/Actions/FragmentationAction/FragmentationAction.def	(revision c09f94cdc954e2f3fdb4fb3874c75bef78adc1f7)
@@ -47,5 +47,4 @@
 #define TOKEN "fragment-molecule"
 
-
 // finally the information stored in the ActionTrait specialization
 #define DESCRIPTION "create for a given molecule into fragments up to given order"
Index: src/Actions/FragmentationAction/FragmentationAutomationAction.cpp
===================================================================
--- src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision d9f2b33b806913c901266dd646463bfa637d037e)
+++ src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision c09f94cdc954e2f3fdb4fb3874c75bef78adc1f7)
@@ -73,4 +73,6 @@
 #include "World.hpp"
 
+#include <boost/bind.hpp>
+#include <boost/thread.hpp>
 #include <fstream>
 #include <iostream>
@@ -95,4 +97,10 @@
 {
   return NULL;
+}
+
+static void updateSteps(Process &p, const size_t step, const size_t total)
+{
+  LOG(1, "There are " << step << " steps out of " << total << " done.");
+  p.setCurrStep(step);
 }
 
@@ -126,5 +134,14 @@
 
     // Phase Three: calculate result
-    mpqccontroller.waitforResults(NumberJobs);
+    setMaxSteps(NumberJobs);
+    mpqccontroller.setUpdateHandler(
+        boost::bind(&updateSteps, boost::ref(*this), _1, _2)
+        );
+    start();
+    boost::thread wait_thread(
+        boost::bind(&MPQCFragmentController::waitforResults, boost::ref(mpqccontroller), boost::cref(NumberJobs))
+    );
+    wait_thread.join();
+    stop();
     mpqccontroller.getResults(shortrangedata);
 
Index: src/Actions/FragmentationAction/FragmentationAutomationAction.def
===================================================================
--- src/Actions/FragmentationAction/FragmentationAutomationAction.def	(revision d9f2b33b806913c901266dd646463bfa637d037e)
+++ src/Actions/FragmentationAction/FragmentationAutomationAction.def	(revision c09f94cdc954e2f3fdb4fb3874c75bef78adc1f7)
@@ -45,4 +45,6 @@
 #define TOKEN "fragment-automation"
 
+// if base class is undefined, it defaults to Action
+#define BASECLASS Process
 
 // finally the information stored in the ActionTrait specialization
Index: src/Actions/FragmentationAction/FragmentationAutomationAction.hpp
===================================================================
--- src/Actions/FragmentationAction/FragmentationAutomationAction.hpp	(revision d9f2b33b806913c901266dd646463bfa637d037e)
+++ src/Actions/FragmentationAction/FragmentationAutomationAction.hpp	(revision c09f94cdc954e2f3fdb4fb3874c75bef78adc1f7)
@@ -15,5 +15,5 @@
 
 
-#include "Actions/Action.hpp"
+#include "Actions/Process.hpp"
 
 #include "FragmentationAutomationAction.def"
Index: src/Actions/ManipulateAtomsProcess.cpp
===================================================================
--- src/Actions/ManipulateAtomsProcess.cpp	(revision d9f2b33b806913c901266dd646463bfa637d037e)
+++ src/Actions/ManipulateAtomsProcess.cpp	(revision c09f94cdc954e2f3fdb4fb3874c75bef78adc1f7)
@@ -48,5 +48,5 @@
     AtomDescriptor _descr,
     const ActionTrait &_trait) :
-  Process(0,_trait),
+  Process(_trait),
   descr(_descr),
   operation(_operation)
Index: src/Actions/Process.cpp
===================================================================
--- src/Actions/Process.cpp	(revision d9f2b33b806913c901266dd646463bfa637d037e)
+++ src/Actions/Process.cpp	(revision c09f94cdc954e2f3fdb4fb3874c75bef78adc1f7)
@@ -41,8 +41,8 @@
 using namespace MoleCuilder;
 
-Process::Process(int _maxSteps, const ActionTrait &_trait) :
+Process::Process(const ActionTrait &_trait) :
   Action(_trait),
   Observable("Process"),
-  maxSteps(_maxSteps),
+  maxSteps(0),
   active(false),
   starts(false),
Index: src/Actions/Process.hpp
===================================================================
--- src/Actions/Process.hpp	(revision d9f2b33b806913c901266dd646463bfa637d037e)
+++ src/Actions/Process.hpp	(revision c09f94cdc954e2f3fdb4fb3874c75bef78adc1f7)
@@ -51,5 +51,5 @@
 {
 public:
-  Process(int _maxSteps, const ActionTrait &_trait);
+  Process(const ActionTrait &_trait);
   virtual ~Process();
 
