Index: src/Actions/Action.cpp
===================================================================
--- src/Actions/Action.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/Action.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -174,5 +174,7 @@
     Dialog* dialog = createDialog();
     if (dialog->hasQueries()) {
-      dialog->display();
+      if (!dialog->display())
+        // dialog error or aborted -> throw exception
+        throw ActionFailureException() << ActionNameString(getName());
     }
     delete(dialog);
@@ -181,5 +183,5 @@
 //  try {
     startTimer();
-    getParametersfromValueStorage();
+    //getParametersfromValueStorage();
     state = performCall();
     endTimer();
Index: src/Actions/Action.hpp
===================================================================
--- src/Actions/Action.hpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/Action.hpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -17,9 +17,11 @@
 #include <boost/shared_ptr.hpp>
 
+#include <boost/preprocessor/list/adt.hpp>
+
 /** Used in .def files in paramdefaults define to set that no default value exists.
- * We define NODEFAULT here, as it is used in .def files and needs to be present
+ * We define NOPARAM_DEFAULT here, as it is used in .def files and needs to be present
  * before these are included.
  */
-#define NODEFAULT ""
+#define NOPARAM_DEFAULT BOOST_PP_NIL
 
 // forward declaration
@@ -185,5 +187,5 @@
 
   /**
-   * This method is called by the Histor, when a redo is performed. It is
+   * This method is called by the History, when a redo is performed. It is
    * provided with the corresponding state produced by the undo method and
    * needs to produce a State that can then be used for another undo.
@@ -192,7 +194,7 @@
 
   /**
-   * This special state can be used to indicate that the Action was successfull
+   * This special state can be used to indicate that the Action was successful
    * without providing a special state. Use this if your Action does not need
-   * a speciallized state.
+   * a specialized state.
    */
   static state_ptr success;
@@ -200,5 +202,5 @@
   /**
    * This special state can be returned, to indicate that the action could not do it's
-   * work, was abborted by the user etc. If you return this state make sure to transactionize
+   * work, was aborted by the user etc. If you return this state make sure to transactionize
    * your Actions and unroll the complete transaction before this is returned.
    */
@@ -227,5 +229,5 @@
    * necessary ActionParameters by retrieving the values from ValueStorage.
    */
-  virtual void getParametersfromValueStorage()=0;
+  //virtual void getParametersfromValueStorage()=0;
 
   /**
@@ -268,5 +270,5 @@
  * It is implementing a memento pattern. The base class is completely empty,
  * since no general state internals can be given. The Action performing
- * the Undo should downcast to the apropriate type.
+ * the Undo should downcast to the appropriate type.
  */
 class ActionState{
Index: src/Actions/ActionRegistry.cpp
===================================================================
--- src/Actions/ActionRegistry.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/ActionRegistry.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -34,4 +34,7 @@
 using namespace MoleCuilder;
 
+// static entities
+bool ActionRegistry::completely_instatiated = false;
+
 /** Constructor for class ActionRegistry.
  */
@@ -40,4 +43,5 @@
   //std::cout << "ActionRegistry::ActionRegistry() called, instance is " << this << "." << std::endl;
   fillRegistry();
+  completely_instatiated = true;
 }
 
Index: src/Actions/ActionRegistry.hpp
===================================================================
--- src/Actions/ActionRegistry.hpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/ActionRegistry.hpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -48,4 +48,11 @@
   int getLastPosition(const std::string &MenuName) const;
 
+  /** Static getter for the state of the registry.
+   *
+   * @return true - ActionRegistry's cstor has run through, false - else
+   */
+  static bool getCompletely_instatiated()
+  { return completely_instatiated; }
+
 private:
   ActionRegistry();
@@ -53,4 +60,7 @@
 
   void fillRegistry();
+
+  //!> this tells whether ActionRegistry has been completed instantiated.
+  static bool completely_instatiated;
 };
 
Index: src/Actions/Action_impl_header.hpp
===================================================================
--- src/Actions/Action_impl_header.hpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/Action_impl_header.hpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -14,8 +14,11 @@
 #include <boost/preprocessor/comparison/equal.hpp>
 #include <boost/preprocessor/comparison/not_equal.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
 #include <boost/preprocessor/control/if.hpp>
 #include <boost/preprocessor/debug/assert.hpp>
 #include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/list/adt.hpp>
 #include <boost/preprocessor/punctuation/comma_if.hpp>
+#include <boost/preprocessor/punctuation/paren.hpp>
 #include <boost/preprocessor/repetition/repeat.hpp>
 #include <boost/preprocessor/seq/elem.hpp>
@@ -31,4 +34,6 @@
 #include "Actions/ValueStorage.hpp"
 
+#include "Parameters/Parameter.hpp"
+
 // some derived names: if CATEGORY is not given, we don't prefix with it
 #ifdef CATEGORY
@@ -47,4 +52,15 @@
 #define MAXPARAMTYPES BOOST_PP_SEQ_SIZE(paramtypes)
 #endif
+#ifndef paramdefaults
+#define MAXPARAMDEFAULTS 0
+// this is required for valid_print "else part"
+#define sequencer(z,n,data) \
+  BOOST_PP_SEQ_PUSH_BACK( data, NOPARAM_DEFAULT)
+#define paramdefaults BOOST_PP_REPEAT( MAXPARAMTYPES, sequencer, BOOST_PP_SEQ_NIL )
+#else
+#define MAXPARAMDEFAULTS BOOST_PP_SEQ_SIZE(paramdefaults)
+#endif
+#define PARAM_DEFAULT(x) \
+    (x, BOOST_PP_NIL)
 
 // check user has given name and category
@@ -77,11 +93,11 @@
 #endif
 
-// check if paramdefaults is given, otherwise fill list with NODEFAULT
+// check if paramdefaults is given, otherwise fill list with NOPARAM_DEFAULT
 // this does not work: paramdefaults has to be completely defined before
 // being used within option_print (used as an array there and not as
 // some function call still to be expanded)
-//#define paramdefaults (NODEFAULT)
+//#define paramdefaults (NOPARAM_DEFAULT)
 //#define tempvalue(z,n,value)
-//  BOOST_PP_CAT(value,(NODEFAULT))
+//  BOOST_PP_CAT(value,(NOPARAM_DEFAULT))
 //BOOST_PP_REPEAT(tempvalue, MAXPARAMTYPES, paramdefaults)
 //#undef tempvalue
@@ -95,8 +111,10 @@
 #endif
 
-// print a list of type ref followed by a separator, i.e. "int i;"
+// print a list of type ref followed by a separator, i.e. "Parameter<int> i;"
 #define type_print(z,n,TYPELIST, VARLIST, separator) \
+  Parameter < \
   BOOST_PP_SEQ_ELEM(n, TYPELIST) \
-  BOOST_PP_SEQ_ELEM(n, VARLIST)\
+  > \
+  BOOST_PP_SEQ_ELEM(n, VARLIST) \
   separator
 
@@ -108,5 +126,4 @@
 
 // prints Options.insert
-#ifdef paramdefaults
 #define option_print(z,n,unused, unused2) \
   tester = Options. insert (\
@@ -116,23 +133,15 @@
           BOOST_PP_SEQ_ELEM(n, paramtokens), \
           &typeid( BOOST_PP_SEQ_ELEM(n, paramtypes) ), \
-          BOOST_PP_SEQ_ELEM(n, paramdescriptions), \
-          std::string( BOOST_PP_SEQ_ELEM(n, paramdefaults) ) )\
+          BOOST_PP_SEQ_ELEM(n, paramdescriptions) \
+          BOOST_PP_COMMA_IF( BOOST_PP_NOT( BOOST_PP_LIST_IS_NIL( BOOST_PP_SEQ_ELEM(n, paramdefaults) ) ) ) \
+          BOOST_PP_EXPR_IF( \
+              BOOST_PP_NOT( BOOST_PP_LIST_IS_NIL( BOOST_PP_SEQ_ELEM(n, paramdefaults) ) ), \
+              toString BOOST_PP_LPAREN() \
+                  BOOST_PP_LIST_FIRST( BOOST_PP_SEQ_ELEM(n, paramdefaults) )) \
+              BOOST_PP_RPAREN() \
+          )\
       )\
   ); \
   ASSERT(tester.second, "ActionTrait<ACTION>::ActionTrait<ACTION>() option token present twice!");
