Index: src/Actions/ActionSequence.cpp
===================================================================
--- src/Actions/ActionSequence.cpp	(revision afbbfeb503903b1b9c5d9d837422eba4ef9792d7)
+++ src/Actions/ActionSequence.cpp	(revision 237f9339687fa2ab9fabd26196828a79d99f1307)
@@ -55,4 +55,15 @@
 void ActionSequence::addAction(Action* _action){
   actions.push_back(_action);
+}
+
+bool ActionSequence::removeAction(const std::string &name){
+  actionSet::iterator it=actions.begin();
+  for(; it!=actions.end(); it++){
+    if ((*it)->getName() == name) {
+      actions.erase(it);
+      break;
+    }
+  }
+  return it!=actions.end();
 }
 
Index: src/Actions/ActionSequence.hpp
===================================================================
--- src/Actions/ActionSequence.hpp	(revision afbbfeb503903b1b9c5d9d837422eba4ef9792d7)
+++ src/Actions/ActionSequence.hpp	(revision 237f9339687fa2ab9fabd26196828a79d99f1307)
@@ -48,4 +48,11 @@
 
 protected:
+  /** removes the first occurence of an action name \a name from sequence.
+   *
+   * \param name name of action
+   * \return true - action removed, false - action not found
+   */
+  bool removeAction(const std::string &name);
+
   stateSet callAll(bool); // Dummy parameter to allow overloading
   Dialog* fillAllDialogs(Dialog *dialog);
Index: src/Actions/FragmentationAction/MolecularDynamicsAction.cpp
===================================================================
--- src/Actions/FragmentationAction/MolecularDynamicsAction.cpp	(revision afbbfeb503903b1b9c5d9d837422eba4ef9792d7)
+++ src/Actions/FragmentationAction/MolecularDynamicsAction.cpp	(revision 237f9339687fa2ab9fabd26196828a79d99f1307)
@@ -59,5 +59,13 @@
 void FragmentationMolecularDynamicsAction::prepare(ActionRegistry &AR)
 {
-  isPrepared = false;
+  // perform a verlet-integration first, if there are already forces or velocities
+  // present. If not, we still copy the position cleanly into a new step where then
+  // forces are set according to summed fragmentary contributions. This is much cleaner.
+  actions.addAction(AR.getActionByName(std::string("verlet-integration")));
+  actions.addAction(AR.getActionByName(std::string("output")));
+  actions.addAction(AR.getActionByName(std::string("fragment-molecule")));
+  actions.addAction(AR.getActionByName(std::string("fragment-automation")));
+  actions.addAction(AR.getActionByName(std::string("analyse-fragment-results")));
+  isPrepared = true;
 }
 
@@ -70,18 +78,17 @@
 
 ActionState::ptr FragmentationMolecularDynamicsAction::performCall(){
-  // now we can truely prepare
-  ActionQueue &AQ = ActionQueue::getInstance();
-  // perform a verlet-integration first, if there are already forces or velocities
-  // present. If not, we still copy the position cleanly into a new step where then
-  // forces are set according to summed fragmentary contributions. This is much cleaner.
-  actions.addAction(AQ.getActionByName(std::string("verlet-integration")));
-  if (params.DoOutput.get())
-    actions.addAction(AQ.getActionByName(std::string("output")));
-  actions.addAction(AQ.getActionByName(std::string("fragment-molecule")));
-  actions.addAction(AQ.getActionByName(std::string("fragment-automation")));
-  actions.addAction(AQ.getActionByName(std::string("analyse-fragment-results")));
+
+  // set number of steps
   setLoop(params.steps.get());
-  isPrepared = true;
-
+  // remove output from sequence if not desired.
+  if (!params.DoOutput.get()) {
+#ifndef NDEBUG
+    bool status =
+#endif
+        removeAction(std::string("output"));
+    ASSERT( status,
+        "FragmentationMolecularDynamicsAction::performCall() - output not found in ActionSequence.");
+  }
+  // and call
   ActionState::ptr state(MakroAction::performCall());
 
Index: src/Actions/MakroAction.cpp
===================================================================
--- src/Actions/MakroAction.cpp	(revision afbbfeb503903b1b9c5d9d837422eba4ef9792d7)
+++ src/Actions/MakroAction.cpp	(revision 237f9339687fa2ab9fabd26196828a79d99f1307)
@@ -87,19 +87,29 @@
 }
 
