Index: src/Actions/ActionRegistry.cpp
===================================================================
--- src/Actions/ActionRegistry.cpp	(revision 9c1324fae3f2f64ced647028e764fc50c0b40370)
+++ src/Actions/ActionRegistry.cpp	(revision 39986ba34b823a245abb4d308816dbc0548aff90)
@@ -69,9 +69,20 @@
 {
   // first clear each macro action that require presence of all primitive ones
-  MakroAction * presentAction =
-      dynamic_cast<MakroAction *>(getActionByName("subgraph-dissection"));
-  ASSERT( presentAction != NULL,
-      "ActionRegistry::fillRegistry() - makro action has not been registered.");
-  presentAction->unprepare(*this);
+  {
+    MakroAction * presentAction =
+        dynamic_cast<MakroAction *>(getActionByName("subgraph-dissection"));
+    ASSERT( presentAction != NULL,
+        "ActionRegistry::fillRegistry() - makro action has not been registered.");
+    presentAction->unprepare(*this);
+  }
+#ifdef HAVE_JOBMARKET
+  {
+    MakroAction * presentAction =
+        dynamic_cast<MakroAction *>(getActionByName("molecular-dynamics"));
+    ASSERT( presentAction != NULL,
+        "ActionRegistry::fillRegistry() - makro action has not been registered.");
+    presentAction->unprepare(*this);
+  }
+#endif
 
   //std::cout << "ActionRegistry::~ActionRegistry() called, instance is " << this << "." << std::endl;
@@ -98,9 +109,20 @@
 
   // now prepare each macro action that require presence of all primitive ones
-  MakroAction * presentAction =
-      dynamic_cast<MakroAction *>(getActionByName("subgraph-dissection"));
-  ASSERT( presentAction != NULL,
-      "ActionRegistry::fillRegistry() - makro action has not been registered.");
-  presentAction->prepare(*this);
+  {
+    MakroAction * presentAction =
+        dynamic_cast<MakroAction *>(getActionByName("subgraph-dissection"));
+    ASSERT( presentAction != NULL,
+        "ActionRegistry::fillRegistry() - makro action has not been registered.");
+    presentAction->prepare(*this);
+  }
+#ifdef HAVE_JOBMARKET
+  {
+    MakroAction * presentAction =
+        dynamic_cast<MakroAction *>(getActionByName("molecular-dynamics"));
+    ASSERT( presentAction != NULL,
+        "ActionRegistry::fillRegistry() - makro action has not been registered.");
+    presentAction->prepare(*this);
+  }
+#endif
 }
 
