Index: src/Actions/Action.hpp
===================================================================
--- src/Actions/Action.hpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/Action.hpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -198,4 +198,13 @@
   virtual void outputAsPython(std::ostream &ost, const std::string &prefix) const=0;
 
+  /** Sets the option defined by \a _token to \a _value for this action.
+   *
+   * This is needed when constructing MakroActions.
+   *
+   * \param _token token of the option
+   * \param _value new value
+   */
+  virtual void setOptionValue(const std::string &_token, const std::string &_value)=0;
+
   /**
    * Traits resemble all necessary information that "surrounds" an action, such as
Index: src/Actions/ActionSequence.cpp
===================================================================
--- src/Actions/ActionSequence.cpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/ActionSequence.cpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -195,2 +195,8 @@
     (*it)->outputAsPython(ost, prefix);
 }
+
+void ActionSequence::setOptionValue(const std::string &_token, const std::string &_value)
+{
+  for(std::deque<Action*>::const_iterator it=actions.begin();it!=actions.end();++it)
+    (*it)->setOptionValue(_token, _value);
+}
Index: src/Actions/ActionSequence.hpp
===================================================================
--- src/Actions/ActionSequence.hpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/ActionSequence.hpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -51,4 +51,5 @@
   void outputAsCLI(std::ostream &ost) const;
   void outputAsPython(std::ostream &ost, const std::string &prefix) const;
+  void setOptionValue(const std::string &_token, const std::string &_value);
 
 protected:
Index: src/Actions/Action_impl_header.hpp
===================================================================
--- src/Actions/Action_impl_header.hpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/Action_impl_header.hpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -252,4 +252,6 @@
   } params;
 
+  virtual void setOptionValue(const std::string &_token, const std::string &_value);
+
 protected:
   virtual Dialog * fillDialog(Dialog*);
Index: src/Actions/Action_impl_pre.hpp
===================================================================
--- src/Actions/Action_impl_pre.hpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/Action_impl_pre.hpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -222,4 +222,13 @@
 	stringtype
 
+// prints if ( token == "select-molecule-by-id" ) { prefix.ids.setAsString(_value); }
+#define setparameterifmatch_print(z,n,container, reference, token, value) \
+  if ( token == BOOST_PP_SEQ_ELEM(n, container) ) { \
+    params. \
+	  BOOST_PP_SEQ_ELEM(n, reference) \
+	  .setAsString( \
+	  value \
+	  ); \
+  }
 
 //#include "Actions/ActionTraits.hpp"
@@ -301,4 +310,14 @@
 #endif
     {}
+
+void ACTION::setOptionValue(const std::string &_token, const std::string &_value)
+{
+  // check whether it is a valid token and set
+#if defined paramtokens && defined paramreferences
+#define BOOST_PP_LOCAL_MACRO(n) setparameterifmatch_print(~, n, paramtokens, paramreferences, _token, _value)
+#define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
+#include BOOST_PP_LOCAL_ITERATE()
+#endif
+}
 
 // =========== clone Action ===========
Index: src/Actions/Calculation.hpp
===================================================================
--- src/Actions/Calculation.hpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/Calculation.hpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -47,4 +47,6 @@
   virtual void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
+  virtual void setOptionValue(const std::string &_token, const std::string &_value);
+
   /**
    * Does the actual calculation and returns the result.
Index: src/Actions/Calculation_impl.hpp
===================================================================
--- src/Actions/Calculation_impl.hpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/Calculation_impl.hpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -78,4 +78,8 @@
 {}
 
+template<typename T>
+void Calculation<T>::setOptionValue(const std::string &_token, const std::string &_value)
+{}
+
 // methods for calculation infrastructure
 
Index: src/Actions/MakroAction.cpp
===================================================================
--- src/Actions/MakroAction.cpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/MakroAction.cpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -164,2 +164,7 @@
   actions.outputAsPython(ost, prefix);
 }
+
+void MakroAction::setOptionValue(const std::string &_token, const std::string &_value)
+{
+  actions.setOptionValue(_token, _value);
+}
Index: src/Actions/MakroAction.hpp
===================================================================
--- src/Actions/MakroAction.hpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/MakroAction.hpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -48,4 +48,6 @@
   virtual void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
+  virtual void setOptionValue(const std::string &_token, const std::string &_value);
+
   // must be called after all primitive actions are present
   virtual void prepare(ActionRegistry &AR);
Index: src/Actions/ManipulateAtomsProcess.cpp
===================================================================
--- src/Actions/ManipulateAtomsProcess.cpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/ManipulateAtomsProcess.cpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -90,4 +90,7 @@
 {}
 
+void ManipulateAtomsProcess::setOptionValue(const std::string &_token, const std::string &_value)
+{}
+
 void ManipulateAtomsProcess::doManipulate(World *world){
   setMaxSteps(world->numAtoms());
Index: src/Actions/ManipulateAtomsProcess.hpp
===================================================================
--- src/Actions/ManipulateAtomsProcess.hpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/ManipulateAtomsProcess.hpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -43,4 +43,6 @@
   void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
+  void setOptionValue(const std::string &_token, const std::string &_value);
+
   virtual void doManipulate(World *);
 
Index: src/Actions/MethodAction.cpp
===================================================================
--- src/Actions/MethodAction.cpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/MethodAction.cpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -96,2 +96,5 @@
 void MethodAction::outputAsPython(std::ostream &ost, const std::string &prefix) const
 {}
+
+void MethodAction::setOptionValue(const std::string &_token, const std::string &_value)
+{}
Index: src/Actions/MethodAction.hpp
===================================================================
--- src/Actions/MethodAction.hpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/MethodAction.hpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -38,4 +38,5 @@
   void outputAsCLI(std::ostream &ost) const;
   void outputAsPython(std::ostream &ost, const std::string &prefix) const;
+  void setOptionValue(const std::string &_token, const std::string &_value);
 
 protected:
Index: src/Actions/unittests/ActionSequenceUnitTest.cpp
===================================================================
--- src/Actions/unittests/ActionSequenceUnitTest.cpp	(revision d4c8694f2cbd423faa6c19ddec88eeb7e5f118a3)
+++ src/Actions/unittests/ActionSequenceUnitTest.cpp	(revision a82f61a466e15715e16f9470a56c3bdadfcb3895)
@@ -95,4 +95,6 @@
   void outputAsPython(std::ostream &ost, const std::string &prefix) const
   {}
+  void setOptionValue(const std::string &_token, const std::string &_value)
+  {}
 };
 
@@ -134,4 +136,6 @@
   void outputAsPython(std::ostream &ost, const std::string &prefix) const
   {}
+  void setOptionValue(const std::string &_token, const std::string &_value)
+  {}
 };
 
@@ -175,4 +179,6 @@
   {}
   void outputAsPython(std::ostream &ost, const std::string &prefix) const
+  {}
+  void setOptionValue(const std::string &_token, const std::string &_value)
   {}
   bool wasCalled(){