+bool MakroAction::removeAction(const std::string &name)
+{
+  actions.removeAction(name);
+}
+
+Dialog* MakroAction::fillOwnDialog(Dialog *dialog) {
+  return dialog;
+}
+
 Dialog* MakroAction::fillDialog(Dialog *dialog) {
+  dialog = fillOwnDialog(dialog);
   return actions.fillAllDialogs(dialog);
 }
 
 ActionState::ptr MakroAction::performCall(){
-  {
-    // create and run our dialog and also of all members of the sequence
-    Dialog* dialog = actions.fillAllDialogs(createDialog());
-    if (dialog->hasQueries()) {
-      if (!dialog->display())
-        // dialog error or aborted -> throw exception
-        throw ActionFailureException() << ActionNameString(getName());
-    }
-    delete(dialog);
-  }
+//  {
+//    // create and run our dialog and also of all members of the sequence
+//    Dialog* dialog = actions.fillAllDialogs(createDialog());
+//    if (dialog->hasQueries()) {
+//      if (!dialog->display())
+//        // dialog error or aborted -> throw exception
+//        throw ActionFailureException() << ActionNameString(getName());
+//    }
+//    delete(dialog);
+//  }
   ActionSequence::stateSet states = actions.callAll(true);
   return ActionState::ptr(new MakroActionState(states));
Index: src/Actions/MakroAction.hpp
===================================================================
--- src/Actions/MakroAction.hpp	(revision afbbfeb503903b1b9c5d9d837422eba4ef9792d7)
+++ src/Actions/MakroAction.hpp	(revision 237f9339687fa2ab9fabd26196828a79d99f1307)
@@ -46,5 +46,20 @@
 
 protected:
-  virtual Dialog *fillDialog(Dialog *dialog);
+  /**
+   * MakroAction requires an own dialog for global options such as number of loop
+   * iterations, ... besides the dialog from each action in the sequence.
+   *
+   * However, fillDialog() calls ActionSequence::fillAllDialog(). Hence, the dialog
+   * for specific global options must be requested in an distinct function.
+   */
+  virtual Dialog * fillOwnDialog(Dialog*);
+
+  /** Pass-thru for removeAction to allow all derived MakroActions to manipulate action sequence.
+   *
+   * \param name name of action to remove
+   * \return true - action removed, false - action not found
+   * \sa ActionSequence::removeAction()
+   */
+  bool removeAction(const std::string &name);
 
   virtual ActionState::ptr performCall();
@@ -55,4 +70,9 @@
 
 private:
+  /** fillDialog is used to spawn sequence queries, hence must not be modified by
+   * derived MakroActions.
+   */
+  Dialog *fillDialog(Dialog *dialog);
+
   ActionSequence &actions;
 };
Index: src/Actions/MakroAction_impl_header.hpp
===================================================================
--- src/Actions/MakroAction_impl_header.hpp	(revision afbbfeb503903b1b9c5d9d837422eba4ef9792d7)
+++ src/Actions/MakroAction_impl_header.hpp	(revision 237f9339687fa2ab9fabd26196828a79d99f1307)
@@ -234,5 +234,5 @@
 
 protected:
-  virtual Dialog * fillDialog(Dialog*);
+  virtual Dialog * fillOwnDialog(Dialog*);
 
   void startTimer() const;
Index: src/Actions/MakroAction_impl_pre.hpp
===================================================================
--- src/Actions/MakroAction_impl_pre.hpp	(revision afbbfeb503903b1b9c5d9d837422eba4ef9792d7)
+++ src/Actions/MakroAction_impl_pre.hpp	(revision 237f9339687fa2ab9fabd26196828a79d99f1307)
@@ -292,5 +292,5 @@
 
 // =========== fill a dialog ===========
-Dialog* ACTION::fillDialog(Dialog *dialog) {
+Dialog* ACTION::fillOwnDialog(Dialog *dialog) {
         ASSERT(dialog,"No Dialog given when filling actionname's dialog");
 #if BOOST_PP_EQUAL(MAXPARAMTYPES,0)