Index: src/Actions/FragmentationAction/MolecularDynamicsAction.cpp
===================================================================
--- src/Actions/FragmentationAction/MolecularDynamicsAction.cpp	(revision 39986ba34b823a245abb4d308816dbc0548aff90)
+++ src/Actions/FragmentationAction/MolecularDynamicsAction.cpp	(revision 39986ba34b823a245abb4d308816dbc0548aff90)
@@ -0,0 +1,109 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2013 Frederik Heber. All rights reserved.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * MolecularDynamicsAction.cpp
+ *
+ *  Created on: Jun 14, 2013
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "CodePatterns/Chronos.hpp"
+
+#include "Actions/FragmentationAction/AnalyseFragmentationResultsAction.hpp"
+#include "Actions/FragmentationAction/FragmentationAutomationAction.hpp"
+#include "Actions/FragmentationAction/MolecularDynamicsAction.hpp"
+#include "Actions/MoleculeAction/VerletIntegrationAction.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Actions/ActionSequence.hpp"
+
+#include "Descriptors/AtomDescriptor.hpp"
+
+using namespace MoleCuilder;
+
+// and construct the stuff
+#include "MolecularDynamicsAction.def"
+#include "MakroAction_impl_pre.hpp"
+/** =========== define the function ====================== */
+
+// static instances
+ActionSequence FragmentationMolecularDynamicsAction::actions;
+bool FragmentationMolecularDynamicsAction::isPrepared = false;
+
+void FragmentationMolecularDynamicsAction::prepare(ActionRegistry &AR)
+{
+  isPrepared = false;
+}
+
+void FragmentationMolecularDynamicsAction::unprepare(ActionRegistry &AR)
+{
+  // empty sequence
+  while (actions.removeLastAction() != NULL);
+  isPrepared = false;
+}
+
+Action::state_ptr FragmentationMolecularDynamicsAction::performCall(){
+  // now we can truely prepare
+  ActionRegistry &AR = ActionRegistry::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(AR.getActionByName(std::string("verlet-integration")));
+  if (params.DoOutput.get())
+    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")));
+  setLoop(params.steps.get());
+  isPrepared = true;
+
+  Action::state_ptr state(MakroAction::performCall());
+
+  return state;
+}
+
+Action::state_ptr FragmentationMolecularDynamicsAction::performUndo(Action::state_ptr _state) {
+  Action::state_ptr state(MakroAction::performUndo(_state));
+
+  return state;
+}
+
+Action::state_ptr FragmentationMolecularDynamicsAction::performRedo(Action::state_ptr _state){
+  Action::state_ptr state(MakroAction::performRedo(_state));
+
+  return state;
+}
+
+bool FragmentationMolecularDynamicsAction::canUndo(){
+  return true;
+}
+
+bool FragmentationMolecularDynamicsAction::shouldUndo(){
+  return true;
+}
Index: src/Actions/FragmentationAction/MolecularDynamicsAction.def
===================================================================
--- src/Actions/FragmentationAction/MolecularDynamicsAction.def	(revision 39986ba34b823a245abb4d308816dbc0548aff90)
+++ src/Actions/FragmentationAction/MolecularDynamicsAction.def	(revision 39986ba34b823a245abb4d308816dbc0548aff90)
@@ -0,0 +1,36 @@
+/*
+ * MolecularDynamicsAction.def
+ *
+ *  Created on: Jun 14, 2013
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+#include "Parameters/Validators/GenericValidators.hpp"
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (unsigned int)(bool)
+#define paramtokens ("steps")("output-every-step")
+#define paramdescriptions ("numer of MD steps to perform")("whether World should be written after every step, useful if integration might hang")
+#define paramdefaults (NOPARAM_DEFAULT)(PARAM_DEFAULT("1"))
+#define paramreferences (steps)(DoOutput)
+#define paramvalids \
+(NotZeroValidator< unsigned int >()) \
+(DummyValidator<bool>())
+
+#undef statetypes
+#undef statereferences
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Fragmentation
+#define MENUNAME "fragmentation"
+#define MENUPOSITION 6
+#define ACTIONNAME MolecularDynamics
+#define TOKEN "molecular-dynamics"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "perform a number of molecular dynamics time integration with forces from fragment solutions"
+#undef SHORTFORM
Index: src/Actions/FragmentationAction/MolecularDynamicsAction.hpp
===================================================================
--- src/Actions/FragmentationAction/MolecularDynamicsAction.hpp	(revision 39986ba34b823a245abb4d308816dbc0548aff90)
+++ src/Actions/FragmentationAction/MolecularDynamicsAction.hpp	(revision 39986ba34b823a245abb4d308816dbc0548aff90)
@@ -0,0 +1,128 @@
+/*
+ * MolecularDynamicsAction.hpp
+ *
+ *  Created on: Jun 14, 2013
+ *      Author: heber
+ */
+
+#ifndef MOLECULARDYNAMICSACTION_HPP_
+#define MOLECULARDYNAMICSACTION_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include "Actions/MakroAction.hpp"
+
+#include "MolecularDynamicsAction.def"
+#include "MakroAction_impl_header.hpp"
+
+#endif /* MOLECULARDYNAMICSACTION_HPP_ */
+
+//// some derived names: if CATEGORY is not given, we don't prefix with it
+//#ifdef CATEGORY
+//#define ACTION BOOST_PP_CAT(CATEGORY, BOOST_PP_CAT(ACTIONNAME, Action))
+//#define COMMAND BOOST_PP_CAT(CATEGORY, ACTIONNAME)
+//#define PARAMS BOOST_PP_CAT(CATEGORY, BOOST_PP_CAT(ACTIONNAME, Parameters))
+//#else
+//#define ACTION BOOST_PP_CAT(ACTIONNAME, Action)
+//#define COMMAND ACTIONNAME
+//#define PARAMS BOOST_PP_CAT(ACTIONNAME, Parameters)
+//#endif
+//// check if no lists given
+//#ifndef paramtypes
+//#define MAXPARAMTYPES 0
+//#else
+//#define MAXPARAMTYPES BOOST_PP_SEQ_SIZE(paramtypes)
+//#endif
+//#ifndef paramdefaults
+//#define MAXPARAMDEFAULTS 0
+//#else
+//#define MAXPARAMDEFAULTS BOOST_PP_SEQ_SIZE(paramdefaults)
+//#endif
+//
+//namespace MoleCuilder {
+//
+//// print a list of type ref followed, i.e. "int i, double position"
+//#define type_list(z,n,TYPELIST, VARLIST) \
+//  BOOST_PP_COMMA_IF(n)\
+//  BOOST_PP_SEQ_ELEM(n, TYPELIST) \
+//  BOOST_PP_SEQ_ELEM(n, VARLIST)
+//
+//void COMMAND(
+//#if defined paramtypes && defined paramreferences
+//#define BOOST_PP_LOCAL_MACRO(n) type_list(~, n, paramtypes, paramreferences)
+//#define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
+//#include BOOST_PP_LOCAL_ITERATE()
+//#endif
+//    );
+//
+//class FragmentationMolecularDynamicsAction;
+//
+//template <>
+//class ActionTraits<ACTION> : public ActionTrait {
+//public:
+//  ActionTraits() :
+//#ifndef SHORTFORM
+//    ActionTrait(OptionTrait(TOKEN, &typeid(void), DESCRIPTION, std::string()))
+//#else
+//    ActionTrait(OptionTrait(TOKEN, &typeid(void), DESCRIPTION, std::string(), SHORTFORM))
+//#endif /* SHORTFORM */
+//  {
+//  // initialize remainder of action info
+//#ifdef MENUNAME
+//    MenuTitle = MENUNAME;
+//#endif
+//#ifdef MENUPOSITION
+//    MenuPosition = MENUPOSITION;
+//#endif
+//
+//    // we got no options to initialize
+//  }
+//
+//  virtual ~ActionTraits() {
+//    //std::cout << "ActionTraits<" << BOOST_PP_STRINGIZE(ACTION) << ">::~ActionTraits() on instance " << this << " with name " << getName() << " called." << std::endl;
+//  }
+//};
+//
+//class FragmentationMolecularDynamicsAction : public MakroAction
+//{
+//public:
+//  FragmentationMolecularDynamicsAction();
+//  virtual ~FragmentationMolecularDynamicsAction();
+//
+//  // must be called after all primitive actions are present
+//  void prepare(ActionRegistry &AR);
+//  // must be called before alle primitive actions are removed
+//  void unprepare(ActionRegistry &AR);
+//
+//  virtual Action::state_ptr performCall();
+//  virtual Action::state_ptr performUndo(Action::state_ptr);
+//  virtual Action::state_ptr performRedo(Action::state_ptr);
+//
+//private:
+//  //!> flag to check whether actions have been prepared
+//  static bool isPrepared;
+//  //!> sequence of actions for this macro action
+//  static ActionSequence actions;
+//};
+//
+//}
+//
+//#undef ACTION
+//#undef COMMAND
+//#undef COMMANDFULL
+//#undef PARAMS
+//
+//#undef ACTIONNAME
+//#undef CATEGORY
+//#undef MENUNAME
+//#undef MENUPOSITION
+//#undef TOKEN
+//
+//#undef DESCRIPTION
+//#undef SHORTFORM
+//
+//#endif /* MOLECULARDYNAMICSACTION_HPP_ */
Index: src/Actions/GlobalListOfActions.hpp
===================================================================
--- src/Actions/GlobalListOfActions.hpp	(revision 9c1324fae3f2f64ced647028e764fc50c0b40370)
+++ src/Actions/GlobalListOfActions.hpp	(revision 39986ba34b823a245abb4d308816dbc0548aff90)
@@ -139,6 +139,9 @@
     BOOST_PP_SEQ_PUSH_BACK( \
         BOOST_PP_SEQ_PUSH_BACK( \
-            GLOBALLISTOFACTIONS_initial, \
-            FragmentationFragmentationAutomation \
+            BOOST_PP_SEQ_PUSH_BACK( \
+                GLOBALLISTOFACTIONS_initial, \
+                FragmentationFragmentationAutomation \
+            ), \
+            FragmentationMolecularDynamics \
         ), \
         FragmentationParseFragmentJobs \
Index: src/Actions/Makefile.am
===================================================================
--- src/Actions/Makefile.am	(revision 9c1324fae3f2f64ced647028e764fc50c0b40370)
+++ src/Actions/Makefile.am	(revision 39986ba34b823a245abb4d308816dbc0548aff90)
@@ -228,10 +228,13 @@
 FRAGMENTATIONACTIONSOURCE += \
   Actions/FragmentationAction/FragmentationAutomationAction.cpp \
+  Actions/FragmentationAction/MolecularDynamicsAction.cpp \
   Actions/FragmentationAction/ParseFragmentJobsAction.cpp
 FRAGMENTATIONACTIONHEADER += \
   Actions/FragmentationAction/FragmentationAutomationAction.hpp \
+  Actions/FragmentationAction/MolecularDynamicsAction.hpp \
   Actions/FragmentationAction/ParseFragmentJobsAction.hpp
 FRAGMENTATIONACTIONDEFS += \
   Actions/FragmentationAction/FragmentationAutomationAction.def \
+  Actions/FragmentationAction/MolecularDynamicsAction.def \
   Actions/FragmentationAction/ParseFragmentJobsAction.def
 endif