-#else
-#define option_print(z,n,unused, unused2) \
-  tester = Options. insert (\
-      std::pair< std::string, OptionTrait *> ( \
-      BOOST_PP_SEQ_ELEM(n, paramtokens), \
-      new OptionTrait(\
-          BOOST_PP_SEQ_ELEM(n, paramtokens), \
-          &typeid( BOOST_PP_SEQ_ELEM(n, paramtypes) ), \
-          BOOST_PP_SEQ_ELEM(n, paramdescriptions), \
-          NODEFAULT )\
-      )\
-  ); \
-  ASSERT(tester.second, "ActionTrait<ACTION>::ActionTrait<ACTION>() option token present twice!");
-#endif
 
 namespace MoleCuilder {
@@ -205,4 +214,8 @@
 
   struct PARAMS : ActionParameters {
+    //!> constructor for class PARAMS, setting valid ranges
+    PARAMS();
+    //!> copy constructor for class PARAMS, setting valid ranges
+    PARAMS(const PARAMS &p);
   #if defined paramtypes && defined paramreferences
   #define BOOST_PP_LOCAL_MACRO(n) type_print(~, n, paramtypes, paramreferences, ;)
@@ -219,5 +232,5 @@
 
 private:
-  virtual void getParametersfromValueStorage();
+  //virtual void getParametersfromValueStorage();
   virtual Action::state_ptr performCall();
   virtual Action::state_ptr performUndo(Action::state_ptr);
@@ -227,4 +240,5 @@
 }
 
+#undef paramvalids
 #undef paramtypes
 #undef paramtokens
@@ -233,9 +247,12 @@
 #undef paramdefaults
 #undef MAXPARAMTYPES
+#undef MAXPARAMDEFAULTS
 #undef statetypes
 #undef statereferences
 #undef MAXSTATETYPES
+#undef PARAM_DEFAULT
 
 #undef option_print
+#undef sequencer
 #undef type_print
 #undef type_list
Index: src/Actions/Action_impl_pre.hpp
===================================================================
--- src/Actions/Action_impl_pre.hpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/Action_impl_pre.hpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -37,7 +37,9 @@
 #include <boost/preprocessor/comparison/equal.hpp>
 #include <boost/preprocessor/comparison/not_equal.hpp>
+#include <boost/preprocessor/control/expr_if.hpp>
 #include <boost/preprocessor/control/if.hpp>
 #include <boost/preprocessor/debug/assert.hpp>
 #include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/list/adt.hpp>
 #include <boost/preprocessor/punctuation/comma_if.hpp>
 #include <boost/preprocessor/repetition/repeat.hpp>
@@ -48,4 +50,7 @@
 #include <boost/preprocessor/seq/transform.hpp>
 
+#include "Parameters/Parameter.hpp"
+
+
 // some derived names: if CATEGORY is not given, we don't prefix with it
 #ifdef CATEGORY
@@ -73,4 +78,15 @@
 #define MAXSTATETYPES BOOST_PP_SEQ_SIZE(statetypes)
 #endif
+#ifndef paramdefaults
+#define MAXPARAMDEFAULTS 0
+// this is required for valid_print "else part"
+#define sequencer(z,n,data) \
+  BOOST_PP_SEQ_PUSH_BACK( data, NOPARAM_DEFAULT)
+#define paramdefaults BOOST_PP_REPEAT( MAXPARAMTYPES, sequencer, BOOST_PP_SEQ_NIL )
+#else
+#define MAXPARAMDEFAULTS BOOST_PP_SEQ_SIZE(paramdefaults)
+#endif
+#define PARAM_DEFAULT(x) \
+    (x, BOOST_PP_NIL)
 
 // check user has given name and category
@@ -118,27 +134,48 @@
   dialog->query<\
   BOOST_PP_SEQ_ELEM(n, paramtypes)\
-  >(\
+  >( params. \
+  BOOST_PP_SEQ_ELEM(n, paramreferences)\
+  ,\
   BOOST_PP_SEQ_ELEM(n, paramtokens)\
   , Traits.getDescription()\
   );
 
+// print an initialiser list, i.e. "var( token, valid (,default) )(,)"
+#define valid_print(z,n,TOKENLIST, VARLIST, VALIDLIST, DEFAULTLIST) \
+  BOOST_PP_COMMA_IF(n) \
+  BOOST_PP_SEQ_ELEM(n, VARLIST) \
+  ( \
+  BOOST_PP_SEQ_ELEM(n, TOKENLIST) \
+  , \
+  BOOST_PP_SEQ_ELEM(n, VALIDLIST) \
+  BOOST_PP_COMMA_IF( BOOST_PP_NOT( BOOST_PP_LIST_IS_NIL( BOOST_PP_SEQ_ELEM(n, DEFAULTLIST) ) ) ) \
+  BOOST_PP_EXPR_IF( \
+      BOOST_PP_NOT( BOOST_PP_LIST_IS_NIL( BOOST_PP_SEQ_ELEM(n, DEFAULTLIST) ) ), \
+      BOOST_PP_LIST_FIRST( BOOST_PP_SEQ_ELEM(n, DEFAULTLIST) )) \
+  )
+
+// print an initialiser list, i.e. "var( valid . var )(,)"
+#define validcopy_print(z,n,TOKENLIST, VARLIST, VALID) \
+  BOOST_PP_COMMA_IF(n) \
+  BOOST_PP_SEQ_ELEM(n, VARLIST) \
+  ( \
+  VALID . \
+  BOOST_PP_SEQ_ELEM(n, VARLIST) \
+  )
+
 // prints set/queryCurrentValue (command) for paramreferences and paramtokens
-#define value_print(z,n,command, prefix) \
-  ValueStorage::getInstance(). command (\
-  BOOST_PP_SEQ_ELEM(n, paramtokens)\
-  , \
-  prefix\
-  BOOST_PP_SEQ_ELEM(n, paramreferences)\
+#define value_print(z, n, container, prefix) \
+  prefix \
+  BOOST_PP_SEQ_ELEM(n, container)\
+  .set(\
+  BOOST_PP_SEQ_ELEM(n, container)\
   );
 
 // prints set/queryCurrentValue (command) for paramreferences and paramtokens
-#define valuetype_print(z,n,command, prefix) \
-  ValueStorage::getInstance(). command< \
-  BOOST_PP_SEQ_ELEM(n, paramtypes) \
-  > (\
-  BOOST_PP_SEQ_ELEM(n, paramtokens)\
-  , \
-  prefix\
-  BOOST_PP_SEQ_ELEM(n, paramreferences)\
+#define valuetype_print(z,n,container, types, prefix) \
+  prefix \
+  BOOST_PP_SEQ_ELEM(n, container) \
+  .setAsString( \
+  BOOST_PP_SEQ_ELEM(n, container) \
   );
 
@@ -206,4 +243,23 @@
 }
 
+// =========== parameter constructor ===========
+ACTION::PARAMS::PARAMS()
+#if defined paramtokens && defined paramreferences && defined paramvalids
+      :
+#define BOOST_PP_LOCAL_MACRO(n) valid_print(~, n, paramtokens, paramreferences, paramvalids, paramdefaults)
+#define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
+#include BOOST_PP_LOCAL_ITERATE()
+#endif
+    {}
+
+ACTION::PARAMS::PARAMS(const PARAMS &p)
+#if defined paramtokens && defined paramreferences
+      :
+#define BOOST_PP_LOCAL_MACRO(n) validcopy_print(~, n, paramtokens, paramreferences, p)
+#define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
+#include BOOST_PP_LOCAL_ITERATE()
+#endif
+    {}
+
 // =========== fill a dialog ===========
 Dialog* ACTION::fillDialog(Dialog *dialog) {
@@ -226,5 +282,5 @@
 // =========== command for calling action directly ===========
 void COMMAND(
-#if defined paramtypes && defined paramreferences
+#if defined paramtypes && defined paramreferences && BOOST_PP_NOT_EQUAL(MAXPARAMTYPES,0)
 #define BOOST_PP_LOCAL_MACRO(n) type_list(~, n, paramtypes, paramreferences)
 #define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
@@ -233,8 +289,8 @@
 )
 {
-  Action *ToCall = ActionRegistry::getInstance().getActionByName( TOKEN ); //->clone(params);
+  ACTION *ToCall = dynamic_cast<ACTION*>(ActionRegistry::getInstance().getActionByName( TOKEN )); //->clone(params);
   //ACTION::PARAMS params;
-#if BOOST_PP_NOT_EQUAL(MAXPARAMTYPES,0)
-#define BOOST_PP_LOCAL_MACRO(n) value_print(~, n, setCurrentValue, )
+#if defined paramreferences && BOOST_PP_NOT_EQUAL(MAXPARAMTYPES,0)
+#define BOOST_PP_LOCAL_MACRO(n) value_print(~, n, paramreferences, ToCall->params.)
 #define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
 #include BOOST_PP_LOCAL_ITERATE()
@@ -244,5 +300,5 @@
 
 void BOOST_PP_CAT( COMMAND, _stringargs)(
-#if defined paramtypes && defined paramreferences
+#if defined paramtypes && defined paramreferences && BOOST_PP_NOT_EQUAL(MAXPARAMTYPES,0)
 #define BOOST_PP_LOCAL_MACRO(n) type_list(~, n, BOOST_PP_SEQ_TRANSFORM( type2string, , paramtypes), paramreferences)
 #define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
@@ -250,8 +306,8 @@
 #endif
 	) {
-  Action *ToCall = ActionRegistry::getInstance().getActionByName( TOKEN ); //->clone(params);
+  ACTION *ToCall = dynamic_cast<ACTION*>(ActionRegistry::getInstance().getActionByName( TOKEN )); //->clone(params);
   //ACTION::PARAMS params;
-#if BOOST_PP_NOT_EQUAL(MAXPARAMTYPES,0)
-#define BOOST_PP_LOCAL_MACRO(n) valuetype_print(~, n, setCurrentValueByString, )
+#if defined paramtypes && defined paramtypes && BOOST_PP_NOT_EQUAL(MAXPARAMTYPES,0)
+#define BOOST_PP_LOCAL_MACRO(n) valuetype_print(~, n, paramreferences, paramtypes, ToCall->params. )
 #define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
 #include BOOST_PP_LOCAL_ITERATE()
@@ -260,23 +316,19 @@
 };
 
-// =========== obtain parameters from Storage, used by performCall() ===========
-void ACTION::getParametersfromValueStorage() {
-#if BOOST_PP_NOT_EQUAL(MAXPARAMTYPES,0)
-#define BOOST_PP_LOCAL_MACRO(n) value_print(~, n, queryCurrentValue, params.)
-#define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
-#include BOOST_PP_LOCAL_ITERATE()
-#endif
-};
-
 }
 
 // free up defines
+#undef paramvalids
 #undef paramtypes
 #undef paramtokens
 #undef paramreferences
+#undef paramdescriptions
+#undef paramdefaults
 #undef MAXPARAMTYPES
+#undef MAXPARAMDEFAULTS
 #undef statetypes
 #undef statereferences
 #undef MAXSTATETYPES
+#undef PARAM_DEFAULT
 
 #undef type2string
@@ -286,4 +338,7 @@
 #undef type_list
 #undef dialog_print
+#undef sequencer
+#undef valid_print
+#undef validcopy_print
 #undef value_print
 #undef valuetype_print
Index: src/Actions/Action_impl_python.hpp
===================================================================
--- src/Actions/Action_impl_python.hpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/Action_impl_python.hpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -18,7 +18,7 @@
 #include <boost/preprocessor/facilities/expand.hpp>
 #include <boost/preprocessor/iteration/local.hpp>
+#include <boost/preprocessor/list/adt.hpp>
 #include <boost/preprocessor/punctuation/comma_if.hpp>
-
-#define NODEFAULT ""
+#include <boost/preprocessor/punctuation/paren.hpp>
 
 // some derived names: if CATEGORY is not given, we don't prefix with it
@@ -32,4 +32,8 @@
 #define PARAMS BOOST_PP_CAT(ACTIONNAME, Parameters)
 #endif
+
+// for paramdefaults entries
+#define PARAM_DEFAULT(x) \
+    (x, BOOST_PP_NIL)
 
 // check if no lists given
@@ -61,5 +65,12 @@
   BOOST_PP_SEQ_ELEM(n, STRINGLIST) \
   ) \
-  = BOOST_PP_SEQ_ELEM(n, DEFAULTLIST)
+  = \
+  BOOST_PP_IF( \
+      BOOST_PP_NOT( BOOST_PP_LIST_IS_NIL( BOOST_PP_SEQ_ELEM(n, paramdefaults) ) ), \
+      toString BOOST_PP_LPAREN() \
+          BOOST_PP_LIST_FIRST( BOOST_PP_SEQ_ELEM(n, DEFAULTLIST) ) \
+      BOOST_PP_RPAREN(), \
+      std::string("") \
+  )
 
 // print a list of comma-separated list, i.e. (,)arg("Action")
@@ -142,4 +153,5 @@
 #undef PARAMS
 #undef MAXPARAMTYPES
+#undef PARAM_DEFAULT
 
 #undef help_print
Index: src/Actions/Action_impl_undef.hpp
===================================================================
--- src/Actions/Action_impl_undef.hpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/Action_impl_undef.hpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -11,9 +11,10 @@
 #endif
 
+#undef paramvalids
 #undef paramtypes
 #undef paramtokens
+#undef paramreferences
 #undef paramdescriptions
 #undef paramdefaults
-#undef paramreferences
 
 #undef statetypes
Index: src/Actions/AnalysisAction/CalculateBoundingBoxAction.def
===================================================================
--- src/Actions/AnalysisAction/CalculateBoundingBoxAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/CalculateBoundingBoxAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -10,7 +10,9 @@
 typedef std::vector<double> doubleVec;
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramreferences
@@ -18,4 +20,5 @@
 #undef paramdescriptions
 #undef paramdefaults
+#undef paramvalids
 
 // Reaction cannot be undone, hence no state
Index: src/Actions/AnalysisAction/CalculateCellVolumeAction.def
===================================================================
--- src/Actions/AnalysisAction/CalculateCellVolumeAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/CalculateCellVolumeAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramreferences
@@ -16,4 +18,5 @@
 #undef paramdescriptions
 #undef paramdefaults
+#undef paramvalids
 
 // Reaction cannot be undone, hence no state
Index: src/Actions/AnalysisAction/CalculateMolarMassAction.def
===================================================================
--- src/Actions/AnalysisAction/CalculateMolarMassAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/CalculateMolarMassAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramreferences
@@ -16,4 +18,5 @@
 #undef paramdescriptions
 #undef paramdefaults
+#undef paramvalids
 
 // Reaction cannot be undone, hence no state
Index: src/Actions/AnalysisAction/DipoleAngularCorrelationAction.cpp
===================================================================
--- src/Actions/AnalysisAction/DipoleAngularCorrelationAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/DipoleAngularCorrelationAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -56,6 +56,6 @@
 
   // select atoms and obtain zero dipole orientation
-  Formula DipoleFormula(params.DipoleFormula);
-  World::getInstance().setTime(params.timestepzero);
+  Formula DipoleFormula(params.DipoleFormula.get());
+  World::getInstance().setTime(params.timestepzero.get());
   World::getInstance().clearMoleculeSelection(); // TODO: This should be done in setTime or where molecules are re-done
   World::getInstance().selectAllMolecules(MoleculeByFormula(DipoleFormula));
@@ -71,9 +71,9 @@
       +toString(DipoleFormula)+" selects no atoms.");
   range<size_t> timesteps = getMaximumTrajectoryBounds(atoms);
-  ASSERT(params.timestepzero < timesteps.first,
+  ASSERT(params.timestepzero.get() < timesteps.first,
     "AnalysisDipoleAngularCorrelationAction::performCall() - time step zero "
-    +toString(params.timestepzero)+" is beyond trajectory range ("
+    +toString(params.timestepzero.get())+" is beyond trajectory range ("
     +toString(timesteps.first)+") of some atoms.");
-  for (size_t step = params.timestepzero; step < timesteps.first; ++step) {
+  for (size_t step = params.timestepzero.get(); step < timesteps.first; ++step) {
     // calculate dipoles relative to zero orientation
     DipoleAngularCorrelationMap *correlationmap = NULL;
@@ -87,5 +87,5 @@
     // output correlation map
     ofstream output;
-    std::string filename = params.outputname.string()+"."+stepname+".dat";
+    std::string filename = params.outputname.get().string()+"."+stepname+".dat";
     output.open(filename.c_str());
     OutputCorrelationMap<DipoleAngularCorrelationMap>(&output, correlationmap, OutputDipoleAngularCorrelation_Header, OutputDipoleAngularCorrelation_Value);
@@ -93,5 +93,5 @@
 
     // bin map
-    BinPairMap *binmap = BinData( correlationmap, params.BinWidth, params.BinStart, params.BinEnd );
+    BinPairMap *binmap = BinData( correlationmap, params.BinWidth.get(), params.BinStart.get(), params.BinEnd.get() );
 
     // free correlation map
@@ -100,5 +100,5 @@
     // output binned map
     ofstream binoutput;
-    std::string binfilename = params.binoutputname.string()+"."+stepname+".dat";
+    std::string binfilename = params.binoutputname.get().string()+"."+stepname+".dat";
     binoutput.open(binfilename.c_str());
     OutputCorrelationMap<BinPairMap> ( &binoutput, binmap, OutputCorrelation_Header, OutputCorrelation_Value );
Index: src/Actions/AnalysisAction/DipoleAngularCorrelationAction.def
===================================================================
--- src/Actions/AnalysisAction/DipoleAngularCorrelationAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/DipoleAngularCorrelationAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -10,12 +10,27 @@
 #include <vector>
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.hpp"
+#include "Parameters/Validators/Specific/FormulaValidator.hpp"
+#include "Parameters/Validators/Specific/RotationAngleValidator.hpp"
+#include "Parameters/Validators/Specific/TimeStepPresentValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::string)(double)(double)(double)(boost::filesystem::path)(boost::filesystem::path)(unsigned int)
 #define paramreferences (DipoleFormula)(BinStart)(BinWidth)(BinEnd)(outputname)(binoutputname)(timestepzero)
 #define paramtokens ("dipole-angular-correlation")("bin-start")("bin-width")("bin-end")("output-file")("bin-output-file")("time-step-zero")
 #define paramdescriptions ("formula of molecules to calculate dipole of")("start of the first bin")("width of the bins")("start of the last bin")("name of the output file")("name of the bin output file")("initial time step to correlate following ones against")
-#define paramdefaults (NODEFAULT)(NODEFAULT)("0.5")(NODEFAULT)(NODEFAULT)(NODEFAULT)("0")
+#define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(0.5))(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(0))
+#define paramvalids \
+(FormulaValidator()) \
+(RotationAngleValidator()) \
+(RotationAngleValidator()) \
+(RotationAngleValidator()) \
+(!FilePresentValidator()) \
+(!FilePresentValidator()) \
+(TimeStepPresentValidator())
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Actions/AnalysisAction/DipoleCorrelationAction.cpp
===================================================================
--- src/Actions/AnalysisAction/DipoleCorrelationAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/DipoleCorrelationAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -48,13 +48,13 @@
 
   // execute action
-  output.open(params.outputname.string().c_str());
-  binoutput.open(params.binoutputname.string().c_str());
+  output.open(params.outputname.get().string().c_str());
+  binoutput.open(params.binoutputname.get().string().c_str());
   DipoleCorrelationMap *correlationmap = NULL;
   std::vector<molecule*> molecules = World::getInstance().getSelectedMolecules();
   LOG(0, "STATUS: There are " << molecules.size() << " selected molecules.");
-  ASSERT(!params.periodic, "AnalysisDipoleCorrelationAction() - periodic case not implemented.");
+  ASSERT(!params.periodic.get(), "AnalysisDipoleCorrelationAction() - periodic case not implemented.");
   correlationmap = DipoleCorrelation(molecules);
   OutputCorrelationMap<DipoleCorrelationMap>(&output, correlationmap, OutputDipoleCorrelation_Header, OutputDipoleCorrelation_Value);
-  binmap = BinData( correlationmap, params.BinWidth, params.BinStart, params.BinEnd );
+  binmap = BinData( correlationmap, params.BinWidth.get(), params.BinStart.get(), params.BinEnd.get() );
   OutputCorrelationMap<BinPairMap> ( &binoutput, binmap, OutputCorrelation_Header, OutputCorrelation_Value );
   delete(binmap);
Index: src/Actions/AnalysisAction/DipoleCorrelationAction.def
===================================================================
--- src/Actions/AnalysisAction/DipoleCorrelationAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/DipoleCorrelationAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -10,12 +10,24 @@
 #include <vector>
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.hpp"
+#include "Parameters/Validators/Specific/RotationAngleValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (double)(double)(double)(boost::filesystem::path)(boost::filesystem::path)(bool)
 #define paramreferences (BinStart)(BinWidth)(BinEnd)(outputname)(binoutputname)(periodic)
 #define paramtokens ("bin-start")("bin-width")("bin-end")("output-file")("bin-output-file")("periodic")
 #define paramdescriptions ("start of the first bin")("width of the bins")("start of the last bin")("name of the output file")("name of the bin output file")("system is constraint to periodic boundary conditions")
-#define paramdefaults (NODEFAULT)("0.5")(NODEFAULT)(NODEFAULT)(NODEFAULT)("0")
+#define paramdefaults (NOPARAM_DEFAULT)(PARAM_DEFAULT(0.5))(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(false))
+#define paramvalids \
+(RotationAngleValidator()) \
+(RotationAngleValidator()) \
+(RotationAngleValidator()) \
+(!FilePresentValidator()) \
+(!FilePresentValidator()) \
+(DummyValidator<bool>())
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Actions/AnalysisAction/MolecularVolumeAction.def
===================================================================
--- src/Actions/AnalysisAction/MolecularVolumeAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/MolecularVolumeAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramreferences
@@ -16,4 +18,5 @@
 #undef paramdescriptions
 #undef paramdefaults
+#undef paramvalids
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Actions/AnalysisAction/PairCorrelationAction.cpp
===================================================================
--- src/Actions/AnalysisAction/PairCorrelationAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/PairCorrelationAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -44,5 +44,4 @@
 /** =========== define the function ====================== */
 Action::state_ptr AnalysisPairCorrelationAction::performCall() {
-  int ranges[3] = {1, 1, 1};
   ofstream output;
   ofstream binoutput;
@@ -51,16 +50,16 @@
 
   // execute action
-  output.open(params.outputname.string().c_str());
-  binoutput.open(params.binoutputname.string().c_str());
+  output.open(params.outputname.get().string().c_str());
+  binoutput.open(params.binoutputname.get().string().c_str());
   PairCorrelationMap *correlationmap = NULL;
-  ASSERT(params.elements.size() == 2,
+  ASSERT(params.elements.get().size() == 2,
       "AnalysisPairCorrelationAction::performCall() - Exactly two elements are required for pair correlation.");
-  std::vector<const element *>::const_iterator elemiter = params.elements.begin();
+  std::vector<const element *>::const_iterator elemiter = params.elements.get().begin();
   const World::AtomComposite atoms_first = World::getInstance().getAllAtoms(AtomByType(*(elemiter++)));
   const World::AtomComposite atoms_second = World::getInstance().getAllAtoms(AtomByType(*(elemiter++)));
-  ASSERT(elemiter == params.elements.end(),
+  ASSERT(elemiter == params.elements.get().end(),
       "AnalysisPairCorrelationAction::performCall() - Exactly two elements are required for pair correlation.");
-  double max_distance = params.BinEnd;
-  if (params.BinEnd <= 0.) {
+  double max_distance = params.BinEnd.get();
+  if (params.BinEnd.get() <= 0.) {
     // find max distance within box from diagonal
     const RealSpaceMatrix &M = World::getInstance().getDomain().getM();
@@ -69,5 +68,5 @@
   correlationmap = PairCorrelation(atoms_first, atoms_second, max_distance);
   OutputCorrelationMap<PairCorrelationMap>(&output, correlationmap, OutputPairCorrelation_Header, OutputPairCorrelation_Value);
-  binmap = BinData( correlationmap, params.BinWidth, params.BinStart, params.BinEnd );
+  binmap = BinData( correlationmap, params.BinWidth.get(), params.BinStart.get(), params.BinEnd.get() );
   OutputCorrelationMap<BinPairMap> ( &binoutput, binmap, OutputCorrelation_Header, OutputCorrelation_Value );
   delete(binmap);
Index: src/Actions/AnalysisAction/PairCorrelationAction.def
===================================================================
--- src/Actions/AnalysisAction/PairCorrelationAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/PairCorrelationAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -11,12 +11,29 @@
 class element;
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/STLVectorValidator.hpp"
+#include "Parameters/Validators/Specific/BoxLengthValidator.hpp"
+#include "Parameters/Validators/Specific/ElementValidator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.hpp"
+
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::vector<const element *>)(double)(double)(double)(boost::filesystem::path)(boost::filesystem::path)(bool)
 #define paramreferences (elements)(BinStart)(BinWidth)(BinEnd)(outputname)(binoutputname)(periodic)
 #define paramtokens ("elements")("bin-start")("bin-width")("bin-end")("output-file")("bin-output-file")("periodic")
 #define paramdescriptions ("set of elements")("start of the first bin")("width of the bins")("start of the last bin")("name of the output file")("name of the bin output file")("system is constraint to periodic boundary conditions")
-#define paramdefaults (NODEFAULT)(NODEFAULT)("0.5")(NODEFAULT)(NODEFAULT)(NODEFAULT)("0")
+#define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(0.5))(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(false))
+#define paramvalids \
+(STLVectorValidator< std::vector<const element *> >(2,2, ElementValidator())) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(!FilePresentValidator()) \
+(!FilePresentValidator()) \
+(DummyValidator<bool>())
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Actions/AnalysisAction/PointCorrelationAction.cpp
===================================================================
--- src/Actions/AnalysisAction/PointCorrelationAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/PointCorrelationAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -50,17 +50,17 @@
 
   // execute action
-  output.open(params.outputname.string().c_str());
-  binoutput.open(params.binoutputname.string().c_str());
-  cout << "Point to correlate to is  " << params.Point << endl;
+  output.open(params.outputname.get().string().c_str());
+  binoutput.open(params.binoutputname.get().string().c_str());
+  cout << "Point to correlate to is  " << params.Point.get() << endl;
   CorrelationToPointMap *correlationmap = NULL;
-  for(std::vector<const element *>::iterator iter = params.elements.begin(); iter != params.elements.end(); ++iter)
+  for(std::vector<const element *>::const_iterator iter = params.elements.get().begin(); iter != params.elements.get().end(); ++iter)
     cout << "element is " << (*iter)->getSymbol() << endl;
   std::vector<molecule*> molecules = World::getInstance().getSelectedMolecules();
-  if (params.periodic)
-    correlationmap  = PeriodicCorrelationToPoint(molecules, params.elements, &params.Point, ranges);
+  if (params.periodic.get())
+    correlationmap  = PeriodicCorrelationToPoint(molecules, params.elements.get(), &params.Point.get(), ranges);
   else
-    correlationmap = CorrelationToPoint(molecules, params.elements, &params.Point);
+    correlationmap = CorrelationToPoint(molecules, params.elements.get(), &params.Point.get());
   OutputCorrelationMap<CorrelationToPointMap>(&output, correlationmap, OutputCorrelationToPoint_Header, OutputCorrelationToPoint_Value);
-  binmap = BinData( correlationmap, params.BinWidth, params.BinStart, params.BinEnd );
+  binmap = BinData( correlationmap, params.BinWidth.get(), params.BinStart.get(), params.BinEnd.get() );
   OutputCorrelationMap<BinPairMap> ( &binoutput, binmap, OutputCorrelation_Header, OutputCorrelation_Value );
   delete(binmap);
Index: src/Actions/AnalysisAction/PointCorrelationAction.def
===================================================================
--- src/Actions/AnalysisAction/PointCorrelationAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/PointCorrelationAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -13,12 +13,29 @@
 class element;
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/STLVectorValidator.hpp"
+#include "Parameters/Validators/Specific/BoxVectorValidator.hpp"
+#include "Parameters/Validators/Specific/BoxLengthValidator.hpp"
+#include "Parameters/Validators/Specific/ElementValidator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::vector<const element *>)(Vector)(double)(double)(double)(boost::filesystem::path)(boost::filesystem::path)(bool)
 #define paramreferences (elements)(Point)(BinStart)(BinWidth)(BinEnd)(outputname)(binoutputname)(periodic)
 #define paramtokens ("elements")("position")("bin-start")("bin-width")("bin-end")("output-file")("bin-output-file")("periodic")
 #define paramdescriptions ("set of elements")("position in R^3 space")("start of the first bin")("width of the bins")("start of the last bin")("name of the output file")("name of the bin output file")("system is constraint to periodic boundary conditions")
-#define paramdefaults (NODEFAULT)(NODEFAULT)(NODEFAULT)("0.5")(NODEFAULT)(NODEFAULT)(NODEFAULT)("0")
+#define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(0.5))(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(false))
+#define paramvalids \
+(STLVectorValidator< std::vector<const element *> >(ElementValidator())) \
+(BoxVectorValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(!FilePresentValidator()) \
+(!FilePresentValidator()) \
+(DummyValidator<bool>())
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Actions/AnalysisAction/PrincipalAxisSystemAction.def
===================================================================
--- src/Actions/AnalysisAction/PrincipalAxisSystemAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/PrincipalAxisSystemAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -10,7 +10,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramreferences
@@ -18,4 +20,5 @@
 #undef paramdescriptions
 #undef paramdefaults
+#undef paramvalids
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Actions/AnalysisAction/SurfaceCorrelationAction.cpp
===================================================================
--- src/Actions/AnalysisAction/SurfaceCorrelationAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/SurfaceCorrelationAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -53,31 +53,39 @@
 
   // execute action
-  output.open(params.outputname.string().c_str());
-  binoutput.open(params.binoutputname.string().c_str());
-  molecule *surfacemol = const_cast<molecule *>(params.Boundary);
-  ASSERT(surfacemol != NULL, "No molecule specified for SurfaceCorrelation.");
+  output.open(params.outputname.get().string().c_str());
+  binoutput.open(params.binoutputname.get().string().c_str());
+
+  // check for selected molecules and create surfaces from them
+  std::vector<atom *> atoms(World::getInstance().getSelectedAtoms());
+  LinkedCell_deprecated * LCList = NULL;
+  Tesselation * TesselStruct = NULL;
   const double radius = 4.;
   double LCWidth = 20.;
-  if (params.BinEnd > 0) {
-    if (params.BinEnd > 2.*radius)
-      LCWidth = params.BinEnd;
+  if (params.BinEnd.get() > 0) {
+    if (params.BinEnd.get() > 2.*radius)
+      LCWidth = params.BinEnd.get();
     else
       LCWidth = 2.*radius;
   }
+  if ( atoms.size() == 0) {
+    ELOG(1, "You have not select any atoms.");
+    return Action::failure;
+  }
+  // create adaptor for the selected atoms
+  PointCloudAdaptor< std::vector<atom *> > cloud(&atoms, std::string("Selected atoms"));
 
-  // get the boundary
-  class Tesselation *TesselStruct = NULL;
-  const LinkedCell_deprecated *LCList = NULL;
-  // find biggest molecule
+  // create tesselation
+  LCList = new LinkedCell_deprecated(cloud, 2.*radius);
+  TesselStruct = new Tesselation;
+  (*TesselStruct)(cloud, radius);
+
+  // correlate
   std::vector<molecule*> molecules = World::getInstance().getSelectedMolecules();
   std::cout << "There are " << molecules.size() << " selected molecules." << std::endl;
-  PointCloudAdaptor<molecule> cloud(surfacemol, surfacemol->name);
-  LCList = new LinkedCell_deprecated(cloud, LCWidth);
-  FindNonConvexBorder(surfacemol, TesselStruct, LCList, radius, NULL);
   CorrelationToSurfaceMap *surfacemap = NULL;
-  if (params.periodic)
-    surfacemap = PeriodicCorrelationToSurface( molecules, params.elements, TesselStruct, LCList, ranges);
+  if (params.periodic.get())
+    surfacemap = PeriodicCorrelationToSurface( molecules, params.elements.get(), TesselStruct, LCList, ranges);
   else
-    surfacemap = CorrelationToSurface( molecules, params.elements, TesselStruct, LCList);
+    surfacemap = CorrelationToSurface( molecules, params.elements.get(), TesselStruct, LCList);
   delete LCList;
   OutputCorrelationMap<CorrelationToSurfaceMap>(&output, surfacemap, OutputCorrelationToSurface_Header, OutputCorrelationToSurface_Value);
@@ -89,5 +97,5 @@
       ELOG(1, "Linked Cell width is smaller than the found range of values! Bins can only be correct up to: " << radius << ".");
   }
-  binmap = BinData( surfacemap, params.BinWidth, params.BinStart, params.BinEnd );
+  binmap = BinData( surfacemap, params.BinWidth.get(), params.BinStart.get(), params.BinEnd.get() );
   OutputCorrelationMap<BinPairMap> ( &binoutput, binmap, OutputCorrelation_Header, OutputCorrelation_Value );
   delete TesselStruct;  // surfacemap contains refs to triangles! delete here, not earlier!
Index: src/Actions/AnalysisAction/SurfaceCorrelationAction.def
===================================================================
--- src/Actions/AnalysisAction/SurfaceCorrelationAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AnalysisAction/SurfaceCorrelationAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -12,12 +12,27 @@
 class molecule;
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/STLVectorValidator.hpp"
+#include "Parameters/Validators/Specific/BoxLengthValidator.hpp"
+#include "Parameters/Validators/Specific/ElementValidator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (std::vector<const element *>)(const molecule *)(double)(double)(double)(boost::filesystem::path)(boost::filesystem::path)(bool)
-#define paramreferences (elements)(Boundary)(BinStart)(BinWidth)(BinEnd)(outputname)(binoutputname)(periodic)
-#define paramtokens ("elements")("molecule-by-id")("bin-start")("bin-width")("bin-end")("output-file")("bin-output-file")("periodic")
-#define paramdescriptions ("set of elements")("index of a molecule")("start of the first bin")("width of the bins")("start of the last bin")("name of the output file")("name of the bin output file")("system is constraint to periodic boundary conditions")
-#define paramdefaults (NODEFAULT)(NODEFAULT)(NODEFAULT)("0.5")(NODEFAULT)(NODEFAULT)(NODEFAULT)("0")
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (std::vector<const element *>)(double)(double)(double)(boost::filesystem::path)(boost::filesystem::path)(bool)
+#define paramreferences (elements)(BinStart)(BinWidth)(BinEnd)(outputname)(binoutputname)(periodic)
+#define paramtokens ("elements")("bin-start")("bin-width")("bin-end")("output-file")("bin-output-file")("periodic")
+#define paramdescriptions ("set of elements")("start of the first bin")("width of the bins")("start of the last bin")("name of the output file")("name of the bin output file")("system is constraint to periodic boundary conditions")
+#define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(0.5))(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(false))
+#define paramvalids \
+(STLVectorValidator< std::vector<const element *> >(ElementValidator())) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(!FilePresentValidator()) \
+(!FilePresentValidator()) \
+(DummyValidator<bool>())
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Actions/AtomAction/AddAction.cpp
===================================================================
--- src/Actions/AtomAction/AddAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AtomAction/AddAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -43,6 +43,6 @@
   // execute action
   atom * first = World::getInstance().createAtom();
-  first->setType(params.elemental);
-  first->setPosition(params.position);
+  first->setType(params.elemental.get());
+  first->setPosition(params.position.get());
   LOG(1, "Adding new atom with element " << first->getType()->getName() << " at " << (first->getPosition()) << ".");
   // TODO: remove when all of World's atoms are stored.
@@ -68,7 +68,7 @@
 
   atom * first = World::getInstance().createAtom();
-  first->setType(state->params.elemental);
-  first->setPosition(state->params.position);
-  LOG(1, "Re-adding new atom with element " << state->params.elemental->getName() << " at " << state->params.position << ".");
+  first->setType(state->params.elemental.get());
+  first->setPosition(state->params.position.get());
+  LOG(1, "Re-adding new atom with element " << state->params.elemental.get()->getName() << " at " << state->params.position.get() << ".");
   // TODO: remove when all of World's atoms are stored.
   std::vector<molecule *> molecules = World::getInstance().getAllMolecules();
Index: src/Actions/AtomAction/AddAction.def
===================================================================
--- src/Actions/AtomAction/AddAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AtomAction/AddAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -7,16 +7,23 @@
 
 // all includes and forward declarations necessary for non-integral types below
-#include "LinearAlgebra/BoxVector.hpp"
+#include "LinearAlgebra/Vector.hpp"
 #include "World.hpp"
 class element;
 
+#include "Parameters/Validators/Specific/BoxVectorValidator.hpp"
+#include "Parameters/Validators/Specific/ElementValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (const element *)(BoxVector)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+//#define paramtypes (const element *)(BoxVector) TODO: use a validator
+#define paramtypes (const element *)(Vector)
 #define paramtokens ("add-atom")("domain-position")
 #define paramdescriptions ("element of new atom")("position within current domain")
 #define paramreferences (elemental)(position)
-#define paramdefaults (NODEFAULT)(NODEFAULT)
+#define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)
+#define paramvalids \
+(ElementValidator()) \
+(BoxVectorValidator())
 
 #define statetypes (const atomId_t)
Index: src/Actions/AtomAction/ChangeElementAction.cpp
===================================================================
--- src/Actions/AtomAction/ChangeElementAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AtomAction/ChangeElementAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -54,8 +54,8 @@
   for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection(); iter != World::getInstance().endAtomSelection(); ++iter) {
     first = iter->second;
-    LOG(1, "Changing atom " << *first << " to element " << *params.elemental << ".");
+    LOG(1, "Changing atom " << *first << " to element " << *params.elemental.get() << ".");
     mol = first->getMolecule();
     first->removeFromMolecule(); // remove atom
-    first->setType(params.elemental);
+    first->setType(params.elemental.get());
     mol->AddAtom(first);  // add atom to ensure correctness of formula
   }
@@ -88,5 +88,5 @@
     mol = first->getMolecule();
     first->removeFromMolecule(); // remove atom
-    first->setType(state->params.elemental);
+    first->setType(state->params.elemental.get());
     mol->AddAtom(first);  // add atom to ensure correctness of formula
   }
Index: src/Actions/AtomAction/ChangeElementAction.def
===================================================================
--- src/Actions/AtomAction/ChangeElementAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AtomAction/ChangeElementAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -10,7 +10,9 @@
 typedef std::map<int, const element *> ElementMap;
 
+#include "Parameters/Validators/Specific/ElementValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (const element *)
 #define paramtokens ("change-element")
@@ -18,4 +20,6 @@
 #undef paramdefaults
 #define paramreferences (elemental)
+#define paramvalids \
+(ElementValidator())
 
 #define statetypes (ElementMap)
Index: src/Actions/AtomAction/RemoveAction.def
===================================================================
--- src/Actions/AtomAction/RemoveAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AtomAction/RemoveAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -17,4 +19,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::vector<AtomicInfo>)
Index: src/Actions/AtomAction/RotateAroundOriginByAngleAction.cpp
===================================================================
--- src/Actions/AtomAction/RotateAroundOriginByAngleAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AtomAction/RotateAroundOriginByAngleAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -44,17 +44,17 @@
 
   // check whether Axis is valid
-  if (params.Axis.IsZero())
+  if (params.Axis.get().IsZero())
     return Action::failure;
 
   // convert from degrees to radian
-  params.angle *= M_PI/180.;
+  double radian = params.angle.get() * M_PI/180.;
 
   // Creation Line that is the rotation axis
-  Line RotationAxis(Vector(0.,0.,0.), params.Axis);
+  Line RotationAxis(Vector(0.,0.,0.), params.Axis.get());
 
-  LOG(0, "Rotate around origin by " << params.angle << " radian, axis from origin to " << params.Axis << ".");
+  LOG(0, "Rotate around origin by " << radian << " radian, axis from origin to " << params.Axis.get() << ".");
   // TODO: use AtomSet::rotate?
   for (std::vector<atom *>::iterator iter = selectedAtoms.begin(); iter != selectedAtoms.end(); ++iter) {
-    (*iter)->setPosition(RotationAxis.rotateVector((*iter)->getPosition(), params.angle));
+    (*iter)->setPosition(RotationAxis.rotateVector((*iter)->getPosition(), radian));
   }
   LOG(0, "done.");
@@ -65,9 +65,12 @@
   AtomRotateAroundOriginByAngleState *state = assert_cast<AtomRotateAroundOriginByAngleState*>(_state.get());
 
+  // convert from degrees to radian
+  double radian = params.angle.get() * M_PI/180.;
+
   // Creation Line that is the rotation axis
-  Line RotationAxis(Vector(0.,0.,0.), state->params.Axis);
+  Line RotationAxis(Vector(0.,0.,0.), state->params.Axis.get());
 
   for (std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter) {
-    (*iter)->setPosition(RotationAxis.rotateVector((*iter)->getPosition(), -state->params.angle));
+    (*iter)->setPosition(RotationAxis.rotateVector((*iter)->getPosition(), -radian));
   }
 
@@ -78,9 +81,12 @@
   AtomRotateAroundOriginByAngleState *state = assert_cast<AtomRotateAroundOriginByAngleState*>(_state.get());
 
+  // convert from degrees to radian
+  double radian = params.angle.get() * M_PI/180.;
+
   // Creation Line that is the rotation axis
-  Line RotationAxis(Vector(0.,0.,0.), state->params.Axis);
+  Line RotationAxis(Vector(0.,0.,0.), state->params.Axis.get());
 
   for (std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter) {
-    (*iter)->setPosition(RotationAxis.rotateVector((*iter)->getPosition(), state->params.angle));
+    (*iter)->setPosition(RotationAxis.rotateVector((*iter)->getPosition(), radian));
   }
 
Index: src/Actions/AtomAction/RotateAroundOriginByAngleAction.def
===================================================================
--- src/Actions/AtomAction/RotateAroundOriginByAngleAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AtomAction/RotateAroundOriginByAngleAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,10 @@
 #include "LinearAlgebra/Vector.hpp"
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Specific/RotationAngleValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (double)(Vector)
 #define paramtokens ("rotate-around-origin")("position")
@@ -17,4 +20,7 @@
 #undef paramdefaults
 #define paramreferences (angle)(Axis)
+#define paramvalids \
+(RotationAngleValidator())\
+(DummyValidator< Vector> ())
 
 #define statetypes (std::vector<atom*>)
Index: src/Actions/AtomAction/SaveSelectedAtomsAction.cpp
===================================================================
--- src/Actions/AtomAction/SaveSelectedAtomsAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AtomAction/SaveSelectedAtomsAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -38,17 +38,17 @@
 /** =========== define the function ====================== */
 Action::state_ptr AtomSaveSelectedAtomsAction::performCall() {
-  LOG(1, "Storing selected atoms to file " << params.filename << ".");
+  LOG(1, "Storing selected atoms to file " << params.filename.get() << ".");
 
   // extract suffix
   std::string FilenameSuffix;
   std::string FilenamePrefix;
-  if (params.filename.has_filename()) {
+  if (params.filename.get().has_filename()) {
     // get suffix
 #if BOOST_VERSION >= 104600
-      FilenameSuffix = params.filename.extension().string().substr(1); // remove the prefixed "."
-      FilenamePrefix = params.filename.stem().string();
+      FilenameSuffix = params.filename.get().extension().string().substr(1); // remove the prefixed "."
+      FilenamePrefix = params.filename.get().stem().string();
 #else
-      FilenameSuffix = params.filename.extension().substr(1); // remove the prefixed "."
-      FilenamePrefix = params.filename.stem();
+      FilenameSuffix = params.filename.get().extension().substr(1); // remove the prefixed "."
+      FilenamePrefix = params.filename.get().stem();
 #endif
   } else {
@@ -60,9 +60,9 @@
   // parse the file
   boost::filesystem::ofstream output;
-  output.open(params.filename);
+  output.open(params.filename.get());
   if (!output.fail()) {
     FormatParserStorage::getInstance().saveSelectedAtoms(output, FilenameSuffix);
   } else {
-    ELOG(1, "Could not open file " << params.filename << ".");
+    ELOG(1, "Could not open file " << params.filename.get() << ".");
   }
   output.close();
Index: src/Actions/AtomAction/SaveSelectedAtomsAction.def
===================================================================
--- src/Actions/AtomAction/SaveSelectedAtomsAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AtomAction/SaveSelectedAtomsAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,11 @@
 
 
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.hpp"
+#include "Parameters/Validators/Specific/ParserFileValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)
 #define paramtokens ("save-selected-atoms")
@@ -17,4 +21,6 @@
 #undef paramdefaults
 #define paramreferences (filename)
+#define paramvalids \
+(!FilePresentValidator() && ParserFileValidator())
 
 #undef statetypes
Index: src/Actions/AtomAction/TranslateAction.cpp
===================================================================
--- src/Actions/AtomAction/TranslateAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AtomAction/TranslateAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -44,6 +44,6 @@
   // TODO: use AtomSet::translate
   for (std::vector<atom *>::iterator iter = selectedAtoms.begin(); iter != selectedAtoms.end(); ++iter) {
-    *(*iter) += params.x;
-    if (params.periodic)
+    *(*iter) += params.x.get();
+    if (params.periodic.get())
       (*iter)->setPosition(domain.enforceBoundaryConditions((*iter)->getPosition()));
   }
@@ -57,6 +57,6 @@
 
   for (std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter) {
-    *(*iter) -= state->params.x;
-    if (state->params.periodic)
+    *(*iter) -= state->params.x.get();
+    if (state->params.periodic.get())
       (*iter)->setPosition(domain.enforceBoundaryConditions((*iter)->getPosition()));
   }
@@ -70,6 +70,6 @@
 
   for (std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter) {
-    *(*iter) += state->params.x;
-    if (state->params.periodic)
+    *(*iter) += state->params.x.get();
+    if (state->params.periodic.get())
       (*iter)->setPosition(domain.enforceBoundaryConditions((*iter)->getPosition()));
   }
Index: src/Actions/AtomAction/TranslateAction.def
===================================================================
--- src/Actions/AtomAction/TranslateAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/AtomAction/TranslateAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -10,12 +10,17 @@
 #include "LinearAlgebra/Vector.hpp"
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (Vector)(bool)
 #define paramtokens ("translate-atoms")("periodic")
 #define paramdescriptions ("translation vector")("system is constraint to periodic boundary conditions")
 #define paramreferences (x)(periodic)
-#define paramdefaults (NODEFAULT)("0")
+#define paramdefaults (NOPARAM_DEFAULT)(PARAM_DEFAULT(false))
+#define paramvalids \
+(DummyValidator< Vector >()) \
+(DummyValidator< bool >())
 
 #define statetypes (std::vector<atom*>)
Index: src/Actions/CommandAction/BondLengthTableAction.cpp
===================================================================
--- src/Actions/CommandAction/BondLengthTableAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/CommandAction/BondLengthTableAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -43,5 +43,5 @@
   ostringstream usage;
 
-  LOG(0, "Using " << params.BondGraphFileName << " as bond length table.");
+  LOG(0, "Using " << params.BondGraphFileName.get() << " as bond length table.");
   BondGraph *&BG = World::getInstance().getBondGraph();
 
@@ -57,7 +57,7 @@
 
   BG->CleanupBondLengthTable();
-  if ((!params.BondGraphFileName.empty())
-      && boost::filesystem::exists(params.BondGraphFileName)) {
-    std::ifstream input(params.BondGraphFileName.string().c_str());
+  if ((!params.BondGraphFileName.get().empty())
+      && boost::filesystem::exists(params.BondGraphFileName.get())) {
+    std::ifstream input(params.BondGraphFileName.get().string().c_str());
     if ((input.good()) && (BG->LoadBondLengthTable(input))) {
       LOG(0, "Bond length table parsed successfully.");
@@ -96,5 +96,5 @@
   BondGraph *&BG = World::getInstance().getBondGraph();
   BG->CleanupBondLengthTable();
-  std::ifstream input(state->params.BondGraphFileName.string().c_str());
+  std::ifstream input(state->params.BondGraphFileName.get().string().c_str());
   if ((input.good()) && (BG->LoadBondLengthTable(input))) {
     LOG(0, "Bond length table parsed successfully.");
Index: src/Actions/CommandAction/BondLengthTableAction.def
===================================================================
--- src/Actions/CommandAction/BondLengthTableAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/CommandAction/BondLengthTableAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -10,7 +10,9 @@
 #include "Graph/BondGraph.hpp"
 
+#include "Parameters/Validators/Specific/FilePresentValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)
 #define paramtokens ("bond-table")
@@ -18,4 +20,6 @@
 #undef paramdefaults
 #define paramreferences (BondGraphFileName)
+#define paramvalids \
+(FilePresentValidator())
 
 #define statetypes (std::string)
Index: src/Actions/CommandAction/ElementDbAction.cpp
===================================================================
--- src/Actions/CommandAction/ElementDbAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/CommandAction/ElementDbAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -60,5 +60,5 @@
   // TODO: Make databasepath a std::string
   config *configuration = World::getInstance().getConfig();
-  strcpy(configuration->databasepath, params.databasepath.branch_path().string().c_str());
+  strcpy(configuration->databasepath, params.databasepath.get().branch_path().string().c_str());
 
   // load table
@@ -96,5 +96,5 @@
   // TODO: Make databasepath a std::string
   config *configuration = World::getInstance().getConfig();
-  strcpy(configuration->databasepath, state->params.databasepath.branch_path().string().c_str());
+  strcpy(configuration->databasepath, state->params.databasepath.get().branch_path().string().c_str());
 
   // load table
Index: src/Actions/CommandAction/ElementDbAction.def
===================================================================
--- src/Actions/CommandAction/ElementDbAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/CommandAction/ElementDbAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 #include <sstream>
 
+#include "Parameters/Validators/Specific/FilePresentValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)
 #define paramtokens ("element-db")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (databasepath)
+#define paramvalids \
+(FilePresentValidator())
 
 #define statetypes (std::string)
Index: src/Actions/CommandAction/FastParsingAction.cpp
===================================================================
--- src/Actions/CommandAction/FastParsingAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/CommandAction/FastParsingAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -40,5 +40,5 @@
   bool oldvalue = configuration->FastParsing;
 
-  configuration->FastParsing = params.fastparsing;
+  configuration->FastParsing = params.fastparsing.get();
   if (configuration->FastParsing)
     LOG(0, "I won't parse trajectories.");
@@ -65,5 +65,5 @@
 
   config *configuration = World::getInstance().getConfig();
-  configuration->FastParsing = state->params.fastparsing;
+  configuration->FastParsing = state->params.fastparsing.get();
   if (configuration->FastParsing)
     LOG(0, "I won't parse trajectories.");
Index: src/Actions/CommandAction/FastParsingAction.def
===================================================================
--- src/Actions/CommandAction/FastParsingAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/CommandAction/FastParsingAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (bool)
 #define paramtokens ("fastparsing")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (fastparsing)
+#define paramvalids \
+(DummyValidator< bool >())
 
 #define statetypes (bool)
Index: src/Actions/CommandAction/HelpAction.cpp
===================================================================
--- src/Actions/CommandAction/HelpAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/CommandAction/HelpAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -63,5 +63,5 @@
   std::cout << std::endl;
   // print list of actions or its options
-  if (params.actionname == "none") {
+  if (params.actionname.get() == std::string("none")) {
     // print list of all Actions
     std::cout << "Here is a list of all available Actions:" << std::endl;
@@ -75,6 +75,6 @@
   } else {
     // retrieve command from Registry and print its help
-    if (ActionRegistry::getInstance().isActionPresentByName(params.actionname)) {
-      const Action *instance = ActionRegistry::getInstance().getActionByName(params.actionname);
+    if (ActionRegistry::getInstance().isActionPresentByName(params.actionname.get())) {
+      const Action *instance = ActionRegistry::getInstance().getActionByName(params.actionname.get());
       // else give description of Action and its option value if present
       std::cout << instance->help();
@@ -82,5 +82,5 @@
       std::cout << std::endl;
     } else {
-      ELOG(1, "No action is known by the name " << params.actionname << ".");
+      ELOG(1, "No action is known by the name " << params.actionname.get() << ".");
       return Action::failure;
     }
Index: src/Actions/CommandAction/HelpAction.def
===================================================================
--- src/Actions/CommandAction/HelpAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/CommandAction/HelpAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -7,14 +7,24 @@
 
 // all includes and forward declarations necessary for non-integral types below
+#include <string> 
+#include <vector> 
 
+#include "Parameters/Validators/DiscreteValidator.hpp"
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/ActionNameValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::string)
 #define paramtokens ("actionname")
 #define paramdescriptions ("Name of an action whose option list is then given")
-#define paramdefaults ("none")
+#define paramdefaults (PARAM_DEFAULT(std::string("none")))
 #define paramreferences (actionname)
+#define paramvalids \
+(DiscreteValidator<std::string>(std::vector<std::string>(1, std::string("none"))) || ActionNameValidator())
+// NOTE: The _default_ value MUST NOT require validation via ActionNameValidator!
+// This will trigger an infinite loop of ActionRegistry::fillRegistry() calls as ActionRegistry is
+// at the time of the filling on of the default values not yet completely constructed!
 
 #undef statetypes
Index: src/Actions/CommandAction/VerboseAction.cpp
===================================================================
--- src/Actions/CommandAction/VerboseAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/CommandAction/VerboseAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -35,12 +35,12 @@
 /** =========== define the function ====================== */
 Action::state_ptr CommandVerboseAction::performCall() {
-  int oldverbosity = getVerbosity();
+  unsigned int oldverbosity = getVerbosity();
 
-  if (oldverbosity != params.verbosity) {
+  if (oldverbosity != params.verbosity.get()) {
     // prepare undo state
     CommandVerboseState *UndoState = new CommandVerboseState(oldverbosity, params);
     // set new verbosity
-    setVerbosity(params.verbosity);
-    LOG(0, "Setting verbosity from " << oldverbosity << " to " << params.verbosity << ".");
+    setVerbosity(params.verbosity.get());
+    LOG(0, "Setting verbosity from " << oldverbosity << " to " << params.verbosity.get() << ".");
     return Action::state_ptr(UndoState);
   } else {
@@ -53,5 +53,5 @@
   CommandVerboseState *state = assert_cast<CommandVerboseState*>(_state.get());
 
-  LOG(0, "Setting verbosity from " << state->params.verbosity << " to " << state->oldverbosity << ".");
+  LOG(0, "Setting verbosity from " << state->params.verbosity.get() << " to " << state->oldverbosity << ".");
   setVerbosity(state->oldverbosity);
 
@@ -62,6 +62,6 @@
   CommandVerboseState *state = assert_cast<CommandVerboseState*>(_state.get());
 
-  LOG(0, "Setting verbosity from " << state->oldverbosity << " to " << state->params.verbosity << ".");
-  setVerbosity(state->params.verbosity);
+  LOG(0, "Setting verbosity from " << state->oldverbosity << " to " << state->params.verbosity.get() << ".");
+  setVerbosity(state->params.verbosity.get());
 
   return Action::state_ptr(_state);
Index: src/Actions/CommandAction/VerboseAction.def
===================================================================
--- src/Actions/CommandAction/VerboseAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/CommandAction/VerboseAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,14 +9,18 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (int)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (unsigned int)
 #define paramtokens ("verbose")
 #define paramdescriptions ("set verbosity level")
 #undef paramdefaults
 #define paramreferences (verbosity)
+#define paramvalids \
+(DummyValidator< unsigned int >())
 
-#define statetypes (int)
+#define statetypes (unsigned int)
 #define statereferences (oldverbosity)
 
Index: src/Actions/CommandAction/VersionAction.def
===================================================================
--- src/Actions/CommandAction/VersionAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/CommandAction/VersionAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 #include "version.h"
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -17,4 +19,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #undef statetypes
Index: src/Actions/CommandAction/WarrantyAction.def
===================================================================
--- src/Actions/CommandAction/WarrantyAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/CommandAction/WarrantyAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -16,4 +18,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #undef statetypes
Index: src/Actions/FillAction/FillRegularGridAction.cpp
===================================================================
--- src/Actions/FillAction/FillRegularGridAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/FillAction/FillRegularGridAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -82,7 +82,7 @@
   LinkedCell_deprecated * LC = NULL;
   Tesselation * TesselStruct = NULL;
-  if (params.SphereRadius != 0.) {
+  if (params.SphereRadius.get() != 0.) {
     if ( atoms.size() == 0) {
-      ELOG(1, "You have given a sphere radius " << params.SphereRadius
+      ELOG(1, "You have given a sphere radius " << params.SphereRadius.get()
           << " != 0, but have not select any molecules.");
       return Action::failure;
@@ -92,7 +92,7 @@
 
     // create tesselation
-    LC = new LinkedCell_deprecated(cloud, 2.*params.SphereRadius);
+    LC = new LinkedCell_deprecated(cloud, 2.*params.SphereRadius.get());
     TesselStruct = new Tesselation;
-    (*TesselStruct)(cloud, params.SphereRadius);
+    (*TesselStruct)(cloud, params.SphereRadius.get());
 
     // and create predicate
@@ -106,5 +106,5 @@
     FillPredicate *voidnode_predicate = new FillPredicate(
         IsVoidNode_FillPredicate(
-            Sphere(zeroVec, params.mindistance)
+            Sphere(zeroVec, params.mindistance.get())
             )
         );
@@ -112,11 +112,11 @@
     if (surface_predicate != NULL)
       Andpredicate = (Andpredicate) && !(*surface_predicate);
-    Mesh *mesh = new CubeMesh(params.counts, params.offset, World::getInstance().getDomain().getM());
+    Mesh *mesh = new CubeMesh(params.counts.get(), params.offset.get(), World::getInstance().getDomain().getM());
     Inserter *inserter = new Inserter(
         Inserter::impl_ptr(
             new RandomInserter(
-                params.RandAtomDisplacement,
-                params.RandMoleculeDisplacement,
-                params.DoRotate)
+                params.RandAtomDisplacement.get(),
+                params.RandMoleculeDisplacement.get(),
+                params.DoRotate.get())
             )
         );
Index: src/Actions/FillAction/FillRegularGridAction.def
===================================================================
--- src/Actions/FillAction/FillRegularGridAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/FillAction/FillRegularGridAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -12,12 +12,26 @@
 #include "types.hpp"
 
+#include "LinearAlgebra/defs.hpp"
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/STLVectorValidator.hpp"
+#include "Parameters/Validators/Specific/BoxLengthValidator.hpp"
+#include "Parameters/Validators/Specific/VectorZeroOneComponentsValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (Vector)(Vector)(double)(double)(double)(double)(bool)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (std::vector< unsigned int >)(Vector)(double)(double)(double)(double)(bool)
 #define paramtokens ("mesh-size")("mesh-offset")("min-distance")("tesselation-radius")("random-atom-displacement")("random-molecule-displacement")("DoRotate")
 #define paramdescriptions ("number of points per axis")("offset to start of partition, must be in [0,1)")("Minimum distance to other atoms")("radius of rolling sphere in tesselating selected molecule's surfaces")("magnitude of random atom displacement")("magnitude of random molecule displacement")("whether to rotate or not")
-#define paramdefaults (NODEFAULT)("0.,0.,0.")("1.")("0.")("0.")("0.")("0")
+#define paramdefaults (NOPARAM_DEFAULT)(PARAM_DEFAULT(Vector(0.,0.,0.)))(PARAM_DEFAULT(1.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(false))
 #define paramreferences (counts)(offset)(mindistance)(SphereRadius)(RandAtomDisplacement)(RandMoleculeDisplacement)(DoRotate)
+#define paramvalids \
+(STLVectorValidator< std::vector< unsigned int > >(NDIM, NDIM)) \
+(VectorZeroOneComponentsValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(DummyValidator< bool >())
 
 #define statetypes (std::vector<AtomicInfo>)(std::vector<BondInfo>)(std::vector<AtomicInfo>)(std::vector<Vector>)
Index: src/Actions/FillAction/FillSphericalSurfaceAction.cpp
===================================================================
--- src/Actions/FillAction/FillSphericalSurfaceAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/FillAction/FillSphericalSurfaceAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -71,5 +71,5 @@
   Vector sum = zeroVec;
   for (molecule::iterator it2=filler->begin();it2 !=filler->end();++it2) {
-    const Vector helper = (**it2).getPosition().partition(params.AlignedAxis).second;
+    const Vector helper = (**it2).getPosition().partition(params.AlignedAxis.get()).second;
     sum += helper;
   }
@@ -89,13 +89,13 @@
     FillPredicate *voidnode_predicate = new FillPredicate(
         IsVoidNode_FillPredicate(
-            Sphere(zeroVec, params.mindistance)
+            Sphere(zeroVec, params.mindistance.get())
             )
         );
-    Shape s = Sphere(params.center, params.radius);
+    Shape s = Sphere(params.center.get(), params.radius.get());
     boost::function<const NodeSet ()> func = 
-        boost::bind(&Shape::getHomogeneousPointsOnSurface, boost::ref(s), params.N);
+        boost::bind(&Shape::getHomogeneousPointsOnSurface, boost::ref(s), params.N.get());
     Mesh *mesh = new MeshAdaptor(func);
     Inserter *inserter = new Inserter(
-        Inserter::impl_ptr(new SurfaceInserter(s, params.AlignedAxis)));
+        Inserter::impl_ptr(new SurfaceInserter(s, params.AlignedAxis.get())));
 
     // fill
Index: src/Actions/FillAction/FillSphericalSurfaceAction.def
===================================================================
--- src/Actions/FillAction/FillSphericalSurfaceAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/FillAction/FillSphericalSurfaceAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -12,12 +12,22 @@
 #include "types.hpp"
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Specific/BoxLengthValidator.hpp"
+#include "Parameters/Validators/Specific/BoxVectorValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (Vector)(double)(int)(double)(Vector)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (Vector)(double)(unsigned int)(double)(Vector)
 #define paramtokens ("center")("radius")("count")("min-distance")("Alignment-Axis")
 #define paramdescriptions ("center of the sphere")("sphere size")("number of instances to be added, changed according to geometric needs")("minimum distance between added instances")("The filler molecule is rotated relative to this alignment axis")
-#define paramdefaults ("0.,0.,0.")(NODEFAULT)("12")("1.")(NODEFAULT)
+#define paramdefaults (PARAM_DEFAULT(Vector(0.,0.,0.)))(NOPARAM_DEFAULT)(PARAM_DEFAULT(12))(PARAM_DEFAULT(1.))(NOPARAM_DEFAULT)
 #define paramreferences (center)(radius)(N)(mindistance)(AlignedAxis)
+#define paramvalids \
+(BoxVectorValidator()) \
+(BoxLengthValidator()) \
+(DummyValidator< unsigned int >()) \
+(BoxLengthValidator()) \
+(DummyValidator< Vector >())
 
 #define statetypes (std::vector<AtomicInfo>)(std::vector<BondInfo>)(std::vector<AtomicInfo>)(std::vector<Vector>)
Index: src/Actions/FragmentationAction/FragmentationAction.cpp
===================================================================
--- src/Actions/FragmentationAction/FragmentationAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/FragmentationAction/FragmentationAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -45,8 +45,8 @@
 
   LOG(0, "STATUS: Fragmenting molecular system with current connection matrix maximum bond distance "
-      << params.distance << " up to "
-      << params.order << " order. Fragment files begin with "
-      << params.prefix << " and are stored as: "
-      << params.types << "." << std::endl);
+      << params.distance.get() << " up to "
+      << params.order.get() << " order. Fragment files begin with "
+      << params.prefix.get() << " and are stored as: "
+      << params.types.get() << "." << std::endl);
 
   DepthFirstSearchAnalysis DFS;
@@ -54,10 +54,10 @@
     mol = iter->second;
     ASSERT(mol != NULL, "No molecule has been picked for fragmentation.");
-    LOG(2, "INFO: Fragmenting molecule with bond distance " << params.distance << " angstroem, order of " << params.order << ".");
+    LOG(2, "INFO: Fragmenting molecule with bond distance " << params.distance.get() << " angstroem, order of " << params.order.get() << ".");
     start = clock();
     if (mol->hasBondStructure()) {
-      Fragmentation Fragmenter(mol, params.DoSaturation ? DoSaturate : DontSaturate);
-      Fragmenter.setOutputTypes(params.types);
-      ExitFlag = Fragmenter.FragmentMolecule(params.order, params.prefix, DFS);
+      Fragmentation Fragmenter(mol, params.DoSaturation.get() ? DoSaturate : DontSaturate);
+      Fragmenter.setOutputTypes(params.types.get());
+      ExitFlag = Fragmenter.FragmentMolecule(params.order.get(), params.prefix.get(), DFS);
     }
     World::getInstance().setExitFlag(ExitFlag);
Index: src/Actions/FragmentationAction/FragmentationAction.def
===================================================================
--- src/Actions/FragmentationAction/FragmentationAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/FragmentationAction/FragmentationAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -7,15 +7,28 @@
 
 // all includes and forward declarations necessary for non-integral types below
+#include <boost/assign.hpp> 
 #include <string>
 #include <vector>
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/GenericValidators.hpp"
+#include "Parameters/Validators/STLVectorValidator.hpp"
+#include "Parameters/Validators/Specific/BoxLengthValidator.hpp"
+#include "Parameters/Validators/Specific/ParserTypeValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (std::string)(double)(int)(bool)(std::vector<std::string>)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (std::string)(double)(unsigned int)(bool)(std::vector<std::string>)
 #define paramtokens ("fragment-molecule")("distance")("order")("DoSaturate")("output-types")
 #define paramdescriptions ("prefix of each fragment file")("distance in space")("order of a discretization, dissection, ...")("do saturate dangling bonds with hydrogen")("type(s) of parsers that output fragment config files")
-#define paramdefaults (NODEFAULT)(NODEFAULT)(NODEFAULT)("1")("pcp tremolo xyz")
+#define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(true)) (PARAM_DEFAULT(std::vector<std::string>(1, std::string("pcp"))))
 #define paramreferences (prefix)(distance)(order)(DoSaturation)(types)
+#define paramvalids \
+(DummyValidator< std::string >()) \
+(BoxLengthValidator()) \
+(DummyValidator< unsigned int >()) \
+(DummyValidator< bool >()) \
+(STLVectorValidator< std::vector<std::string> >(1, 10, ParserTypeValidator()))
 
 #undef statetypes
Index: src/Actions/FragmentationAction/FragmentationAutomationAction.cpp
===================================================================
--- src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -267,5 +267,6 @@
 
   // Phase One: obtain ids
-  controller.requestIds(params.host, params.port, params.jobfiles.size());
+  std::vector< boost::filesystem::path > jobfiles = params.jobfiles.get();
+  controller.requestIds(params.host.get(), params.port.get(), jobfiles.size());
   {
     io_service.reset();
@@ -276,6 +277,6 @@
   {
     std::vector<FragmentJob::ptr> jobs;
-    for (std::vector< boost::filesystem::path >::const_iterator iter = params.jobfiles.begin();
-        iter != params.jobfiles.end(); ++iter) {
+    for (std::vector< boost::filesystem::path >::const_iterator iter = jobfiles .begin();
+        iter != jobfiles .end(); ++iter) {
       const std::string &filename = (*iter).string();
       if (boost::filesystem::exists(filename)) {
@@ -283,5 +284,5 @@
         LOG(1, "INFO: Creating MPQCCommandJob with filename'"
             +filename+"', and id "+toString(next_id)+".");
-        parsejob(jobs, params.executable.string(), filename, next_id);
+        parsejob(jobs, params.executable.get().string(), filename, next_id);
       } else {
         ELOG(1, "Fragment job "+filename+" does not exist.");
@@ -290,5 +291,5 @@
     }
     controller.addJobs(jobs);
-    controller.sendJobs(params.host, params.port);
+    controller.sendJobs(params.host.get(), params.port.get());
   }
   {
@@ -299,5 +300,5 @@
   // Phase Three: calculate result
   size_t NoCalculatedResults = 0;
-  while (NoCalculatedResults != params.jobfiles.size()) {
+  while (NoCalculatedResults != jobfiles.size()) {
     // wait a bit
     boost::asio::deadline_timer timer(io_service);
@@ -305,5 +306,5 @@
     timer.wait();
     // then request status
-    controller.checkResults(params.host, params.port);
+    controller.checkResults(params.host.get(), params.port.get());
     {
       io_service.reset();
@@ -316,5 +317,5 @@
   }
   // Phase Three: get result
-  controller.receiveResults(params.host, params.port);
+  controller.receiveResults(params.host.get(), params.port.get());
   {
     io_service.reset();
@@ -324,10 +325,10 @@
   // Final phase: print result
   {
-    LOG(1, "INFO: Parsing fragment files from " << params.path << ".");
+    LOG(1, "INFO: Parsing fragment files from " << params.path.get() << ".");
     std::vector<FragmentResult::ptr> results = controller.getReceivedResults();
     printReceivedMPQCResults(
         results,
-        params.path,
-        getNoAtomsFromAdjacencyFile(params.path));
+        params.path.get(),
+        getNoAtomsFromAdjacencyFile(params.path.get()));
   }
   size_t Exitflag = controller.getExitflag();
Index: src/Actions/FragmentationAction/FragmentationAutomationAction.def
===================================================================
--- src/Actions/FragmentationAction/FragmentationAutomationAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/FragmentationAction/FragmentationAutomationAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -11,12 +11,24 @@
 #include <vector>
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/STLVectorValidator.hpp"
+#include "Parameters/Validators/Specific/ParserFileValidator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::vector< boost::filesystem::path >)(std::string)(std::string)(std::string)(boost::filesystem::path)
 #define paramtokens ("fragment-jobs")("fragment-path")("server-address")("server-port")("fragment-executable")
 #define paramdescriptions ("vector of fragment files")("prefix of each fragment file")("hostname of server")("controller port of server")("executable to launch on clients")
-#define paramdefaults (NODEFAULT)(NODEFAULT)("127.0.0.1")("1026")(NODEFAULT)
+#define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT("127.0.0.1"))(PARAM_DEFAULT("1026"))(NOPARAM_DEFAULT)
 #define paramreferences (jobfiles)(path)(host)(port)(executable)
+#define paramvalids \
+(STLVectorValidator< std::vector< boost::filesystem::path > >(ParserFileValidator() && FilePresentValidator())) \
+(DummyValidator< std::string >()) \
+(DummyValidator< std::string >()) \
+(DummyValidator< std::string >()) \
+(DummyValidator< boost::filesystem::path >())
 
 #undef statetypes
Index: src/Actions/GraphAction/CreateAdjacencyAction.def
===================================================================
--- src/Actions/GraphAction/CreateAdjacencyAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/GraphAction/CreateAdjacencyAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -17,4 +19,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #undef statetypes
Index: src/Actions/GraphAction/DepthFirstSearchAction.cpp
===================================================================
--- src/Actions/GraphAction/DepthFirstSearchAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/GraphAction/DepthFirstSearchAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -55,5 +55,5 @@
       LocalBackEdgeStack = new std::deque<bond *>; // no need to have it Subgraphs->Leaf->BondCount size
       DFS.PickLocalBackEdges(ListOfAtoms, LocalBackEdgeStack);
-      CyclicStructureAnalysis CycleAnalysis(params.DoSaturation ? DoSaturate : DontSaturate);
+      CyclicStructureAnalysis CycleAnalysis(params.DoSaturation.get() ? DoSaturate : DontSaturate);
       CycleAnalysis(LocalBackEdgeStack);
       delete(LocalBackEdgeStack);
Index: src/Actions/GraphAction/DepthFirstSearchAction.def
===================================================================
--- src/Actions/GraphAction/DepthFirstSearchAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/GraphAction/DepthFirstSearchAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,12 +9,16 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (bool)
 #define paramtokens ("DoSaturate")
 #define paramdescriptions ("whether to treat hydrogen special or not")
-#define paramdefaults ("1")
+#define paramdefaults (PARAM_DEFAULT(true))
 #define paramreferences (DoSaturation)
+#define paramvalids \
+(DummyValidator< bool >())
 
 #undef statetypes
Index: src/Actions/GraphAction/SubgraphDissectionAction.def
===================================================================
--- src/Actions/GraphAction/SubgraphDissectionAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/GraphAction/SubgraphDissectionAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -17,4 +19,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (MolAtomList)
Index: src/Actions/MoleculeAction/BondFileAction.cpp
===================================================================
--- src/Actions/MoleculeAction/BondFileAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/BondFileAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -43,10 +43,10 @@
   if(World::getInstance().countSelectedMolecules() == 1) {
     mol = World::getInstance().beginMoleculeSelection()->second;
-    LOG(0, "STATUS: Parsing bonds from " << params.bondfile
-        << ", skipping " << params.skiplines << "lines"
-        << ", adding " << params.id_offset << " to each id.");
-    ifstream input(params.bondfile.string().c_str());
+    LOG(0, "STATUS: Parsing bonds from " << params.bondfile.get()
+        << ", skipping " << params.skiplines.get() << "lines"
+        << ", adding " << params.id_offset.get() << " to each id.");
+    ifstream input(params.bondfile.get().string().c_str());
     World::AtomComposite Set = mol->getAtomSet();
-    World::getInstance().getBondGraph()->CreateAdjacencyListFromDbondFile(Set, &input, params.skiplines, params.id_offset);
+    World::getInstance().getBondGraph()->CreateAdjacencyListFromDbondFile(Set, &input, params.skiplines.get(), params.id_offset.get());
     input.close();
     mol->getBondCount();
Index: src/Actions/MoleculeAction/BondFileAction.def
===================================================================
--- src/Actions/MoleculeAction/BondFileAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/BondFileAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,12 +9,19 @@
 class MoleculeListClass;
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (boost::filesystem::path)(int)(int)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)(unsigned int)(unsigned int)
 #define paramtokens ("bond-file")("skiplines")("offset")
 #define paramdescriptions ("name of the bond file")("number of header lines to skip")("offset to add to each id")
-#define paramdefaults (NODEFAULT)("1")("0")
+#define paramdefaults (NOPARAM_DEFAULT)(PARAM_DEFAULT(1))(PARAM_DEFAULT(0))
 #define paramreferences (bondfile)(skiplines)(id_offset)
+#define paramvalids \
+(FilePresentValidator()) \
+(DummyValidator< unsigned int >()) \
+(DummyValidator< unsigned int >())
 
 #undef statetypes
Index: src/Actions/MoleculeAction/ChangeNameAction.cpp
===================================================================
--- src/Actions/MoleculeAction/ChangeNameAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/ChangeNameAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -40,5 +40,5 @@
     mol = World::getInstance().beginMoleculeSelection()->second;
     string oldName = mol->getName();
-    mol->setName(params.name);
+    mol->setName(params.name.get());
     return Action::state_ptr(new MoleculeChangeNameState(mol,params));
   } else
@@ -50,6 +50,6 @@
 
   string newName = state->mol->getName();
-  state->mol->setName(state->params.name);
-  state->params.name = newName;
+  state->mol->setName(state->params.name.get());
+  state->params.name.set(newName);
 
   return Action::state_ptr(_state);
Index: src/Actions/MoleculeAction/ChangeNameAction.def
===================================================================
--- src/Actions/MoleculeAction/ChangeNameAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/ChangeNameAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class MoleculeListClass;
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::string)
 #define paramtokens ("change-molname")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (name)
+#define paramvalids \
+(DummyValidator< std::string >())
 
 #define statetypes (molecule*)
Index: src/Actions/MoleculeAction/CopyAction.cpp
===================================================================
--- src/Actions/MoleculeAction/CopyAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/CopyAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -20,4 +20,5 @@
 #include "CodePatterns/MemDebug.hpp"
 
+#include "Actions/UndoRedoHelpers.hpp"
 #include "CodePatterns/Log.hpp"
 #include "CodePatterns/Verbose.hpp"
@@ -31,4 +32,5 @@
 #include <fstream>
 #include <string>
+#include <vector>
 
 #include "Actions/MoleculeAction/CopyAction.hpp"
@@ -40,15 +42,19 @@
 #include "Action_impl_pre.hpp"
 /** =========== define the function ====================== */
-Action::state_ptr MoleculeCopyAction::performCall() {
-  molecule *copy = NULL;
+Action::state_ptr MoleculeCopyAction::performCall()
+{
+  std::vector<moleculeId_t> molecules;
+  for (World::MoleculeSelectionConstIterator iter = World::getInstance().beginMoleculeSelection();
+      iter != World::getInstance().endMoleculeSelection(); ++iter) {
+    molecule * const copy = (iter->second)->CopyMolecule();
+    Vector *Center = (iter->second)->DetermineCenterOfAll();
+    *Center *= -1.;
+    *Center += params.position.get();
+    copy->Translate(Center);
+    delete(Center);
+    molecules.push_back(copy->getId());
+  }
 
-  copy = params.mol->CopyMolecule();
-  Vector *Center = params.mol->DetermineCenterOfAll();
-  *Center *= -1.;
-  *Center += params.position;
-  copy->Translate(Center);
-  delete(Center);
-
-  return Action::state_ptr(new MoleculeCopyState(copy,params));
+  return Action::state_ptr(new MoleculeCopyState(molecules,params));
 }
 
@@ -56,6 +62,5 @@
   MoleculeCopyState *state = assert_cast<MoleculeCopyState*>(_state.get());
 
-  state->copy->removeAtomsinMolecule();
-  World::getInstance().destroyMolecule(state->copy);
+  RemoveMoleculesWithAtomsByIds(state->copies);
 
   return Action::state_ptr(_state);
@@ -63,14 +68,5 @@
 
 Action::state_ptr MoleculeCopyAction::performRedo(Action::state_ptr _state){
-  MoleculeCopyState *state = assert_cast<MoleculeCopyState*>(_state.get());
-
-  molecule *copy = state->params.mol->CopyMolecule();
-  Vector *Center = state->params.mol->DetermineCenterOfAll();
-  *Center *= -1.;
-  *Center += state->params.position;
-  copy->Translate(Center);
-  delete(Center);
-
-  return Action::state_ptr(new MoleculeCopyState(copy,state->params));
+  return performCall();
 }
 
Index: src/Actions/MoleculeAction/CopyAction.def
===================================================================
--- src/Actions/MoleculeAction/CopyAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/CopyAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -7,17 +7,21 @@
 
 // all includes and forward declarations necessary for non-integral types below
-class MoleculeListClass;
+#include <vector>
+
+#include "Parameters/Validators/Specific/BoxVectorValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (const molecule *)(Vector)
-#define paramtokens ("copy-molecule")("position")
-#define paramdescriptions ("molecule to copy")("position in R^3 space")
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (Vector)
+#define paramtokens ("position")
+#define paramdescriptions ("position in R^3 space")
 #undef paramdefaults
-#define paramreferences (mol)(position)
+#define paramreferences (position)
+#define paramvalids \
+(BoxVectorValidator())
 
-#define statetypes (molecule *)
-#define statereferences (copy)
+#define statetypes (const std::vector<moleculeId_t>)
+#define statereferences (copies)
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Actions/MoleculeAction/FillVoidWithMoleculeAction.cpp
===================================================================
--- src/Actions/MoleculeAction/FillVoidWithMoleculeAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/FillVoidWithMoleculeAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -46,22 +46,22 @@
 /** =========== define the function ====================== */
 Action::state_ptr MoleculeFillVoidWithMoleculeAction::performCall() {
-  if (!boost::filesystem::exists(params.fillername)) {
-    ELOG(1, "File with filler molecule " << params.fillername << " does not exist!");
+  if (!boost::filesystem::exists(params.fillername.get())) {
+    ELOG(1, "File with filler molecule " << params.fillername.get() << " does not exist!");
     return Action::failure;
   }
 
   LOG(1, "INFO: Filling Box with water molecules, "
-      << " minimum distance to molecules" << params.boundary
-      << ", random atom displacement " << params.RandAtomDisplacement
-      << ", random molecule displacement " << params.RandMoleculeDisplacement
-      << ", distances between fillers (" << params.distances[0] << "," << params.distances[1] << "," << params.distances[2]
-      << "), MinDistance " << params.MinDistance
-      << ", DoRotate " << params.DoRotate << ".");
+      << " minimum distance to molecules" << params.boundary.get()
+      << ", random atom displacement " << params.RandAtomDisplacement.get()
+      << ", random molecule displacement " << params.RandMoleculeDisplacement.get()
+      << ", distances between fillers (" << params.distances.get()[0] << "," << params.distances.get()[1] << "," << params.distances.get()[2]
+      << "), MinDistance " << params.MinDistance.get()
+      << ", DoRotate " << params.DoRotate.get() << ".");
   // construct water molecule
   std::vector<molecule *> presentmolecules = World::getInstance().getAllMolecules();
 //  LOG(0, presentmolecules.size() << " molecules initially are present.");
-  std::string FilenameSuffix = params.fillername.string().substr(params.fillername.string().find_last_of('.')+1, params.fillername.string().length());
+  std::string FilenameSuffix = params.fillername.get().string().substr(params.fillername.get().string().find_last_of('.')+1, params.fillername.get().string().length());
   ifstream input;
-  input.open(params.fillername.string().c_str());
+  input.open(params.fillername.get().string().c_str());
   ParserTypes type = FormatParserStorage::getInstance().getTypeFromSuffix(FilenameSuffix);
   FormatParserInterface &parser = FormatParserStorage::getInstance().get(type);
@@ -72,5 +72,5 @@
   ASSERT(filler != NULL,
       "MoleculeFillVoidWithMoleculeAction::performCall() - no last molecule found, nothing parsed?.");
-  filler->SetNameFromFilename(params.fillername.string().c_str());
+  filler->SetNameFromFilename(params.fillername.get().string().c_str());
   World::AtomComposite Set = filler->getAtomSet();
   World::getInstance().getBondGraph()->CreateAdjacency(Set);
@@ -79,14 +79,14 @@
   double distance[NDIM];
   for (int i=0;i<NDIM;i++)
-    distance[i] = params.distances[i];
+    distance[i] = params.distances.get()[i];
   FillVoidWithMolecule(
       filler,
       *(World::getInstance().getConfig()),
       distance,
-      params.boundary,
-      params.RandAtomDisplacement,
-      params.RandMoleculeDisplacement,
-      params.MinDistance,
-      params.DoRotate);
+      params.boundary.get(),
+      params.RandAtomDisplacement.get(),
+      params.RandMoleculeDisplacement.get(),
+      params.MinDistance.get(),
+      params.DoRotate.get());
 
   // generate list of newly created molecules
Index: src/Actions/MoleculeAction/FillVoidWithMoleculeAction.def
===================================================================
--- src/Actions/MoleculeAction/FillVoidWithMoleculeAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/FillVoidWithMoleculeAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,14 +8,29 @@
 // all includes and forward declarations necessary for non-integral types below
 #include "LinearAlgebra/Vector.hpp"
-class MoleculeListClass;
+
+#include "LinearAlgebra/defs.hpp"
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/BoxLengthValidator.hpp"
+#include "Parameters/Validators/Specific/BoxVectorValidator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.hpp"
+#include "Parameters/Validators/Specific/ParserFileValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)(Vector)(double)(double)(double)(double)(bool)
 #define paramtokens ("fill-void")("distances")("distance-to-molecule")("random-atom-displacement")("random-molecule-displacement")("distance-to-boundary")("DoRotate")
 #define paramdescriptions ("name of xyz file of filler molecule")("list of three of distances in space, one for each axis direction")("minimum distance to present molecules")("magnitude of random atom displacement")("magnitude of random molecule displacement")("minimum distance to boundary")("whether to rotate or not")
-#define paramdefaults (NODEFAULT)(NODEFAULT)("0.")("0.")("0.")("0.")("0")
+#define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(false))
 #define paramreferences (fillername)(distances)(boundary)(RandAtomDisplacement)(RandMoleculeDisplacement)(MinDistance)(DoRotate)
+#define paramvalids \
+(FilePresentValidator() && ParserFileValidator()) \
+(BoxVectorValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(DummyValidator< bool >())
 
 #define statetypes (std::vector<molecule *>)
Index: src/Actions/MoleculeAction/FillWithMoleculeAction.cpp
===================================================================
--- src/Actions/MoleculeAction/FillWithMoleculeAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/FillWithMoleculeAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -46,18 +46,18 @@
 
   LOG(1, "INFO: Filling Box with water molecules, "
-      << " minimum distance to molecules" << params.boundary
-      << ", random atom displacement " << params.RandAtomDisplacement
-      << ", random molecule displacement " << params.RandMoleculeDisplacement
-      << ", distances between fillers (" << params.distances[0] << "," << params.distances[1] << "," << params.distances[2]
-      << "), MinDistance " << params.MaxDistance
-      << ", DoRotate " << params.DoRotate << ".");
+      << " minimum distance to molecules" << params.boundary.get()
+      << ", random atom displacement " << params.RandAtomDisplacement.get()
+      << ", random molecule displacement " << params.RandMoleculeDisplacement.get()
+      << ", distances between fillers (" << params.distances.get()[0] << "," << params.distances.get()[1] << "," << params.distances.get()[2]
+      << "), MinDistance " << params.MaxDistance.get()
+      << ", DoRotate " << params.DoRotate.get() << ".");
   // construct water molecule
   std::vector<molecule *> presentmolecules = World::getInstance().getAllMolecules();
 //  LOG(0, presentmolecules.size() << " molecules initially are present.");
-  std::string FilenameSuffix = params.fillername.string().substr(params.fillername.string().find_last_of('.')+1, params.fillername.string().length());
+  std::string FilenameSuffix = params.fillername.get().string().substr(params.fillername.get().string().find_last_of('.')+1, params.fillername.get().string().length());
   ifstream input;
-  LOG(0, "STATUS: Loading filler molecule " << params.fillername.string().c_str()
+  LOG(0, "STATUS: Loading filler molecule " << params.fillername.get().string().c_str()
       << " of suffix " << FilenameSuffix << ".");
-  input.open(params.fillername.string().c_str());
+  input.open(params.fillername.get().string().c_str());
   FormatParserStorage::getInstance().load(input, FilenameSuffix);
   input.close();
@@ -67,5 +67,5 @@
   ASSERT(filler != NULL,
       "MoleculeFillWithMoleculeAction::performCall() - no last molecule found, nothing parsed?.");
-  filler->SetNameFromFilename(params.fillername.string().c_str());
+  filler->SetNameFromFilename(params.fillername.get().string().c_str());
   World::AtomComposite Set = filler->getAtomSet();
   LOG(1, "INFO: The filler molecules has " << Set.size() << " atoms.");
@@ -78,14 +78,14 @@
   double distance[NDIM];
   for (int i=0;i<NDIM;i++)
-    distance[i] = params.distances[i];
+    distance[i] = params.distances.get()[i];
   FillBoxWithMolecule(
       World::getInstance().getMolecules(),
       filler, *(World::getInstance().getConfig()),
-      params.MaxDistance,
+      params.MaxDistance.get(),
       distance,
-      params.boundary,
-      params.RandAtomDisplacement,
-      params.RandMoleculeDisplacement,
-      params.DoRotate);
+      params.boundary.get(),
+      params.RandAtomDisplacement.get(),
+      params.RandMoleculeDisplacement.get(),
+      params.DoRotate.get());
   for (molecule::iterator iter = filler->begin(); !filler->empty(); iter = filler->begin()) {
     atom *Walker = *iter;
Index: src/Actions/MoleculeAction/FillWithMoleculeAction.def
===================================================================
--- src/Actions/MoleculeAction/FillWithMoleculeAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/FillWithMoleculeAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -7,16 +7,33 @@
 
 // all includes and forward declarations necessary for non-integral types below
+#include <boost/assign.hpp>
 #include <boost/filesystem/path.hpp>
+#include <vector>
 #include "LinearAlgebra/Vector.hpp"
-class MoleculeListClass;
+
+#include "Parameters/Validators/DiscreteValidator.hpp"
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/BoxLengthValidator.hpp"
+#include "Parameters/Validators/Specific/BoxVectorValidator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.hpp"
+#include "Parameters/Validators/Specific/ParserFileValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)(Vector)(double)(double)(double)(double)(bool)
 #define paramtokens ("fill-molecule")("distances")("distance-to-molecule")("random-atom-displacement")("random-molecule-displacement")("MaxDistance")("DoRotate")
 #define paramdescriptions ("name of xyz file of filler molecule")("list of three of distances in space, one for each axis direction")("minimum distance to present molecules")("magnitude of random atom displacement")("magnitude of random molecule displacement")("maximum spatial distance")("whether to rotate or not")
-#define paramdefaults (NODEFAULT)(NODEFAULT)("0.")("0.")("0.")("0.")("0")
+#define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(false))
 #define paramreferences (fillername)(distances)(boundary)(RandAtomDisplacement)(RandMoleculeDisplacement)(MaxDistance)(DoRotate)
+#define paramvalids \
+(FilePresentValidator() && ParserFileValidator()) \
+(BoxVectorValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator()) \
+(BoxLengthValidator() || DiscreteValidator<double>(std::vector<double>(1,-1.))) \
+(DummyValidator< bool >())
 
 #define statetypes (std::vector<molecule *>)
Index: src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.cpp
===================================================================
--- src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -43,9 +43,9 @@
 /** =========== define the function ====================== */
 Action::state_ptr MoleculeLinearInterpolationofTrajectoriesAction::performCall() {
-  LOG(0, "STATUS: Linear interpolation between configuration " << params.start << " and " << params.end << "." << endl);
-  ASSERT(params.end > params.start, "MoleculeLinearInterpolationofTrajectoriesAction() - start step greater than end step.");
+  LOG(0, "STATUS: Linear interpolation between configuration " << params.start.get() << " and " << params.end.get() << "." << endl);
+  ASSERT(params.end.get() > params.start.get(), "MoleculeLinearInterpolationofTrajectoriesAction() - start step greater than end step.");
   AtomSetMixin<std::vector<atom*> > set(World::getInstance().getSelectedAtoms());
-  LinearInterpolationBetweenSteps<std::vector<atom*> > LinearInterpolate(set,(unsigned int)(params.interpolation_steps));
-  LinearInterpolate(params.start, params.end, params.IdMapping);
+  LinearInterpolationBetweenSteps<std::vector<atom*> > LinearInterpolate(set,(unsigned int)(params.interpolation_steps.get()));
+  LinearInterpolate(params.start.get(), params.end.get(), params.IdMapping.get());
   LOG(0, "STATUS: done." << endl);
 
Index: src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.def
===================================================================
--- src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,12 +9,20 @@
 class MoleculeListClass;
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (int)(int)(int)(bool)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (unsigned int)(unsigned int)(unsigned int)(bool)
 #define paramtokens ("start-step")("interpolation-steps")("end-step")("id-mapping")
 #define paramdescriptions ("first or start step")("number of steps to interpolate in between start and end step")("last or end step")("whether the identity shall be used in mapping atoms onto atoms or not")
 #undef paramdefaults
 #define paramreferences (start)(interpolation_steps)(end)(IdMapping)
+#define paramvalids \
+(DummyValidator< unsigned int >()) \
+(NotZeroValidator< unsigned int >()) \
+(DummyValidator< unsigned int >()) \
+(DummyValidator< bool >())
 
 #undef statetypes
Index: src/Actions/MoleculeAction/LoadAction.cpp
===================================================================
--- src/Actions/MoleculeAction/LoadAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/LoadAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -44,6 +44,6 @@
 Action::state_ptr MoleculeLoadAction::performCall() {
   // parsing file if present
-  if (!boost::filesystem::exists(params.filename)) {
-    LOG(1, "Specified input file " << params.filename << " not found.");
+  if (!boost::filesystem::exists(params.filename.get())) {
+    LOG(1, "Specified input file " << params.filename.get() << " not found.");
     return Action::failure;
   } else {
@@ -53,12 +53,12 @@
     std::string FilenameSuffix;
     std::string FilenamePrefix;
-    if (params.filename.has_filename()) {
+    if (params.filename.get().has_filename()) {
       // get suffix
 #if BOOST_VERSION >= 104600
-      FilenameSuffix = params.filename.extension().string().substr(1); // remove the prefixed "."
-      FilenamePrefix = params.filename.stem().string();
+      FilenameSuffix = params.filename.get().extension().string().substr(1); // remove the prefixed "."
+      FilenamePrefix = params.filename.get().stem().string();
 #else
-      FilenameSuffix = params.filename.extension().substr(1); // remove the prefixed "."
-      FilenamePrefix = params.filename.stem();
+      FilenameSuffix = params.filename.get().extension().substr(1); // remove the prefixed "."
+      FilenamePrefix = params.filename.get().stem();
 #endif
     } else {
@@ -79,5 +79,5 @@
     // parse the file
     boost::filesystem::ifstream input;
-    input.open(params.filename);
+    input.open(params.filename.get());
     FormatParserStorage::getInstance().load(input, FilenameSuffix);
     input.close();
@@ -125,5 +125,5 @@
   // parse the file
   boost::filesystem::ifstream input;
-  input.open(state->params.filename);
+  input.open(state->params.filename.get());
   FormatParserStorage::getInstance().load(input, state->FilenameSuffix);
   input.close();
Index: src/Actions/MoleculeAction/LoadAction.def
===================================================================
--- src/Actions/MoleculeAction/LoadAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/LoadAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -11,7 +11,11 @@
 #include <boost/shared_ptr.hpp>
 
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.hpp"
+#include "Parameters/Validators/Specific/ParserFileValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)
 #define paramtokens ("load")
@@ -19,4 +23,6 @@
 #undef paramdefaults
 #define paramreferences (filename)
+#define paramvalids \
+(FilePresentValidator() && ParserFileValidator())
 
 #define statetypes (moleculeId_t)(std::string)(std::string)(boost::shared_ptr<FormatParser_Parameters>)
Index: src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.cpp
===================================================================
--- src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -48,19 +48,19 @@
   BOOST_FOREACH(molecule *mol, selectedMolecules) {
     // check whether Axis is valid
-    if (params.Axis.IsZero())
+    if (params.Axis.get().IsZero())
       return Action::failure;
 
     // convert from degrees to radian
-    params.angle *= M_PI/180.;
+    params.angle.set(params.angle.get() * M_PI/180.);
 
     // Creation Line that is the rotation axis
     Vector *CenterOfGravity = mol->DetermineCenterOfGravity();
     LOG(0,  "Center of gravity is " << *CenterOfGravity << ".");
-    Line RotationAxis(*CenterOfGravity, params.Axis);
+    Line RotationAxis(*CenterOfGravity, params.Axis.get());
     delete(CenterOfGravity);
-    LOG(0, "Rotate " << mol->getName() << " around self by " << params.angle << " radian around axis " << RotationAxis << ".");
+    LOG(0, "Rotate " << mol->getName() << " around self by " << params.angle.get() << " radian around axis " << RotationAxis << ".");
 
     for (molecule::iterator iter = mol->begin(); iter != mol->end(); ++iter) {
-      (*iter)->setPosition(RotationAxis.rotateVector((*iter)->getPosition(), params.angle));
+      (*iter)->setPosition(RotationAxis.rotateVector((*iter)->getPosition(), params.angle.get()));
     }
     LOG(0, "done.");
@@ -76,10 +76,10 @@
     Vector *CenterOfGravity = mol->DetermineCenterOfGravity();
     LOG(0,  "Center of gravity is " << *CenterOfGravity << ".");
-    Line RotationAxis(*CenterOfGravity, state->params.Axis);
+    Line RotationAxis(*CenterOfGravity, state->params.Axis.get());
     delete(CenterOfGravity);
-    LOG(0, "Rotate " << mol->getName() << " around self by " << -state->params.angle << " radian around axis " << RotationAxis << ".");
+    LOG(0, "Rotate " << mol->getName() << " around self by " << -state->params.angle.get() << " radian around axis " << RotationAxis << ".");
 
     for (molecule::iterator iter = mol->begin(); iter != mol->end(); ++iter) {
-      (*iter)->setPosition(RotationAxis.rotateVector((*iter)->getPosition(), -state->params.angle));
+      (*iter)->setPosition(RotationAxis.rotateVector((*iter)->getPosition(), -state->params.angle.get()));
     }
   }
@@ -94,10 +94,10 @@
     Vector *CenterOfGravity = mol->DetermineCenterOfGravity();
     LOG(0,  "Center of gravity is " << *CenterOfGravity << ".");
-    Line RotationAxis(*CenterOfGravity, state->params.Axis);
+    Line RotationAxis(*CenterOfGravity, state->params.Axis.get());
     delete(CenterOfGravity);
-    LOG(0, "Rotate " << mol->getName() << " around self by " << state->params.angle << " radian around axis " << RotationAxis << ".");
+    LOG(0, "Rotate " << mol->getName() << " around self by " << state->params.angle.get() << " radian around axis " << RotationAxis << ".");
 
     for (molecule::iterator iter = mol->begin(); iter != mol->end(); ++iter) {
-      (*iter)->setPosition(RotationAxis.rotateVector((*iter)->getPosition(), state->params.angle));
+      (*iter)->setPosition(RotationAxis.rotateVector((*iter)->getPosition(), state->params.angle.get()));
     }
   }
Index: src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.def
===================================================================
--- src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -10,7 +10,10 @@
 class Vector;
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Specific/RotationAngleValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (double)(Vector)
 #define paramtokens ("rotate-around-self")("axis")
@@ -18,4 +21,7 @@
 #undef paramdefaults
 #define paramreferences (angle)(Axis)
+#define paramvalids \
+(RotationAngleValidator()) \
+(DummyValidator< Vector >())
 
 #define statetypes (std::vector<molecule*>)
Index: src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.cpp
===================================================================
--- src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -49,5 +49,5 @@
     RealSpaceMatrix InertiaTensor = mol->getInertiaTensor();
 
-    mol->RotateToPrincipalAxisSystem(params.Axis);
+    mol->RotateToPrincipalAxisSystem(const_cast<Vector &>(params.Axis.get()));
 
     // summing anew for debugging (resulting matrix has to be diagonal!)
Index: src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.def
===================================================================
--- src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -12,7 +12,9 @@
 class MoleculeListClass;
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (Vector)
 #define paramtokens ("rotate-to-principal-axis-system")
@@ -20,4 +22,6 @@
 #undef paramdefaults
 #define paramreferences (Axis)
+#define paramvalids \
+(DummyValidator< Vector >())
 
 #undef statetypes
Index: src/Actions/MoleculeAction/SaveAdjacencyAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SaveAdjacencyAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/SaveAdjacencyAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -42,10 +42,10 @@
   for (World::MoleculeSelectionIterator iter = World::getInstance().beginMoleculeSelection(); iter != World::getInstance().endMoleculeSelection(); ++iter) {
     mol = iter->second;
-    LOG(0, "Storing adjacency to path " << params.adjacencyfile << ".");
+    LOG(0, "Storing adjacency to path " << params.adjacencyfile.get() << ".");
     // TODO: sollte stream nicht filename benutzen, besser fuer unit test
 #if BOOST_VERSION >= 104600
-    mol->StoreAdjacencyToFile(params.adjacencyfile.leaf().string(), params.adjacencyfile.branch_path().string());
+    mol->StoreAdjacencyToFile(params.adjacencyfile.get().leaf().string(), params.adjacencyfile.get().branch_path().string());
 #else
-    mol->StoreAdjacencyToFile(params.adjacencyfile.leaf(), params.adjacencyfile.branch_path().string());
+    mol->StoreAdjacencyToFile(params.adjacencyfile.get().leaf(), params.adjacencyfile.get().branch_path().string());
 #endif
   }
Index: src/Actions/MoleculeAction/SaveAdjacencyAction.def
===================================================================
--- src/Actions/MoleculeAction/SaveAdjacencyAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/SaveAdjacencyAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,10 @@
 class MoleculeListClass;
 
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)
 #define paramtokens ("save-adjacency")
@@ -17,4 +20,6 @@
 #undef paramdefaults
 #define paramreferences (adjacencyfile)
+#define paramvalids \
+(!FilePresentValidator())
 
 #undef statetypes
Index: src/Actions/MoleculeAction/SaveBondsAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SaveBondsAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/SaveBondsAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -42,10 +42,10 @@
   for (World::MoleculeSelectionIterator iter = World::getInstance().beginMoleculeSelection(); iter != World::getInstance().endMoleculeSelection(); ++iter) {
     mol = iter->second;
-    LOG(0, "Storing bonds to path " << params.bondsfile << ".");
+    LOG(0, "Storing bonds to path " << params.bondsfile.get() << ".");
     // TODO: sollte stream, nicht filenamen direkt nutzen, besser fuer unit tests
 #if BOOST_VERSION >= 104600
-    mol->StoreBondsToFile(params.bondsfile.leaf().string(), params.bondsfile.branch_path().string());
+    mol->StoreBondsToFile(params.bondsfile.get().leaf().string(), params.bondsfile.get().branch_path().string());
 #else
-    mol->StoreBondsToFile(params.bondsfile.leaf(), params.bondsfile.branch_path().string());
+    mol->StoreBondsToFile(params.bondsfile.get().leaf(), params.bondsfile.get().branch_path().string());
 #endif
   }
Index: src/Actions/MoleculeAction/SaveBondsAction.def
===================================================================
--- src/Actions/MoleculeAction/SaveBondsAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/SaveBondsAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,10 @@
 class MoleculeListClass;
 
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)
 #define paramtokens ("save-bonds")
@@ -17,4 +20,6 @@
 #undef paramdefaults
 #define paramreferences (bondsfile)
+#define paramvalids \
+(!FilePresentValidator())
 
 #undef statetypes
Index: src/Actions/MoleculeAction/SaveSelectedMoleculesAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SaveSelectedMoleculesAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/SaveSelectedMoleculesAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -38,17 +38,17 @@
 /** =========== define the function ====================== */
 Action::state_ptr MoleculeSaveSelectedMoleculesAction::performCall() {
-  LOG(1, "Storing selected molecules to file " << params.filename << ".");
+  LOG(1, "Storing selected molecules to file " << params.filename.get() << ".");
 
   // extract suffix
   std::string FilenameSuffix;
   std::string FilenamePrefix;
-  if (params.filename.has_filename()) {
+  if (params.filename.get().has_filename()) {
     // get suffix
 #if BOOST_VERSION >= 104600
-      FilenameSuffix = params.filename.extension().string().substr(1); // remove the prefixed "."
-      FilenamePrefix = params.filename.stem().string();
+      FilenameSuffix = params.filename.get().extension().string().substr(1); // remove the prefixed "."
+      FilenamePrefix = params.filename.get().stem().string();
 #else
-      FilenameSuffix = params.filename.extension().substr(1); // remove the prefixed "."
-      FilenamePrefix = params.filename.stem();
+      FilenameSuffix = params.filename.get().extension().substr(1); // remove the prefixed "."
+      FilenamePrefix = params.filename.get().stem();
 #endif
   } else {
@@ -60,9 +60,9 @@
   // parse the file
   boost::filesystem::ofstream output;
-  output.open(params.filename);
+  output.open(params.filename.get());
   if (!output.fail()) {
     FormatParserStorage::getInstance().saveSelectedMolecules(output, FilenameSuffix);
   } else {
-    ELOG(1, "Could not open file " << params.filename << ".");
+    ELOG(1, "Could not open file " << params.filename.get() << ".");
   }
   output.close();
Index: src/Actions/MoleculeAction/SaveSelectedMoleculesAction.def
===================================================================
--- src/Actions/MoleculeAction/SaveSelectedMoleculesAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/SaveSelectedMoleculesAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,11 @@
 
 
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.hpp"
+#include "Parameters/Validators/Specific/ParserFileValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)
 #define paramtokens ("save-selected-molecules")
@@ -17,4 +21,6 @@
 #undef paramdefaults
 #define paramreferences (filename)
+#define paramvalids \
+(!FilePresentValidator() && ParserFileValidator())
 
 #undef statetypes
Index: src/Actions/MoleculeAction/SaveTemperatureAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SaveTemperatureAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/SaveTemperatureAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -42,7 +42,7 @@
 /** =========== define the function ====================== */
 Action::state_ptr MoleculeSaveTemperatureAction::performCall() {
-  LOG(1, "Storing temperatures in " << params.temperaturefile << ".");
+  LOG(1, "Storing temperatures in " << params.temperaturefile.get() << ".");
   ofstream output;
-  output.open(params.temperaturefile.string().c_str(), ios::trunc);
+  output.open(params.temperaturefile.get().string().c_str(), ios::trunc);
   AtomSetMixin<std::vector<atom *> > set(World::getInstance().getSelectedAtoms());
   const size_t MDSteps = set.getMaxTrajectorySize();
Index: src/Actions/MoleculeAction/SaveTemperatureAction.def
===================================================================
--- src/Actions/MoleculeAction/SaveTemperatureAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/SaveTemperatureAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,10 @@
 class MoleculeListClass;
 
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)
 #define paramtokens ("save-temperature")
@@ -17,4 +20,6 @@
 #undef paramdefaults
 #define paramreferences (temperaturefile)
+#define paramvalids \
+(!FilePresentValidator())
 
 #undef statetypes
Index: src/Actions/MoleculeAction/SuspendInWaterAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SuspendInWaterAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/SuspendInWaterAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -44,8 +44,8 @@
     mol = iter->second;
     LOG(0, "Evaluating necessary cell volume for a cluster suspended in water.");
-    if (params.density < 1.0) {
+    if (params.density.get() < 1.0) {
       ELOG(1, "Density must be greater than 1.0g/cm^3!");
     } else {
-      PrepareClustersinWater(World::getInstance().getConfig(), mol, volume, params.density);  // if volume == 0, will calculate from ConvexEnvelope
+      PrepareClustersinWater(World::getInstance().getConfig(), mol, volume, params.density.get());  // if volume == 0, will calculate from ConvexEnvelope
     }
   }
Index: src/Actions/MoleculeAction/SuspendInWaterAction.def
===================================================================
--- src/Actions/MoleculeAction/SuspendInWaterAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/SuspendInWaterAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class MoleculeListClass;
 
+#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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (double)
 #define paramtokens ("suspend-in-water")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (density)
+#define paramvalids \
+(PositiveValidator< double >())
 
 #undef statetypes
Index: src/Actions/MoleculeAction/VerletIntegrationAction.cpp
===================================================================
--- src/Actions/MoleculeAction/VerletIntegrationAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/VerletIntegrationAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -45,12 +45,12 @@
   // TODO: sollte besser stream nutzen, nicht filename direkt (es sei denn, ist prefix), besser fuer unit test
   char outputname[MAXSTRINGSIZE];
-  strcpy(outputname, params.forcesfile.string().c_str());
+  strcpy(outputname, params.forcesfile.get().string().c_str());
   AtomSetMixin<std::vector<atom *> > set(World::getInstance().getSelectedAtoms());
-  for (int step = 0; step < params.MDSteps; ++step) {
-    VerletForceIntegration<std::vector<atom *> > Verlet(set, params.Deltat, step, false);
-    if (!Verlet(outputname, 1, 0, params.FixedCenterOfMass))
-      LOG(2, "File " << params.forcesfile << " not found.");
+  for (unsigned int step = 0; step < params.MDSteps.get(); ++step) {
+    VerletForceIntegration<std::vector<atom *> > Verlet(set, params.Deltat.get(), step, false);
+    if (!Verlet(outputname, 1, 0, params.FixedCenterOfMass.get()))
+      LOG(2, "File " << params.forcesfile.get() << " not found.");
     else
-      LOG(2, "File " << params.forcesfile << " found and parsed.");
+      LOG(2, "File " << params.forcesfile.get() << " found and parsed.");
   }
 
Index: src/Actions/MoleculeAction/VerletIntegrationAction.def
===================================================================
--- src/Actions/MoleculeAction/VerletIntegrationAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/MoleculeAction/VerletIntegrationAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,12 +9,21 @@
 class MoleculeListClass;
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/GenericValidators.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (boost::filesystem::path)(double)(int)(bool)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)(double)(unsigned int)(bool)
 #define paramtokens ("verlet-integration")("deltat")("MDSteps")("keep-fixed-CenterOfMass")
 #define paramdescriptions ("perform verlet integration of a given force file")("time step width")("number of MDSteps to integrate")("whether forces and velocities shall be corrected such that center of mass remains at rest")
 #undef paramdefaults
 #define paramreferences (forcesfile)(Deltat)(MDSteps)(FixedCenterOfMass)
+#define paramvalids \
+(FilePresentValidator()) \
+(PositiveValidator< double >()) \
+(NotZeroValidator< unsigned int >()) \
+(DummyValidator< bool >())
 
 #undef statetypes
Index: src/Actions/ParserAction/ParseTremoloPotentialsAction.cpp
===================================================================
--- src/Actions/ParserAction/ParseTremoloPotentialsAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/ParserAction/ParseTremoloPotentialsAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -42,6 +42,6 @@
   FormatParser<tremolo> &parser = FormatParserStorage::getInstance().getParser<tremolo>();
   // parsing file if present
-  if (!boost::filesystem::exists(params.filename)) {
-    LOG(1, "Specified potentials file " << params.filename << " not found.");
+  if (!boost::filesystem::exists(params.filename.get())) {
+    LOG(1, "Specified potentials file " << params.filename.get() << " not found.");
     // DONT FAIL: it's just empty we re-create default id-mapping
     parser.createKnownTypesByIdentity();
@@ -51,5 +51,5 @@
 
     // parse the file
-    test.open(params.filename);
+    test.open(params.filename.get());
     parser.parseKnownTypes(test);
     test.close();
Index: src/Actions/ParserAction/ParseTremoloPotentialsAction.def
===================================================================
--- src/Actions/ParserAction/ParseTremoloPotentialsAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/ParserAction/ParseTremoloPotentialsAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,11 @@
 #include <boost/filesystem.hpp>
 
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.hpp"
+#include "Parameters/Validators/Specific/FileSuffixValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)
 #define paramtokens ("parse-tremolo-potentials")
@@ -17,4 +21,6 @@
 #undef paramdefaults
 #define paramreferences (filename)
+#define paramvalids \
+(FilePresentValidator() && FileSuffixValidator("potentials"))
 
 #undef statetypes
Index: src/Actions/ParserAction/SaveSelectedAtomsAsExtTypesAction.cpp
===================================================================
--- src/Actions/ParserAction/SaveSelectedAtomsAsExtTypesAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/ParserAction/SaveSelectedAtomsAsExtTypesAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -40,6 +40,6 @@
 /** =========== define the function ====================== */
 Action::state_ptr ParserSaveSelectedAtomsAsExtTypesAction::performCall() {
-  if (boost::filesystem::exists(params.filename)) {
-    ELOG(1, "Specified exttypes file " << params.filename << " already exists.");
+  if (boost::filesystem::exists(params.filename.get())) {
+    ELOG(1, "Specified exttypes file " << params.filename.get() << " already exists.");
 
     return Action::failure;
@@ -47,8 +47,8 @@
     const FormatParser<tremolo> &parser = FormatParserStorage::getInstance().getParser<tremolo>();
 
-    LOG(1, "Creating exttypes file " << params.filename << " ... ");
+    LOG(1, "Creating exttypes file " << params.filename.get() << " ... ");
     boost::filesystem::ofstream test;
-    test.open(params.filename);
-    const bool status = parser.saveAtomsInExttypes(test, World::getInstance().getSelectedAtoms(), params.id);
+    test.open(params.filename.get());
+    const bool status = parser.saveAtomsInExttypes(test, World::getInstance().getSelectedAtoms(), params.id.get());
     test.close();
 
Index: src/Actions/ParserAction/SaveSelectedAtomsAsExtTypesAction.def
===================================================================
--- src/Actions/ParserAction/SaveSelectedAtomsAsExtTypesAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/ParserAction/SaveSelectedAtomsAsExtTypesAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,12 +9,17 @@
 #include <boost/filesystem.hpp>
 
+#include "Parameters/Validators/Specific/FileSuffixValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (int)(boost::filesystem::path)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (unsigned int)(boost::filesystem::path)
 #define paramtokens ("save-selected-atoms-as-exttypes")("filename")
-#define paramdescriptions ("Type id for this selection of atoms")("path to tremolo's exttypes file")
+#define paramdescriptions ("Type id for this selection of atoms")("path to tremolo's .exttypes file to which we append")
 #undef paramdefaults
 #define paramreferences (id)(filename)
+#define paramvalids \
+(DummyValidator< unsigned int >()) \
+(FileSuffixValidator("exttypes"))
 
 #undef statetypes
Index: src/Actions/ParserAction/SetOutputFormatsAction.cpp
===================================================================
--- src/Actions/ParserAction/SetOutputFormatsAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/ParserAction/SetOutputFormatsAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -38,6 +38,6 @@
 /** =========== define the function ====================== */
 Action::state_ptr ParserSetOutputFormatsAction::performCall() {
-  LOG(1, "Format list is: " << params.FormatList);
-  for (vector<std::string>::iterator iter = params.FormatList.begin(); iter != params.FormatList.end(); ++iter) {
+  LOG(1, "Format list is: " << params.FormatList.get());
+  for (vector<std::string>::const_iterator iter = params.FormatList.get().begin(); iter != params.FormatList.get().end(); ++iter) {
     if (!FormatParserStorage::getInstance().add(*iter)) {
       ELOG(1, "Unknown parser format in ParserSetOutputFormatsAction: '" << *iter << "'");
Index: src/Actions/ParserAction/SetOutputFormatsAction.def
===================================================================
--- src/Actions/ParserAction/SetOutputFormatsAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/ParserAction/SetOutputFormatsAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,12 @@
 #include <vector>
 
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/STLVectorValidator.hpp"
+#include "Parameters/Validators/UniqueValidator.hpp"
+#include "Parameters/Validators/Specific/ParserTypeValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::vector<std::string>)
 #define paramtokens ("set-output")
@@ -17,4 +22,6 @@
 #undef paramdefaults
 #define paramreferences (FormatList)
+#define paramvalids \
+(STLVectorValidator< std::vector<std::string> >(1, 10, ParserTypeValidator()) && UniqueValidator< std::vector<std::string> >())
 
 #undef statetypes
Index: src/Actions/ParserAction/SetParserParametersAction.cpp
===================================================================
--- src/Actions/ParserAction/SetParserParametersAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/ParserAction/SetParserParametersAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -27,4 +27,5 @@
 #include "Actions/ValueStorage.hpp"
 
+#include <algorithm>
 #include <iostream>
 #include <string>
@@ -40,5 +41,5 @@
 Action::state_ptr ParserSetParserParametersAction::performCall() {
   // get parser
-  ParserTypes type = FormatParserStorage::getInstance().getTypeFromName(params.parsername);
+  ParserTypes type = FormatParserStorage::getInstance().getTypeFromName(params.parsername.get());
   FormatParser_Parameters *parameters = FormatParserStorage::getInstance().get(type).parameters;
   ASSERT(parameters != NULL,
@@ -50,5 +51,7 @@
 
   // obtain information
-  std::stringstream newparamstream(params.newparams);
+  std::stringstream newparamstream;
+  const std::vector< std::string > keyvalues = params.newparams.get();
+  std::for_each(keyvalues.begin(), keyvalues.end(), newparamstream << boost::lambda::_1 << ";");
   newparamstream >> *parameters;
 
@@ -59,5 +62,5 @@
   ParserSetParserParametersState *state = assert_cast<ParserSetParserParametersState*>(_state.get());
 
-  ParserTypes type = FormatParserStorage::getInstance().getTypeFromName(state->params.parsername);
+  ParserTypes type = FormatParserStorage::getInstance().getTypeFromName(state->params.parsername.get());
   FormatParser_Parameters *parser = FormatParserStorage::getInstance().get(type).parameters;
   std::stringstream oldparamstream(state->oldparams);
@@ -70,7 +73,9 @@
   ParserSetParserParametersState *state = assert_cast<ParserSetParserParametersState*>(_state.get());
 
-  ParserTypes type = FormatParserStorage::getInstance().getTypeFromName(state->params.parsername);
+  ParserTypes type = FormatParserStorage::getInstance().getTypeFromName(state->params.parsername.get());
   FormatParser_Parameters *parser = FormatParserStorage::getInstance().get(type).parameters;
-  std::stringstream newparamstream(state->params.newparams);
+  std::stringstream newparamstream;
+  const std::vector< std::string > keyvalues = state->params.newparams.get();
+  std::for_each(keyvalues.begin(), keyvalues.end(), newparamstream << boost::lambda::_1 << ";");
   newparamstream >> *parser;
 
Index: src/Actions/ParserAction/SetParserParametersAction.def
===================================================================
--- src/Actions/ParserAction/SetParserParametersAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/ParserAction/SetParserParametersAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -7,14 +7,22 @@
 
 // all includes and forward declarations necessary for non-integral types below
+#include <vector>
+#include <string>
 
+#include "Parameters/Validators/STLVectorValidator.hpp"
+#include "Parameters/Validators/Specific/KeyValueValidator.hpp"
+#include "Parameters/Validators/Specific/ParserTypeValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (std::string)(std::string)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (std::string)(std::vector<std::string>)
 #define paramtokens ("set-parser-parameters")("parser-parameters")
 #define paramdescriptions ("name of the parser to change")("parameter (key = value;)")
-#define paramdefaults (NODEFAULT)(NODEFAULT)
+#define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)
 #define paramreferences (parsername)(newparams)
+#define paramvalids \
+(ParserTypeValidator())\
+(STLVectorValidator< std::vector<std::string> >(1, 99, KeyValueValidator()))
 
 #define statetypes (std::string)
Index: src/Actions/ParserAction/SetTremoloAtomdataAction.cpp
===================================================================
--- src/Actions/ParserAction/SetTremoloAtomdataAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/ParserAction/SetTremoloAtomdataAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -41,31 +41,45 @@
   FormatParser<tremolo> &parser = FormatParserStorage::getInstance().getParser<tremolo>();
 
-  LOG(1, "Setting Tremolo's ATOMDATA to: '" << params.atomdata_string << "'");
+  LOG(1, "Setting Tremolo's ATOMDATA to: '" << params.atomdata_string.get() << "'");
 
-  parser.setAtomData(params.atomdata_string);
+  const std::string old_atomdata = parser.getAtomData();
 
-  return Action::success;
+  if (params.atomdata_reset.get())
+    parser.resetAtomData(params.atomdata_string.get());
+  else
+    parser.setAtomData(params.atomdata_string.get());
+
+  return Action::state_ptr(new ParserSetTremoloAtomdataState(old_atomdata, params));
 }
 
 Action::state_ptr ParserSetTremoloAtomdataAction::performUndo(Action::state_ptr _state) {
-//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
+  ParserSetTremoloAtomdataState *state = assert_cast<ParserSetTremoloAtomdataState*>(_state.get());
 
-  return Action::failure;
-//  string newName = state->mol->getName();
-//  state->mol->setName(state->lastName);
-//
-//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
+  FormatParser<tremolo> &parser = FormatParserStorage::getInstance().getParser<tremolo>();
+  LOG(1, "INFO: Reverting to 'ATOMDATA " << state->old_atomdata << "'.");
+  parser.resetAtomData(state->old_atomdata);
+
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr ParserSetTremoloAtomdataAction::performRedo(Action::state_ptr _state){
-  return Action::failure;
+  ParserSetTremoloAtomdataState *state = assert_cast<ParserSetTremoloAtomdataState*>(_state.get());
+
+  FormatParser<tremolo> &parser = FormatParserStorage::getInstance().getParser<tremolo>();
+
+  if (state->params.atomdata_reset.get())
+    parser.resetAtomData(state->params.atomdata_string.get());
+  else
+    parser.setAtomData(state->params.atomdata_string.get());
+
+  return Action::state_ptr(_state);
 }
 
 bool ParserSetTremoloAtomdataAction::canUndo() {
-  return false;
+  return true;
 }
 
 bool ParserSetTremoloAtomdataAction::shouldUndo() {
-  return false;
+  return true;
 }
 /** =========== end of function ====================== */
Index: src/Actions/ParserAction/SetTremoloAtomdataAction.def
===================================================================
--- src/Actions/ParserAction/SetTremoloAtomdataAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/ParserAction/SetTremoloAtomdataAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,15 +9,21 @@
 #include <boost/filesystem.hpp>
 
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/Specific/AtomDataValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (std::string)
-#define paramtokens ("set-tremolo-atomdata")
-#define paramdescriptions ("properties to set, space-separated")
-#undef paramdefaults
-#define paramreferences (atomdata_string)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (std::string)(bool)
+#define paramtokens ("set-tremolo-atomdata")("reset")
+#define paramdescriptions ("properties to set, space-separated")("whether to append (false) or overwrite (true) with given atomdata")
+#define paramdefaults (NOPARAM_DEFAULT)(PARAM_DEFAULT(true))
+#define paramreferences (atomdata_string)(atomdata_reset)
+#define paramvalids \
+(AtomDataValidator()) \
+(DummyValidator<bool>())
 
-#undef statetypes
-#undef statereferences
+#define statetypes (std::string)
+#define statereferences (old_atomdata)
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Actions/RandomNumbersAction/SetRandomNumbersDistributionAction.cpp
===================================================================
--- src/Actions/RandomNumbersAction/SetRandomNumbersDistributionAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/RandomNumbersAction/SetRandomNumbersDistributionAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -47,5 +47,5 @@
 
   // set the new default
-  RandomNumberDistributionFactory::getInstance().setCurrentType(params.distribution_type);
+  RandomNumberDistributionFactory::getInstance().setCurrentType(params.distribution_type.get());
   LOG(0, "STATUS: Distribution of random number generator is now: "
       << RandomNumberDistributionFactory::getInstance().getCurrentTypeName());
@@ -55,10 +55,13 @@
       RandomNumberDistributionFactory::getInstance().getPrototype().getParameterSet();
   // set each parameter (that is not -1);
-  if (!params.parameters.isDefault()) {
+  {
+    std::stringstream input(params.parameters.get());
     RandomNumberDistribution_Parameters *currentparameters =
         RandomNumberDistributionFactory::getInstance().getPrototype().getParameterSet();
-    currentparameters->update(params.parameters);
-    LOG(1, "INFO: Changing prototype's parameters to " << params.parameters << ".");
-    RandomNumberDistributionFactory::getInstance().manipulatePrototype(*currentparameters);
+    input >> *currentparameters;  // add new values on top
+    if (!currentparameters->isDefault()) {
+      LOG(1, "Changing prototype's parameters.");
+      RandomNumberDistributionFactory::getInstance().manipulatePrototype(*currentparameters);
+    }
     delete currentparameters;
   }
@@ -71,6 +74,8 @@
   }
 
+  std::stringstream output;
+  output << *oldparameters;
   CommandSetRandomNumbersDistributionState *newstate =
-      new CommandSetRandomNumbersDistributionState(oldtype,*oldparameters,params);
+      new CommandSetRandomNumbersDistributionState(oldtype,output.str(),params);
   delete oldparameters;
   return Action::state_ptr(newstate);
@@ -94,7 +99,14 @@
 
   // set each parameter back (that is not -1);
-  if (!state->old_parameters.isDefault()) {
-    LOG(1, "INFO: Changing back prototype's parameters to " << state->old_parameters << ".");
-    RandomNumberDistributionFactory::getInstance().manipulatePrototype(state->old_parameters);
+  {
+    std::stringstream input(state->old_parameters);
+    RandomNumberDistribution_Parameters *currentparameters =
+        RandomNumberDistributionFactory::getInstance().getPrototype().getParameterSet();
+    input >> *currentparameters;
+    if (!currentparameters->isDefault()) {
+      LOG(1, "Changing prototype's parameters.");
+      RandomNumberDistributionFactory::getInstance().manipulatePrototype(*currentparameters);
+    }
+    delete currentparameters;
   }
 
@@ -106,6 +118,8 @@
   }
 
+  std::stringstream output;
+  output << *newparameters;
   CommandSetRandomNumbersDistributionState *newstate =
-      new CommandSetRandomNumbersDistributionState(newtype,*newparameters,params);
+      new CommandSetRandomNumbersDistributionState(newtype,output.str(),params);
   delete newparameters;
   return Action::state_ptr(newstate);
Index: src/Actions/RandomNumbersAction/SetRandomNumbersDistributionAction.def
===================================================================
--- src/Actions/RandomNumbersAction/SetRandomNumbersDistributionAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/RandomNumbersAction/SetRandomNumbersDistributionAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -7,16 +7,22 @@
 
 // all includes and forward declarations necessary for non-integral types below
-#include "RandomNumbers/RandomNumberDistribution_Parameters.hpp"
+#include <string>
+
+#include "Parameters/Validators/Specific/RandomNumberValidators.hpp"
+#include "Parameters/Validators/Specific/KeyValueValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (std::string)(class RandomNumberDistribution_Parameters)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (std::string)(std::string)
 #define paramtokens ("set-random-number-distribution")("random-number-distribution-parameters")
 #define paramdescriptions ("name of the distribution from boost::random")("parameter set for requested distribution")
-#define paramdefaults (NODEFAULT)("p=-1")
+#define paramdefaults (NOPARAM_DEFAULT)(PARAM_DEFAULT(std::string("p=-1")))
 #define paramreferences (distribution_type)(parameters)
+#define paramvalids \
+(RandomNumberDistributionNameValidator()) \
+(KeyValueValidator())
 
-#define statetypes (std::string)(RandomNumberDistribution_Parameters)
+#define statetypes (std::string)(std::string)
 #define statereferences (old_distribution_type)(old_parameters)
 
Index: src/Actions/RandomNumbersAction/SetRandomNumbersEngineAction.cpp
===================================================================
--- src/Actions/RandomNumbersAction/SetRandomNumbersEngineAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/RandomNumbersAction/SetRandomNumbersEngineAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -47,5 +47,5 @@
 
   // set the new default
-  RandomNumberEngineFactory::getInstance().setCurrentType(params.engine_type);
+  RandomNumberEngineFactory::getInstance().setCurrentType(params.engine_type.get());
   LOG(0, "STATUS: Engine of random number generator is now: "
       << RandomNumberEngineFactory::getInstance().getCurrentTypeName());
@@ -56,5 +56,5 @@
   // set each parameter (that is not -1);
   {
-    std::stringstream input(params.parameters);
+    std::stringstream input(params.parameters.get());
     RandomNumberEngine_Parameters *currentparameters =
         RandomNumberEngineFactory::getInstance().getPrototype().getParameterSet();
Index: src/Actions/RandomNumbersAction/SetRandomNumbersEngineAction.def
===================================================================
--- src/Actions/RandomNumbersAction/SetRandomNumbersEngineAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/RandomNumbersAction/SetRandomNumbersEngineAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,12 +8,18 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/Specific/RandomNumberValidators.hpp"
+#include "Parameters/Validators/Specific/KeyValueValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::string)(std::string)
 #define paramtokens ("set-random-number-engine")("random-number-engine-parameters")
 #define paramdescriptions ("name of the pseudo-random engine from boost::random")("seed of the pseudo-random number sequence")
-#define paramdefaults (NODEFAULT)("seed=-1")
+#define paramdefaults (NOPARAM_DEFAULT)(PARAM_DEFAULT(std::string("seed=-1")))
 #define paramreferences (engine_type)(parameters)
+#define paramvalids \
+(RandomNumberEngineNameValidator()) \
+(KeyValueValidator())
 
 #define statetypes (std::string)(std::string)
Index: src/Actions/RedoAction.def
===================================================================
--- src/Actions/RedoAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/RedoAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramreferences
Index: src/Actions/SelectionAction/Atoms/AllAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/AllAtomsAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -17,4 +19,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::vector<atom*>)
Index: src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -47,8 +47,8 @@
   RealSpaceMatrix RotationMatrix;
 
-  RotationMatrix.setRotation(params.Xangle, params.Yangle, params.Zangle);
+  RotationMatrix.setRotation(params.Xangle.get(), params.Yangle.get(), params.Zangle.get());
 
-  LOG(1, "Selecting all atoms inside a rotated " << RotationMatrix << " cuboid at " << params.position << " and extension of " << params.extension << ".");
-  Shape s = translate(transform(stretch(Cuboid(),params.extension),RotationMatrix),params.position);
+  LOG(1, "Selecting all atoms inside a rotated " << RotationMatrix << " cuboid at " << params.position.get() << " and extension of " << params.extension.get() << ".");
+  Shape s = translate(transform(stretch(Cuboid(),params.extension.get()),RotationMatrix),params.position.get());
   std::vector<atom *> selectedAtoms = World::getInstance().getAllAtoms(AtomsBySelection() && AtomsByShape(s));
   World::getInstance().selectAllAtoms(AtomsByShape(s));
Index: src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -11,12 +11,22 @@
 class atom;
 
+#include "Parameters/Validators/Specific/BoxVectorValidator.hpp"
+#include "Parameters/Validators/Specific/RotationAngleValidator.hpp"
+#include "Parameters/Validators/Specific/VectorPositiveComponentsValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (Vector)(Vector)(double)(double)(double)
 #define paramtokens ("select-atoms-inside-cuboid")("position")("angle-x")("angle-y")("angle-z")
 #define paramdescriptions ("dimensions of cuboid")("position in R^3 space")("angle of a rotation around x axis")("angle of a rotation around y axis")("angle of a rotation around z axis")
-#define paramdefaults (NODEFAULT)(NODEFAULT)("0.")("0.")("0.")
+#define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))
 #define paramreferences (extension)(position)(Xangle)(Yangle)(Zangle)
+#define paramvalids \
+(VectorPositiveComponentsValidator()) \
+(BoxVectorValidator()) \
+(RotationAngleValidator()) \
+(RotationAngleValidator()) \
+(RotationAngleValidator())
 
 #define statetypes (std::vector<atom*>)(Shape)
Index: src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -44,6 +44,6 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionAllAtomsInsideSphereAction::performCall() {
-  LOG(1, "Selecting all atoms inside a sphere at " << params.position << " with radius " << params.radius << ".");
-  Shape s = translate(resize(Sphere(),params.radius),params.position);
+  LOG(1, "Selecting all atoms inside a sphere at " << params.position.get() << " with radius " << params.radius.get() << ".");
+  Shape s = translate(resize(Sphere(),params.radius.get()),params.position.get());
   std::vector<atom *> selectedAtoms = World::getInstance().getAllAtoms(AtomsBySelection() && AtomsByShape(s));
   World::getInstance().selectAllAtoms(AtomsByShape(s));
Index: src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -10,7 +10,10 @@
 class Shape;
 
+#include "Parameters/Validators/Specific/BoxLengthValidator.hpp"
+#include "Parameters/Validators/Specific/BoxVectorValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (double)(Vector)
 #define paramtokens ("select-atoms-inside-sphere")("position")
@@ -18,4 +21,7 @@
 #undef paramdefaults
 #define paramreferences (radius)(position)
+#define paramvalids \
+(BoxLengthValidator()) \
+(BoxVectorValidator())
 
 #define statetypes (std::vector<atom*>)(Shape)
Index: src/Actions/SelectionAction/Atoms/AllAtomsOfMoleculeAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsOfMoleculeAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/AllAtomsOfMoleculeAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class molecule;
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -17,4 +19,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::vector<atom*>)
Index: src/Actions/SelectionAction/Atoms/AtomByElementAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByElementAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/AtomByElementAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -41,7 +41,7 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionAtomByElementAction::performCall() {
-  LOG(1, "Selecting atoms of type " << *params.elemental);
+  LOG(1, "Selecting atoms of type " << *params.elemental.get());
   std::vector<atom *> selectedAtoms = World::getInstance().getAllAtoms(AtomsBySelection());
-  World::getInstance().selectAllAtoms(AtomByType(params.elemental));
+  World::getInstance().selectAllAtoms(AtomByType(params.elemental.get()));
   LOG(0, World::getInstance().countSelectedAtoms() << " atoms selected.");
   return Action::state_ptr(new SelectionAtomByElementState(selectedAtoms,params));
@@ -51,5 +51,5 @@
   SelectionAtomByElementState *state = assert_cast<SelectionAtomByElementState*>(_state.get());
 
-  World::getInstance().unselectAllAtoms(AtomByType(state->params.elemental));
+  World::getInstance().unselectAllAtoms(AtomByType(state->params.elemental.get()));
   BOOST_FOREACH(atom *_atom, state->selectedAtoms)
     World::getInstance().selectAtom(_atom);
@@ -61,5 +61,5 @@
   SelectionAtomByElementState *state = assert_cast<SelectionAtomByElementState*>(_state.get());
 
-  World::getInstance().selectAllAtoms(AtomByType(state->params.elemental));
+  World::getInstance().selectAllAtoms(AtomByType(state->params.elemental.get()));
 
   return Action::state_ptr(_state);
Index: src/Actions/SelectionAction/Atoms/AtomByElementAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByElementAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/AtomByElementAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class element;
 
+#include "Parameters/Validators/Specific/ElementValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (const element*)
 #define paramtokens ("select-atom-by-element")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (elemental)
+#define paramvalids \
+(ElementValidator())
 
 #define statetypes (std::vector<atom*>)
Index: src/Actions/SelectionAction/Atoms/AtomByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByIdAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/AtomByIdAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -38,5 +38,5 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionAtomByIdAction::performCall() {
-  const atom *Walker = World::getInstance().getAtom(AtomById(params.WalkerId));
+  const atom *Walker = World::getInstance().getAtom(AtomById(params.WalkerId.get()));
   if (Walker != NULL) {
     if (!World::getInstance().isSelected(Walker)) {
@@ -56,5 +56,5 @@
   SelectionAtomByIdState *state = assert_cast<SelectionAtomByIdState*>(_state.get());
 
-  const atom *Walker = World::getInstance().getAtom(AtomById(state->params.WalkerId));
+  const atom *Walker = World::getInstance().getAtom(AtomById(state->params.WalkerId.get()));
   World::getInstance().unselectAtom(Walker);
 
@@ -65,5 +65,5 @@
   SelectionAtomByIdState *state = assert_cast<SelectionAtomByIdState*>(_state.get());
 
-  const atom *Walker = World::getInstance().getAtom(AtomById(state->params.WalkerId));
+  const atom *Walker = World::getInstance().getAtom(AtomById(state->params.WalkerId.get()));
   World::getInstance().selectAtom(Walker);
 
Index: src/Actions/SelectionAction/Atoms/AtomByIdAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByIdAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/AtomByIdAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class atom;
 
+#include "Parameters/Validators/Specific/AtomIdValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (atomId_t)
 #define paramtokens ("select-atom-by-id")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (WalkerId)
+#define paramvalids \
+(AtomIdValidator())
 
 #undef statetypes
Index: src/Actions/SelectionAction/Atoms/AtomByOrderAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByOrderAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/AtomByOrderAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -39,5 +39,5 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionAtomByOrderAction::performCall() {
-  const atom *Walker = World::getInstance().getAtom(AtomByOrder(params.order));
+  const atom *Walker = World::getInstance().getAtom(AtomByOrder(params.order.get()));
   if (Walker != NULL) {
     if (!World::getInstance().isSelected(Walker)) {
Index: src/Actions/SelectionAction/Atoms/AtomByOrderAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByOrderAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/AtomByOrderAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class atom;
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (int)
 #define paramtokens ("select-atom-by-order")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (order)
+#define paramvalids \
+(DummyValidator< int >())
 
 #define statetypes (atomId_t)
Index: src/Actions/SelectionAction/Atoms/ClearAllAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/ClearAllAtomsAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/ClearAllAtomsAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -16,4 +18,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::vector<atom*>)
Index: src/Actions/SelectionAction/Atoms/InvertAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/InvertAtomsAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/InvertAtomsAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -17,4 +19,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #undef statetypes
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -17,4 +19,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::vector<atom*>)
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -46,8 +46,8 @@
 Action::state_ptr SelectionNotAllAtomsInsideCuboidAction::performCall() {
   RealSpaceMatrix RotationMatrix;
-  RotationMatrix.setRotation(params.Xangle, params.Yangle, params.Zangle);
+  RotationMatrix.setRotation(params.Xangle.get(), params.Yangle.get(), params.Zangle.get());
 
-  LOG(1, "Unselecting all atoms inside a rotated " << RotationMatrix << " cuboid at " << params.position << " and extension of " << params.extension << ".");
-  Shape s = translate(transform(stretch(Cuboid(),params.extension),RotationMatrix),params.position);
+  LOG(1, "Unselecting all atoms inside a rotated " << RotationMatrix << " cuboid at " << params.position.get() << " and extension of " << params.extension.get() << ".");
+  Shape s = translate(transform(stretch(Cuboid(),params.extension.get()),RotationMatrix),params.position.get());
   std::vector<atom *> unselectedAtoms = World::getInstance().getAllAtoms((!AtomsBySelection()) && AtomsByShape(s));
   World::getInstance().unselectAllAtoms(AtomsByShape(s));
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -12,12 +12,22 @@
 class Vector;
 
+#include "Parameters/Validators/Specific/BoxVectorValidator.hpp"
+#include "Parameters/Validators/Specific/RotationAngleValidator.hpp"
+#include "Parameters/Validators/Specific/VectorPositiveComponentsValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (Vector)(Vector)(double)(double)(double)
 #define paramtokens ("unselect-atoms-inside-cuboid")("position")("angle-x")("angle-y")("angle-z")
 #define paramdescriptions ("dimension of cuboid")("position in R^3 space")("angle of a rotation around x axis")("angle of a rotation around y axis")("angle of a rotation around z axis")
-#define paramdefaults (NODEFAULT)(NODEFAULT)("0.")("0.")("0.")
+#define paramdefaults (NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))
 #define paramreferences (extension)(position)(Xangle)(Yangle)(Zangle)
+#define paramvalids \
+(VectorPositiveComponentsValidator()) \
+(BoxVectorValidator()) \
+(RotationAngleValidator()) \
+(RotationAngleValidator()) \
+(RotationAngleValidator())
 
 #define statetypes (std::vector<atom*>)(Shape)
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -44,6 +44,6 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionNotAllAtomsInsideSphereAction::performCall() {
-  LOG(1, "Unselecting all atoms inside a sphere at " << params.position << " with radius " << params.radius << ".");
-  Shape s = translate(resize(Sphere(),params.radius),params.position);
+  LOG(1, "Unselecting all atoms inside a sphere at " << params.position.get() << " with radius " << params.radius.get() << ".");
+  Shape s = translate(resize(Sphere(),params.radius.get()),params.position.get());
   std::vector<atom *> unselectedAtoms = World::getInstance().getAllAtoms((!AtomsBySelection()) && AtomsByShape(s));
   World::getInstance().unselectAllAtoms(AtomsByShape(s));
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -10,7 +10,10 @@
 class Vector;
 
+#include "Parameters/Validators/Specific/BoxLengthValidator.hpp"
+#include "Parameters/Validators/Specific/BoxVectorValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (double)(Vector)
 #define paramtokens ("unselect-atoms-inside-sphere")("position")
@@ -18,4 +21,7 @@
 #undef paramdefaults
 #define paramreferences (radius)(position)
+#define paramvalids \
+(BoxLengthValidator()) \
+(BoxVectorValidator())
 
 #define statetypes (std::vector<atom*>)(Shape)
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -17,4 +19,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::vector<atom*>)
Index: src/Actions/SelectionAction/Atoms/NotAtomByElementAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByElementAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/NotAtomByElementAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -41,7 +41,7 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionNotAtomByElementAction::performCall() {
-  LOG(1, "Unselecting atoms of type " << *params.elemental);
+  LOG(1, "Unselecting atoms of type " << *params.elemental.get());
   std::vector<atom *> unselectedAtoms = World::getInstance().getAllAtoms(!AtomsBySelection());
-  World::getInstance().unselectAllAtoms(AtomByType(params.elemental));
+  World::getInstance().unselectAllAtoms(AtomByType(params.elemental.get()));
   LOG(0, World::getInstance().countSelectedAtoms() << " atoms remain selected.");
   return Action::state_ptr(new SelectionNotAtomByElementState(unselectedAtoms,params));
@@ -51,5 +51,5 @@
   SelectionNotAtomByElementState *state = assert_cast<SelectionNotAtomByElementState*>(_state.get());
 
-  World::getInstance().selectAllAtoms(AtomByType(state->params.elemental));
+  World::getInstance().selectAllAtoms(AtomByType(state->params.elemental.get()));
   BOOST_FOREACH(atom *_atom, state->unselectedAtoms)
     World::getInstance().unselectAtom(_atom);
@@ -61,5 +61,5 @@
   SelectionNotAtomByElementState *state = assert_cast<SelectionNotAtomByElementState*>(_state.get());
 
-  World::getInstance().unselectAllAtoms(AtomByType(state->params.elemental));
+  World::getInstance().unselectAllAtoms(AtomByType(state->params.elemental.get()));
 
   return Action::state_ptr(_state);
Index: src/Actions/SelectionAction/Atoms/NotAtomByElementAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByElementAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/NotAtomByElementAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class element;
 
+#include "Parameters/Validators/Specific/ElementValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (const element*)
 #define paramtokens ("unselect-atom-by-element")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (elemental)
+#define paramvalids \
+(ElementValidator())
 
 #define statetypes (std::vector<atom*>)
Index: src/Actions/SelectionAction/Atoms/NotAtomByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByIdAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/NotAtomByIdAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -38,5 +38,5 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionNotAtomByIdAction::performCall() {
-  const atom * Walker = World::getInstance().getAtom(AtomById(params.WalkerId));
+  const atom * Walker = World::getInstance().getAtom(AtomById(params.WalkerId.get()));
   if (Walker != NULL) {
     if (World::getInstance().isSelected(Walker)) {
@@ -56,5 +56,5 @@
   SelectionNotAtomByIdState *state = assert_cast<SelectionNotAtomByIdState*>(_state.get());
 
-  const atom * Walker = World::getInstance().getAtom(AtomById(state->params.WalkerId));
+  const atom * Walker = World::getInstance().getAtom(AtomById(state->params.WalkerId.get()));
   World::getInstance().selectAtom(Walker);
 
@@ -65,5 +65,5 @@
   SelectionNotAtomByIdState *state = assert_cast<SelectionNotAtomByIdState*>(_state.get());
 
-  const atom * Walker = World::getInstance().getAtom(AtomById(state->params.WalkerId));
+  const atom * Walker = World::getInstance().getAtom(AtomById(state->params.WalkerId.get()));
   World::getInstance().unselectAtom(Walker);
 
Index: src/Actions/SelectionAction/Atoms/NotAtomByIdAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByIdAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/NotAtomByIdAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class atom;
 
+#include "Parameters/Validators/Specific/AtomIdValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (atomId_t)
 #define paramtokens ("unselect-atom-by-id")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (WalkerId)
+#define paramvalids \
+(AtomIdValidator())
 
 #undef statetypes
Index: src/Actions/SelectionAction/Atoms/NotAtomByOrderAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByOrderAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/NotAtomByOrderAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -39,5 +39,5 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionNotAtomByOrderAction::performCall() {
-  const atom * Walker = World::getInstance().getAtom(AtomByOrder(params.order));
+  const atom * Walker = World::getInstance().getAtom(AtomByOrder(params.order.get()));
   if (Walker != NULL) {
     if (World::getInstance().isSelected(Walker)) {
Index: src/Actions/SelectionAction/Atoms/NotAtomByOrderAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByOrderAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Atoms/NotAtomByOrderAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class atom;
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (int)
 #define paramtokens ("unselect-atom-by-order")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (order)
+#define paramvalids \
+(DummyValidator< int >())
 
 #define statetypes (atomId_t)
Index: src/Actions/SelectionAction/Molecules/AllMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/AllMoleculesAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/AllMoleculesAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -16,4 +18,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::vector<molecule*>)
Index: src/Actions/SelectionAction/Molecules/ClearAllMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/ClearAllMoleculesAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/ClearAllMoleculesAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -16,4 +18,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::vector<molecule*>)
Index: src/Actions/SelectionAction/Molecules/InvertMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/InvertMoleculesAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/InvertMoleculesAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -16,4 +18,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #undef statetypes
Index: src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -40,11 +40,11 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionMoleculeByFormulaAction::performCall() {
-  LOG(1, "Selecting molecules with chemical formula " << params.formula << ":");
-//  std::vector<molecule *> matchingMolecules = World::getInstance().getAllMolecules(MoleculeByFormula(params.formula));
+  LOG(1, "Selecting molecules with chemical formula " << params.formula.get() << ":");
+//  std::vector<molecule *> matchingMolecules = World::getInstance().getAllMolecules(MoleculeByFormula(params.formula.get()));
   std::vector<molecule *> selectedMolecules =
-      World::getInstance().getAllMolecules(MoleculesBySelection() && MoleculeByFormula(params.formula));
+      World::getInstance().getAllMolecules(MoleculesBySelection() && MoleculeByFormula(params.formula.get()));
 //  BOOST_FOREACH(molecule *mol, matchingMolecules)
 //    LOG(1, "\t" << mol->getId() << ", " << mol->getName() << ".");
-  World::getInstance().selectAllMolecules(MoleculeByFormula(params.formula));
+  World::getInstance().selectAllMolecules(MoleculeByFormula(params.formula.get()));
   LOG(0, World::getInstance().countSelectedMolecules() << " molecules selected.");
   return Action::state_ptr(new SelectionMoleculeByFormulaState(selectedMolecules,params));
@@ -54,5 +54,5 @@
   SelectionMoleculeByFormulaState *state = assert_cast<SelectionMoleculeByFormulaState*>(_state.get());
 
-  World::getInstance().unselectAllMolecules(MoleculeByFormula(state->params.formula));
+  World::getInstance().unselectAllMolecules(MoleculeByFormula(state->params.formula.get()));
   BOOST_FOREACH( molecule *mol, state->selectedMolecules)
     World::getInstance().selectMolecule(mol);
@@ -64,5 +64,5 @@
   SelectionMoleculeByFormulaState *state = assert_cast<SelectionMoleculeByFormulaState*>(_state.get());
 
-  World::getInstance().selectAllMolecules(MoleculeByFormula(state->params.formula));
+  World::getInstance().selectAllMolecules(MoleculeByFormula(state->params.formula.get()));
 
   return Action::state_ptr(_state);
Index: src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class molecule;
 
+#include "Parameters/Validators/Specific/FormulaValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::string)
 #define paramtokens ("select-molecules-by-formula")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (formula)
+#define paramvalids \
+(FormulaValidator())
 
 #define statetypes (std::vector<molecule*>)
Index: src/Actions/SelectionAction/Molecules/MoleculeByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByIdAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/MoleculeByIdAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -38,9 +38,9 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionMoleculeByIdAction::performCall() {
-  const molecule *mol = World::getInstance().getMolecule(MoleculeById(params.molindex));
+  const molecule *mol = World::getInstance().getMolecule(MoleculeById(params.molindex.get()));
   if (mol != NULL) {
     if (!World::getInstance().isSelected(mol)) {
       LOG(1, "Selecting molecule " << mol->name);
-      World::getInstance().selectAllMolecules(MoleculeById(params.molindex));
+      World::getInstance().selectAllMolecules(MoleculeById(params.molindex.get()));
       LOG(0, World::getInstance().countSelectedMolecules() << " molecules selected.");
       return Action::state_ptr(new SelectionMoleculeByIdState(params));
@@ -56,5 +56,5 @@
   SelectionMoleculeByIdState *state = assert_cast<SelectionMoleculeByIdState*>(_state.get());
 
-  World::getInstance().unselectAllMolecules(MoleculeById(state->params.molindex));
+  World::getInstance().unselectAllMolecules(MoleculeById(state->params.molindex.get()));
 
   return Action::state_ptr(_state);
@@ -64,5 +64,5 @@
   SelectionMoleculeByIdState *state = assert_cast<SelectionMoleculeByIdState*>(_state.get());
 
-  World::getInstance().selectAllMolecules(MoleculeById(state->params.molindex));
+  World::getInstance().selectAllMolecules(MoleculeById(state->params.molindex.get()));
 
   return Action::state_ptr(_state);
Index: src/Actions/SelectionAction/Molecules/MoleculeByIdAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByIdAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/MoleculeByIdAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -7,13 +7,18 @@
 
 // all includes and forward declarations necessary for non-integral types below
+#include "types.hpp"
+
+#include "Parameters/Validators/Specific/MoleculeIdValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (int)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (moleculeId_t)
 #define paramtokens ("select-molecule-by-id")
 #define paramdescriptions ("molecule index")
 #undef paramdefaults
 #define paramreferences (molindex)
+#define paramvalids \
+(MoleculeIdValidator())
 
 #undef statetypes
Index: src/Actions/SelectionAction/Molecules/MoleculeByNameAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByNameAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/MoleculeByNameAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -40,8 +40,8 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionMoleculeByNameAction::performCall() {
-  LOG(1, "Selecting all molecules called " << params.molname);
+  LOG(1, "Selecting all molecules called " << params.molname.get());
   std::vector<molecule *> selectedMolecules =
-      World::getInstance().getAllMolecules(MoleculesBySelection() && MoleculeByName(params.molname));
-  World::getInstance().selectAllMolecules(MoleculeByName(params.molname));
+      World::getInstance().getAllMolecules(MoleculesBySelection() && MoleculeByName(params.molname.get()));
+  World::getInstance().selectAllMolecules(MoleculeByName(params.molname.get()));
   LOG(0, World::getInstance().countSelectedMolecules() << " molecules selected.");
 
@@ -52,5 +52,5 @@
   SelectionMoleculeByNameState *state = assert_cast<SelectionMoleculeByNameState*>(_state.get());
 
-  World::getInstance().unselectAllMolecules(MoleculeByName(state->params.molname));
+  World::getInstance().unselectAllMolecules(MoleculeByName(state->params.molname.get()));
   BOOST_FOREACH( molecule *mol, state->selectedMolecules)
     World::getInstance().selectMolecule(mol);
@@ -62,5 +62,5 @@
   SelectionMoleculeByNameState *state = assert_cast<SelectionMoleculeByNameState*>(_state.get());
 
-  World::getInstance().selectAllMolecules(MoleculeByName(state->params.molname));
+  World::getInstance().selectAllMolecules(MoleculeByName(state->params.molname.get()));
 
   return Action::state_ptr(_state);
Index: src/Actions/SelectionAction/Molecules/MoleculeByNameAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByNameAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/MoleculeByNameAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -11,7 +11,9 @@
 class molecule;
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::string)
 #define paramtokens ("select-molecules-by-name")
@@ -19,4 +21,6 @@
 #undef paramdefaults
 #define paramreferences (molname)
+#define paramvalids \
+(DummyValidator< std::string >())
 
 #define statetypes (std::vector<molecule *>)
Index: src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -39,5 +39,5 @@
 
 Action::state_ptr SelectionMoleculeByOrderAction::performCall() {
-  molecule *mol = World::getInstance().getMolecule(MoleculeByOrder(params.molindex));
+  molecule *mol = World::getInstance().getMolecule(MoleculeByOrder(params.molindex.get()));
 
   if (mol != NULL) {
Index: src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class molecule;
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (int)
 #define paramtokens ("select-molecule-by-order")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (molindex)
+#define paramvalids \
+(DummyValidator< int >())
 
 #define statetypes (const molecule *)
Index: src/Actions/SelectionAction/Molecules/MoleculeOfAtomAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeOfAtomAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/MoleculeOfAtomAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -16,4 +18,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::vector<molecule*>)
Index: src/Actions/SelectionAction/Molecules/NotAllMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotAllMoleculesAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/NotAllMoleculesAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -16,4 +18,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::vector<molecule*>)
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -40,8 +40,8 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionNotMoleculeByFormulaAction::performCall() {
-  LOG(1, "Unselecting molecules with chemical formula " << params.formula << ":");
-  std::vector<molecule *> matchingMolecules = World::getInstance().getAllMolecules(MoleculeByFormula(params.formula));
+  LOG(1, "Unselecting molecules with chemical formula " << params.formula.get() << ":");
+  std::vector<molecule *> matchingMolecules = World::getInstance().getAllMolecules(MoleculeByFormula(params.formula.get()));
   std::vector<molecule *> unselectedMolecules = World::getInstance().getAllMolecules(!MoleculesBySelection());
-  World::getInstance().unselectAllMolecules(MoleculeByFormula(params.formula));
+  World::getInstance().unselectAllMolecules(MoleculeByFormula(params.formula.get()));
   LOG(0, World::getInstance().countSelectedMolecules() << " molecules remain selected.");
   return Action::state_ptr(new SelectionNotMoleculeByFormulaState(unselectedMolecules,params));
@@ -51,5 +51,5 @@
   SelectionNotMoleculeByFormulaState *state = assert_cast<SelectionNotMoleculeByFormulaState*>(_state.get());
 
-  World::getInstance().selectAllMolecules(MoleculeByFormula(state->params.formula));
+  World::getInstance().selectAllMolecules(MoleculeByFormula(state->params.formula.get()));
   BOOST_FOREACH( molecule *mol, state->unselectedMolecules)
     World::getInstance().unselectMolecule(mol);
@@ -61,5 +61,5 @@
   SelectionNotMoleculeByFormulaState *state = assert_cast<SelectionNotMoleculeByFormulaState*>(_state.get());
 
-  World::getInstance().unselectAllMolecules(MoleculeByFormula(state->params.formula));
+  World::getInstance().unselectAllMolecules(MoleculeByFormula(state->params.formula.get()));
 
   return Action::state_ptr(_state);
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class molecule;
 
+#include "Parameters/Validators/Specific/FormulaValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::string)
 #define paramtokens ("unselect-molecules-by-formula")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (formula)
+#define paramvalids \
+(FormulaValidator())
 
 #define statetypes (std::vector<molecule*>)
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -38,9 +38,9 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionNotMoleculeByIdAction::performCall() {
-  const molecule *mol = World::getInstance().getMolecule(MoleculeById(params.molindex));
+  const molecule *mol = World::getInstance().getMolecule(MoleculeById(params.molindex.get()));
   if (mol != NULL) {
     if (World::getInstance().isSelected(mol)) {
       LOG(1, "Unselecting molecule " << mol->name);
-      World::getInstance().unselectAllMolecules(MoleculeById(params.molindex));
+      World::getInstance().unselectAllMolecules(MoleculeById(params.molindex.get()));
       LOG(0, World::getInstance().countSelectedMolecules() << " molecules remain selected.");
       return Action::state_ptr(new SelectionNotMoleculeByIdState(params));
@@ -56,5 +56,5 @@
   SelectionNotMoleculeByIdState *state = assert_cast<SelectionNotMoleculeByIdState*>(_state.get());
 
-  World::getInstance().selectAllMolecules(MoleculeById(state->params.molindex));
+  World::getInstance().selectAllMolecules(MoleculeById(state->params.molindex.get()));
 
   return Action::state_ptr(_state);
@@ -64,5 +64,5 @@
   SelectionNotMoleculeByIdState *state = assert_cast<SelectionNotMoleculeByIdState*>(_state.get());
 
-  World::getInstance().unselectAllMolecules(MoleculeById(state->params.molindex));
+  World::getInstance().unselectAllMolecules(MoleculeById(state->params.molindex.get()));
 
   return Action::state_ptr(_state);
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -7,14 +7,18 @@
 
 // all includes and forward declarations necessary for non-integral types below
-class molecule;
+#include "types.hpp"
+
+#include "Parameters/Validators/Specific/MoleculeIdValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (int)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (moleculeId_t)
 #define paramtokens ("unselect-molecule-by-id")
 #define paramdescriptions ("molecule index")
 #undef paramdefaults
 #define paramreferences (molindex)
+#define paramvalids \
+(MoleculeIdValidator())
 
 #undef statetypes
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -40,8 +40,8 @@
 /** =========== define the function ====================== */
 Action::state_ptr SelectionNotMoleculeByNameAction::performCall() {
-  LOG(1, "Unselecting all molecule called " << params.molname);
+  LOG(1, "Unselecting all molecule called " << params.molname.get());
   std::vector<molecule *> unselectedMolecules =
-      World::getInstance().getAllMolecules((!MoleculesBySelection()) && MoleculeByName(params.molname));
-  World::getInstance().unselectAllMolecules(MoleculeByName(params.molname));
+      World::getInstance().getAllMolecules((!MoleculesBySelection()) && MoleculeByName(params.molname.get()));
+  World::getInstance().unselectAllMolecules(MoleculeByName(params.molname.get()));
   LOG(0, World::getInstance().countSelectedMolecules() << " molecules remain selected.");
 
@@ -52,5 +52,5 @@
   SelectionNotMoleculeByNameState *state = assert_cast<SelectionNotMoleculeByNameState*>(_state.get());
 
-  World::getInstance().selectAllMolecules(MoleculeByName(state->params.molname));
+  World::getInstance().selectAllMolecules(MoleculeByName(state->params.molname.get()));
   BOOST_FOREACH( molecule *mol, state->unselectedMolecules)
     World::getInstance().unselectMolecule(mol);
@@ -62,5 +62,5 @@
   SelectionNotMoleculeByNameState *state = assert_cast<SelectionNotMoleculeByNameState*>(_state.get());
 
-  World::getInstance().unselectAllMolecules(MoleculeByName(state->params.molname));
+  World::getInstance().unselectAllMolecules(MoleculeByName(state->params.molname.get()));
 
   return Action::state_ptr(_state);
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class molecule;
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::string)
 #define paramtokens ("unselect-molecules-by-name")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (molname)
+#define paramvalids \
+(DummyValidator< std::string >())
 
 #define statetypes (std::vector<molecule *>)
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -39,5 +39,5 @@
 
 Action::state_ptr SelectionNotMoleculeByOrderAction::performCall() {
-  molecule *mol = World::getInstance().getMolecule(MoleculeByOrder(params.molindex));
+  molecule *mol = World::getInstance().getMolecule(MoleculeByOrder(params.molindex.get()));
 
   if (mol != NULL) {
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 class molecule;
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (int)
 #define paramtokens ("unselect-molecule-by-order")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (molindex)
+#define paramvalids \
+(DummyValidator< int >())
 
 #define statetypes (const molecule *)
Index: src/Actions/SelectionAction/Molecules/NotMoleculeOfAtomAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeOfAtomAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeOfAtomAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -16,4 +18,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::vector<molecule*>)
Index: src/Actions/TesselationAction/ConvexEnvelopeAction.cpp
===================================================================
--- src/Actions/TesselationAction/ConvexEnvelopeAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/TesselationAction/ConvexEnvelopeAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -50,6 +50,6 @@
     const LinkedCell_deprecated *LCList = NULL;
     LOG(0, "Evaluating volume of the convex envelope.");
-    LOG(1, "Storing tecplot convex data in " << params.filenameConvex << ".");
-    LOG(1, "Storing tecplot non-convex data in " << params.filenameNonConvex << ".");
+    LOG(1, "Storing tecplot convex data in " << params.filenameConvex.get() << ".");
+    LOG(1, "Storing tecplot non-convex data in " << params.filenameNonConvex.get() << ".");
     PointCloudAdaptor<molecule> cloud(mol, mol->name);
     LCList = new LinkedCell_deprecated(cloud, 100.);
@@ -57,7 +57,7 @@
     //FindConvexBorder(mol, BoundaryPoints, TesselStruct, LCList, argv[argptr]);
     // TODO: Beide Funktionen sollten streams anstelle des Filenamen benutzen, besser fuer unit tests
-    FindNonConvexBorder(mol, TesselStruct, LCList, 50., params.filenameNonConvex.string().c_str());
+    FindNonConvexBorder(mol, TesselStruct, LCList, 50., params.filenameNonConvex.get().string().c_str());
     //RemoveAllBoundaryPoints(TesselStruct, mol, argv[argptr]);
-    const double volumedifference = ConvexizeNonconvexEnvelope(TesselStruct, mol, params.filenameConvex.string().c_str());
+    const double volumedifference = ConvexizeNonconvexEnvelope(TesselStruct, mol, params.filenameConvex.get().string().c_str());
     const double clustervolume = TesselStruct->getVolumeOfConvexEnvelope(configuration->GetIsAngstroem());
     LOG(0, "The tesselated volume area is " << clustervolume << " " << (configuration->GetIsAngstroem() ? "angstrom" : "atomiclength") << "^3.");
Index: src/Actions/TesselationAction/ConvexEnvelopeAction.def
===================================================================
--- src/Actions/TesselationAction/ConvexEnvelopeAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/TesselationAction/ConvexEnvelopeAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,10 @@
 class TesselationListClass;
 
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)(boost::filesystem::path)
 #define paramtokens ("convex-file")("nonconvex-file")
@@ -17,4 +20,7 @@
 #undef paramdefaults
 #define paramreferences (filenameConvex)(filenameNonConvex)
+#define paramvalids \
+(!FilePresentValidator()) \
+(!FilePresentValidator())
 
 #undef statetypes
Index: src/Actions/TesselationAction/NonConvexEnvelopeAction.cpp
===================================================================
--- src/Actions/TesselationAction/NonConvexEnvelopeAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/TesselationAction/NonConvexEnvelopeAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -49,11 +49,11 @@
     const LinkedCell_deprecated *LCList = NULL;
     LOG(0, "Evaluating non-convex envelope of molecule." << Boundary->getId());
-    LOG(1, "Using rolling ball of radius " << params.SphereRadius << " and storing tecplot data in " << params.filename << ".");
+    LOG(1, "Using rolling ball of radius " << params.SphereRadius.get() << " and storing tecplot data in " << params.filename.get() << ".");
     LOG(1, "Specified molecule has " << Boundary->getAtomCount() << " atoms.");
     start = clock();
     PointCloudAdaptor< molecule > cloud(Boundary, Boundary->name);
-    LCList = new LinkedCell_deprecated(cloud, params.SphereRadius*2.);
-    Success = FindNonConvexBorder(Boundary, T, LCList, params.SphereRadius, params.filename.string().c_str());
-    //FindDistributionOfEllipsoids(T, &LCList, N, number, params.filename.c_str());
+    LCList = new LinkedCell_deprecated(cloud, params.SphereRadius.get()*2.);
+    Success = FindNonConvexBorder(Boundary, T, LCList, params.SphereRadius.get(), params.filename.get().string().c_str());
+    //FindDistributionOfEllipsoids(T, &LCList, N, number, params.filename.get().c_str());
     end = clock();
     LOG(0, "Clocks for this operation: " << (end-start) << ", time: " << ((double)(end-start)/CLOCKS_PER_SEC) << "s.");
Index: src/Actions/TesselationAction/NonConvexEnvelopeAction.def
===================================================================
--- src/Actions/TesselationAction/NonConvexEnvelopeAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/TesselationAction/NonConvexEnvelopeAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,11 @@
 class TesselationListClass;
 
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/BoxLengthValidator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (double)(boost::filesystem::path)
 #define paramtokens ("nonconvex-envelope")("nonconvex-file")
@@ -17,4 +21,7 @@
 #undef paramdefaults
 #define paramreferences (SphereRadius)(filename)
+#define paramvalids \
+(BoxLengthValidator()) \
+(!FilePresentValidator())
 
 #undef statetypes
Index: src/Actions/UndoAction.def
===================================================================
--- src/Actions/UndoAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/UndoAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -8,7 +8,9 @@
 // all includes and forward declarations necessary for non-integral types below
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramreferences
Index: src/Actions/UndoRedoHelpers.cpp
===================================================================
--- src/Actions/UndoRedoHelpers.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/UndoRedoHelpers.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -26,5 +26,7 @@
 
 #include "Atom/atom.hpp"
+#include "molecule.hpp"
 #include "Descriptors/AtomIdDescriptor.hpp"
+#include "Descriptors/MoleculeIdDescriptor.hpp"
 #include "CodePatterns/Assert.hpp"
 #include "CodePatterns/Log.hpp"
@@ -123,2 +125,14 @@
   }
 }
+
+void MoleCuilder::RemoveMoleculesWithAtomsByIds(const std::vector<moleculeId_t> &ids)
+{
+  for (std::vector<moleculeId_t>::const_iterator iter = ids.begin();
+      iter != ids.end(); ++iter) {
+    molecule * const mol = World::getInstance().getMolecule(MoleculeById(*iter));
+    if (mol != NULL) {
+      mol->removeAtomsinMolecule();
+      World::getInstance().destroyMolecule(mol);
+    }
+  }
+}
Index: src/Actions/UndoRedoHelpers.hpp
===================================================================
--- src/Actions/UndoRedoHelpers.hpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/UndoRedoHelpers.hpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -70,4 +70,10 @@
    */
   void ResetAtomPosition(const std::vector<AtomicInfo> &movedatoms, const std::vector<Vector> &MovedToVector);
+
+  /** Remove all molecules identified by their ids given in \a ids.
+   *
+   * @param ids vector of molecular ids to remove
+   */
+  void RemoveMoleculesWithAtomsByIds(const std::vector<moleculeId_t> &ids);
 }
 
Index: src/Actions/Values.cpp
===================================================================
--- src/Actions/Values.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/Values.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -47,8 +47,8 @@
 }
 
-Box BoxValue::toBox() const
+RealSpaceMatrix RealSpaceMatrixValue::toRealSpaceMatrix() const
 {
-  Box returnBox(ReturnFullMatrixforSymmetric(matrix));
+  RealSpaceMatrix returnMatrix(ReturnFullMatrixforSymmetric(matrix));
 
-  return returnBox;
+  return returnMatrix;
 }
Index: src/Actions/Values.hpp
===================================================================
--- src/Actions/Values.hpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/Values.hpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -18,4 +18,5 @@
 class Box;
 class BoxVector;
+class RealSpaceMatrix;
 class Vector;
 
@@ -37,9 +38,9 @@
  * as BoxValue and lateron inside the CommandLineQuery placed into the real Box.
  */
-struct BoxValue
+struct RealSpaceMatrixValue
 {
   double matrix[(NDIM*(NDIM+1))/2];
 
-  Box toBox() const;
+  RealSpaceMatrix toRealSpaceMatrix() const;
 };
 
Index: src/Actions/WorldAction/AddEmptyBoundaryAction.cpp
===================================================================
--- src/Actions/WorldAction/AddEmptyBoundaryAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/AddEmptyBoundaryAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -77,5 +77,5 @@
     for (int i=0;i<NDIM;i++) {
       j += i+1;
-      cell_size[j] = (Max[i]-Min[i]+2.*params.boundary[i]);
+      cell_size[j] = (Max[i]-Min[i]+2.*params.boundary.get()[i]);
     }
     World::getInstance().setDomain(cell_size);
@@ -86,5 +86,5 @@
         AtomRunner != AllAtoms.end();
         ++AtomRunner)
-      *(*AtomRunner) -= Min - params.boundary;
+      *(*AtomRunner) -= Min - params.boundary.get();
 
     // give final box size
@@ -125,5 +125,5 @@
       AtomRunner != AllAtoms.end();
       ++AtomRunner)
-    *(*AtomRunner) += state->Min - state->params.boundary;
+    *(*AtomRunner) += state->Min - state->params.boundary.get();
 
   return Action::state_ptr(_state);
@@ -143,5 +143,5 @@
       AtomRunner != AllAtoms.end();
       ++AtomRunner)
-    *(*AtomRunner) -= state->Min - state->params.boundary;
+    *(*AtomRunner) -= state->Min - state->params.boundary.get();
 
   return Action::state_ptr(_state);
Index: src/Actions/WorldAction/AddEmptyBoundaryAction.def
===================================================================
--- src/Actions/WorldAction/AddEmptyBoundaryAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/AddEmptyBoundaryAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -11,7 +11,9 @@
 #include "LinearAlgebra/Vector.hpp"
 
+#include "Parameters/Validators/Specific/VectorPositiveComponentsValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (Vector)
 #define paramtokens ("add-empty-boundary")
@@ -19,4 +21,6 @@
 #undef paramdefaults
 #define paramreferences (boundary)
+#define paramvalids \
+(VectorPositiveComponentsValidator())
 
 #define statetypes (std::string)(RealSpaceMatrix)(Vector)
Index: src/Actions/WorldAction/BoundInBoxAction.def
===================================================================
--- src/Actions/WorldAction/BoundInBoxAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/BoundInBoxAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -11,7 +11,9 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -19,4 +21,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::vector< boost::shared_ptr<Vector> >)
Index: src/Actions/WorldAction/CenterInBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/CenterInBoxAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/CenterInBoxAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -69,5 +69,5 @@
 
   // set new domain
-  World::getInstance().setDomain(params.cell_size.getM());
+  World::getInstance().setDomain(params.cell_size.get());
 
   // center atoms
@@ -125,5 +125,5 @@
 
   // set new domain
-  World::getInstance().setDomain(state->params.cell_size.getM());
+  World::getInstance().setDomain(state->params.cell_size.get());
 
   // center atoms
Index: src/Actions/WorldAction/CenterInBoxAction.def
===================================================================
--- src/Actions/WorldAction/CenterInBoxAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/CenterInBoxAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -7,17 +7,20 @@
 
 // all includes and forward declarations necessary for non-integral types below
-#include "Actions/Values.hpp"
-#include "Box.hpp"
-#include "LinearAlgebra/Vector.hpp"
-#include <boost/shared_ptr.hpp>
+#include "LinearAlgebra/RealSpaceMatrix.hpp"
+
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/RealSpaceMatrixSymmetricValidator.hpp"
+#include "Parameters/Validators/Specific/RealSpaceMatrixInvertibleValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (Box)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (RealSpaceMatrix)
 #define paramtokens ("center-in-box")
 #define paramdescriptions ("symmetric matrix of new domain")
 #undef paramdefaults
 #define paramreferences (cell_size)
+#define paramvalids \
+(RealSpaceMatrixSymmetricValidator() && RealSpaceMatrixInvertibleValidator())
 
 #define statetypes (std::string)(std::vector< boost::shared_ptr<Vector> >)
Index: src/Actions/WorldAction/CenterOnEdgeAction.def
===================================================================
--- src/Actions/WorldAction/CenterOnEdgeAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/CenterOnEdgeAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 #include "LinearAlgebra/Vector.hpp"
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
@@ -17,4 +19,5 @@
 #undef paramdefaults
 #undef paramreferences
+#undef paramvalids
 
 #define statetypes (std::string)(Vector)(Vector)
Index: src/Actions/WorldAction/ChangeBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/ChangeBoxAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/ChangeBoxAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -50,5 +50,5 @@
   oa << matrix;
 
-  World::getInstance().setDomain(params.cell_size.getM()); // this is needed as only this function is OBSERVEd.
+  World::getInstance().setDomain(params.cell_size.get()); // this is needed as only this function is OBSERVEd.
 
   // give final box size
@@ -82,5 +82,5 @@
 
 Action::state_ptr WorldChangeBoxAction::performRedo(Action::state_ptr _state){
-  World::getInstance().setDomain(params.cell_size.getM()); // this is needed as only this function is OBSERVEd.
+  World::getInstance().setDomain(params.cell_size.get()); // this is needed as only this function is OBSERVEd.
 
   // give final box size
Index: src/Actions/WorldAction/ChangeBoxAction.def
===================================================================
--- src/Actions/WorldAction/ChangeBoxAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/ChangeBoxAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -7,15 +7,20 @@
 
 // all includes and forward declarations necessary for non-integral types below
-#include "Actions/Values.hpp"
-#include "Box.hpp"
+#include "LinearAlgebra/RealSpaceMatrix.hpp"
+
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/RealSpaceMatrixSymmetricValidator.hpp"
+#include "Parameters/Validators/Specific/RealSpaceMatrixInvertibleValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (Box)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (RealSpaceMatrix)
 #define paramtokens ("change-box")
 #define paramdescriptions ("symmetrc matrix of the new simulation domain")
 #undef paramdefaults
 #define paramreferences (cell_size)
+#define paramvalids \
+(RealSpaceMatrixSymmetricValidator() && RealSpaceMatrixInvertibleValidator())
 
 #define statetypes (std::string)
Index: src/Actions/WorldAction/InputAction.cpp
===================================================================
--- src/Actions/WorldAction/InputAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/InputAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -46,16 +46,16 @@
   FormatParserStorage &parsers = FormatParserStorage::getInstance();
 
-  LOG(0, "Config file given " << params.filename << ".");
+  LOG(0, "Config file given " << params.filename.get() << ".");
   // using the filename as prefix for all parsers
   std::string FilenameSuffix;
   std::string FilenamePrefix;
-  if (params.filename.has_filename()) {
+  if (params.filename.get().has_filename()) {
     // get suffix
 #if BOOST_VERSION >= 104600
-    FilenameSuffix = params.filename.extension().string().substr(1); // remove the prefixed "."
-    FilenamePrefix = params.filename.stem().string();
+    FilenameSuffix = params.filename.get().extension().string().substr(1); // remove the prefixed "."
+    FilenamePrefix = params.filename.get().stem().string();
 #else
-    FilenameSuffix = params.filename.extension().substr(1); // remove the prefixed "."
-    FilenamePrefix = params.filename.stem();
+    FilenameSuffix = params.filename.get().extension().substr(1); // remove the prefixed "."
+    FilenamePrefix = params.filename.get().stem();
 #endif
     LOG(1, "Setting config file name prefix to " << FilenamePrefix << ".");
@@ -67,6 +67,6 @@
 
   // parsing file if present
-  if (!boost::filesystem::exists(params.filename)) {
-    LOG(1, "Specified config file " << params.filename << " not found.");
+  if (!boost::filesystem::exists(params.filename.get())) {
+    LOG(1, "Specified config file " << params.filename.get() << " not found.");
     // DONT FAIL: it's just empty and we use the name. // return Action::failure;
     // nonetheless, add to output formats
@@ -76,5 +76,5 @@
 
     // parse the file
-    test.open(params.filename);
+    test.open(params.filename.get());
     parsers.load(test, FilenameSuffix);
     parsers.setOutputFormat( parsers.getTypeFromSuffix(FilenameSuffix) );
Index: src/Actions/WorldAction/InputAction.def
===================================================================
--- src/Actions/WorldAction/InputAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/InputAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 #include <boost/filesystem.hpp>
 
+#include "Parameters/Validators/Specific/ParserFileValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)
 #define paramtokens ("input")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (filename)
+#define paramvalids \
+(ParserFileValidator())
 
 #undef statetypes
Index: src/Actions/WorldAction/OutputAction.cpp
===================================================================
--- src/Actions/WorldAction/OutputAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/OutputAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -39,17 +39,17 @@
 /** =========== define the function ====================== */
 Action::state_ptr WorldOutputAction::performCall() {
-  LOG(1, "Storing world to file " << params.filename << ".");
+  LOG(1, "Storing world to file " << params.filename.get() << ".");
 
   // extract suffix
   std::string FilenameSuffix;
   std::string FilenamePrefix;
-  if (params.filename.has_filename()) {
+  if (params.filename.get().has_filename()) {
     // get suffix
 #if BOOST_VERSION >= 104600
-    FilenameSuffix = params.filename.extension().string().substr(1); // remove the prefixed "."
-    FilenamePrefix = params.filename.stem().string();
+    FilenameSuffix = params.filename.get().extension().string().substr(1); // remove the prefixed "."
+    FilenamePrefix = params.filename.get().stem().string();
 #else
-    FilenameSuffix = params.filename.extension().substr(1); // remove the prefixed "."
-    FilenamePrefix = params.filename.stem();
+    FilenameSuffix = params.filename.get().extension().substr(1); // remove the prefixed "."
+    FilenamePrefix = params.filename.get().stem();
 #endif
   } else {
@@ -61,9 +61,9 @@
   // parse the file
   boost::filesystem::ofstream output;
-  output.open(params.filename);
+  output.open(params.filename.get());
   if (!output.fail()) {
     FormatParserStorage::getInstance().saveWorld(output, FilenameSuffix);
   } else {
-    ELOG(1, "Could not open file " << params.filename << ".");
+    ELOG(1, "Could not open file " << params.filename.get() << ".");
   }
   output.close();
Index: src/Actions/WorldAction/OutputAction.def
===================================================================
--- src/Actions/WorldAction/OutputAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/OutputAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,11 @@
 #
 
+#include "Parameters/Validators/Ops_Validator.hpp"
+#include "Parameters/Validators/Specific/FilePresentValidator.hpp"
+#include "Parameters/Validators/Specific/ParserFileValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)
 #define paramtokens ("output")
@@ -17,4 +21,6 @@
 #undef paramdefaults
 #define paramreferences (filename)
+#define paramvalids \
+(!FilePresentValidator() && ParserFileValidator())
 
 #undef statetypes
Index: src/Actions/WorldAction/RepeatBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/RepeatBoxAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/RepeatBoxAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -45,5 +45,7 @@
 /** =========== define the function ====================== */
 
-void repeatMoleculesinDomain(Vector Repeater, const std::vector<molecule *> &AllMolecules)
+void repeatMoleculesinDomain(
+    std::vector< unsigned int > Repeater,
+    const std::vector<molecule *> &AllMolecules)
 {
   LOG(0, "STATUS: Repeating box " << Repeater << " times for (x,y,z) axis.");
@@ -53,7 +55,7 @@
   RealSpaceMatrix newM = M;
   Vector x,y;
-  int n[NDIM];
+  unsigned int n[NDIM];
   RealSpaceMatrix repMat;
-  for (int axis = 0; axis < NDIM; axis++) {
+  for (unsigned int axis = 0; axis < NDIM; axis++) {
     Repeater[axis] = floor(Repeater[axis]);
     if (Repeater[axis] < 1) {
@@ -109,5 +111,5 @@
   WorldRepeatBoxState *undostate = new WorldRepeatBoxState(olddomain, oldmolecules, params);
 
-  repeatMoleculesinDomain(params.Repeater, AllMolecules);
+  repeatMoleculesinDomain(params.Repeater.get(), AllMolecules);
 
   // give final box size
@@ -151,5 +153,5 @@
       ++iter)
     originalmolecules.push_back(*iter);
-  repeatMoleculesinDomain(state->params.Repeater, originalmolecules);
+  repeatMoleculesinDomain(state->params.Repeater.get(), originalmolecules);
 
   // give final box size
Index: src/Actions/WorldAction/RepeatBoxAction.def
===================================================================
--- src/Actions/WorldAction/RepeatBoxAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/RepeatBoxAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -7,19 +7,24 @@
 
 // all includes and forward declarations necessary for non-integral types below
-#include "Actions/Values.hpp"
 #include "LinearAlgebra/RealSpaceMatrix.hpp"
-#include "LinearAlgebra/Vector.hpp"
 #include <set>
+#include <vector>
 
 class molecule;
 
+#include "LinearAlgebra/defs.hpp"
+#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/STLVectorValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (Vector)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (std::vector< unsigned int >)
 #define paramtokens ("repeat-box")
 #define paramdescriptions ("number of copies to create per axis")
 #undef paramdefaults
 #define paramreferences (Repeater)
+#define paramvalids \
+(STLVectorValidator< std::vector< unsigned int > >(NDIM, NDIM))
 
 #define statetypes (RealSpaceMatrix)(std::set< molecule *>)
Index: src/Actions/WorldAction/ScaleBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/ScaleBoxAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/ScaleBoxAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -44,5 +44,5 @@
   // scale atoms
   for (int i=0;i<NDIM;i++)
-    x[i] = params.Scaler[i];
+    x[i] = params.Scaler.get()[i];
   std::vector<atom*> AllAtoms = World::getInstance().getAllAtoms();
   for(std::vector<atom*>::iterator AtomRunner = AllAtoms.begin(); AtomRunner != AllAtoms.end(); ++AtomRunner) {
@@ -54,5 +54,5 @@
   RealSpaceMatrix scale;
   for (int i=0;i<NDIM;i++) {
-    scale.at(i,i) = params.Scaler[i];
+    scale.at(i,i) = params.Scaler.get()[i];
   }
   M *= scale;
@@ -74,5 +74,5 @@
   double x[NDIM];
   for (int i=0;i<NDIM;i++)
-    x[i] = 1./state->params.Scaler[i];
+    x[i] = 1./state->params.Scaler.get()[i];
   vector<atom*> AllAtoms = World::getInstance().getAllAtoms();
   for(vector<atom*>::iterator AtomRunner = AllAtoms.begin(); AtomRunner != AllAtoms.end(); ++AtomRunner) {
@@ -84,5 +84,5 @@
   RealSpaceMatrix scale;
   for (int i=0;i<NDIM;i++) {
-    scale.at(i,i) = 1./state->params.Scaler[i];
+    scale.at(i,i) = 1./state->params.Scaler.get()[i];
   }
   M *= scale;
@@ -101,5 +101,5 @@
   double x[NDIM];
   for (int i=0;i<NDIM;i++)
-    x[i] = state->params.Scaler[i];
+    x[i] = state->params.Scaler.get()[i];
   vector<atom*> AllAtoms = World::getInstance().getAllAtoms();
   for(vector<atom*>::iterator AtomRunner = AllAtoms.begin(); AtomRunner != AllAtoms.end(); ++AtomRunner) {
@@ -111,5 +111,5 @@
   RealSpaceMatrix scale;
   for (int i=0;i<NDIM;i++) {
-    scale.at(i,i) = state->params.Scaler[i];
+    scale.at(i,i) = state->params.Scaler.get()[i];
   }
   M *= scale;
Index: src/Actions/WorldAction/ScaleBoxAction.def
===================================================================
--- src/Actions/WorldAction/ScaleBoxAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/ScaleBoxAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -10,7 +10,9 @@
 #include "LinearAlgebra/Vector.hpp"
 
+#include "Parameters/Validators/Specific/VectorPositiveComponentsValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (Vector)
 #define paramtokens ("scale-box")
@@ -18,4 +20,6 @@
 #undef paramdefaults
 #define paramreferences (Scaler)
+#define paramvalids \
+(VectorPositiveComponentsValidator())
 
 #undef statetypes
Index: src/Actions/WorldAction/SetBoundaryConditionsAction.cpp
===================================================================
--- src/Actions/WorldAction/SetBoundaryConditionsAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/SetBoundaryConditionsAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -52,5 +52,5 @@
 
   // set conditions
-  World::getInstance().getDomain().setConditions(params.newconditions);
+  World::getInstance().getDomain().setConditions(params.newconditions.get());
 
   LOG(0, "STATUS: Boundary conditions are now " << World::getInstance().getDomain().getConditionNames() << ".");
@@ -72,5 +72,5 @@
 
   // set again conditions
-  World::getInstance().getDomain().setConditions(state->params.newconditions);
+  World::getInstance().getDomain().setConditions(state->params.newconditions.get());
 
   LOG(0, "STATUS: Boundary conditions are again " << World::getInstance().getDomain().getConditionNames() << ".");
Index: src/Actions/WorldAction/SetBoundaryConditionsAction.def
===================================================================
--- src/Actions/WorldAction/SetBoundaryConditionsAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/SetBoundaryConditionsAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -10,12 +10,17 @@
 #include <string>
 
+#include "Parameters/Validators/STLVectorValidator.hpp"
+#include "Parameters/Validators/Specific/BoundaryConditionValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (std::string)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (std::vector< std::string >)
 #define paramtokens ("set-boundary-conditions")
 #define paramdescriptions ("new boundary conditions as list of three strings, e.g. 'wrap wrap ignore'")
 #undef paramdefaults
 #define paramreferences (newconditions)
+#define paramvalids \
+(STLVectorValidator< std::vector< std::string > >(NDIM, NDIM, BoundaryConditionValidator()))
 
 #define statetypes (std::string)
Index: src/Actions/WorldAction/SetDefaultNameAction.cpp
===================================================================
--- src/Actions/WorldAction/SetDefaultNameAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/SetDefaultNameAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -40,5 +40,5 @@
   WorldSetDefaultNameState *UndoState = new WorldSetDefaultNameState(Worldsdefaultname, params);
 
-  World::getInstance().setDefaultName(params.newname);
+  World::getInstance().setDefaultName(params.newname.get());
   LOG(0, "Default name of new molecules set to " << World::getInstance().getDefaultName() << ".");
   return Action::state_ptr(UndoState);
@@ -57,5 +57,5 @@
   WorldSetDefaultNameState *state = assert_cast<WorldSetDefaultNameState*>(_state.get());
 
-  World::getInstance().setDefaultName(state->params.newname);
+  World::getInstance().setDefaultName(state->params.newname.get());
   LOG(0, "Default name of new molecules set to " << World::getInstance().getDefaultName() << ".");
 
Index: src/Actions/WorldAction/SetDefaultNameAction.def
===================================================================
--- src/Actions/WorldAction/SetDefaultNameAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/SetDefaultNameAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,7 +9,9 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
 #define paramtypes (std::string)
 #define paramtokens ("default-molname")
@@ -17,4 +19,6 @@
 #undef paramdefaults
 #define paramreferences (newname)
+#define paramvalids \
+(DummyValidator< std::string >())
 
 #define statetypes (std::string)
Index: src/Actions/WorldAction/SetWorldTimeAction.cpp
===================================================================
--- src/Actions/WorldAction/SetWorldTimeAction.cpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/SetWorldTimeAction.cpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -41,5 +41,5 @@
   WorldSetWorldTimeState *UndoState = new WorldSetWorldTimeState(oldtime, params);
 
-  WorldTime::getInstance().setTime(params.newtime);
+  WorldTime::getInstance().setTime(params.newtime.get());
   LOG(0, "Current time step is now: " << WorldTime::getTime() << ".");
   return Action::state_ptr(UndoState);
@@ -58,5 +58,5 @@
   WorldSetWorldTimeState *state = assert_cast<WorldSetWorldTimeState*>(_state.get());
 
-  WorldTime::getInstance().setTime(state->params.newtime);
+  WorldTime::getInstance().setTime(state->params.newtime.get());
   LOG(0, "Current time step is now: " << WorldTime::getTime() << ".");
 
Index: src/Actions/WorldAction/SetWorldTimeAction.def
===================================================================
--- src/Actions/WorldAction/SetWorldTimeAction.def	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/WorldAction/SetWorldTimeAction.def	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -9,14 +9,18 @@
 
 
+#include "Parameters/Validators/DummyValidator.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 (NODEFAULT) for each (undefined) default value
-#define paramtypes (int)
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#define paramtypes (unsigned int)
 #define paramtokens ("set-world-time")
 #define paramdescriptions ("new time step")
-#define paramdefaults ("0")
+#define paramdefaults (PARAM_DEFAULT(0))
 #define paramreferences (newtime)
+#define paramvalids \
+(DummyValidator< unsigned int >())
 
-#define statetypes (int)
+#define statetypes (unsigned int)
 #define statereferences (oldtime)
 
Index: src/Actions/test.sh
===================================================================
--- src/Actions/test.sh	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
+++ src/Actions/test.sh	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+OLDIFS=$IFS
+IFS='
+'
+# add paramvalids line
+for file in `find . -name '*.def' -exec grep -H "#define paramtypes" {} \;`; do 
+	paramfile=`echo $file | awk -F":" {'print $1'}`
+	validline=`echo $file | sed -e "s/[^:]*://" -e "s/(\([^)]*\))/(DummyValidator< \1 >())/g" -e "s/paramtypes/paramvalids/"`
+	if [ ! -z `grep "^#define paramtypes" $paramfile` ]; then
+		echo -n "$paramfile :"
+		sed -i -e "s/^\(#define paramtypes.*\)/\1\n$validline/" $paramfile 
+#| grep --after-context=1 "#define paramdefaults"
+	fi
+done
+IFS=$OLDIFS
+
+# append include
+find . -name '*.def' -exec sed -i -e "s#\(// i.e. there is an integer with variable name Z that can be found in\)#\#include \"Parameters/Validators/DummyValidator.hpp\"\n\n\1#" {} \;
Index: src/Actions/unittests/Makefile.am
===================================================================
--- src/Actions/unittests/Makefile.am	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/unittests/Makefile.am	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -31,5 +31,9 @@
 ActionRegistryUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
 	../Actions/unittests/ActionRegistryUnitTest.cpp \
-	../Actions/unittests/ActionRegistryUnitTest.hpp
+	../Actions/unittests/ActionRegistryUnitTest.hpp \
+	../Parameters/unittests/stubs/ActionNameValidatorStub.cpp \
+	../Parameters/unittests/stubs/BoxLengthValidatorStub.cpp \
+	../Parameters/unittests/stubs/BoxVectorValidatorStub.cpp \
+	../Parameters/unittests/stubs/TimeStepPresentValidatorStub.cpp
 ActionRegistryUnitTest_LDADD = ${ACTIONLIBS}
 
@@ -37,5 +41,9 @@
 	../Actions/unittests/ActionSequenceUnitTest.cpp \
 	../Actions/unittests/ActionSequenceUnitTest.hpp \
-	../Actions/unittests/stubs/DummyUI.hpp
+	../Actions/unittests/stubs/DummyUI.hpp \
+	../Parameters/unittests/stubs/ActionNameValidatorStub.cpp \
+	../Parameters/unittests/stubs/BoxLengthValidatorStub.cpp \
+	../Parameters/unittests/stubs/BoxVectorValidatorStub.cpp \
+	../Parameters/unittests/stubs/TimeStepPresentValidatorStub.cpp
 ActionSequenceUnitTest_LDADD = \
 	${ACTIONLIBS} \
Index: src/Actions/unittests/stubs/DummyUI.hpp
===================================================================
--- src/Actions/unittests/stubs/DummyUI.hpp	(revision 004d5c87ea6293a9829cd1f88041c885baa3bb18)
+++ src/Actions/unittests/stubs/DummyUI.hpp	(revision bd81f9550d144dc810bf910fa44f3c8249361651)
@@ -14,4 +14,5 @@
 #endif
 
+#include "Parameters/Parameter.hpp"
 #include "UIElements/UIFactory.hpp"
 #include "UIElements/Dialog.hpp"
@@ -24,25 +25,25 @@
 
   virtual void queryEmpty(const char *, std::string = ""){}
-  virtual void queryBoolean(const char *, std::string = ""){}
-  virtual void queryInt(const char *, std::string = ""){}
-  virtual void queryInts(const char *, std::string = ""){}
-  virtual void queryUnsignedInt(const char *, std::string = ""){}
-  virtual void queryUnsignedInts(const char *, std::string = ""){}
-  virtual void queryString(const char*, std::string = ""){}
-  virtual void queryStrings(const char*, std::string = ""){}
-  virtual void queryDouble(const char*, std::string = ""){}
-  virtual void queryDoubles(const char*, std::string = ""){}
-  virtual void queryAtom(const char*,std::string = ""){}
-  virtual void queryAtoms(const char*,std::string = ""){}
-  virtual void queryMolecule(const char*,std::string = ""){}
-  virtual void queryMolecules(const char*,std::string = ""){}
-  virtual void queryVector(const char*,bool, std::string = ""){}
-  virtual void queryVectors(const char*,bool, std::string = ""){}
-  virtual void queryBox(const char*, std::string = ""){}
-  virtual void queryElement(const char*, std::string = ""){}
-  virtual void queryElements(const char*, std::string = ""){}
-  virtual void queryFile(const char*, std::string = ""){}
-  virtual void queryFiles(const char*, std::string = ""){}
-  virtual void queryRandomNumberDistribution_Parameters(const char*, std::string = ""){}
+  virtual void queryBoolean(Parameter<bool> &, const char *, std::string = ""){}
+  virtual void queryInt(Parameter<int> &, const char *, std::string = ""){}
+  virtual void queryInts(Parameter<std::vector<int> > &, const char *, std::string = ""){}
+  virtual void queryUnsignedInt(Parameter<unsigned int> &, const char *, std::string = ""){}
+  virtual void queryUnsignedInts(Parameter<std::vector<unsigned int> > &, const char *, std::string = ""){}
+  virtual void queryString(Parameter<std::string> &, const char*, std::string = ""){}
+  virtual void queryStrings(Parameter<std::vector<std::string> > &, const char*, std::string = ""){}
+  virtual void queryDouble(Parameter<double> &, const char*, std::string = ""){}
+  virtual void queryDoubles(Parameter<std::vector<double> > &, const char*, std::string = ""){}
+  virtual void queryAtom(Parameter<const atom *> &, const char*,std::string = ""){}
+  virtual void queryAtoms(Parameter<std::vector<const atom *> > &, const char*,std::string = ""){}
+  virtual void queryMolecule(Parameter<const molecule *> &, const char*,std::string = ""){}
+  virtual void queryMolecules(Parameter<std::vector<const molecule *> > &, const char*,std::string = ""){}
+  virtual void queryVector(Parameter<Vector> &, const char*,bool, std::string = ""){}
+  virtual void queryVectors(Parameter<std::vector<Vector> > &, const char*,bool, std::string = ""){}
+  virtual void queryRealSpaceMatrix(Parameter<RealSpaceMatrix> &, const char*, std::string = ""){}
+  virtual void queryElement(Parameter<const element *> &, const char*, std::string = ""){}
+  virtual void queryElements(Parameter<std::vector<const element *> > &, const char*, std::string = ""){}
+  virtual void queryFile(Parameter<boost::filesystem::path> &, const char*, std::string = ""){}
+  virtual void queryFiles(Parameter<std::vector< boost::filesystem::path> >&, const char*, std::string = ""){}
+  virtual void queryRandomNumberDistribution_Parameters(Parameter<RandomNumberDistribution_Parameters> &, const char*, std::string = ""){}
 };
 
