Index: src/Actions/Action.cpp
===================================================================
--- src/Actions/Action.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/Action.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -26,6 +26,9 @@
 #include "Actions/ActionRegistry.hpp"
 #include "Actions/ActionHistory.hpp"
+#include "Actions/OptionRegistry.hpp"
+#include "Actions/OptionTrait.hpp"
 #include "Exceptions/MissingValueException.hpp"
 #include "UIElements/Dialog.hpp"
+#include "Helpers/Assert.hpp"
 #include "Helpers/MemDebug.hpp"
 #include "UIElements/UIFactory.hpp"
@@ -44,9 +47,30 @@
 Action::state_ptr Action::failure = getEmptyState();
 
-Action::Action(std::string _name,bool _doRegister) :
-name(_name)
+Action::Action(const ActionTraits &_Traits, bool _doRegister) :
+    Traits(_Traits)
 {
+  // register with ActionRegistry
   if(_doRegister){
     ActionRegistry::getInstance().registerInstance(this);
+  }
+
+  // register with OptionRegistry
+  for (ActionTraits::options_const_iterator optioniter = Traits.getBeginIter();
+      optioniter != Traits.getEndIter();
+      ++optioniter) {
+    // options may have been re-used by other Actions, so check beforehand whether adding is needed
+    if (!OptionRegistry::getInstance().isOptionPresentByName((optioniter->first))) {
+      OptionRegistry::getInstance().registerInstance(optioniter->second);
+    } else { // if present, ASSERT that types coincide
+      OptionTrait const * const PresentOption = OptionRegistry::getInstance().getOptionByName(optioniter->first);
+      ASSERT(PresentOption->getType() == optioniter->second->getType(),
+          ("Action::Action() - option to add "+
+              std::string(optioniter->first)+
+              " of Action "+
+              std::string(getName())+
+              " is already present with different type!"
+          )
+      );
+    }
   }
 }
@@ -56,5 +80,5 @@
 
 const string Action::getName(){
-  return name;
+  return Traits.getName();
 }
 
Index: src/Actions/Action.hpp
===================================================================
--- src/Actions/Action.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/Action.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,4 +11,10 @@
 #include <string>
 #include <boost/shared_ptr.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
+ * before these are included.
+ */
+#define NODEFAULT std::string()
 
 // forward declaration
@@ -322,6 +328,12 @@
    * be registered with the ActionRegistry. If the Action is registered the name of the
    * Action needs to be unique for all Actions that are registered.
-   */
-  Action(std::string _name,bool _doRegister=true);
+   *
+   * \note NO reference for \a _Traits as we do have to copy it, otherwise _Traits would have
+   * to be present throughout the program's run.
+   *
+   * \param Traits information class to this action
+   * \param _doRegister whether to register with ActionRegistry
+   */
+  Action(const ActionTraits &_Traits, bool _doRegister=true);
   virtual ~Action();
 
@@ -366,7 +378,19 @@
    * Returns the name of the Action.
    */
-  virtual const std::string getName();
-
-  ActionTraits Traits;
+  const std::string getName();
+
+  /**
+   * Traits resemble all necessary information that "surrounds" an action, such as
+   * its name (for ActionRegistry and as ref from string to instance and vice versa),
+   * which menu, which position, what parameters, their types, if it is itself a
+   * parameter and so on ...
+   *
+   * Note that is important that we do not use a reference here. We want to copy the
+   * information in the Action's constructor and have it contained herein. Hence, we
+   * also have our own copy constructor for ActionTraits. Information should be
+   * encapsulated in the Action, no more references to the outside than absolutely
+   * necessary.
+   */
+  const ActionTraits Traits;
 
 protected:
@@ -445,6 +469,4 @@
    */
   virtual state_ptr performRedo(state_ptr)=0;
-
-  std::string name;
 };
 
Index: src/Actions/ActionHistory.cpp
===================================================================
--- src/Actions/ActionHistory.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ActionHistory.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -20,5 +20,5 @@
 #include "Helpers/MemDebug.hpp"
 
-#include "ActionHistory.hpp"
+#include "Actions/ActionHistory.hpp"
 
 #include <iostream>
@@ -26,7 +26,4 @@
 #include "Patterns/Singleton_impl.hpp"
 #include "Helpers/Assert.hpp"
-#include "Helpers/MemDebug.hpp"
-
-using namespace std;
 
 ActionHistory::ActionHistory()
@@ -72,6 +69,4 @@
   ActionHistory *hist = new ActionHistory();
   setInstance(hist);
-  new UndoAction(hist);
-  new RedoAction(hist);
 }
 
@@ -80,91 +75,2 @@
 /****************** Contained actions *******************/
 
-const char ActionHistory::UndoAction::NAME[] = "undo";
-
-ActionHistory::UndoAction::UndoAction(ActionHistory *_hist) :
-  Action(NAME),
-  hist(_hist)
-{}
-
-ActionHistory::UndoAction::~UndoAction(){}
-
-bool ActionHistory::UndoAction::canUndo(){
-  return false;
-}
-
-bool ActionHistory::UndoAction::shouldUndo(){
-  return false;
-}
-
-bool ActionHistory::UndoAction::isActive(){
-  return hist->hasUndo();
-}
-
-void ActionHistory::UndoAction::getParametersfromValueStorage()
-{}
-
-Dialog* ActionHistory::UndoAction::fillDialog(Dialog *dialog){
-  ASSERT(dialog,"No Dialog given when filling action dialog");
-  return dialog;
-}
-
-Action::state_ptr ActionHistory::UndoAction::performCall(){
-  std::cout << "Undo" << std::endl;
-  hist->undoLast();
-  return Action::success;
-}
-
-Action::state_ptr ActionHistory::UndoAction::performUndo(Action::state_ptr){
-  ASSERT(0,"Cannot undo an undo (should use redo for this");
-  return Action::success;
-}
-
-Action::state_ptr ActionHistory::UndoAction::performRedo(Action::state_ptr){
-  ASSERT(0,"Cannot redo an undo");
-  return Action::success;
-}
-
-const char ActionHistory::RedoAction::NAME[] = "redo";
-
-ActionHistory::RedoAction::RedoAction(ActionHistory *_hist) :
-    Action(NAME),
-    hist(_hist)
-{}
-
-ActionHistory::RedoAction::~RedoAction(){}
-
-bool ActionHistory::RedoAction::canUndo(){
-  return false;
-}
-
-bool ActionHistory::RedoAction::shouldUndo(){
-  return false;
-}
-
-bool ActionHistory::RedoAction::isActive(){
-  return hist->hasRedo();
-}
-
-void ActionHistory::RedoAction::getParametersfromValueStorage()
-{}
-
-Dialog* ActionHistory::RedoAction::fillDialog(Dialog *dialog){
-  ASSERT(dialog,"No Dialog given when filling action dialog");
-  return dialog;
-}
-
-Action::state_ptr ActionHistory::RedoAction::performCall(){
-  std::cout << "Redo" << std::endl;
-  hist->redoLast();
-  return Action::success;
-}
-
-Action::state_ptr ActionHistory::RedoAction::performUndo(Action::state_ptr){
-  ASSERT(0,"Cannot undo a redo (should use undo for this");
-  return Action::success;
-}
-
-Action::state_ptr ActionHistory::RedoAction::performRedo(Action::state_ptr){
-  ASSERT(0,"Cannot redo a redo");
-  return Action::success;
-}
Index: src/Actions/ActionHistory.hpp
===================================================================
--- src/Actions/ActionHistory.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ActionHistory.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -14,4 +14,6 @@
 
 #include "Actions/Action.hpp"
+#include "Actions/RedoAction.hpp"
+#include "Actions/UndoAction.hpp"
 
 
@@ -27,49 +29,4 @@
     Action *action;
     Action::state_ptr state;
-  };
-
-  class UndoAction : public Action {
-  public:
-    UndoAction(ActionHistory*);
-    virtual ~UndoAction();
-
-    virtual bool canUndo();
-    virtual bool shouldUndo();
-
-    virtual bool isActive();
-  protected:
-    virtual Dialog * fillDialog(Dialog *dialog);
-  private:
-    virtual void getParametersfromValueStorage();
-  virtual Action::state_ptr performCall();
-    virtual Action::state_ptr performUndo(Action::state_ptr);
-    virtual Action::state_ptr performRedo(Action::state_ptr);
-
-    ActionHistory *hist;
-
-    static const char NAME[];
-  };
-
-  class RedoAction : public Action {
-  public:
-    RedoAction(ActionHistory*);
-    virtual ~RedoAction();
-
-    virtual bool canUndo();
-    virtual bool shouldUndo();
-
-    virtual bool isActive();
-
-  protected:
-    virtual Dialog * fillDialog(Dialog *dialog);
-  private:
-    virtual void getParametersfromValueStorage();
-    virtual Action::state_ptr performCall();
-    virtual Action::state_ptr performUndo(Action::state_ptr);
-    virtual Action::state_ptr performRedo(Action::state_ptr);
-
-    ActionHistory *hist;
-
-    static const char NAME[];
   };
 
Index: src/Actions/ActionRegistry.cpp
===================================================================
--- src/Actions/ActionRegistry.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ActionRegistry.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -47,5 +47,5 @@
  * \return true - Action instance present, false - not
  */
-bool ActionRegistry::isActionPresentByName(const std::string name)
+bool ActionRegistry::isActionPresentByName(const std::string name) const
 {
   return isPresentByName(name);
Index: src/Actions/ActionRegistry.hpp
===================================================================
--- src/Actions/ActionRegistry.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ActionRegistry.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -30,5 +30,5 @@
 public:
   Action* getActionByName(const std::string name);
-  bool isActionPresentByName(const std::string name);
+  bool isActionPresentByName(const std::string name) const;
 
 private:
Index: src/Actions/ActionTraits.cpp
===================================================================
--- src/Actions/ActionTraits.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ActionTraits.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -15,38 +15,76 @@
 #include "Actions/ActionTraits.hpp"
 
+#include "Helpers/Assert.hpp"
+
+#include <iostream>
+#include <sstream>
 #include <string>
+#include <typeinfo>
+
+/** Copy constructor for base class ActionTraits.
+ * \param &_Traits source ActionTraits class to copy
+ */
+ActionTraits::ActionTraits(const std::string &_token) :
+  OptionTrait(_token,
+      &typeid(void),
+      "this is an invisible action",
+      "",
+      ""
+  )
+{
+  std::cout << "ActionTraits::ActionTraits(string &) with " << getName() << ", type " << getTypeName() << " and description " << getDescription() << std::endl;
+}
+
+/** Copy constructor for base class ActionTraits.
+ * we have to make our own copy in order to avoid references and deep-copy everything.
+ * \param &_Traits source ActionTraits class to copy
+ */
+ActionTraits::ActionTraits(const ActionTraits &_Traits) :
+  OptionTrait(_Traits.getName(),
+      _Traits.getType(),
+      _Traits.getDescription(),
+      _Traits.hasDefaultValue() ? _Traits.getDefaultValue() : "",
+      _Traits.hasShortForm() ? _Traits.getShortForm() : ""
+  )
+{
+  MenuTitle = _Traits.MenuTitle;
+  MenuPosition = _Traits.MenuPosition;
+  for (options_const_iterator iter = _Traits.Options.begin(); iter != _Traits.Options.end(); ++iter) {
+    Options.insert(
+        std::pair< std::string, OptionTrait *> (
+            iter->first,
+            new OptionTrait(iter->second->getName(),iter->second->getType(),iter->second->getDescription(), iter->second->getDefaultValue(), iter->second->getShortForm())
+        )
+    );
+  }
+  std::cout << "ActionTraits::ActionTraits(ActionTraits &) with " << getName() << ", type " << getTypeName() << " and description " << getDescription() << std::endl;
+}
+
+/** Copy constructor for base class ActionTraits.
+ * we have to make our own copy in order to avoid references and deep-copy everything.
+ * \param &_Traits source OptionTrait class to copy
+ */
+ActionTraits::ActionTraits(const OptionTrait &_Traits) :
+  OptionTrait(_Traits)
+{
+  std::cout << "ActionTraits::ActionTraits(OptionTrait &) with " << getName() << ", type " << getTypeName() << " and description " << getDescription() << std::endl;
+}
 
 /** Constructor for base class ActionTraits.
- *
- */
-ActionTraits::ActionTraits()
-{}
-
-/** Constructor for base class ActionTraits.
- *
+ * Deletes all present Options.
  */
 ActionTraits::~ActionTraits()
-{}
-
-/** Returns Current Value for this ActionTrait.
- * \return ActionTraits::CurrentValue as std::string
- */
-const std::string ActionTraits::getCurrentValue() const
 {
- return CurrentValue;
+  for (options_iterator iter = Options.begin(); !Options.empty(); iter = Options.begin()) {
+    delete (iter->second);
+    Options.erase(iter);
+  }
 }
 
-/** Returns Description for this ActionTrait.
- * \return ActionTraits::Description as std::string
- */
-const std::string ActionTraits::getDescription() const
-{
-  return Description;
-}
 
 /** Returns menu title for this ActionTrait.
  * \return ActionTraits::MenuTitle as std::string
  */
-const std::string ActionTraits::getMenuName() const
+const std::string& ActionTraits::getMenuName() const
 {
   return MenuTitle;
@@ -62,29 +100,29 @@
 
 /** Returns Description for the given option of this ActionTrait.
- * \param token of option
- * \return ActionTraits::OptionDescription as std::string
+ * \param &token token of option
+ * \return reference to OptionTrait
  */
-const std::string ActionTraits::getOptionDescription(const std::string descr) const
+OptionTrait const & ActionTraits::getOption(const std::string &token) const
 {
-  if (OptionDescription.find(descr) != OptionDescription.end())
-    return OptionDescription.find(descr)->second;
-  else
-    return std::string();
+  ASSERT(Options.find(token) != Options.end(),
+      "ActionTraits::getOption() - Option not found!");
+  return *(Options.find(token)->second);
 }
 
-/** Returns ShortForm for this ActionTrait.
- * \return ActionTraits::ShortForm as std::string
+/** States whether given option (token) is present or not.
+ * \param &token name of option
+ * \return true - option present, false - not
  */
-const std::string ActionTraits::getShortForm() const
+bool ActionTraits::hasOption(const std::string &token) const
 {
-  return ShortForm;
+  return (Options.find(token) != Options.end());
 }
 
-/** Returns Type for this ActionTrait.
- * \return ActionTraits::InternalType as std::type_info reference
+/** States whether this Action has options at all.
+ * \return true - options present, false - no options
  */
-const std::type_info * ActionTraits::getType() const
+bool ActionTraits::hasOptions() const
 {
-  return InternalType;
+  return (Options.begin() != Options.end());
 }
 
@@ -94,5 +132,5 @@
 ActionTraits::options_iterator ActionTraits::getBeginIter()
 {
-  return OptionDescription.begin();
+  return Options.begin();
 }
 
@@ -102,5 +140,5 @@
 ActionTraits::options_iterator ActionTraits::getEndIter()
 {
-  return OptionDescription.end();
+  return Options.end();
 }
 
@@ -110,5 +148,5 @@
 ActionTraits::options_const_iterator ActionTraits::getBeginIter() const
 {
-  return OptionDescription.begin();
+  return Options.begin();
 }
 
@@ -118,5 +156,5 @@
 ActionTraits::options_const_iterator ActionTraits::getEndIter() const
 {
-  return OptionDescription.end();
+  return Options.end();
 }
 
Index: src/Actions/ActionTraits.hpp
===================================================================
--- src/Actions/ActionTraits.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ActionTraits.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -15,5 +15,6 @@
 
 #include <map>
-#include <string>
+
+#include "Actions/OptionTrait.hpp"
 
 /** Interface for all ActionTraits.
@@ -27,19 +28,23 @@
  *
  */
-class ActionTraits {
+class ActionTraits : public OptionTrait {
 public:
-  explicit ActionTraits();
+  ActionTraits(const ActionTraits &_Traits);
+  ActionTraits(const OptionTrait &_Traits);
+  explicit ActionTraits(const std::string &_token);
   virtual ~ActionTraits();
 
-  typedef std::map<std::string, std::string>::iterator    options_iterator;
-  typedef std::map<std::string, std::string>::const_iterator    options_const_iterator;
+  typedef std::map< std::string, OptionTrait* > options_map;
+  typedef options_map::iterator                 options_iterator;
+  typedef options_map::const_iterator           options_const_iterator;
 
-  const std::string getCurrentValue() const;
-  const std::string getDescription() const;
-  const std::string getMenuName() const;
+  const std::string& getMenuName() const;
   const int getMenuPosition() const;
-  const std::string getOptionDescription(const std::string descr) const;
-  const std::string getShortForm() const;
-  const std::type_info * getType() const;
+
+  // getter for its options
+  OptionTrait const &getOption(const std::string &token) const;
+
+  bool hasOption(const std::string &token) const;
+  bool hasOptions() const;
 
   options_iterator getBeginIter();
@@ -51,11 +56,7 @@
 
   // internal information this trait contains
-  std::string CurrentValue;
-  std::string Description;
   std::string MenuTitle;
   int MenuPosition;
-  std::map<std::string, std::string> OptionDescription;
-  std::string ShortForm;
-  const std::type_info *InternalType;
+  options_map Options;
 };
 
Index: src/Actions/Action_impl_header.hpp
===================================================================
--- src/Actions/Action_impl_header.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/Action_impl_header.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -20,11 +20,21 @@
 #include <boost/preprocessor/seq/transform.hpp>
 
+#include <iostream>
+#include <typeinfo>
+
+#include "Actions/ActionTraits.hpp"
+#include "Actions/OptionTrait.hpp"
 #include "Actions/ValueStorage.hpp"
 
-// some derived names
+// some derived names: if CATEGORY is not given, we don't prefix with it
+#ifdef CATEGORY
 #define ACTION BOOST_PP_CAT(CATEGORY, BOOST_PP_CAT(ACTIONNAME, Action))
 #define COMMAND BOOST_PP_CAT(CATEGORY, ACTIONNAME)
 #define PARAMS BOOST_PP_CAT(CATEGORY, BOOST_PP_CAT(ACTIONNAME, Parameters))
-
+#else
+#define ACTION BOOST_PP_CAT(ACTIONNAME, Action)
+#define COMMAND ACTIONNAME
+#define PARAMS BOOST_PP_CAT(ACTIONNAME, Parameters)
+#endif
 // check if no lists given
 #ifndef paramtypes
@@ -35,8 +45,4 @@
 
 // check user has given name and category
-#ifndef CATEGORY
-ERROR: No "CATEGORY" defined in: __FILE__
-#endif
-
 #ifndef ACTIONNAME
 ERROR: No "ACTIONNAME" defined in: __FILE__
@@ -66,7 +72,20 @@
 )
 #endif
-#ifndef TYPEINFO
-BOOST_PP_ASSERT_MSG(0, \
-    "ERROR: Type is mandatory for Actions, here for ACTION " \
+
+// check if paramdefaults is given, otherwise fill list with NODEFAULT
+// 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 tempvalue(z,n,value)
+//  BOOST_PP_CAT(value,(NODEFAULT))
+//BOOST_PP_REPEAT(tempvalue, MAXPARAMTYPES, paramdefaults)
+//#undef tempvalue
+//#else
+
+// if present, check if correct number of arguments
+#ifdef paramdefaults
+BOOST_PP_ASSERT_MSG(BOOST_PP_EQUAL(MAXPARAMTYPES, BOOST_PP_SEQ_SIZE(paramdefaults)),\
+  ERROR: There are not the same number of "paramtokens" and "paramdefaults" in: __FILE__ \
 )
 #endif
@@ -84,12 +103,32 @@
   BOOST_PP_SEQ_ELEM(n, VARLIST)
 
-// prints OptionDescription.insert
-#define optiondescription_print(z,n,unused, unused2) \
-  OptionDescription. insert (\
-      pair<std::string, std::string> (\
-  BOOST_PP_SEQ_ELEM(n, paramtokens), \
-  BOOST_PP_SEQ_ELEM(n, paramdescriptions) )\
-  );
-
+// prints Options.insert
+#ifdef paramdefaults
+#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), \
+          BOOST_PP_SEQ_ELEM(n, paramdefaults) )\
+      )\
+  ); \
+  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
 
 #if defined paramtypes && defined paramreferences
@@ -108,29 +147,32 @@
 class ActionTrait<ACTION> : public ActionTraits {
 public:
-  ActionTrait()
+  ActionTrait() :
+#ifndef SHORTFORM
+    ActionTraits(OptionTrait(TOKEN, &typeid(void), DESCRIPTION, std::string()))
+#else
+    ActionTraits(OptionTrait(TOKEN, &typeid(void), DESCRIPTION, std::string(), SHORTFORM))
+#endif /* SHORTFORM */
   {
-#ifdef DEFAULTVALUE
-    CurrentValue = DEFAULTVALUE;
-#endif
-#ifdef DESCRIPTION
-    Description = DESCRIPTION;
-#endif
-#ifdef paramdescriptions
-#define BOOST_PP_LOCAL_MACRO(n) optiondescription_print(~, n, ~, )
+  // initialize remainder of action info
+#ifdef MENUNAME
+    MenuTitle = MENUNAME;
+#endif
+#ifdef MENUPOSITION
+    MenuPosition = MENUPOSITION;
+#endif
+
+  // initialize action's options
+  std::pair< ActionTraits::options_iterator, bool > tester;
+#ifdef paramtokens
+#define BOOST_PP_LOCAL_MACRO(n) option_print(~, n, ~, )
 #define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
 #include BOOST_PP_LOCAL_ITERATE()
 #endif
-#ifdef MENUNAME
-    MenuTitle = MENUNAME;
-#endif
-#ifdef MENUPOSITION
-    MenuPosition = MENUPOSITION;
-#endif
+  // associate action's short form also with option
 #ifdef SHORTFORM
-    ShortForm = SHORTFORM;
-#endif
-#ifdef TYPEINFO
-    InternalType = TYPEINFO;
-#endif
+  if (Options.find(TOKEN) != Options.end())
+    Options[TOKEN]->setShortForm(std::string(SHORTFORM));
+#endif /* SHORTFORM */
+  std::cout << "ActionTrait<ACTION>::ActionTrait() with " << getName() << ", type " << getTypeName() << " and description " << getDescription() << std::endl;
   }
 
@@ -139,7 +181,6 @@
 
 class ACTION : public Action {
-  friend
   #if defined paramtypes && defined paramreferences
-  void COMMAND(
+  friend void COMMAND(
   #define BOOST_PP_LOCAL_MACRO(n) type_list(~, n, paramtypes, paramreferences)
   #define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
@@ -157,6 +198,4 @@
   bool shouldUndo();
 
-  virtual const std::string getName();
-
   struct PARAMS : ActionParameters {
   #if defined paramtypes && defined paramreferences
@@ -167,6 +206,4 @@
   } params;
 
-  ActionTrait<ACTION> Traits;
-
 protected:
   virtual Dialog * fillDialog(Dialog*);
@@ -176,6 +213,4 @@
   virtual Action::state_ptr performUndo(Action::state_ptr);
   virtual Action::state_ptr performRedo(Action::state_ptr);
-
-  static const char NAME[];
 };
 
@@ -183,4 +218,6 @@
 #undef paramtokens
 #undef paramreferences
+#undef paramdescriptions
+#undef paramdefaults
 #undef MAXPARAMTYPES
 #undef statetypes
@@ -195,3 +232,8 @@
 #undef ACTIONNAME
 #undef CATEGORY
+#undef MENUNAME
+#undef MENUPOSITION
 #undef TOKEN
+
+#undef DESCRIPTION
+#undef SHORTFORM
Index: src/Actions/Action_impl_pre.hpp
===================================================================
--- src/Actions/Action_impl_pre.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/Action_impl_pre.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -42,9 +42,16 @@
 #include <boost/preprocessor/seq/transform.hpp>
 
-// some derived names
+// some derived names: if CATEGORY is not given, we don't prefix with it
+#ifdef CATEGORY
 #define ACTION BOOST_PP_CAT(CATEGORY, BOOST_PP_CAT(ACTIONNAME, Action))
 #define COMMAND BOOST_PP_CAT(CATEGORY, ACTIONNAME)
 #define STATE BOOST_PP_CAT(CATEGORY, BOOST_PP_CAT(ACTIONNAME, State))
 #define PARAMS BOOST_PP_CAT(CATEGORY, BOOST_PP_CAT(ACTIONNAME, Parameters))
+#else
+#define ACTION BOOST_PP_CAT(ACTIONNAME, Action)
+#define COMMAND ACTIONNAME
+#define STATE BOOST_PP_CAT(ACTIONNAME, State)
+#define PARAMS BOOST_PP_CAT(ACTIONNAME, Parameters)
+#endif
 #define INSTANCE BOOST_PP_CAT(this_, BOOST_PP_CAT(ACTIONNAME, _instance))
 
@@ -62,8 +69,4 @@
 
 // check user has given name and category
-#ifndef CATEGORY
-ERROR: No "CATEGORY" defined in: __FILE__
-#endif
-
 #ifndef ACTIONNAME
 ERROR: No "ACTIONNAME" defined in: __FILE__
@@ -111,7 +114,6 @@
   >(\
   BOOST_PP_SEQ_ELEM(n, paramtokens)\
-  , ValueStorage::getInstance().getDescription(\
-  BOOST_PP_SEQ_ELEM(n, paramtokens)\
-  ));
+  , Traits.getDescription()\
+  );
 
 // prints set/queryCurrentValue (command) for paramreferences and paramtokens
@@ -126,8 +128,14 @@
 #include "Actions/ActionRegistry.hpp"
 #include "UIElements/Dialog.hpp"
-#include "Actions/ValueStorage.hpp"
-
+
+#ifdef paramtokens
+#define statenecessary 1
+#endif
+#ifndef statetokens
+#define statenecessary 1
+#endif
 
 // =========== memento to remember the state when undoing ===========
+#ifdef statenecessary
 class STATE : public ActionState {
 public:
@@ -155,7 +163,5 @@
   ACTION::PARAMS params;
 };
-
-// =========== name of action ===========
-const char ACTION::NAME[] = TOKEN;
+#endif /* statenecessary */
 
 // (const) prototype to be placed into the ActionRegistry (must be deleted by registry itself)
@@ -164,10 +170,12 @@
 // =========== constructor ===========
 ACTION::ACTION () :
-  Action(NAME)
+  Action(ActionTrait<ACTION>())
 {}
 
 // =========== destructor ===========
 ACTION::~ACTION ()
-{}
+{
+  //std::cout << "Action ACTION is being destroyed." << std::endl;
+}
 
 // =========== fill a dialog ===========
@@ -175,5 +183,5 @@
         ASSERT(dialog,"No Dialog given when filling actionname's dialog");
 #if BOOST_PP_EQUAL(MAXPARAMTYPES,0)
-        dialog->queryEmpty(NAME, Traits.getDescription());
+        dialog->queryEmpty(TOKEN, Traits.getDescription());
 #else
 #define BOOST_PP_LOCAL_MACRO(n) dialog_print(~, n, ~)
@@ -196,5 +204,5 @@
 {
   ACTION::PARAMS params;
-  Action *ToCall = ActionRegistry::getInstance().getActionByName( ACTION::NAME ); //->clone(params);
+  Action *ToCall = ActionRegistry::getInstance().getActionByName( TOKEN ); //->clone(params);
 #if BOOST_PP_NOT_EQUAL(MAXPARAMTYPES,0)
 #define BOOST_PP_LOCAL_MACRO(n) value_print(~, n, setCurrentValue, )
Index: src/Actions/AnalysisAction/MolecularVolumeAction.cpp
===================================================================
--- src/Actions/AnalysisAction/MolecularVolumeAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AnalysisAction/MolecularVolumeAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -82,7 +82,3 @@
   return true;
 }
-
-const string AnalysisMolecularVolumeAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/AnalysisAction/MolecularVolumeAction.def
===================================================================
--- src/Actions/AnalysisAction/MolecularVolumeAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AnalysisAction/MolecularVolumeAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -10,9 +10,10 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramreferences
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
@@ -24,6 +25,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "calculate the volume of a given molecule"
 #undef SHORTFORM
-#define TYPEINFO &typeid(molecule)
Index: src/Actions/AnalysisAction/PairCorrelationAction.cpp
===================================================================
--- src/Actions/AnalysisAction/PairCorrelationAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AnalysisAction/PairCorrelationAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -54,6 +54,6 @@
 
   // execute action
-  output.open(params.outputname.c_str());
-  binoutput.open(params.binoutputname.c_str());
+  output.open(params.outputname.string().c_str());
+  binoutput.open(params.binoutputname.string().c_str());
   PairCorrelationMap *correlationmap = NULL;
   std::vector<molecule*> molecules = World::getInstance().getSelectedMolecules();
@@ -87,7 +87,3 @@
   return true;
 }
-
-const string AnalysisPairCorrelationAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/AnalysisAction/PairCorrelationAction.def
===================================================================
--- src/Actions/AnalysisAction/PairCorrelationAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AnalysisAction/PairCorrelationAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -13,9 +13,10 @@
 // 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
-#define paramtypes (std::vector<const element *>)(double)(double)(double)(std::string)(std::string)(bool)
+// "undefine" if no parameters are required, use (NODEFAULT) 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")
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
@@ -27,6 +28,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "pair correlation analysis between two elements"
 #define SHORTFORM "C"
-#define TYPEINFO &typeid(void)
Index: src/Actions/AnalysisAction/PointCorrelationAction.cpp
===================================================================
--- src/Actions/AnalysisAction/PointCorrelationAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AnalysisAction/PointCorrelationAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -56,6 +56,6 @@
 
   // execute action
-  output.open(params.outputname.c_str());
-  binoutput.open(params.binoutputname.c_str());
+  output.open(params.outputname.string().c_str());
+  binoutput.open(params.binoutputname.string().c_str());
   cout << "Point to correlate to is  " << params.Point << endl;
   CorrelationToPointMap *correlationmap = NULL;
@@ -92,7 +92,3 @@
   return true;
 }
-
-const string AnalysisPointCorrelationAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/AnalysisAction/PointCorrelationAction.def
===================================================================
--- src/Actions/AnalysisAction/PointCorrelationAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AnalysisAction/PointCorrelationAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -15,9 +15,10 @@
 // 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
-#define paramtypes (std::vector<const element *>)(Vector)(double)(double)(double)(std::string)(std::string)(bool)
+// "undefine" if no parameters are required, use (NODEFAULT) 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")
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "pair correlation analysis between element and point"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/AnalysisAction/PrincipalAxisSystemAction.cpp
===================================================================
--- src/Actions/AnalysisAction/PrincipalAxisSystemAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AnalysisAction/PrincipalAxisSystemAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -86,7 +86,3 @@
   return true;
 }
-
-const string AnalysisPrincipalAxisSystemAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/AnalysisAction/PrincipalAxisSystemAction.def
===================================================================
--- src/Actions/AnalysisAction/PrincipalAxisSystemAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AnalysisAction/PrincipalAxisSystemAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -1,3 +1,4 @@
 #undef paramdescriptions
+#undef paramdefaults
 /*
  * PrincipalAxisSystemAction.def
@@ -11,9 +12,10 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramreferences
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
@@ -25,6 +27,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "calculate the principal axis system of the specified molecule"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/AnalysisAction/SurfaceCorrelationAction.cpp
===================================================================
--- src/Actions/AnalysisAction/SurfaceCorrelationAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AnalysisAction/SurfaceCorrelationAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -55,6 +55,6 @@
 
   // execute action
-  output.open(params.outputname.c_str());
-  binoutput.open(params.binoutputname.c_str());
+  output.open(params.outputname.string().c_str());
+  binoutput.open(params.binoutputname.string().c_str());
   ASSERT(params.Boundary != NULL, "No molecule specified for SurfaceCorrelation.");
   const double radius = 4.;
@@ -114,7 +114,3 @@
   return true;
 }
-
-const string AnalysisSurfaceCorrelationAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/AnalysisAction/SurfaceCorrelationAction.def
===================================================================
--- src/Actions/AnalysisAction/SurfaceCorrelationAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AnalysisAction/SurfaceCorrelationAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -14,9 +14,10 @@
 // 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
-#define paramtypes (std::vector<const element *>)(molecule *)(double)(double)(double)(std::string)(std::string)(bool)
+// "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")
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
@@ -28,6 +29,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "pair correlation analysis between element and surface"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/AtomAction/AddAction.cpp
===================================================================
--- src/Actions/AtomAction/AddAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AtomAction/AddAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -93,7 +93,3 @@
   return true;
 }
-
-const string AtomAddAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/AtomAction/AddAction.def
===================================================================
--- src/Actions/AtomAction/AddAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AtomAction/AddAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -13,9 +13,10 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (const element *)(BoxVector)
-#define paramtokens ("add-atom")("position")
-#define paramdescriptions ("add atom of specified element")("position in R^3 space")
+#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 statetypes (const atomId_t)
@@ -30,6 +31,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "add atom of specified element"
 #define SHORTFORM "a"
-#define TYPEINFO &typeid(const element)
Index: src/Actions/AtomAction/ChangeElementAction.cpp
===================================================================
--- src/Actions/AtomAction/ChangeElementAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AtomAction/ChangeElementAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -105,7 +105,3 @@
   return true;
 }
-
-const string AtomChangeElementAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/AtomAction/ChangeElementAction.def
===================================================================
--- src/Actions/AtomAction/ChangeElementAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AtomAction/ChangeElementAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -12,8 +12,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (const element *)
 #define paramtokens ("change-element")
-#define paramdescriptions ("change the element of an atom")
+#define paramdescriptions ("new the element of atom")
+#undef paramdefaults
 #define paramreferences (elemental)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "change the element of an atom"
 #define SHORTFORM "E"
-#define TYPEINFO &typeid(const element)
Index: src/Actions/AtomAction/Remove.def
===================================================================
--- src/Actions/AtomAction/Remove.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#undef paramdescriptions
-/*
- * Remove.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-
-#include "Actions/Action.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
-
-
-
-
-
-
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Atom
-#define MENUNAME "atom"
-#define MENUPOSITION 
-#define ACTIONNAME Remove
-#define TOKEN ""remove-atom";"
-
-EOF;
-
-// finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
-#undef DESCRIPTION
-#undef SHORTFORM
-#undef TYPEINFO
Index: src/Actions/AtomAction/RemoveAction.cpp
===================================================================
--- src/Actions/AtomAction/RemoveAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AtomAction/RemoveAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -107,7 +107,3 @@
   return true;
 }
-
-const string AtomRemoveAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/AtomAction/RemoveAction.def
===================================================================
--- src/Actions/AtomAction/RemoveAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AtomAction/RemoveAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "remove a specified atom"
 #define SHORTFORM "r"
-#define TYPEINFO &typeid(void)
Index: src/Actions/AtomAction/RotateAroundOriginByAngleAction.cpp
===================================================================
--- src/Actions/AtomAction/RotateAroundOriginByAngleAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AtomAction/RotateAroundOriginByAngleAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -98,7 +98,3 @@
   return true;
 }
-
-const string AtomRotateAroundOriginByAngleAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/AtomAction/RotateAroundOriginByAngleAction.def
===================================================================
--- src/Actions/AtomAction/RotateAroundOriginByAngleAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AtomAction/RotateAroundOriginByAngleAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (double)(Vector)
 #define paramtokens ("rotate-origin")("position")
-#define paramdescriptions ("rotate selected atoms by a specific angle around origin")("position in R^3 space")
+#define paramdescriptions ("rotation angle")("position in R^3 space")
+#undef paramdefaults
 #define paramreferences (angle)(Axis)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "rotate selected atoms by a specific angle around origin"
 #undef SHORTFORM
-#define TYPEINFO &typeid(double)
Index: src/Actions/AtomAction/TranslateAction.cpp
===================================================================
--- src/Actions/AtomAction/TranslateAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AtomAction/TranslateAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -88,7 +88,3 @@
   return true;
 }
-
-const string AtomTranslateAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/AtomAction/TranslateAction.def
===================================================================
--- src/Actions/AtomAction/TranslateAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AtomAction/TranslateAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -12,9 +12,10 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (Vector)(bool)
 #define paramtokens ("translate-atoms")("periodic")
-#define paramdescriptions ("translate all selected atoms by given vector")("system is constraint to periodic boundary conditions")
+#define paramdescriptions ("translation vector")("system is constraint to periodic boundary conditions")
 #define paramreferences (x)(periodic)
+#define paramdefaults (NODEFAULT)("0")
 
 #define statetypes (std::vector<atom*>)
@@ -30,6 +31,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "translate all selected atoms by given vector"
 #define SHORTFORM "t"
-#define TYPEINFO &typeid(VectorValue)
Index: src/Actions/AtomsCalculation.hpp
===================================================================
--- src/Actions/AtomsCalculation.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AtomsCalculation.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -17,5 +17,5 @@
 {
 public:
-  AtomsCalculation(boost::function<T(atom*)> op,std::string name,AtomDescriptor descr);
+  AtomsCalculation(boost::function<T(atom*)> op,const ActionTraits &_trait,AtomDescriptor descr);
   virtual ~AtomsCalculation();
 
Index: src/Actions/AtomsCalculation_impl.hpp
===================================================================
--- src/Actions/AtomsCalculation_impl.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/AtomsCalculation_impl.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -15,6 +15,6 @@
 
 template<typename T>
-AtomsCalculation<T>::AtomsCalculation(boost::function<T(atom*)> _op,std::string name,AtomDescriptor _descr) :
-  Calculation<std::vector<T> >(0,name,false),
+AtomsCalculation<T>::AtomsCalculation(boost::function<T(atom*)> _op,const ActionTraits &_trait,AtomDescriptor _descr) :
+  Calculation<std::vector<T> >(0,_trait,false),
   descr(_descr),
   op(_op)
Index: src/Actions/Calculation.hpp
===================================================================
--- src/Actions/Calculation.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/Calculation.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -21,5 +21,5 @@
 {
 public:
-  Calculation(int _maxSteps, std::string _name, bool _doRegister=true);
+  Calculation(int _maxSteps, const ActionTraits &_trait, bool _doRegister=true);
   virtual ~Calculation();
 
Index: src/Actions/Calculation_impl.hpp
===================================================================
--- src/Actions/Calculation_impl.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/Calculation_impl.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -14,6 +14,6 @@
 
 template<typename T>
-Calculation<T>::Calculation(int _maxSteps, std::string _name, bool _doRegister) :
-  Process(_maxSteps,_name,_doRegister),
+Calculation<T>::Calculation(int _maxSteps, const ActionTraits &_trait, bool _doRegister) :
+  Process(_maxSteps,_trait,_doRegister),
   result(0),
   done(false)
Index: src/Actions/CommandAction/BondLengthTableAction.cpp
===================================================================
--- src/Actions/CommandAction/BondLengthTableAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/BondLengthTableAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -47,5 +47,5 @@
   if (configuration->BG == NULL) {
     configuration->BG = new BondGraph(configuration->GetIsAngstroem());
-    if ((!params.BondGraphFileName.empty()) && (configuration->BG->LoadBondLengthTable(params.BondGraphFileName))) {
+    if ((!params.BondGraphFileName.empty()) && (configuration->BG->LoadBondLengthTable(params.BondGraphFileName.string()))) {
       DoLog(0) && (Log() << Verbose(0) << "Bond length table loaded successfully." << endl);
       return Action::success;
@@ -81,7 +81,3 @@
   return false;
 }
-
-const string CommandBondLengthTableAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/CommandAction/BondLengthTableAction.def
===================================================================
--- src/Actions/CommandAction/BondLengthTableAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/BondLengthTableAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (std::string)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)
 #define paramtokens ("bond-table")
-#define paramdescriptions ("setting name of the bond length table file")
+#define paramdescriptions ("name of the bond length table file")
+#undef paramdefaults
 #define paramreferences (BondGraphFileName)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
-#define DESCRIPTION "setting name of the bond length table file"
+#define DESCRIPTION "specifying a table file with specific bond lengths to use in bond structure analysis"
 #define SHORTFORM "g"
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/CommandAction/ElementDbAction.cpp
===================================================================
--- src/Actions/CommandAction/ElementDbAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/ElementDbAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -46,5 +46,5 @@
   // TODO: Make databasepath a std::string
   config *configuration = World::getInstance().getConfig();
-  strcpy(configuration->databasepath, params.databasepath.c_str());
+  strcpy(configuration->databasepath, params.databasepath.branch_path().string().c_str());
 
   // load table
@@ -82,7 +82,3 @@
   return false;
 }
-
-const string CommandElementDbAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/CommandAction/ElementDbAction.def
===================================================================
--- src/Actions/CommandAction/ElementDbAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/ElementDbAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (std::string)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)
 #define paramtokens ("element-db")
-#define paramdescriptions ("setting the path where the element databases can be found")
+#define paramdescriptions ("path where the element databases can be found")
+#undef paramdefaults
 #define paramreferences (databasepath)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
-#define DESCRIPTION "setting the path where the element databases can be found"
+#define DESCRIPTION "specify the path to a different element databases"
 #define SHORTFORM "e"
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/CommandAction/FastParsingAction.cpp
===================================================================
--- src/Actions/CommandAction/FastParsingAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/FastParsingAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -84,7 +84,3 @@
   return true;
 }
-
-const string CommandFastParsingAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/CommandAction/FastParsingAction.def
===================================================================
--- src/Actions/CommandAction/FastParsingAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/FastParsingAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (bool)
 #define paramtokens ("fastparsing")
 #define paramdescriptions ("setting whether trajectories shall be parsed completely (n) or just first step (y)")
+#undef paramdefaults
 #define paramreferences (fastparsing)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#define DEFAULTVALUE "0"
 #define DESCRIPTION "setting whether trajectories shall be parsed completely (n) or just first step (y)"
 #define SHORTFORM "n"
-#define TYPEINFO &typeid(bool)
Index: src/Actions/CommandAction/HelpAction.cpp
===================================================================
--- src/Actions/CommandAction/HelpAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/HelpAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -19,6 +19,4 @@
 
 #include "Helpers/MemDebug.hpp"
-
-#include "CommandLineParser.hpp"
 
 #include <iostream>
@@ -55,7 +53,3 @@
   return false;
 }
-
-const string CommandHelpAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/CommandAction/HelpAction.def
===================================================================
--- src/Actions/CommandAction/HelpAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/HelpAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "help screen"
 #define SHORTFORM "h"
-#define TYPEINFO &typeid(void)
Index: src/Actions/CommandAction/VerboseAction.cpp
===================================================================
--- src/Actions/CommandAction/VerboseAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/VerboseAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -76,7 +76,3 @@
   return true;
 }
-
-const string CommandVerboseAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/CommandAction/VerboseAction.def
===================================================================
--- src/Actions/CommandAction/VerboseAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/VerboseAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (int)
 #define paramtokens ("verbose")
 #define paramdescriptions ("set verbosity level")
+#undef paramdefaults
 #define paramreferences (verbosity)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "set verbosity level"
 #define SHORTFORM "v"
-#define TYPEINFO &typeid(int)
Index: src/Actions/CommandAction/VersionAction.cpp
===================================================================
--- src/Actions/CommandAction/VersionAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/VersionAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -55,7 +55,3 @@
   return false;
 }
-
-const string CommandVersionAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/CommandAction/VersionAction.def
===================================================================
--- src/Actions/CommandAction/VersionAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/VersionAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "show version"
 #define SHORTFORM "V"
-#define TYPEINFO &typeid(void)
Index: src/Actions/CommandAction/WarrantyAction.cpp
===================================================================
--- src/Actions/CommandAction/WarrantyAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/WarrantyAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -19,6 +19,4 @@
 
 #include "Helpers/MemDebug.hpp"
-
-#include "CommandLineParser.hpp"
 
 #include <iostream>
@@ -61,7 +59,3 @@
   return false;
 }
-
-const string CommandWarrantyAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/CommandAction/WarrantyAction.def
===================================================================
--- src/Actions/CommandAction/WarrantyAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/CommandAction/WarrantyAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -10,8 +10,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -28,6 +29,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "statement concerning warranty of the software"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/ErrorAction.cpp
===================================================================
--- src/Actions/ErrorAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ErrorAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -29,6 +29,6 @@
 using namespace std;
 
-ErrorAction::ErrorAction(string _name,const char * _errorMsg,bool _doRegister) :
-Action(_name,_doRegister),
+ErrorAction::ErrorAction(const ActionTraits &_trait,const char * _errorMsg,bool _doRegister) :
+Action(_trait,_doRegister),
 errorMsg(_errorMsg)
 {
Index: src/Actions/ErrorAction.hpp
===================================================================
--- src/Actions/ErrorAction.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ErrorAction.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -15,5 +15,5 @@
 {
 public:
-  ErrorAction(std::string _name,const char * _errorMsg,bool _doRegister=true);
+  ErrorAction(const ActionTraits &_trait,const char * _errorMsg,bool _doRegister=true);
   virtual ~ErrorAction();
 
Index: src/Actions/FragmentationAction/ConstructBondGraphAction.cpp
===================================================================
--- src/Actions/FragmentationAction/ConstructBondGraphAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/FragmentationAction/ConstructBondGraphAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -174,7 +174,3 @@
   return false;
 }
-
-const string FragmentationConstructBondGraphAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/FragmentationAction/ConstructBondGraphAction.def
===================================================================
--- src/Actions/FragmentationAction/ConstructBondGraphAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/FragmentationAction/ConstructBondGraphAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "construct the bond graph of the selected atoms"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/FragmentationAction/DepthFirstSearchAction.cpp
===================================================================
--- src/Actions/FragmentationAction/DepthFirstSearchAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/FragmentationAction/DepthFirstSearchAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -91,7 +91,3 @@
   return true;
 }
-
-const string FragmentationDepthFirstSearchAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/FragmentationAction/DepthFirstSearchAction.def
===================================================================
--- src/Actions/FragmentationAction/DepthFirstSearchAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/FragmentationAction/DepthFirstSearchAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (double)
 #define paramtokens ("depth-first-search")
-#define paramdescriptions ("Depth-First Search analysis of the molecular system")
+#define paramdescriptions ("maximum distance to look for neighbors")
+#undef paramdefaults
 #define paramreferences (distance)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "Depth-First Search analysis of the molecular system"
 #define SHORTFORM "D"
-#define TYPEINFO &typeid(double)
Index: src/Actions/FragmentationAction/FragmentationAction.cpp
===================================================================
--- src/Actions/FragmentationAction/FragmentationAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/FragmentationAction/FragmentationAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -82,7 +82,3 @@
   return true;
 }
-
-const string FragmentationFragmentationAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/FragmentationAction/FragmentationAction.def
===================================================================
--- src/Actions/FragmentationAction/FragmentationAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/FragmentationAction/FragmentationAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (std::string)(double)(int)
 #define paramtokens ("fragment-mol")("distance")("order")
-#define paramdescriptions ("create for a given molecule into fragments up to given order")("distance in space")("order of a discretization, dissection, ...")
+#define paramdescriptions ("path to where the fragment configurations shall be stored")("distance in space")("order of a discretization, dissection, ...")
+#undef paramdefaults
 #define paramreferences (path)(distance)(order)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "create for a given molecule into fragments up to given order"
 #define SHORTFORM "f"
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/FragmentationAction/SubgraphDissectionAction.cpp
===================================================================
--- src/Actions/FragmentationAction/SubgraphDissectionAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/FragmentationAction/SubgraphDissectionAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -212,7 +212,3 @@
   return true;
 }
-
-const string FragmentationSubgraphDissectionAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/FragmentationAction/SubgraphDissectionAction.def
===================================================================
--- src/Actions/FragmentationAction/SubgraphDissectionAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/FragmentationAction/SubgraphDissectionAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "dissect the molecular system into molecules representing disconnected subgraphs"
 #define SHORTFORM "I"
-#define TYPEINFO &typeid(void)
Index: src/Actions/Makefile.am
===================================================================
--- src/Actions/Makefile.am	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/Makefile.am	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -17,6 +17,6 @@
   ${TESSELATIONACTIONSOURCE} \
   ${WORLDACTIONSOURCE} \
-  ActionTraits.cpp \
-  MapOfActions.cpp \
+  RedoAction.cpp \
+  UndoAction.cpp \
   ValueStorage.cpp
 
@@ -31,6 +31,4 @@
   ${TESSELATIONACTIONHEADER} \
   ${WORLDACTIONHEADER} \
-  ActionTraits.hpp \
-  MapOfActions.hpp \
   ValueStorage.hpp \
   Values.hpp
Index: src/Actions/MakroAction.cpp
===================================================================
--- src/Actions/MakroAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MakroAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -41,6 +41,6 @@
 };
 
-MakroAction::MakroAction(string _name,ActionSequence* _actions,bool _doRegister) :
-Action(_name,_doRegister),
+MakroAction::MakroAction(const ActionTraits &_trait,ActionSequence* _actions,bool _doRegister) :
+Action(_trait,_doRegister),
 actions(_actions)
 {
Index: src/Actions/MakroAction.hpp
===================================================================
--- src/Actions/MakroAction.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MakroAction.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -23,5 +23,5 @@
 {
 public:
-  MakroAction(std::string _name,ActionSequence* _actions,bool _doRegister=true);
+  MakroAction(const ActionTraits &_trait,ActionSequence* _actions,bool _doRegister=true);
   virtual ~MakroAction();
 
Index: src/Actions/ManipulateAtomsProcess.cpp
===================================================================
--- src/Actions/ManipulateAtomsProcess.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ManipulateAtomsProcess.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -29,7 +29,10 @@
 using namespace std;
 
-ManipulateAtomsProcess::ManipulateAtomsProcess(boost::function<void(atom*)> _operation, AtomDescriptor _descr,
-                                               std::string _name,bool _doRegister) :
-  Process(0,_name,_doRegister),
+ManipulateAtomsProcess::ManipulateAtomsProcess(
+    boost::function<void(atom*)> _operation,
+    AtomDescriptor _descr,
+    const ActionTraits &_trait,
+    bool _doRegister) :
+  Process(0,_trait,_doRegister),
   descr(_descr),
   operation(_operation)
Index: src/Actions/ManipulateAtomsProcess.hpp
===================================================================
--- src/Actions/ManipulateAtomsProcess.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ManipulateAtomsProcess.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -20,5 +20,5 @@
 {
 public:
-  ManipulateAtomsProcess(boost::function<void(atom*)> _operation, AtomDescriptor descr,std::string _name,bool _doRegister=true);
+  ManipulateAtomsProcess(boost::function<void(atom*)> _operation, AtomDescriptor descr,const ActionTraits &_trait,bool _doRegister=true);
   virtual ~ManipulateAtomsProcess();
 
Index: src/Actions/MapOfActions.cpp
===================================================================
--- src/Actions/MapOfActions.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ 	(revision )
@@ -1,1184 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * MapOfActions.cpp
- *
- *  Created on: 10.05.2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-using namespace std;
-
-#include "Actions/MapOfActions.hpp"
-#include "Descriptors/AtomIdDescriptor.hpp"
-#include "Descriptors/MoleculeIdDescriptor.hpp"
-#include "Helpers/Assert.hpp"
-#include "Patterns/Singleton_impl.hpp"
-
-#include <boost/filesystem.hpp>
-#include <boost/lexical_cast.hpp>
-#include <boost/optional.hpp>
-#include <boost/program_options.hpp>
-
-#include <iostream>
-
-#include "atom.hpp"
-#include "Box.hpp"
-#include "CommandLineParser.hpp"
-#include "element.hpp"
-#include "Helpers/Log.hpp"
-#include "LinearAlgebra/Matrix.hpp"
-#include "molecule.hpp"
-#include "periodentafel.hpp"
-#include "LinearAlgebra/BoxVector.hpp"
-#include "LinearAlgebra/Vector.hpp"
-#include "Helpers/Verbose.hpp"
-
-#include "Actions/ActionRegistry.hpp"
-#include "Actions/Values.hpp"
-
-void validate(boost::any& v, const std::vector<std::string>& values, VectorValue *, int)
-{
-  VectorValue VV;
-  std::vector<std::string> components;
-
-  // split comma-separated values
-  if (values.size() != 1) {
-    cerr <<  "Not one vector but " << components.size() << " given " << endl;
-    throw boost::program_options::validation_error("Unequal to one vector given");
-  }
-  std::string argument(values.at(0));
-  std::string::iterator Aiter = argument.begin();
-  std::string::iterator Biter = argument.begin();
-  for (; Aiter != argument.end(); ++Aiter) {
-    if (*Aiter == ',') {
-      components.push_back(string(Biter,Aiter));
-      do {
-        Aiter++;
-      } while (*Aiter == ' ' || *Aiter == '\t');
-      Biter = Aiter;
-    }
-  }
-  components.push_back(string(Biter,argument.end()));
-
-  if (components.size() != 3) {
-    cerr <<  "Specified vector does not have three components but " << components.size() << endl;
-    throw boost::program_options::validation_error("Specified vector does not have three components");
-  }
-  VV.x = boost::lexical_cast<double>(components.at(0));
-  VV.y = boost::lexical_cast<double>(components.at(1));
-  VV.z = boost::lexical_cast<double>(components.at(2));
-  v = boost::any(VectorValue(VV));
-}
-
-void validate(boost::any& v, const std::vector<std::string>& values, BoxValue *, int)
-{
-  BoxValue BV;
-  std::vector<std::string> components;
-
-  // split comma-separated values
-  if (values.size() != 1) {
-    cerr <<  "Not one vector but " << components.size() << " given " << endl;
-    throw boost::program_options::validation_error("Unequal to one vector given");
-  }
-  std::string argument(values.at(0));
-  std::string::iterator Aiter = argument.begin();
-  std::string::iterator Biter = argument.begin();
-  for (; Aiter != argument.end(); ++Aiter) {
-    if (*Aiter == ',') {
-      components.push_back(string(Biter,Aiter));
-      do {
-        Aiter++;
-      } while (*Aiter == ' ' || *Aiter == '\t');
-      Biter = Aiter;
-    }
-  }
-  components.push_back(string(Biter,argument.end()));
-
-  if (components.size() != 6) {
-    cerr <<  "Specified vector does not have three components but " << components.size() << endl;
-    throw boost::program_options::validation_error("Specified symmetric box matrix does not have six components");
-  }
-  BV.xx = boost::lexical_cast<double>(components.at(0));
-  BV.yx = boost::lexical_cast<double>(components.at(1));
-  BV.yy = boost::lexical_cast<double>(components.at(2));
-  BV.zx = boost::lexical_cast<double>(components.at(3));
-  BV.zy = boost::lexical_cast<double>(components.at(4));
-  BV.zz = boost::lexical_cast<double>(components.at(5));
-  v = boost::any(BoxValue(BV));
-}
-
-void validate(boost::any& v, const std::vector<std::string>& values, boost::filesystem::path *, int)
-{
-  boost::filesystem::path filename;
-  std::vector<std::string> components;
-
-  std::cout << "boost::filesystem::path validator used." << std::endl;
-
-  // split comma-separated values
-  if (values.size() != 1) {
-    cerr <<  "Not one file but " << components.size() << " given " << endl;
-    throw boost::program_options::validation_error("Unequal to one file given");
-  }
-  filename = values.at(0);
-  v = boost::any(boost::filesystem::path(filename));
-}
-
-/** Constructor of class MapOfActions.
- *
- */
-MapOfActions::MapOfActions()
-{
-  // initialise lookup map
-  CmdParserLookup[&generic] = &(CommandLineParser::getInstance().generic);
-  CmdParserLookup[&config] = &(CommandLineParser::getInstance().config);
-  CmdParserLookup[&hidden] = &(CommandLineParser::getInstance().hidden);
-  CmdParserLookup[&visible] = &(CommandLineParser::getInstance().visible);
-
-  // keys for actions
-  DescriptionMap["add-atom"] = "add atom of specified element";
-  DescriptionMap["bond-table"] = "setting name of the bond length table file";
-  DescriptionMap["bond-file"] = "name of the bond file";
-  DescriptionMap["boundary"] = "change box to add an empty boundary around all atoms";
-  DescriptionMap["bound-in-box"] = "bound all atoms in the domain";
-  DescriptionMap["center-edge"] = "center edge of all atoms on (0,0,0)";
-  DescriptionMap["center-in-box"] = "center all atoms in the domain";
-  DescriptionMap["change-box"] = "change the symmetrc matrix of the simulation domain";
-  DescriptionMap["change-element"] = "change the element of an atom";
-  DescriptionMap["change-molname"] = "change the name of a molecule";
-  DescriptionMap["clear-atom-selection"] = "clear the atom selection";
-  DescriptionMap["clear-molecule-selection"] = "clear the molecule selection";
-  DescriptionMap["construct-bondgraph"] = "construct the bond graph of the selected atoms";
-  DescriptionMap["convex-envelope"] = "create the convex envelope for a molecule";
-  DescriptionMap["copy-molecule"] = "copies a molecule with all atoms and bonds";
-  DescriptionMap["default-molname"] = "set the default name of new molecules";
-  DescriptionMap["depth-first-search"] = "Depth-First Search analysis of the molecular system";
-  DescriptionMap["element-db"] = "setting the path where the element databases can be found";
-  DescriptionMap["fastparsing"] = "setting whether trajectories shall be parsed completely (n) or just first step (y)";
-  DescriptionMap["fill-molecule"] = "fill around molecules' surface with a filler molecule";
-  DescriptionMap["fill-void"] = "fill void space of box with a filler molecule";
-  DescriptionMap["fragment-mol"] = "create for a given molecule into fragments up to given order";
-  DescriptionMap["help"] = "help screen";
-  DescriptionMap["input"] = "specify input files";
-  DescriptionMap["linear-interpolate"] = "linear interpolation in discrete steps between start and end position of a molecule";
-  DescriptionMap["molecular-volume"] = "calculate the volume of a given molecule";
-  DescriptionMap["nonconvex-envelope"] = "create the non-convex envelope for a molecule";
-  DescriptionMap["output"] = "write output files";
-  DescriptionMap["set-output"] = "specify output formats";
-  DescriptionMap["pair-correlation"] = "pair correlation analysis between two elements";
-  DescriptionMap["parse-xyz"] = "parse xyz file into World";
-  DescriptionMap["point-correlation"] = "pair correlation analysis between element and point";
-  DescriptionMap["principal-axis-system"] = "calculate the principal axis system of the specified molecule";
-  DescriptionMap["redo"] = "redo last action";
-  DescriptionMap["remove-atom"] = "remove a specified atom";
-  DescriptionMap["repeat-box"] = "create periodic copies of the simulation box per axis";
-  DescriptionMap["rotate-origin"] = "rotate selected atoms by a specific angle around origin";
-  DescriptionMap["rotate-self"] = "rotates molecules by a specific angle around own center of gravity";
-  DescriptionMap["rotate-to-pas"] = "calculate the principal axis system of the specified molecule and rotate specified axis to align with main axis";
-  DescriptionMap["save-adjacency"] = "name of the adjacency file to write to";
-  DescriptionMap["save-bonds"] = "name of the bonds file to write to";
-  DescriptionMap["save-temperature"] = "name of the temperature file to write to";
-  DescriptionMap["SaveXyz"] = "save world as xyz file";
-  DescriptionMap["scale-box"] = "scale box and atomic positions inside";
-  DescriptionMap["select-all-atoms"] = "select all atoms";
-  DescriptionMap["select-all-molecules"] = "select all molecules";
-  DescriptionMap["select-atom-by-element"] = "select an atom by element";
-  DescriptionMap["select-atom-by-id"] = "select an atom by index";
-  DescriptionMap["select-atoms-inside-cuboid"] = "select all atoms inside a cuboid";
-  DescriptionMap["select-atoms-inside-sphere"] = "select all atoms inside a sphere";
-  DescriptionMap["select-molecule-by-id"] = "select a molecule by index";
-  DescriptionMap["select-molecule-by-formula"] = "select a molecule by chemical formula";
-  DescriptionMap["select-molecule-of-atom"] = "select a molecule to which a given atom belongs";
-  DescriptionMap["select-molecules-atoms"] = "select all atoms of a molecule";
-  DescriptionMap["set-basis"] = "set the name of the gaussian basis set for MPQC";
-  DescriptionMap["set-output"] = "specify output formats";
-  DescriptionMap["subgraph-dissect"] = "dissect the molecular system into molecules representing disconnected subgraphs";
-  DescriptionMap["surface-correlation"] = "pair correlation analysis between element and surface";
-  DescriptionMap["suspend-in-water"] = "suspend the given molecule in water such that in the domain the mean density is as specified";
-  DescriptionMap["translate-atoms"] = "translate all selected atoms by given vector";
-  DescriptionMap["undo"] = "undo last action";
-  DescriptionMap["unselect-all-atoms"] = "unselect all atoms";
-  DescriptionMap["unselect-all-molecules"] = "unselect all molecules";
-  DescriptionMap["unselect-atom-by-element"] = "unselect an atom by element";
-  DescriptionMap["unselect-atom-by-id"] = "unselect an atom by index";
-  DescriptionMap["unselect-atoms-inside-cuboid"] = "unselect all atoms inside a cuboid";
-  DescriptionMap["unselect-atoms-inside-sphere"] = "unselect all atoms inside a sphere";
-  DescriptionMap["unselect-molecule-by-formula"] = "unselect a molecule by chemical formula";
-  DescriptionMap["unselect-molecule-by-id"] = "unselect a molecule by index";
-  DescriptionMap["unselect-molecule-of-atom"] = "unselect a molecule to which a given atom belongs";
-  DescriptionMap["unselect-molecules-atoms"] = "unselect all atoms of a molecule";
-  DescriptionMap["verbose"] = "set verbosity level";
-  DescriptionMap["verlet-integrate"] = "perform verlet integration of a given force file";
-  DescriptionMap["version"] = "show version";
-  DescriptionMap["warranty"] = "statement concerning warranty of the software";
-  // keys for values
-  DescriptionMap["angle-x"] = "angle of a rotation around x axis";
-  DescriptionMap["angle-y"] = "angle of a rotation around y axis";
-  DescriptionMap["angle-z"] = "angle of a rotation around z axis";
-  DescriptionMap["bin-output-file"] = "name of the bin output file";
-  DescriptionMap["bin-end"] = "start of the last bin";
-  DescriptionMap["bin-start"] = "start of the first bin";
-  DescriptionMap["bin-width"] = "width of the bins";
-  DescriptionMap["convex-file"] = "filename of the non-convex envelope";
-  DescriptionMap["distance"] = "distance in space";
-  DescriptionMap["distances"] = "list of three of distances in space, one for each axis direction";
-  DescriptionMap["DoRotate"] = "whether to rotate or just report angles";
-  DescriptionMap["element"] = "single element";
-  DescriptionMap["elements"] = "set of elements";
-  DescriptionMap["end-step"] = "last or end step";
-  DescriptionMap["id-mapping"] = "whether the identity shall be used in mapping atoms onto atoms or some closest distance measure shall be used";
-  DescriptionMap["input"] = "name of input file";
-  DescriptionMap["length"] = "length in space";
-  DescriptionMap["lengths"] = "list of three of lengths in space, one for each axis direction";
-  DescriptionMap["MaxDistance"] = "maximum distance in space";
-  DescriptionMap["molecule-by-id"] = "index of a molecule";
-  DescriptionMap["nonconvex-file"] = "filename of the non-convex envelope";
-  DescriptionMap["order"] = "order of a discretization, dissection, ...";
-  DescriptionMap["output-file"] = "name of the output file";
-  DescriptionMap["periodic"] = "system is constraint to periodic boundary conditions (y/n)";
-  DescriptionMap["position"] = "position in R^3 space";
-  DescriptionMap["start-step"] = "first or start step";
-
-  // short forms for the actions
-  ShortFormMap["add-atom"] = "a";
-  ShortFormMap["bond-table"] = "g";
-  ShortFormMap["bond-file"] = "A";
-  ShortFormMap["boundary"] = "c";
-  ShortFormMap["change-box"] = "B";
-  ShortFormMap["center-edge"] = "O";
-  ShortFormMap["center-in-box"] = "b";
-  ShortFormMap["change-element"] = "E";
-//  ShortFormMap["convex-envelope"] = "x";
-  ShortFormMap["default-molname"] = "X";
-  ShortFormMap["depth-first-search"] = "D";
-  ShortFormMap["element-db"] = "e";
-  ShortFormMap["fastparsing"] = "n";
-  ShortFormMap["fill-molecule"] = "F";
-  ShortFormMap["fragment-mol"] = "f";
-  ShortFormMap["help"] = "h";
-  ShortFormMap["input"] = "i";
-  ShortFormMap["linear-interpolate"] = "L";
-  ShortFormMap["nonconvex-envelope"] = "N";
-//  ShortFormMap["output"] = "o";
-//  ShortFormMap["pair-correlation"] = "C";
-  ShortFormMap["parse-xyz"] = "p";
-  ShortFormMap["remove-atom"] = "r";
-  ShortFormMap["repeat-box"] = "d";
-  ShortFormMap["rotate-to-pas"] = "m";
-  ShortFormMap["save-adjacency"] = "J";
-  ShortFormMap["save-bonds"] = "j";
-  ShortFormMap["save-temperature"] = "S";
-  ShortFormMap["scale-box"] = "s";
-  ShortFormMap["set-basis"] = "M";
-  ShortFormMap["set-output"] = "o";
-  ShortFormMap["subgraph-dissect"] = "I";
-  ShortFormMap["suspend-in-water"] = "u";
-  ShortFormMap["translate-atoms"] = "t";
-  ShortFormMap["verbose"] = "v";
-  ShortFormMap["verlet-integrate"] = "P";
-  ShortFormMap["version"] = "V";
-
-  // value types for the actions
-  TypeMap["add-atom"] = &typeid(const element);
-  TypeMap["bond-file"] = &typeid(std::string);
-  TypeMap["bond-table"] = &typeid(std::string);
-  TypeMap["boundary"] = &typeid(VectorValue);
-  TypeMap["center-in-box"] = &typeid(BoxValue);
-  TypeMap["change-box"] = &typeid(BoxValue);
-  TypeMap["change-element"] = &typeid(const element);
-  TypeMap["change-molname"] = &typeid(std::string);
-  TypeMap["clear-atom-selection"] = &typeid(void);
-  TypeMap["clear-molecule-selection"] = &typeid(void);
-  TypeMap["construct-bondgraph"] = &typeid(void);
-  TypeMap["convex-envelope"] = &typeid(void);
-  TypeMap["copy-molecule"] = &typeid(molecule);
-  TypeMap["default-molname"] = &typeid(std::string);
-  TypeMap["depth-first-search"] = &typeid(double);
-  TypeMap["element-db"] = &typeid(std::string);
-  TypeMap["fastparsing"] = &typeid(bool);
-  TypeMap["fill-molecule"] = &typeid(std::string);
-  TypeMap["fill-void"] = &typeid(std::string);
-  TypeMap["fragment-mol"] = &typeid(std::string);
-  TypeMap["input"] = &typeid(boost::filesystem::path);
-  TypeMap["linear-interpolate"] = &typeid(std::string);
-  TypeMap["molecular-volume"] = &typeid(molecule);
-  TypeMap["nonconvex-envelope"] = &typeid(double);
-  TypeMap["output"] = &typeid(void);
-  TypeMap["parse-xyz"] = &typeid(std::string);
-  TypeMap["pair-correlation"] = &typeid(void);
-  TypeMap["point-correlation"] = &typeid(void);
-  TypeMap["principal-axis-system"] = &typeid(void);
-  TypeMap["redo"] = &typeid(void);
-  TypeMap["remove-atom"] = &typeid(void);
-  TypeMap["repeat-box"] = &typeid(VectorValue);
-  TypeMap["rotate-origin"] = &typeid(double);
-  TypeMap["rotate-self"] = &typeid(double);
-  TypeMap["rotate-to-pas"] = &typeid(VectorValue);
-  TypeMap["save-adjacency"] = &typeid(std::string);
-  TypeMap["save-bonds"] = &typeid(std::string);
-  TypeMap["save-temperature"] = &typeid(std::string);
-  TypeMap["scale-box"] = &typeid(VectorValue);
-  TypeMap["select-all-atoms"] = &typeid(void);
-  TypeMap["select-all-molecules"] = &typeid(void);
-  TypeMap["select-atom-by-element"] = &typeid(const element);
-  TypeMap["select-atom-by-id"] = &typeid(atom);
-  TypeMap["select-atoms-inside-cuboid"] = &typeid(VectorValue);
-  TypeMap["select-atoms-inside-sphere"] = &typeid(double);
-  TypeMap["select-molecule-by-formula"] = &typeid(std::string);
-  TypeMap["select-molecule-by-id"] = &typeid(molecule);
-  TypeMap["select-molecule-of-atom"] = &typeid(atom);
-  TypeMap["select-molecules-atoms"] = &typeid(molecule);
-  TypeMap["set-basis"] = &typeid(std::string);
-  TypeMap["set-output"] = &typeid(std::vector<std::string>);
-  TypeMap["subgraph-dissect"] = &typeid(void);
-  TypeMap["surface-correlation"] = &typeid(void);
-  TypeMap["suspend-in-water"] = &typeid(double);
-  TypeMap["translate-atoms"] = &typeid(VectorValue);
-  TypeMap["undo"] = &typeid(void);
-  TypeMap["unselect-all-atoms"] = &typeid(void);
-  TypeMap["unselect-all-molecules"] = &typeid(void);
-  TypeMap["unselect-atom-by-element"] = &typeid(const element);
-  TypeMap["unselect-atom-by-id"] = &typeid(atom);
-  TypeMap["unselect-atoms-inside-cuboid"] = &typeid(VectorValue);
-  TypeMap["unselect-atoms-inside-sphere"] = &typeid(double);
-  TypeMap["unselect-molecule-by-formula"] = &typeid(std::string);
-  TypeMap["unselect-molecule-by-id"] = &typeid(molecule);
-  TypeMap["unselect-molecule-of-atom"] = &typeid(atom);
-  TypeMap["unselect-molecules-atoms"] = &typeid(molecule);
-  TypeMap["verlet-integrate"] = &typeid(std::string);
-  TypeMap["verbose"] = &typeid(int);
-
-  // value types for the values
-  TypeMap["angle-x"] = &typeid(double);
-  TypeMap["angle-y"] = &typeid(double);
-  TypeMap["angle-z"] = &typeid(double);
-  TypeMap["bin-output-file"] = &typeid(std::string);
-  TypeMap["bin-end"] = &typeid(double);
-  TypeMap["bin-start"] = &typeid(double);
-  TypeMap["bin-width"] = &typeid(double);
-  TypeMap["convex-file"] = &typeid(std::string);
-  TypeMap["distance"] = &typeid(double);
-  TypeMap["distances"] = &typeid(VectorValue);
-  TypeMap["DoRotate"] = &typeid(bool);
-  TypeMap["element"] = &typeid(const element);
-  TypeMap["elements"] = &typeid(std::vector<const element *>);
-  TypeMap["end-step"] = &typeid(int);
-  TypeMap["id-mapping"] = &typeid(bool);
-  TypeMap["length"] = &typeid(double);
-  TypeMap["lengths"] = &typeid(VectorValue);
-  TypeMap["MaxDistance"] = &typeid(double);
-  TypeMap["molecule-by-id"] = &typeid(molecule);
-  TypeMap["nonconvex-file"] = &typeid(std::string);
-  TypeMap["order"] = &typeid(int);
-  TypeMap["output-file"] = &typeid(std::string);
-  TypeMap["periodic"] = &typeid(bool);
-  TypeMap["position"] = &typeid(VectorValue);
-  TypeMap["start-step"] = &typeid(int);
-
-  TypeEnumMap[&typeid(void)] = None;
-  TypeEnumMap[&typeid(bool)] = Boolean;
-  TypeEnumMap[&typeid(int)] = Integer;
-  TypeEnumMap[&typeid(boost::filesystem::path)] = File;
-  TypeEnumMap[&typeid(std::vector<int>)] = ListOfIntegers;
-  TypeEnumMap[&typeid(double)] = Double;
-  TypeEnumMap[&typeid(std::vector<double>)] = ListOfDoubles;
-  TypeEnumMap[&typeid(std::string)] = String;
-  TypeEnumMap[&typeid(std::vector<std::string>)] = ListOfStrings;
-  TypeEnumMap[&typeid(VectorValue)] = Vector;
-  TypeEnumMap[&typeid(std::vector<VectorValue>)] = ListOfVectors;
-  TypeEnumMap[&typeid(BoxValue)] = Box;
-  TypeEnumMap[&typeid(molecule)] = Molecule;
-  TypeEnumMap[&typeid(std::vector<molecule *>)] = ListOfMolecules;
-  TypeEnumMap[&typeid(atom)] = Atom;
-  TypeEnumMap[&typeid(std::vector<atom *>)] = ListOfAtoms;
-  TypeEnumMap[&typeid(const element)] = Element;
-  TypeEnumMap[&typeid(std::vector<const element *>)] = ListOfElements;
-
-  // default values for any action that needs one (always string!)
-  CurrentValueMap["bin-width"] = "0.5";
-  CurrentValueMap["fastparsing"] = "0";
-  CurrentValueMap["periodic"] = "0";
-
-  // put action into each menu category
-  MenuDescription["analysis"] = pair<std::string,std::string>("Analysis (pair correlation, volume)", "Analysis");
-  MenuDescription["atom"] = pair<std::string,std::string>("Edit atoms", "Atoms");
-  MenuDescription["command"] = pair<std::string,std::string>("Configuration", "configuration options");
-  MenuDescription["fragmentation"] = pair<std::string,std::string>("Fragmentation", "Fragmentation");
-  MenuDescription["molecule"] = pair<std::string,std::string>("Parse files into system", "Molecules");
-  MenuDescription["parser"] = pair<std::string,std::string>("Edit molecules (load, parse, save)", "Input/Output");
-  MenuDescription["selection"] = pair<std::string,std::string>("Select atoms/molecules", "Selection");
-  MenuDescription["tesselation"] = pair<std::string,std::string>("Tesselate molecules", "Tesselation");
-  MenuDescription["world"] = pair<std::string,std::string>("Edit world", "Globals");
-
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("analysis", "molecular-volume") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("analysis", "pair-correlation") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("analysis", "point-correlation") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("analysis", "surface-correlation") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("analysis", "principal-axis-system") );
-
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("atom", "add-atom") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("atom", "change-element") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("atom", "remove-atom") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("atom", "translate-atoms") );
-
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("command", "bond-table") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("command", "element-db") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("command", "fastparsing") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("command", "help") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("command", "verbose") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("command", "version") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("command", "warranty") );
-
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("fragmentation", "construct-bondgraph") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("fragmentation", "depth-first-search") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("fragmentation", "fragment-mol") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("fragmentation", "subgraph-dissect") );
-
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "bond-file") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "copy-molecule") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "change-molname") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "fill-molecule") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "fill-void") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "linear-interpolate") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "rotate-origin") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "rotate-self") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "rotate-to-pas") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "save-adjacency") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "save-bonds") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "save-temperature") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "suspend-in-water") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("molecule", "verlet-integrate") );
-
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("parser", "parse-xyz") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("parser", "SaveXyz") );
-
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "clear-atom-selection") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "clear-molecule-selection") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-all-atoms") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-all-molecules") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-atom-by-element") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-atom-by-id") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-atoms-inside-cuboid") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-atoms-inside-sphere") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-molecule-by-id") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-molecule-by-formula") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-molecule-of-atom") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-molecules-atoms") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-all-atoms") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-all-molecules") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-atom-by-element") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-atom-by-id") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-atoms-inside-cuboid") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-atoms-inside-sphere") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-molecule-by-formula") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-molecule-by-id") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-molecule-of-atom") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-molecules-atoms") );
-
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("tesselation", "convex-envelope") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("tesselation", "nonconvex-envelope") );
-
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "boundary") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "bound-in-box") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "center-in-box") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "center-edge") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "change-box") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "input") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "output") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "repeat-box") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "scale-box") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "default-molname") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "set-basis") );
-  MenuContainsActionMap.insert( pair<std::string, std::string> ("world", "set-output") );
-
-  // put actions into command line category
-	generic.insert("add-atom");
-  generic.insert("bond-file");
-	generic.insert("bond-table");
-  generic.insert("boundary");
-//  generic.insert("bound-in-box");
-  generic.insert("center-edge");
-  generic.insert("center-in-box");
-	generic.insert("change-box");
-//  generic.insert("change-molname");
-  generic.insert("change-element");
-  generic.insert("clear-atom-selection");
-  generic.insert("clear-molecule-selection");
-  generic.insert("construct-bondgraph");
-  generic.insert("convex-envelope");
-  generic.insert("copy-molecule");
-	generic.insert("default-molname");
-	generic.insert("depth-first-search");
-	generic.insert("element-db");
-	generic.insert("fastparsing");
-  generic.insert("fill-molecule");
-  generic.insert("fill-void");
-  generic.insert("fragment-mol");
-  generic.insert("help");
-  generic.insert("input");
-  generic.insert("linear-interpolate");
-//  generic.insert("molecular-volume");
-  generic.insert("nonconvex-envelope");
-  generic.insert("output");
-	generic.insert("pair-correlation");
-	generic.insert("parse-xyz");
-  generic.insert("point-correlation");
-//  generic.insert("principal-axis-system");
-  generic.insert("redo");
-  generic.insert("remove-atom");
-  generic.insert("repeat-box");
-  generic.insert("rotate-origin");
-  generic.insert("rotate-self");
-  generic.insert("rotate-to-pas");
-	generic.insert("save-adjacency");
-  generic.insert("save-bonds");
-  generic.insert("save-temperature");
-  generic.insert("scale-box");
-  generic.insert("select-all-atoms");
-  generic.insert("select-all-molecules");
-  generic.insert("select-atom-by-element");
-  generic.insert("select-atom-by-id");
-  generic.insert("select-atoms-inside-cuboid");
-  generic.insert("select-atoms-inside-sphere");
-  generic.insert("select-molecule-by-id");
-  generic.insert("select-molecule-by-formula");
-  generic.insert("select-molecule-of-atom");
-  generic.insert("select-molecules-atoms");
-  generic.insert("set-basis");
-  generic.insert("set-output");
-	generic.insert("subgraph-dissect");
-  generic.insert("surface-correlation");
-  generic.insert("suspend-in-water");
-  generic.insert("translate-atoms");
-  generic.insert("undo");
-  generic.insert("unselect-all-atoms");
-  generic.insert("unselect-all-molecules");
-  generic.insert("unselect-atom-by-element");
-  generic.insert("unselect-atom-by-id");
-  generic.insert("unselect-atoms-inside-cuboid");
-  generic.insert("unselect-atoms-inside-sphere");
-  generic.insert("unselect-molecule-by-formula");
-  generic.insert("unselect-molecule-by-id");
-  generic.insert("unselect-molecule-of-atom");
-  generic.insert("unselect-molecules-atoms");
-	generic.insert("verbose");
-  generic.insert("verlet-integrate");
-	generic.insert("version");
-  generic.insert("warranty");
-
-    // positional arguments
-  generic.insert("input");
-
-    // hidden arguments
-  hidden.insert("angle-x");
-  hidden.insert("angle-y");
-  hidden.insert("angle-z");
-  hidden.insert("bin-end");
-  hidden.insert("bin-output-file");
-  hidden.insert("bin-start");
-  hidden.insert("bin-width");
-  hidden.insert("convex-file");
-  hidden.insert("distance");
-  hidden.insert("DoRotate");
-  hidden.insert("distances");
-  hidden.insert("element");
-  hidden.insert("elements");
-  hidden.insert("end-step");
-  hidden.insert("id-mapping");
-  hidden.insert("lengths");
-  hidden.insert("MaxDistance");
-  hidden.insert("molecule-by-id");
-  hidden.insert("nonconvex-file");
-  hidden.insert("order");
-  hidden.insert("output-file");
-  hidden.insert("periodic");
-  hidden.insert("position");
-  hidden.insert("start-step");
-}
-
-/** Destructor of class MapOfActions.
- *
- */
-MapOfActions::~MapOfActions()
-{
-  DescriptionMap.clear();
-}
-
-bool MapOfActions::isCurrentValuePresent(const char *name) const
-{
-  return (CurrentValueMap.find(name) != CurrentValueMap.end());
-}
-
-void MapOfActions::queryCurrentValue(const char * name, class atom * &_T)
-{
-  int atomID = -1;
-  if (typeid( atom ) == *TypeMap[name]) {
-    if (CurrentValueMap.find(name) == CurrentValueMap.end())
-      throw MissingValueException(__FILE__, __LINE__);
-    atomID = lexical_cast<int>(CurrentValueMap[name].c_str());
-    CurrentValueMap.erase(name);
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-  _T = World::getInstance().getAtom(AtomById(atomID));
-}
-
-void MapOfActions::queryCurrentValue(const char * name, const element * &_T)  {
-  int Z = -1;
-  if (typeid(const element ) == *TypeMap[name]) {
-    if (CurrentValueMap.find(name) == CurrentValueMap.end())
-      throw MissingValueException(__FILE__, __LINE__);
-    Z = lexical_cast<int>(CurrentValueMap[name].c_str());
-    CurrentValueMap.erase(name);
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-  _T = World::getInstance().getPeriode()->FindElement(Z);
-}
-
-void MapOfActions::queryCurrentValue(const char * name, class molecule * &_T) {
-  int molID = -1;
-  if (typeid( molecule ) == *TypeMap[name]) {
-    if (CurrentValueMap.find(name) == CurrentValueMap.end())
-      throw MissingValueException(__FILE__, __LINE__);
-    molID = lexical_cast<int>(CurrentValueMap[name].c_str());
-    CurrentValueMap.erase(name);
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-  _T = World::getInstance().getMolecule(MoleculeById(molID));
-}
-
-void MapOfActions::queryCurrentValue(const char * name, class Box &_T) {
-  Matrix M;
-  double tmp;
-  if (typeid( BoxValue ) == *TypeMap[name]) {
-    if (CurrentValueMap.find(name) == CurrentValueMap.end())
-      throw MissingValueException(__FILE__, __LINE__);
-    std::istringstream stream(CurrentValueMap[name]);
-    stream >> tmp;
-    M.set(0,0,tmp);
-    stream >> tmp;
-    M.set(0,1,tmp);
-    M.set(1,0,tmp);
-    stream >> tmp;
-    M.set(0,2,tmp);
-    M.set(2,0,tmp);
-    stream >> tmp;
-    M.set(1,1,tmp);
-    stream >> tmp;
-    M.set(1,2,tmp);
-    M.set(2,1,tmp);
-    stream >> tmp;
-    M.set(2,2,tmp);
-    _T = M;
-    CurrentValueMap.erase(name);
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::queryCurrentValue(const char * name, class Vector &_T) {
-  if (typeid( VectorValue ) == *TypeMap[name]) {
-    std::istringstream stream(CurrentValueMap[name]);
-    CurrentValueMap.erase(name);
-    stream >> _T[0];
-    stream >> _T[1];
-    stream >> _T[2];
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::queryCurrentValue(const char * name, class BoxVector &_T) {
-  if (typeid( VectorValue ) == *TypeMap[name]) {
-    std::istringstream stream(CurrentValueMap[name]);
-    CurrentValueMap.erase(name);
-    stream >> _T[0];
-    stream >> _T[1];
-    stream >> _T[2];
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::queryCurrentValue(const char * name, std::vector<atom *>&_T)
-{
-  int atomID = -1;
-  atom *Walker = NULL;
-  if (typeid( std::vector<atom *> ) == *TypeMap[name]) {
-    if (CurrentValueMap.find(name) == CurrentValueMap.end())
-      throw MissingValueException(__FILE__, __LINE__);
-    std::istringstream stream(CurrentValueMap[name]);
-    CurrentValueMap.erase(name);
-    while (!stream.fail()) {
-      stream >> atomID >> ws;
-      Walker = World::getInstance().getAtom(AtomById(atomID));
-      if (Walker != NULL)
-        _T.push_back(Walker);
-      atomID = -1;
-      Walker = NULL;
-    }
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::queryCurrentValue(const char * name, std::vector<const element *>&_T)
-{
-  int Z = -1;
-  const element *elemental = NULL;
-  if (typeid( std::vector<const element *> ) == *TypeMap[name]) {
-    if (CurrentValueMap.find(name) == CurrentValueMap.end())
-      throw MissingValueException(__FILE__, __LINE__);
-    std::istringstream stream(CurrentValueMap[name]);
-    CurrentValueMap.erase(name);
-    while (!stream.fail()) {
-      stream >> Z >> ws;
-      elemental = World::getInstance().getPeriode()->FindElement(Z);
-      if (elemental != NULL)
-        _T.push_back(elemental);
-      Z = -1;
-    }
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::queryCurrentValue(const char * name, std::vector<molecule *>&_T)
-{
-  int molID = -1;
-  molecule *mol = NULL;
-  if (typeid( std::vector<molecule *> ) == *TypeMap[name]) {
-    if (CurrentValueMap.find(name) == CurrentValueMap.end())
-      throw MissingValueException(__FILE__, __LINE__);
-    std::istringstream stream(CurrentValueMap[name]);
-    CurrentValueMap.erase(name);
-    while (!stream.fail()) {
-      stream >> molID >> ws;
-      mol = World::getInstance().getMolecule(MoleculeById(molID));
-      if (mol != NULL)
-        _T.push_back(mol);
-      molID = -1;
-      mol = NULL;
-    }
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::queryCurrentValue(const char * name, boost::filesystem::path&_T)
-{
-  std::string tmp;
-  if (typeid( boost::filesystem::path ) == *TypeMap[name]) {
-    if (CurrentValueMap.find(name) == CurrentValueMap.end())
-      throw MissingValueException(__FILE__, __LINE__);
-    std::istringstream stream(CurrentValueMap[name]);
-    CurrentValueMap.erase(name);
-    if (!stream.fail()) {
-      stream >> tmp >> ws;
-      _T = tmp;
-    }
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::setCurrentValue(const char * name, class atom * &_T)
-{
-  if (typeid( atom ) == *TypeMap[name]) {
-    std::ostringstream stream;
-    stream << _T->getId();
-    CurrentValueMap[name] = stream.str();
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::setCurrentValue(const char * name, const element * &_T)
-{
-  if (typeid(const element ) == *TypeMap[name]) {
-    std::ostringstream stream;
-    stream << _T->getAtomicNumber();
-    CurrentValueMap[name] = stream.str();
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::setCurrentValue(const char * name, class molecule * &_T)
-{
-  if (typeid( molecule ) == *TypeMap[name]) {
-    std::ostringstream stream;
-    stream << _T->getId();
-    CurrentValueMap[name] = stream.str();
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::setCurrentValue(const char * name, class Box &_T)
-{
-  const Matrix &M = _T.getM();
-  if (typeid( BoxValue ) == *TypeMap[name]) {
-    std::ostringstream stream;
-    stream << M.at(0,0) << " ";
-    stream << M.at(0,1) << " ";
-    stream << M.at(0,2) << " ";
-    stream << M.at(1,1) << " ";
-    stream << M.at(1,2) << " ";
-    stream << M.at(2,2) << " ";
-    CurrentValueMap[name] = stream.str();
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::setCurrentValue(const char * name, class Vector &_T)
-{
-  if (typeid( VectorValue ) == *TypeMap[name]){
-    std::ostringstream stream;
-    stream << _T[0] << " ";
-    stream << _T[1] << " ";
-    stream << _T[2] << " ";
-    CurrentValueMap[name] = stream.str();
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::setCurrentValue(const char * name, class BoxVector &_T)
-{
-  if (typeid( VectorValue ) == *TypeMap[name]){
-    std::ostringstream stream;
-    stream << _T[0] << " ";
-    stream << _T[1] << " ";
-    stream << _T[2] << " ";
-    CurrentValueMap[name] = stream.str();
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::setCurrentValue(const char * name, std::vector<atom *>&_T)
-{
-  if (typeid( std::vector<atom *> ) == *TypeMap[name]) {
-    std::ostringstream stream;
-    for (std::vector<atom *>::iterator iter = _T.begin(); iter != _T.end(); ++iter) {
-      stream << (*iter)->getId() << " ";
-    }
-    CurrentValueMap[name] = stream.str();
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::setCurrentValue(const char * name, std::vector<const element *>&_T)
-{
-  if (typeid( std::vector<const element *> ) == *TypeMap[name]) {
-    std::ostringstream stream;
-    for (std::vector<const element *>::iterator iter = _T.begin(); iter != _T.end(); ++iter) {
-      stream << (*iter)->getAtomicNumber() << " ";
-    }
-    CurrentValueMap[name] = stream.str();
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::setCurrentValue(const char * name, std::vector<molecule *>&_T)
-{
-  if (typeid( std::vector<molecule *> ) == *TypeMap[name]) {
-    std::ostringstream stream;
-    for (std::vector<molecule *>::iterator iter = _T.begin(); iter != _T.end(); ++iter) {
-      stream << (*iter)->getId() << " ";
-    }
-    CurrentValueMap[name] = stream.str();
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
-}
-
-void MapOfActions::setCurrentValue(const char * name, boost::filesystem::path &_T)
-{
-  if (typeid( boost::filesystem::path ) == *TypeMap[name]) {
-    std::ostringstream stream;
-    stream << _T.string();
-    CurrentValueMap[name] = stream.str();
-  } else
-    throw IllegalTypeException(__FILE__,__LINE__);
- }
-
-/** Adds all options to the CommandLineParser.
- *
- */
-void MapOfActions::AddOptionsToParser()
-{
-  // add other options
-  for (map< set<string>*, po::options_description* >::iterator ListRunner = CmdParserLookup.begin(); ListRunner != CmdParserLookup.end(); ++ListRunner) {
-    for (set<string>::iterator OptionRunner = ListRunner->first->begin(); OptionRunner != ListRunner->first->end(); ++OptionRunner) {
-      if (hasValue(*OptionRunner)) {
-        DoLog(1) && (Log() << Verbose(1) << "Adding option " << *OptionRunner << " with type " << TypeMap[*OptionRunner]->name() << " to CommandLineParser." << endl);
-           switch(TypeEnumMap[TypeMap[*OptionRunner]]) {
-          default:
-          case None:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(), getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case Boolean:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  CurrentValueMap.find(*OptionRunner) != CurrentValueMap.end() ?
-                        po::value< bool >()->default_value(lexical_cast<int>(CurrentValueMap[*OptionRunner].c_str())) :
-                        po::value< bool >(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case Box:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value<BoxValue>(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case File:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value< boost::filesystem::path >(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case Integer:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  CurrentValueMap.find(*OptionRunner) != CurrentValueMap.end() ?
-                        po::value< int >()->default_value(lexical_cast<int>(CurrentValueMap[*OptionRunner].c_str())) :
-                        po::value< int >(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case ListOfIntegers:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value< vector<int> >()->multitoken(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case Double:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  CurrentValueMap.find(*OptionRunner) != CurrentValueMap.end() ?
-                        po::value< double >()->default_value(lexical_cast<double>(CurrentValueMap[*OptionRunner].c_str())) :
-                        po::value< double >(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case ListOfDoubles:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value< vector<double> >()->multitoken(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case String:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  CurrentValueMap.find(*OptionRunner) != CurrentValueMap.end() ?
-                        po::value< std::string >()->default_value(CurrentValueMap[*OptionRunner]) :
-                        po::value< std::string >(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case ListOfStrings:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value< vector<std::string> >()->multitoken(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case Vector:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value<VectorValue>(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case ListOfVectors:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value< vector<VectorValue> >()->multitoken(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case Molecule:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  CurrentValueMap.find(*OptionRunner) != CurrentValueMap.end() ?
-                        po::value< int >()->default_value(lexical_cast<int>(CurrentValueMap[*OptionRunner].c_str())) :
-                        po::value< int >(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case ListOfMolecules:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value< vector<int> >()->multitoken(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case Atom:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  CurrentValueMap.find(*OptionRunner) != CurrentValueMap.end() ?
-                        po::value< int >()->default_value(lexical_cast<int>(CurrentValueMap[*OptionRunner].c_str())) :
-                        po::value< int >(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case ListOfAtoms:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value< vector<int> >()->multitoken(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case Element:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value< int >(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case ListOfElements:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value< vector<int> >()->multitoken(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-        }
-      } else {
-        DoLog(3) && (Log() << Verbose(3) << "Adding option " << *OptionRunner << " to CommandLineParser." << endl);
-        ListRunner->second->add_options()
-          (getKeyAndShortForm(*OptionRunner).c_str(), getDescription(*OptionRunner).c_str())
-          ;
-      }
-    }
-  }
-}
-
-/** Getter for MapOfActions:DescriptionMap.
- * Note that we assert when action does not exist in CommandLineParser::DescriptionMap.
- * \param actionname name of the action to lookup
- * \return Description of the action
- */
-const std::string MapOfActions::getDescription(string actionname)
-{
-  ASSERT(DescriptionMap.find(actionname) != DescriptionMap.end(), "Unknown action name passed to MapOfActions::getDescription");
-  return DescriptionMap[actionname];
-}
-
-/** Specific Getter for a MapOfActions:ShortFormMap.
- * If action has a short for, then combination is as "actionname,ShortForm" (this is
- * the desired format for boost::program_options). If no short form exists in the map,
- * just actionname will be returned
- * Note that we assert when action does not exist in CommandLineParser::DescriptionMap.
- * \param actionname name of the action to lookup
- * \return actionname,ShortForm or Description of the action
- */
-const std::string MapOfActions::getKeyAndShortForm(string actionname)
-{
-  stringstream output;
-  ASSERT(DescriptionMap.find(actionname) != DescriptionMap.end(), "Unknown action name passed to MapOfActions::getDescriptionAndShortForm");
-  output << actionname;
-  if (ShortFormMap.find(actionname) != DescriptionMap.end())
-    output << "," << ShortFormMap[actionname];
-  return output.str();
-}
-
-/** Getter for MapOfActions:ShortFormMap.
- * Note that we assert when action does not exist CommandLineParser::ShortFormMap.
- * \param actionname name of the action to lookup
- * \return ShortForm of the action
- */
-const std::string MapOfActions::getShortForm(string actionname)
-{
-  if (ShortFormMap.find(actionname) != ShortFormMap.end())
-    return ShortFormMap[actionname];
-  else
-    return std::string();
-}
-
-/** Getter for MapOfActions:CurrentValueMap.
- * Note that we assert when action does not exist in CommandLineParser::CurrentValueMap.
- * \param actionname name of the action to lookup
- * \return CurrentValueMap of the action
- */
-const std::string MapOfActions::getCurrentValue(string actionname)
-{
-  if (CurrentValueMap.find(actionname) != CurrentValueMap.end())
-    return CurrentValueMap[actionname];
-  else
-    return std::string();
-}
-
-/** Returns whether the given action needs a value or not.
- * \param actionname name of the action to look up
- * \return true - value is needed, false - no value is stored in MapOfActions::TypeMap
- */
-bool MapOfActions::hasValue(string actionname)
-{
-  return (TypeMap.find(actionname) != TypeMap.end());
-}
-
-/** Getter for MapOfActions::TypeMap::name.
- * \param actionname name of the action to look up
- * \return name of type of the action
- */
-const std::string MapOfActions::getValueType(string actionname)
-{
-  return TypeMap[actionname]->name();
-}
-
-/** Getter for MapOfActions::TypeMap.
- * \param actionname name of the action to look up
- * \return type of the action
- */
-const std::type_info * MapOfActions::getType(string actionname)
-{
-  return TypeMap[actionname];
-}
-
-/** Searches whether action is registered with CommandLineParser.
- * Note that this method is only meant transitionally for ParseCommandLineOptions' removal.
- * I.e. All actions that are already handled by the new CommandLineUIFactory can be checked
- * by this function.
- * \param shortform command short form to look for
- * \return true - action has been registered, false - action has not been registered.
- */
-bool MapOfActions::isShortFormPresent(string shortform)
-{
-  bool result = false;
-  string actionname;
-  for (map<std::string, std::string>::iterator ShortFormRunner = ShortFormMap.begin(); ShortFormRunner != ShortFormMap.end(); ++ShortFormRunner)
-    if (ShortFormRunner->second == shortform) {
-      actionname = ShortFormRunner->first;
-      break;
-    }
-  result = result || (generic.find(actionname) != generic.end());
-  result = result || (config.find(actionname) != config.end());
-  result = result || (hidden.find(actionname) != hidden.end());
-  result = result || (visible.find(actionname) != visible.end());
-  result = result || (inputfile.find(actionname) != inputfile.end());
-  return result;
-}
-
-/** Returns the inverse to MapOfActions::ShortFormMap, i.e. lookup actionname for its short form.
- * \return map from short form of action to name of action
- */
-map <std::string, std::string> MapOfActions::getShortFormToActionMap()
-{
-  map <std::string, std::string> result;
-
-  for (map<std::string, std::string>::iterator iter = ShortFormMap.begin(); iter != ShortFormMap.end();  ++iter)
-    result[iter->second] = iter->first;
-
-  return result;
-}
-
-
-CONSTRUCT_SINGLETON(MapOfActions)
Index: src/Actions/MapOfActions.hpp
===================================================================
--- src/Actions/MapOfActions.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ 	(revision )
@@ -1,255 +1,0 @@
-/*
- * MapOfActions.hpp
- *
- *  Created on: 10.05.2010
- *      Author: heber
- */
-
-#ifndef MAPOFACTIONS_HPP_
-#define MAPOFACTIONS_HPP_
-
-#include <boost/filesystem.hpp>
-#include <boost/lexical_cast.hpp>
-#include <boost/program_options.hpp>
-
-#include <map>
-#include <set>
-#include <vector>
-#include <typeinfo>
-
-
-#include "Exceptions/IllegalTypeException.hpp"
-#include "Exceptions/MissingValueException.hpp"
-#include "Helpers/Assert.hpp"
-#include "Patterns/Singleton.hpp"
-
-class MapOfActionsTest;
-
-class Box;
-class atom;
-class element;
-class molecule;
-class Vector;
-
-namespace po = boost::program_options;
-
-using boost::lexical_cast;
-
-/** Central class for adding functionality to the code.
- *
- * In Molecuilder everything that can be done - such as adding atoms,
- * translating molecules, saving bind information - is an Action.
- *
- * In order to reference Action's with what the user sees, this class is the
- * mediator.
- *
- * An Action is described to the user by:
- * -# a name (this is the most important information)
- * -# a description
- * -# a shortform (single letter for use on the command line)
- * -# a text menu it resides in
- * -# the type of its argument
- * -# the command line category
- *
- * The Action::NAME is the most important information because every Action
- * registers itself automatically with the ActionRegistry and can be retrieved
- * therefrom and from this MapOfActions simply by knowing its name alone.
- *
- * In the constructor of MapOfActions all this is set.
- *
- * Note that Action will require input from the user. This is done via class
- * Query.
- *
- * And note also that MapOfActions actually contains more than just all
- * Actions: There are a number of names that actually are just arguments to
- * actions (e.g. "output-file").
- *
- * <h1> Howto add an Action</h1>
- *
- * Let us assume your new action (class) is called SuperDuperAction, consisting
- * of two files SuperDuperAction.cpp and SuperDuperAction.hpp.
- *
- * Furthermore, let's say you Action needs two values: a double value as a
- * upper threshold and a string which is the name of the output file.
- *
- * <h2> Command Line preliminaries </h2>
- *
- * You have to decide whether (for the command line) it makes sense to have an
- * extra argument requesting the arguments, or one should be the argument of
- * your action. I.e. your action name is "super-duper", then the use may
- * call your action like this:
- *
- * ./molecuilder --super-duper 4 --output-file test.dat
- *
- * Here, we have picked the threshold as the value for your action and the
- * name of the output file is given by an additional argument. Of course,
- * it can be the other way round or by two arguments such as here:
- *
- * ./molecuilder --super-duper --threshold 4 --output-file test.dat
- *
- * It depends on what possible arguments are already there (don't make up
- * new ones if present ones actually make sense for your action) and which
- * argument is more natural or closer to what your action does.
- *
- * <h2> Menu preliminaries </h2>
- *
- * Whatever you decide, your action will need some Query dialogs to request
- * the necessary information from the user, either via a command line
- * argument (--output-file) via a text dialog (referenced by "output-file")
- * or via a graphical dialog (same reference). And therein, the names
- * of the arguments have to re-appear.
- *
- * Then, the following steps have to be done to incorporate your Action:
- * -# create a unique name for your action (no capital letters) to reference
- *    it, this name has to appear in the file SuperDuperAction.cpp, e.g.
- *    "super-duper"
- * -# pick names the other required arguments, best if they are already
- *    present in the MapOfActions. They have to appear in Query's in the
- *    code of your Action.
- * -# With this name create entries in the following maps for the action
- *    name and for each names of a desired addtional argument if not present:
- *   -# DescriptionMap, a catchy description of what your action does
- *   -# TypeMap, see MapOfActions::OptionTypes for possible types of the single
- *      argument it takes.
- *   -# MenuContainsActionMap, in which menu should your action appear
- *   -# ShortFormMap (optional), single letter for command line call
- *   -# DefaultValueMap (optional), the default value (always a string)
- * -# add to one of the command line sets by the following categories
- *   -# generic - generic options (i.e. not one of the others)
- *   -# config - action/argument only considers internal bevahior, user
- *      does not have to see it while still having full functionality
- *   -# hidden - this should be hidden from the user
- *   -# visible - this should be visible to the user
- *   -# inputfile - this should only be parsed from an input file, not
- *      from command line
- * -# add to a menu, i.e. make an entry in MenuContainsActionMap.
- * -# add header file SuperDuperAction.hpp to MapOfActions.cpp and instantiate
- *    your action in populateMenu() (mind the sorting: 1. menu,
- *    2. alphabetical)
- *
- *  And that's.
- *
- *  Now, your action can be called from the command line, within the text
- *  menu and the graphical user interface.
- *
- */
-class MapOfActions : public Singleton<MapOfActions> {
-  friend class Singleton<MapOfActions>;
-  friend class MapOfActionsTest;
-public:
-  enum OptionTypes { None, Boolean, File, Integer, ListOfIntegers, Double, ListOfDoubles, String, ListOfStrings, Vector, ListOfVectors, Box, Molecule, ListOfMolecules, Atom, ListOfAtoms, Element, ListOfElements };
-
-  // getter for the action descriptions and short forms
-  const std::string getDescription(std::string actionname);
-  const std::string getKeyAndShortForm(std::string actionname);
-  const std::string getShortForm(std::string actionname);
-  std::map <std::string, std::string> getShortFormToActionMap();
-  const std::string getCurrentValue(std::string actionname);
-
-  void AddOptionsToParser();
-
-  // check presence and getter for action type
-  bool hasValue(std::string actionname);
-  bool isShortFormPresent(std::string shortform);
-  const std::string  getValueType(std::string actionname);
-  const std::type_info * getType(std::string actionname);
-
-  std::set<std::string> generic;
-  std::set<std::string> config;
-  std::set<std::string> hidden;
-  std::set<std::string> visible;
-  std::set<std::string> inputfile;
-
-  std::multimap <std::string, std::string> MenuContainsActionMap;
-  std::map <std::string, std::pair<std::string,std::string> > MenuDescription;
-
-  bool isCurrentValuePresent(const char *name) const;
-  void queryCurrentValue(const char * name, class atom * &_T);
-  void queryCurrentValue(const char * name, const element * &_T);
-  void queryCurrentValue(const char * name, class molecule * &_T);
-  void queryCurrentValue(const char * name, class Box &_T);
-  void queryCurrentValue(const char * name, class Vector &_T);
-  void queryCurrentValue(const char * name, class BoxVector &_T);
-  void queryCurrentValue(const char * name, std::vector<atom *>&_T);
-  void queryCurrentValue(const char * name, std::vector<const element *>&_T);
-  void queryCurrentValue(const char * name, std::vector<molecule *>&_T);
-  void queryCurrentValue(const char * name, boost::filesystem::path&_T);
-
-  template<typename T> void queryCurrentValue(const char * name, T &_T)
-  {
-    if (typeid( T ) == *TypeMap[name]) { // constructor of type_info is private, hence can only store by ref or ptr
-      if (CurrentValueMap.find(name) == CurrentValueMap.end())
-        throw MissingValueException(__FILE__, __LINE__);
-      _T = lexical_cast<T>(CurrentValueMap[name].c_str());
-      CurrentValueMap.erase(name);
-    } else
-      throw IllegalTypeException(__FILE__,__LINE__);
-  }
-  template<typename T> void queryCurrentValue(const char * name, std::vector<T> &_T)
-  {
-    T temp;
-    if (typeid( std::vector<T> ) == *TypeMap[name]) { // constructor of type_info is private, hence can only store by ref or ptr
-      if (CurrentValueMap.find(name) == CurrentValueMap.end())
-        throw MissingValueException(__FILE__, __LINE__);
-      std::istringstream stream(CurrentValueMap[name]);
-      CurrentValueMap.erase(name);
-      while (!stream.fail()) {
-        stream >> temp >> std::ws;
-        _T.push_back(temp);
-      }
-    } else
-      throw IllegalTypeException(__FILE__,__LINE__);
-  }
-
-  void setCurrentValue(const char * name, class atom * &_T);
-  void setCurrentValue(const char * name, const element * &_T);
-  void setCurrentValue(const char * name, class molecule * &_T);
-  void setCurrentValue(const char * name, class Box &_T);
-  void setCurrentValue(const char * name, class Vector &_T);
-  void setCurrentValue(const char * name, class BoxVector &_T);
-  void setCurrentValue(const char * name, std::vector<atom *>&_T);
-  void setCurrentValue(const char * name, std::vector<const element *>&_T);
-  void setCurrentValue(const char * name, std::vector<molecule *>&_T);
-  void setCurrentValue(const char * name, boost::filesystem::path&_T);
-
-  template<class T> void setCurrentValue(const char * name, T &_T)
-  {
-    std::ostringstream stream;
-    if (typeid( T ) == *TypeMap[name]) {  // constructor of type_info is private, hence can only store by ref or ptr
-      stream << _T;
-      CurrentValueMap[name] = stream.str();
-    } else
-      throw IllegalTypeException(__FILE__,__LINE__);
-  }
-  template<class T> void setCurrentValue(const char * name, std::vector<T> &_T)
-  {
-    std::ostringstream stream;
-    if (typeid( std::vector<T> ) == *TypeMap[name]) {  // constructor of type_info is private, hence can only store by ref or ptr
-      std::ostringstream stream;
-      for (typename std::vector<T>::iterator iter = _T.begin(); iter != _T.end(); ++iter) {
-        stream << (*iter) << " ";
-      }
-      CurrentValueMap[name] = stream.str();
-    } else
-      throw IllegalTypeException(__FILE__,__LINE__);
-  }
-
-
-private:
-  // private constructor and destructor
-  MapOfActions();
-  virtual ~MapOfActions();
-
-  // lookup list from our configs to the ones of CommandLineParser
-  std::map< std::set<std::string> *, po::options_description *> CmdParserLookup;
-
-  // map of the action names and their description
-  std::map<std::string, std::string> CurrentValueMap;
-  std::map<std::string, std::string> DescriptionMap;
-  std::map<std::string, std::string> ShortFormMap;
-  std::map<std::string, const std::type_info * > TypeMap;
-  std::map<const std::type_info *, enum OptionTypes > TypeEnumMap;
-};
-
-
-#endif /* MAPOFACTIONS_HPP_ */
Index: src/Actions/MethodAction.cpp
===================================================================
--- src/Actions/MethodAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MethodAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -29,6 +29,6 @@
 using namespace std;
 
-MethodAction::MethodAction(string _name,boost::function<void()> _executeMethod,bool _doRegister) :
-   Action(_name,_doRegister),
+MethodAction::MethodAction(const ActionTraits &_trait,boost::function<void()> _executeMethod,bool _doRegister) :
+   Action(_trait,_doRegister),
 executeMethod(_executeMethod)
 {
Index: src/Actions/MethodAction.hpp
===================================================================
--- src/Actions/MethodAction.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MethodAction.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -20,5 +20,5 @@
 {
 public:
-  MethodAction(std::string _name,boost::function<void()> _executeMethod,bool _doRegister=true);
+  MethodAction(const ActionTraits &_trait,boost::function<void()> _executeMethod,bool _doRegister=true);
   virtual ~MethodAction();
   virtual bool canUndo();
Index: src/Actions/MoleculeAction/BondFileAction.cpp
===================================================================
--- src/Actions/MoleculeAction/BondFileAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/BondFileAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -46,5 +46,5 @@
     mol = World::getInstance().beginMoleculeSelection()->second;
     DoLog(0) && (Log() << Verbose(0) << "Parsing bonds from " << params.bondfile << "." << endl);
-    ifstream input(params.bondfile.c_str());
+    ifstream input(params.bondfile.string().c_str());
     mol->CreateAdjacencyListFromDbondFile(&input);
     input.close();
@@ -75,7 +75,3 @@
   return false;
 }
-
-const string MoleculeBondFileAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/BondFileAction.def
===================================================================
--- src/Actions/MoleculeAction/BondFileAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/BondFileAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (std::string)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)
 #define paramtokens ("bond-file")
 #define paramdescriptions ("name of the bond file")
+#undef paramdefaults
 #define paramreferences (bondfile)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
-#define DESCRIPTION "name of the bond file"
+#define DESCRIPTION "parse bond structure from dbond file"
 #define SHORTFORM "A"
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/MoleculeAction/ChangeNameAction.cpp
===================================================================
--- src/Actions/MoleculeAction/ChangeNameAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/ChangeNameAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -71,7 +71,3 @@
   return true;
 }
-
-const string MoleculeChangeNameAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/ChangeNameAction.def
===================================================================
--- src/Actions/MoleculeAction/ChangeNameAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/ChangeNameAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (std::string)
 #define paramtokens ("change-molname")
-#define paramdescriptions ("change the name of a molecule")
+#define paramdescriptions ("new name of molecule")
+#undef paramdefaults
 #define paramreferences (name)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "change the name of a molecule"
 #undef SHORTFORM
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/MoleculeAction/CopyAction.cpp
===================================================================
--- src/Actions/MoleculeAction/CopyAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/CopyAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -91,7 +91,3 @@
   return true;
 }
-
-const string MoleculeCopyAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/CopyAction.def
===================================================================
--- src/Actions/MoleculeAction/CopyAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/CopyAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (molecule *)(Vector)
+// "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 ("copies a molecule with all atoms and bonds")("position in R^3 space")
+#define paramdescriptions ("molecule to copy")("position in R^3 space")
+#undef paramdefaults
 #define paramreferences (mol)(position)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "copies a molecule with all atoms and bonds"
 #undef SHORTFORM
-#define TYPEINFO &typeid(molecule)
Index: src/Actions/MoleculeAction/FillVoidWithMoleculeAction.cpp
===================================================================
--- src/Actions/MoleculeAction/FillVoidWithMoleculeAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/FillVoidWithMoleculeAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -54,7 +54,7 @@
   // construct water molecule
   molecule *filler = World::getInstance().createMolecule();
-  std::string FilenameSuffix = params.fillername.substr(params.fillername.find_last_of('.')+1, params.fillername.length());
+  std::string FilenameSuffix = params.fillername.string().substr(params.fillername.string().find_last_of('.')+1, params.fillername.string().length());
   ifstream input;
-  input.open(params.fillername.c_str());
+  input.open(params.fillername.string().c_str());
   switch (FormatParserStorage::getInstance().getTypeFromSuffix(FilenameSuffix)) {
     case mpqc:
@@ -95,5 +95,5 @@
   for (; iter != World::getInstance().moleculeEnd(); ++iter)
     filler = *iter; // get last molecule
-  filler->SetNameFromFilename(params.fillername.c_str());
+  filler->SetNameFromFilename(params.fillername.string().c_str());
   World::getInstance().getConfig()->BG->ConstructBondGraph(filler);
 
@@ -128,7 +128,3 @@
   return false;
 }
-
-const string MoleculeFillVoidWithMoleculeAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/FillVoidWithMoleculeAction.def
===================================================================
--- src/Actions/MoleculeAction/FillVoidWithMoleculeAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/FillVoidWithMoleculeAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -12,8 +12,9 @@
 // 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
-#define paramtypes (std::string)(Vector)(Vector)(bool)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)(Vector)(Vector)(bool)
 #define paramtokens ("fill-void")("distances")("lengths")("DoRotate")
-#define paramdescriptions ("fill void space of box with a filler molecule")("list of three of distances in space, one for each axis direction")("list of three of lengths in space, one for each axis direction")("whether to rotate or not")
+#define paramdescriptions ("name of xyz file of filler molecule")("list of three of distances in space, one for each axis direction")("list of three of lengths in space, one for each axis direction")("whether to rotate or not")
+#undef paramdefaults
 #define paramreferences (fillername)(distances)(lengths)(DoRotate)
 
@@ -30,6 +31,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "fill void space of box with a filler molecule"
 #undef SHORTFORM
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/MoleculeAction/FillWithMoleculeAction.cpp
===================================================================
--- src/Actions/MoleculeAction/FillWithMoleculeAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/FillWithMoleculeAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -48,8 +48,8 @@
   // construct water molecule
   molecule *filler = World::getInstance().createMolecule();
-  if (!filler->AddXYZFile(params.fillername)) {
+  if (!filler->AddXYZFile(params.fillername.string())) {
     DoeLog(0) && (eLog()<< Verbose(0) << "Could not parse filler molecule from " << params.fillername << "." << endl);
   }
-  filler->SetNameFromFilename(params.fillername.c_str());
+  filler->SetNameFromFilename(params.fillername.string().c_str());
   molecule *Filling = NULL;
 //    atom *first = NULL, *second = NULL, *third = NULL;
@@ -110,7 +110,3 @@
   return false;
 }
-
-const string MoleculeFillWithMoleculeAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/FillWithMoleculeAction.def
===================================================================
--- src/Actions/MoleculeAction/FillWithMoleculeAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/FillWithMoleculeAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -12,8 +12,9 @@
 // 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
-#define paramtypes (std::string)(Vector)(Vector)(double)(bool)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)(Vector)(Vector)(double)(bool)
 #define paramtokens ("fill-molecule")("distances")("lengths")("MaxDistance")("DoRotate")
-#define paramdescriptions ("fill around molecules' surface with a filler molecule")("list of three of distances in space, one for each axis direction")("list of three of lengths in space, one for each axis direction")("maximum spatial distance")("whether to rotate or not")
+#define paramdescriptions ("name of xyz file of filler molecule")("list of three of distances in space, one for each axis direction")("list of three of lengths in space, one for each axis direction")("maximum spatial distance")("whether to rotate or not")
+#undef paramdefaults
 #define paramreferences (fillername)(distances)(lengths)(MaxDistance)(DoRotate)
 
@@ -30,6 +31,5 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "fill around molecules' surface with a filler molecule"
 #define SHORTFORM "F"
-#define TYPEINFO &typeid(std::string)
+
Index: src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.cpp
===================================================================
--- src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -50,5 +50,5 @@
     if (params.IdMapping)
       DoLog(1) && (Log() << Verbose(1) << "Using Identity for the permutation map." << endl);
-    if (!mol->LinearInterpolationBetweenConfiguration(params.start, params.end, params.filename, *(World::getInstance().getConfig()), params.IdMapping))
+    if (!mol->LinearInterpolationBetweenConfiguration(params.start, params.end, params.filename.branch_path().string(), *(World::getInstance().getConfig()), params.IdMapping))
       DoLog(2) && (Log() << Verbose(2) << "Could not store " << params.filename << " files." << endl);
     else
@@ -79,7 +79,3 @@
   return false;
 }
-
-const string MoleculeLinearInterpolationofTrajectoriesAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.def
===================================================================
--- src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/LinearInterpolationofTrajectoriesAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (std::string)(int)(int)(bool)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)(int)(int)(bool)
 #define paramtokens ("linear-interpolate")("start-step")("end-step")("id-mapping")
-#define paramdescriptions ("linear interpolation in discrete steps between start and end position of a molecule")("first or start step")("last or end step")("whether the identity shall be used in mapping atoms onto atoms or not")
+#define paramdescriptions ("path where to store the intermediate configurations")("first or start step")("last or end step")("whether the identity shall be used in mapping atoms onto atoms or not")
+#undef paramdefaults
 #define paramreferences (filename)(start)(end)(IdMapping)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "linear interpolation in discrete steps between start and end position of a molecule"
 #define SHORTFORM "L"
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.cpp
===================================================================
--- src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -107,7 +107,3 @@
   return true;
 }
-
-const string MoleculeRotateAroundSelfByAngleAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.def
===================================================================
--- src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -12,8 +12,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (double)(Vector)
 #define paramtokens ("rotate-self")("position")
-#define paramdescriptions ("rotates molecules by a specific angle around own center of gravity")("position in R^3 space")
+#define paramdescriptions ("rotation angle")("position in R^3 space")
+#undef paramdefaults
 #define paramreferences (angle)(Axis)
 
@@ -30,6 +31,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "rotates molecules by a specific angle around own center of gravity"
 #undef SHORTFORM
-#define TYPEINFO &typeid(double)
Index: src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.cpp
===================================================================
--- src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -152,7 +152,3 @@
   return false;
 }
-
-const string MoleculeRotateToPrincipalAxisSystemAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.def
===================================================================
--- src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/RotateToPrincipalAxisSystemAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -14,8 +14,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (Vector)
 #define paramtokens ("rotate-to-pas")
-#define paramdescriptions ("calculate the principal axis system of the specified molecule and rotate specified axis to align with main axis")
+#define paramdescriptions ("vector to which to align the biggest eigenvector with")
+#undef paramdefaults
 #define paramreferences (Axis)
 
@@ -32,6 +33,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "calculate the principal axis system of the specified molecule and rotate specified axis to align with main axis"
 #define SHORTFORM "m"
-#define TYPEINFO &typeid(VectorValue)
Index: src/Actions/MoleculeAction/SaveAdjacencyAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SaveAdjacencyAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/SaveAdjacencyAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -51,5 +51,5 @@
     World::getInstance().getConfig()->BG->ConstructBondGraph(mol);
     // TODO: sollte stream nicht filename benutzen, besser fuer unit test
-    mol->StoreAdjacencyToFile(params.adjacencyfile);
+    mol->StoreAdjacencyToFile(params.adjacencyfile.leaf(), params.adjacencyfile.branch_path().string());
   }
   return Action::success;
@@ -77,7 +77,3 @@
   return false;
 }
-
-const string MoleculeSaveAdjacencyAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/SaveAdjacencyAction.def
===================================================================
--- src/Actions/MoleculeAction/SaveAdjacencyAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/SaveAdjacencyAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (std::string)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)
 #define paramtokens ("save-adjacency")
 #define paramdescriptions ("name of the adjacency file to write to")
+#undef paramdefaults
 #define paramreferences (adjacencyfile)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
-#define DESCRIPTION "name of the adjacency file to write to"
+#define DESCRIPTION "store adjacency of each atom to file"
 #define SHORTFORM "J"
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/MoleculeAction/SaveBondsAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SaveBondsAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/SaveBondsAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -51,5 +51,5 @@
     World::getInstance().getConfig()->BG->ConstructBondGraph(mol);
     // TODO: sollte stream, nicht filenamen direkt nutzen, besser fuer unit tests
-    mol->StoreBondsToFile(params.bondsfile);
+    mol->StoreBondsToFile(params.bondsfile.leaf(), params.bondsfile.branch_path().string());
   }
   return Action::success;
@@ -77,7 +77,3 @@
   return false;
 }
-
-const string MoleculeSaveBondsAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/SaveBondsAction.def
===================================================================
--- src/Actions/MoleculeAction/SaveBondsAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/SaveBondsAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (std::string)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)
 #define paramtokens ("save-bonds")
 #define paramdescriptions ("name of the bonds file to write to")
+#undef paramdefaults
 #define paramreferences (bondsfile)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
-#define DESCRIPTION "name of the bonds file to write to"
+#define DESCRIPTION "save bonds to dbond type file"
 #define SHORTFORM "j"
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/MoleculeAction/SaveTemperatureAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SaveTemperatureAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/SaveTemperatureAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -47,5 +47,5 @@
     DoLog(1) && (Log() << Verbose(1) << "Storing temperatures in " << params.temperaturefile << "." << endl);
     ofstream output;
-    output.open(params.temperaturefile.c_str(), ios::trunc);
+    output.open(params.temperaturefile.string().c_str(), ios::trunc);
     if (output.fail() || !mol->OutputTemperatureFromTrajectories((ofstream * const) &output, 0, mol->MDSteps))
       DoLog(2) && (Log() << Verbose(2) << "File could not be written." << endl);
@@ -78,7 +78,3 @@
   return false;
 }
-
-const string MoleculeSaveTemperatureAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/SaveTemperatureAction.def
===================================================================
--- src/Actions/MoleculeAction/SaveTemperatureAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/SaveTemperatureAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (std::string)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)
 #define paramtokens ("save-temperature")
 #define paramdescriptions ("name of the temperature file to write to")
+#undef paramdefaults
 #define paramreferences (temperaturefile)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
-#define DESCRIPTION "name of the temperature file to write to"
+#define DESCRIPTION "save the temperature per time step to file"
 #define SHORTFORM "S"
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/MoleculeAction/SuspendInWaterAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SuspendInWaterAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/SuspendInWaterAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -77,7 +77,3 @@
   return false;
 }
-
-const string MoleculeSuspendInWaterAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/SuspendInWaterAction.def
===================================================================
--- src/Actions/MoleculeAction/SuspendInWaterAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/SuspendInWaterAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (double)
 #define paramtokens ("suspend-in-water")
-#define paramdescriptions ("suspend the given molecule in water such that in the domain the mean density is as specified")
+#define paramdescriptions ("desired final density")
+#undef paramdefaults
 #define paramreferences (density)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "suspend the given molecule in water such that in the domain the mean density is as specified"
 #define SHORTFORM "u"
-#define TYPEINFO &typeid(double)
Index: src/Actions/MoleculeAction/VerletIntegrationAction.cpp
===================================================================
--- src/Actions/MoleculeAction/VerletIntegrationAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/VerletIntegrationAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -48,5 +48,5 @@
     // TODO: sollte besser stream nutzen, nicht filename direkt (es sei denn, ist prefix), besser fuer unit test
     char outputname[MAXSTRINGSIZE];
-    strcpy(outputname, params.forcesfile.c_str());
+    strcpy(outputname, params.forcesfile.string().c_str());
     if (!mol->VerletForceIntegration(outputname, *(World::getInstance().getConfig()), 0))
       DoLog(2) && (Log() << Verbose(2) << "File " << params.forcesfile << " not found." << endl);
@@ -78,7 +78,3 @@
   return false;
 }
-
-const string MoleculeVerletIntegrationAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/MoleculeAction/VerletIntegrationAction.def
===================================================================
--- src/Actions/MoleculeAction/VerletIntegrationAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/MoleculeAction/VerletIntegrationAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (std::string)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)
 #define paramtokens ("verlet-integrate")
 #define paramdescriptions ("perform verlet integration of a given force file")
+#undef paramdefaults
 #define paramreferences (forcesfile)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "perform verlet integration of a given force file"
 #define SHORTFORM "P"
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/OptionRegistry.cpp
===================================================================
--- src/Actions/OptionRegistry.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
+++ src/Actions/OptionRegistry.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -0,0 +1,112 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * OptionRegistry.cpp
+ *
+ *  Created on: Oct 26, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include <boost/shared_ptr.hpp>
+
+#include "Actions/Action.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Actions/ActionTraits.hpp"
+#include "Actions/OptionRegistry.hpp"
+#include "Actions/OptionTrait.hpp"
+#include "Patterns/Singleton_impl.hpp"
+#include "Patterns/Registry_impl.hpp"
+
+/** Constructor for class OptionRegistry.
+ */
+OptionRegistry::OptionRegistry()
+{}
+
+/** Destructor for class OptionRegistry.
+ */
+OptionRegistry::~OptionRegistry()
+{}
+
+/** Just passes on call to Registry<std::type_info>::getByName().
+ * \param name name of Option
+ * \return pointer to Option's type
+ */
+const OptionTrait* OptionRegistry::getOptionByName(const std::string name) const
+{
+  return const_cast<const OptionTrait *>(getByName(name));
+}
+
+/** Initializes options from ActionRegistries contents.
+ * Just goes through all Action's and adds their options.
+ */
+//void OptionRegistry::Init()
+//{
+//  ActionRegistry &AR = ActionRegistry::getInstance();
+//  for (ActionRegistry::const_iterator actioniter = AR.getBeginIter();
+//      actioniter != AR.getEndIter();
+//      ++actioniter) {
+//    Action* const currentAction = actioniter->second;
+//    for (ActionTraits::options_const_iterator optioniter = currentAction->Traits.getBeginIter();
+//        optioniter != currentAction->Traits.getEndIter();
+//        ++optioniter) {
+//      // wrap option in a shared_ptr to have it exist till and automatically removed at end of code
+//      std::string const &OptionName = optioniter->first;
+//      std::type_info const &typeDesired = *((actioniter->second)->Traits.getOptionType(OptionName));
+//      if (isOptionPresentByName(OptionName)) {
+//        std::type_info const &typePresent = *(getOptionByName(OptionName)->getType());
+//        ASSERT( typeDesired == typePresent,
+//            "OptionRegistry::Init() - Two options with same token do not have the same type!");
+//      } else {
+//        registerInstance(new Option(OptionName, &typeDesired));
+//      }
+//    }
+//  }
+//}
+
+/** checking that each of the Actions' options has the same (and present) type in the OptionRegistry.
+ * We use ASSERT
+ */
+void OptionRegistry::ConsistencyCheck()
+{
+  ActionRegistry &AR = ActionRegistry::getInstance();
+  for (ActionRegistry::const_iterator actioniter = AR.getBeginIter();
+      actioniter != AR.getEndIter();
+      ++actioniter) {
+    for (ActionTraits::options_const_iterator optioniter = (actioniter->second)->Traits.getBeginIter();
+        optioniter != (actioniter->second)->Traits.getEndIter();
+        ++optioniter) {
+      std::string const &OptionName = optioniter->first;
+      std::type_info const &typeDesired = *((actioniter->second)->Traits.getOption(OptionName).getType());
+      ASSERT( isOptionPresentByName(OptionName),
+          "ConsistencyCheck() - option token not contained in OptionRegistry");
+      std::type_info const &typePresent = *(getOptionByName(OptionName)->getType());
+      ASSERT( typeDesired == typePresent,
+          "ConsistencyCheck() - Two options with same token do not have the same type!");
+    }
+  }
+};
+
+
+/** Just passes on call to Registry<std::type_info>::isPresentByName().
+ * \param name name of Option
+ * \return true - Option instance present, false - not
+ */
+bool OptionRegistry::isOptionPresentByName(const std::string name) const
+{
+  return isPresentByName(name);
+}
+
+CONSTRUCT_SINGLETON(OptionRegistry)
+CONSTRUCT_REGISTRY(OptionTrait)
Index: src/Actions/OptionRegistry.hpp
===================================================================
--- src/Actions/OptionRegistry.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
+++ src/Actions/OptionRegistry.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -0,0 +1,40 @@
+/*
+ * OptionRegistry.hpp
+ *
+ *  Created on: Oct 26, 2010
+ *      Author: heber
+ */
+
+#ifndef OPTIONREGISTRY_HPP_
+#define OPTIONREGISTRY_HPP_
+
+#include "Patterns/Registry.hpp"
+#include "Patterns/Singleton.hpp"
+
+class OptionTrait;
+
+/** Option Registry.
+ *
+ * The Option registry is a storage for any Option of Actions instance to retrieved by name.
+ * It is a singleton and can be called from anywhere.
+ *
+ */
+class OptionRegistry : public Singleton<OptionRegistry>, public Registry<OptionTrait>
+{
+  friend class Singleton<OptionRegistry>;
+
+public:
+  const OptionTrait * getOptionByName(const std::string name) const;
+  bool isOptionPresentByName(const std::string name) const;
+
+  void ConsistencyCheck();
+
+private:
+  OptionRegistry();
+  ~OptionRegistry();
+
+  // initializer called in constructor
+  //void Init();
+};
+
+#endif /* OPTIONREGISTRY_HPP_ */
Index: src/Actions/OptionTrait.cpp
===================================================================
--- src/Actions/OptionTrait.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
+++ src/Actions/OptionTrait.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -0,0 +1,155 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * OptionTrait.cpp
+ *
+ *  Created on: Oct 27, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include <iostream>
+#include <typeinfo>
+
+#include <boost/shared_ptr.hpp>
+
+#include "Actions/OptionRegistry.hpp"
+#include "Actions/OptionTrait.hpp"
+
+/** Constructor for class OptionTrait.
+ * note that OptionTrait automatically registers with OptionRegistry.
+ * \param &_token name of option
+ * \param &_type type of option
+ * \param &_description description of what the option is for
+ * \param &_defaultvalue default value, empty string if none
+ * \param &_shortform short form to access option on CommmandLineUI, empty if none
+ * \param *_instance type to be stored in this OptionTrait.
+ */
+OptionTrait::OptionTrait(const std::string &_token, std::type_info const * const _type, const std::string _description, const std::string _defaultvalue, const std::string _shortform) :
+    Token(_token),
+    InternalType(_type),
+    Description(_description),
+    DefaultValue(_defaultvalue),
+    ShortForm(_shortform)
+{
+  std::cout << "OptionTrait::OptionTrait() with " << getName() << ", type " << getTypeName() << " and description " << getDescription() << std::endl;
+}
+
+/** Copy constructor for class OptionTrait.
+ * note that OptionTrait automatically registers with OptionRegistry.
+ * \param &_option reference of option to copy
+ * \param *_instance type to be stored in this OptionTrait.
+ */
+OptionTrait::OptionTrait(const OptionTrait &_option) :
+    Token(_option.getName()),
+    InternalType(_option.getType()),
+    Description(_option.getDescription()),
+    DefaultValue(_option.getDefaultValue()),
+    ShortForm(_option.getShortForm())
+{}
+
+/** Destructor for class OptionTrait.
+ *
+ */
+OptionTrait::~OptionTrait()
+{}
+
+/** Returns Current Value for this ActionTrait.
+ * \return OptionTrait::CurrentValue as std::string
+ */
+const std::string& OptionTrait::getDefaultValue() const
+{
+ return DefaultValue;
+}
+
+/** Returns Description for this ActionTrait.
+ * \return OptionTrait::Description as std::string
+ */
+const std::string& OptionTrait::getDescription() const
+{
+  return Description;
+}
+
+/** Specific Getter for a ActionTrait::ShortForm.
+ * If action has a short for, then combination is as "Token,ShortForm" (this is
+ * the desired format for boost::program_options). If no short form exists in the map,
+ * just Token will be returned
+ * Note that we assert when action does not exist in CommandLineParser::DescriptionMap.
+ * \return ActionTrait::Token,ActionTrait::ShortForm or Description of the action
+ */
+const std::string OptionTrait::getKeyAndShortForm() const
+{
+  std::stringstream output;
+  output << Token;
+  if (hasShortForm())
+    output << "," << ShortForm;
+  return output.str();
+}
+
+
+/** Returns ShortForm for this OptionTrait.
+ * \return OptionTrait::ShortForm as std::string
+ */
+const std::string& OptionTrait::getShortForm() const
+{
+  return ShortForm;
+}
+
+/** Returns Type for this OptionTrait.
+ * \return OptionTrait::InternalType as std::type_info reference
+ */
+const std::type_info * const OptionTrait::getType() const
+{
+  return InternalType;
+}
+
+/** Returns Name of the Type for this OptionTrait.
+ * \return OptionTrait::InternalType->name()
+ */
+const std::string OptionTrait::getTypeName() const
+{
+  return InternalType->name();
+}
+
+/** States whether DefaultValue is present or not.
+ * \return true - DefaultValue unequal to empty string present.
+ */
+bool OptionTrait::hasDefaultValue() const
+{
+  return (!DefaultValue.empty());
+}
+
+/** States whether ShortForm is present or not.
+ * \return true - ShortForm unequal to empty string present.
+ */
+bool OptionTrait::hasShortForm() const
+{
+  return (!ShortForm.empty());
+}
+
+/** Returns token of the option.
+ * \return name/token of option
+ */
+const std::string& OptionTrait::getName() const
+{
+  return Token;
+}
+
+/** Sets the short form to the given value.
+ * \param &_shortform new short form
+ */
+void OptionTrait::setShortForm(const std::string _shortform)
+{
+  ShortForm = _shortform;
+}
Index: src/Actions/OptionTrait.hpp
===================================================================
--- src/Actions/OptionTrait.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
+++ src/Actions/OptionTrait.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -0,0 +1,46 @@
+/*
+ * OptionTrait.hpp
+ *
+ *  Created on: Oct 27, 2010
+ *      Author: heber
+ */
+
+#ifndef OPTIONTRAIT_HPP_
+#define OPTIONTRAIT_HPP_
+
+#include <string>
+#include <typeinfo>
+
+/** Contains basic information for Options.
+ */
+class OptionTrait
+{
+public:
+  OptionTrait(const std::string &_token, std::type_info const * const _type, const std::string _description, const std::string _defaultvalue = std::string(), const std::string _shortform = std::string());
+  OptionTrait(const OptionTrait &_option);
+  ~OptionTrait();
+
+  // getter for the information contained
+  const std::string& getDefaultValue() const;
+  const std::string& getDescription() const;
+  const std::string getKeyAndShortForm() const;
+  const std::string& getName() const;
+  const std::string& getShortForm() const;
+  const std::type_info * const getType() const;
+  const std::string getTypeName() const;
+
+  // setter for information
+  void setShortForm(const std::string _shortform);
+
+  bool hasDefaultValue() const;
+  bool hasShortForm() const;
+
+protected:
+  const std::string Token;
+  const std::type_info* const InternalType;
+  const std::string Description;
+  const std::string DefaultValue;
+  std::string ShortForm;
+};
+
+#endif /* OPTIONTRAIT_HPP_ */
Index: src/Actions/ParserAction/LoadXyzAction.cpp
===================================================================
--- src/Actions/ParserAction/LoadXyzAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ParserAction/LoadXyzAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -38,8 +38,8 @@
   getParametersfromValueStorage();
 
-  DoLog(1) && (Log() << Verbose(1) << "Parsing xyz file for new atoms." << endl);
+  DoLog(1) && (Log() << Verbose(1) << "Parsing xyz file " << params.filename << " for new atoms." << endl);
   // parse xyz file
   ifstream input;
-  input.open(params.filename.c_str());
+  input.open(params.filename.string().c_str());
   if (!input.fail()) {
     XyzParser parser; // briefly instantiate a parser which is removed at end of focus
@@ -73,7 +73,3 @@
   return false;
 }
-
-const string ParserLoadXyzAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/ParserAction/LoadXyzAction.def
===================================================================
--- src/Actions/ParserAction/LoadXyzAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ParserAction/LoadXyzAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (std::string)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)
 #define paramtokens ("parse-xyz")
-#define paramdescriptions ("parse xyz file into World")
+#define paramdescriptions ("name of xyz file")
+#undef paramdefaults
 #define paramreferences (filename)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "parse xyz file into World"
 #define SHORTFORM "p"
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/ParserAction/SaveXyzAction.cpp
===================================================================
--- src/Actions/ParserAction/SaveXyzAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ParserAction/SaveXyzAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -20,7 +20,7 @@
 #include "Helpers/MemDebug.hpp"
 
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
 #include "Parser/XyzParser.hpp"
-#include "atom.hpp"
-#include "molecule.hpp"
 
 #include <iostream>
@@ -41,9 +41,13 @@
   getParametersfromValueStorage();
 
+  DoLog(1) && (Log() << Verbose(1) << "Storing xyz file " << params.filename << "." << endl);
   // store xyz file
   ofstream output;
-  output.open(params.filename.c_str());
-  if (!output.fail())
+  output.open(params.filename.string().c_str());
+  if (!output.fail()) {
     parser.save(&output);
+  } else {
+    DoeLog(1) && (eLog() << Verbose(1) << "Could not open file " << params.filename << "." << endl);
+  }
   output.close();
   return Action::failure;
@@ -73,7 +77,3 @@
   return false;
 }
-
-const string ParserSaveXyzAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/ParserAction/SaveXyzAction.def
===================================================================
--- src/Actions/ParserAction/SaveXyzAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ParserAction/SaveXyzAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (std::string)
-#define paramtokens ("SaveXyz")
-#define paramdescriptions ("save world as xyz file")
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)
+#define paramtokens ("store-xyz")
+#define paramdescriptions ("file name of xyz file")
+#undef paramdefaults
 #define paramreferences (filename)
 
@@ -25,10 +26,8 @@
 #define MENUPOSITION 2
 #define ACTIONNAME SaveXyz
-#define TOKEN "SaveXyz"
+#define TOKEN "store-xyz"
 
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "save world as xyz file"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/Process.cpp
===================================================================
--- src/Actions/Process.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/Process.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -24,6 +24,6 @@
 using namespace std;
 
-Process::Process(int _maxSteps, std::string _name, bool _doRegister) :
-  Action(_name,_doRegister),
+Process::Process(int _maxSteps, const ActionTraits &_trait, bool _doRegister) :
+  Action(_trait,_doRegister),
   Observable("Process"),
   maxSteps(_maxSteps),
Index: src/Actions/Process.hpp
===================================================================
--- src/Actions/Process.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/Process.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -40,5 +40,5 @@
 {
 public:
-  Process(int _maxSteps, std::string _name, bool _doRegister=true);
+  Process(int _maxSteps, const ActionTraits &_trait, bool _doRegister=true);
   virtual ~Process();
 
Index: src/Actions/RedoAction.cpp
===================================================================
--- src/Actions/RedoAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
+++ src/Actions/RedoAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -0,0 +1,59 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * RedoAction.cpp
+ *
+ *  Created on: Oct 27, 2010
+ *      Author: heber
+ */
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "ActionHistory.hpp"
+
+#include <iostream>
+
+#include "Helpers/Assert.hpp"
+
+#include "Actions/RedoAction.hpp"
+
+// and construct the stuff
+#include "RedoAction.def"
+#include "Action_impl_pre.hpp"
+
+/** =========== define the function ====================== */
+Action::state_ptr RedoAction::performCall(){
+  std::cout << "Redo" << std::endl;
+  ActionHistory::getInstance().redoLast();
+  return Action::success;
+}
+
+Action::state_ptr RedoAction::performUndo(Action::state_ptr){
+  ASSERT(0,"Cannot undo a redo (should use undo for this");
+  return Action::success;
+}
+
+Action::state_ptr RedoAction::performRedo(Action::state_ptr){
+  ASSERT(0,"Cannot redo a redo");
+  return Action::success;
+}
+
+bool RedoAction::canUndo(){
+  return false;
+}
+
+bool RedoAction::shouldUndo(){
+  return false;
+}
+/** =========== end of function ====================== */
Index: src/Actions/RedoAction.def
===================================================================
--- src/Actions/RedoAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
+++ src/Actions/RedoAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -0,0 +1,28 @@
+/*
+ * RedoAction.def
+ *
+ *  Created on: Oct 27, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+
+// 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
+#undef paramtypes
+#undef paramreferences
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#undef CATEGORY 
+#define MENUNAME "edit"
+#define MENUPOSITION 2
+#define ACTIONNAME Redo
+#define TOKEN "redo"
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "redo the last action"
+#undef SHORTFORM
Index: src/Actions/RedoAction.hpp
===================================================================
--- src/Actions/RedoAction.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
+++ src/Actions/RedoAction.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -0,0 +1,21 @@
+/*
+ * RedoAction.hpp
+ *
+ *  Created on: Oct 27, 2010
+ *      Author: heber
+ */
+
+#ifndef REDOACTION_HPP_
+#define REDOACTION_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Actions/Action.hpp"
+
+#include "RedoAction.def"
+#include "Actions/Action_impl_header.hpp"
+
+#endif /* REDOACTION_HPP_ */
Index: src/Actions/SelectionAction/AllAtomsAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AllAtomsAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -72,7 +72,3 @@
   return true;
 }
-
-const string SelectionAllAtomsAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/AllAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/AllAtomsAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AllAtomsAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "select all atoms"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/SelectionAction/AllAtomsInsideCuboidAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideCuboidAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AllAtomsInsideCuboidAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -86,7 +86,3 @@
   return true;
 }
-
-const string SelectionAllAtomsInsideCuboidAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/AllAtomsInsideCuboidAction.def
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideCuboidAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AllAtomsInsideCuboidAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -13,8 +13,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) 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 ("select all atoms inside a 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 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")
+#undef paramdefaults
 #define paramreferences (extension)(position)(Xangle)(Yangle)(Zangle)
 
@@ -31,6 +32,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "select all atoms inside a cuboid"
 #undef SHORTFORM
-#define TYPEINFO &typeid(VectorValue)
Index: src/Actions/SelectionAction/AllAtomsInsideSphereAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideSphereAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AllAtomsInsideSphereAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -80,7 +80,3 @@
   return true;
 }
-
-const string SelectionAllAtomsInsideSphereAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/AllAtomsInsideSphereAction.def
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideSphereAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AllAtomsInsideSphereAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (double)(Vector)
 #define paramtokens ("select-atoms-inside-sphere")("position")
-#define paramdescriptions ("select all atoms inside a sphere")("position in R^3 space")
+#define paramdescriptions ("sphere radius")("position in R^3 space")
+#undef paramdefaults
 #define paramreferences (radius)(position)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "select all atoms inside a sphere"
 #undef SHORTFORM
-#define TYPEINFO &typeid(double)
Index: src/Actions/SelectionAction/AllAtomsOfMoleculeAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsOfMoleculeAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AllAtomsOfMoleculeAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -74,7 +74,3 @@
   return true;
 }
-
-const string SelectionAllAtomsOfMoleculeAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/AllAtomsOfMoleculeAction.def
===================================================================
--- src/Actions/SelectionAction/AllAtomsOfMoleculeAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AllAtomsOfMoleculeAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (molecule *)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const molecule *)
 #define paramtokens ("select-molecules-atoms")
-#define paramdescriptions ("select all atoms of a molecule")
+#define paramdescriptions ("molecule to select")
+#undef paramdefaults
 #define paramreferences (mol)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "select all atoms of a molecule"
 #undef SHORTFORM
-#define TYPEINFO &typeid(molecule)
Index: src/Actions/SelectionAction/AllMoleculesAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllMoleculesAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AllMoleculesAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -72,7 +72,3 @@
   return true;
 }
-
-const string SelectionAllMoleculesAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/AllMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/AllMoleculesAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AllMoleculesAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -10,8 +10,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -28,6 +29,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "select all molecules"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/SelectionAction/AtomByElementAction.cpp
===================================================================
--- src/Actions/SelectionAction/AtomByElementAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AtomByElementAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -74,7 +74,3 @@
   return true;
 }
-
-const string SelectionAtomByElementAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/AtomByElementAction.def
===================================================================
--- src/Actions/SelectionAction/AtomByElementAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AtomByElementAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (const element*)
 #define paramtokens ("select-atom-by-element")
-#define paramdescriptions ("select an atom by element")
+#define paramdescriptions ("element")
+#undef paramdefaults
 #define paramreferences (elemental)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "select an atom by element"
 #undef SHORTFORM
-#define TYPEINFO &typeid(const element)
Index: src/Actions/SelectionAction/AtomByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/AtomByIdAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AtomByIdAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -74,7 +74,3 @@
   return true;
 }
-
-const string SelectionAtomByIdAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/AtomByIdAction.def
===================================================================
--- src/Actions/SelectionAction/AtomByIdAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/AtomByIdAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (atom*)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const atom*)
 #define paramtokens ("select-atom-by-id")
-#define paramdescriptions ("select an atom by index")
+#define paramdescriptions ("atom index")
+#undef paramdefaults
 #define paramreferences (Walker)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "select an atom by index"
 #undef SHORTFORM
-#define TYPEINFO &typeid(atom)
Index: src/Actions/SelectionAction/ClearAllAtomsAction.cpp
===================================================================
--- src/Actions/SelectionAction/ClearAllAtomsAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/ClearAllAtomsAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -72,7 +72,3 @@
   return true;
 }
-
-const string SelectionClearAllAtomsAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/ClearAllAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/ClearAllAtomsAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/ClearAllAtomsAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -10,8 +10,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -28,6 +29,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "clear the atom selection"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/SelectionAction/ClearAllMoleculesAction.cpp
===================================================================
--- src/Actions/SelectionAction/ClearAllMoleculesAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/ClearAllMoleculesAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -72,7 +72,3 @@
   return true;
 }
-
-const string SelectionClearAllMoleculesAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/ClearAllMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/ClearAllMoleculesAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/ClearAllMoleculesAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -10,8 +10,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -28,6 +29,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "clear the molecule selection"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/SelectionAction/MoleculeByFormulaAction.cpp
===================================================================
--- src/Actions/SelectionAction/MoleculeByFormulaAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/MoleculeByFormulaAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -77,7 +77,3 @@
   return true;
 }
-
-const string SelectionMoleculeByFormulaAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/MoleculeByFormulaAction.def
===================================================================
--- src/Actions/SelectionAction/MoleculeByFormulaAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/MoleculeByFormulaAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (std::string)
 #define paramtokens ("select-molecule-by-formula")
-#define paramdescriptions ("select a molecule by chemical formula")
+#define paramdescriptions ("chemical formula")
+#undef paramdefaults
 #define paramreferences (formula)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "select a molecule by chemical formula"
 #undef SHORTFORM
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/SelectionAction/MoleculeByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/MoleculeByIdAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/MoleculeByIdAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -74,7 +74,3 @@
   return true;
 }
-
-const string SelectionMoleculeByIdAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/MoleculeByIdAction.def
===================================================================
--- src/Actions/SelectionAction/MoleculeByIdAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/MoleculeByIdAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (molecule*)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const molecule*)
 #define paramtokens ("select-molecule-by-id")
-#define paramdescriptions ("select a molecule by index")
+#define paramdescriptions ("molecule index")
+#undef paramdefaults
 #define paramreferences (mol)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "select a molecule by index"
 #undef SHORTFORM
-#define TYPEINFO &typeid(molecule)
Index: src/Actions/SelectionAction/MoleculeOfAtomAction.cpp
===================================================================
--- src/Actions/SelectionAction/MoleculeOfAtomAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/MoleculeOfAtomAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -72,7 +72,3 @@
   return true;
 }
-
-const string SelectionMoleculeOfAtomAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/MoleculeOfAtomAction.def
===================================================================
--- src/Actions/SelectionAction/MoleculeOfAtomAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/MoleculeOfAtomAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -10,8 +10,9 @@
 // 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
-#define paramtypes (atom*)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const atom*)
 #define paramtokens ("select-molecule-of-atom")
-#define paramdescriptions ("select a molecule to which a given atom belongs")
+#define paramdescriptions ("one atom of desired molecule")
+#undef paramdefaults
 #define paramreferences (Walker)
 
@@ -28,6 +29,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "select a molecule to which a given atom belongs"
 #undef SHORTFORM
-#define TYPEINFO &typeid(atom)
Index: src/Actions/SelectionAction/NotAllAtomsAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAllAtomsAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -72,7 +72,3 @@
   return true;
 }
-
-const string SelectionNotAllAtomsAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/NotAllAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAllAtomsAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "unselect all atoms"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -86,7 +86,3 @@
   return true;
 }
-
-const string SelectionNotAllAtomsInsideCuboidAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.def
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -13,8 +13,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) 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 ("unselect all atoms inside a 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 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")
+#undef paramdefaults
 #define paramreferences (extension)(position)(Xangle)(Yangle)(Zangle)
 
@@ -31,6 +32,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "unselect all atoms inside a cuboid"
 #undef SHORTFORM
-#define TYPEINFO &typeid(VectorValue)
Index: src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -80,7 +80,3 @@
   return true;
 }
-
-const string SelectionNotAllAtomsInsideSphereAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.def
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (double)(Vector)
 #define paramtokens ("unselect-atoms-inside-sphere")("position")
-#define paramdescriptions ("unselect all atoms inside a sphere")("position in R^3 space")
+#define paramdescriptions ("radius of sphere")("position in R^3 space")
+#undef paramdefaults
 #define paramreferences (radius)(position)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "unselect all atoms inside a sphere"
 #undef SHORTFORM
-#define TYPEINFO &typeid(double)
Index: src/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -74,7 +74,3 @@
   return true;
 }
-
-const string SelectionNotAllAtomsOfMoleculeAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.def
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (molecule*)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const molecule*)
 #define paramtokens ("unselect-molecules-atoms")
-#define paramdescriptions ("unselect all atoms of a molecule")
+#define paramdescriptions ("molecule")
+#undef paramdefaults
 #define paramreferences (mol)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "unselect all atoms of a molecule"
 #undef SHORTFORM
-#define TYPEINFO &typeid(molecule)
Index: src/Actions/SelectionAction/NotAllMoleculesAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllMoleculesAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAllMoleculesAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -72,7 +72,3 @@
   return true;
 }
-
-const string SelectionNotAllMoleculesAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/NotAllMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/NotAllMoleculesAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAllMoleculesAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -10,8 +10,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -28,6 +29,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "unselect all molecules"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/SelectionAction/NotAtomByElementAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAtomByElementAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAtomByElementAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -74,7 +74,3 @@
   return true;
 }
-
-const string SelectionNotAtomByElementAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/NotAtomByElementAction.def
===================================================================
--- src/Actions/SelectionAction/NotAtomByElementAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAtomByElementAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (const element*)
 #define paramtokens ("unselect-atom-by-element")
-#define paramdescriptions ("unselect an atom by element")
+#define paramdescriptions ("element")
+#undef paramdefaults
 #define paramreferences (elemental)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "unselect an atom by element"
 #undef SHORTFORM
-#define TYPEINFO &typeid(const element)
Index: src/Actions/SelectionAction/NotAtomByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAtomByIdAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAtomByIdAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -74,7 +74,3 @@
   return true;
 }
-
-const string SelectionNotAtomByIdAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/NotAtomByIdAction.def
===================================================================
--- src/Actions/SelectionAction/NotAtomByIdAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotAtomByIdAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (atom*)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const atom*)
 #define paramtokens ("unselect-atom-by-id")
-#define paramdescriptions ("unselect an atom by index")
+#define paramdescriptions ("atom index")
+#undef paramdefaults
 #define paramreferences (Walker)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "unselect an atom by index"
 #undef SHORTFORM
-#define TYPEINFO &typeid(atom)
Index: src/Actions/SelectionAction/NotMoleculeByFormulaAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByFormulaAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotMoleculeByFormulaAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -77,7 +77,3 @@
   return true;
 }
-
-const string SelectionNotMoleculeByFormulaAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/NotMoleculeByFormulaAction.def
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByFormulaAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotMoleculeByFormulaAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (std::string)
 #define paramtokens ("unselect-molecule-by-formula")
-#define paramdescriptions ("unselect a molecule by chemical formula")
+#define paramdescriptions ("chemical formula")
+#undef paramdefaults
 #define paramreferences (formula)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "unselect a molecule by chemical formula"
 #undef SHORTFORM
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/SelectionAction/NotMoleculeByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByIdAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotMoleculeByIdAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -74,7 +74,3 @@
   return true;
 }
-
-const string SelectionNotMoleculeByIdAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/NotMoleculeByIdAction.def
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByIdAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotMoleculeByIdAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (molecule*)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const molecule*)
 #define paramtokens ("unselect-molecule-by-id")
-#define paramdescriptions ("unselect a molecule by index")
+#define paramdescriptions ("molecule index")
+#undef paramdefaults
 #define paramreferences (mol)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "unselect a molecule by index"
 #undef SHORTFORM
-#define TYPEINFO &typeid(molecule)
Index: src/Actions/SelectionAction/NotMoleculeOfAtomAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeOfAtomAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotMoleculeOfAtomAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -72,7 +72,3 @@
   return true;
 }
-
-const string SelectionNotMoleculeOfAtomAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/SelectionAction/NotMoleculeOfAtomAction.def
===================================================================
--- src/Actions/SelectionAction/NotMoleculeOfAtomAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/SelectionAction/NotMoleculeOfAtomAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -10,8 +10,9 @@
 // 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
-#define paramtypes (atom*)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const atom*)
 #define paramtokens ("unselect-molecule-of-atom")
-#define paramdescriptions ("unselect a molecule to which a given atom belongs")
+#define paramdescriptions ("one atom of desired molecule")
+#undef paramdefaults
 #define paramreferences (Walker)
 
@@ -28,6 +29,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "unselect a molecule to which a given atom belongs"
 #undef SHORTFORM
-#define TYPEINFO &typeid(atom)
Index: src/Actions/TesselationAction/ConvexEnvelopeAction.cpp
===================================================================
--- src/Actions/TesselationAction/ConvexEnvelopeAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/TesselationAction/ConvexEnvelopeAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -59,7 +59,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.c_str());
+    FindNonConvexBorder(mol, TesselStruct, LCList, 50., params.filenameNonConvex.string().c_str());
     //RemoveAllBoundaryPoints(TesselStruct, mol, argv[argptr]);
-    const double volumedifference = ConvexizeNonconvexEnvelope(TesselStruct, mol, params.filenameConvex.c_str());
+    const double volumedifference = ConvexizeNonconvexEnvelope(TesselStruct, mol, params.filenameConvex.string().c_str());
     const double clustervolume = VolumeOfConvexEnvelope(TesselStruct, configuration);
     DoLog(0) && (Log() << Verbose(0) << "The tesselated volume area is " << clustervolume << " " << (configuration->GetIsAngstroem() ? "angstrom" : "atomiclength") << "^3." << endl);
@@ -95,7 +95,3 @@
   return false;
 }
-
-const string TesselationConvexEnvelopeAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/TesselationAction/ConvexEnvelopeAction.def
===================================================================
--- src/Actions/TesselationAction/ConvexEnvelopeAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/TesselationAction/ConvexEnvelopeAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (std::string)(std::string)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (boost::filesystem::path)(boost::filesystem::path)
 #define paramtokens ("convex-file")("nonconvex-file")
-#define paramdescriptions ("filename of the non-convex envelope")("filename of the non-convex envelope")
+#define paramdescriptions ("filename of the convex envelope")("filename of the non-convex envelope")
+#undef paramdefaults
 #define paramreferences (filenameConvex)(filenameNonConvex)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "create the convex envelope for a molecule"
 #define SHORTFORM "x"
-#define TYPEINFO &typeid(void)
Index: src/Actions/TesselationAction/NonConvexEnvelopeAction.cpp
===================================================================
--- src/Actions/TesselationAction/NonConvexEnvelopeAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/TesselationAction/NonConvexEnvelopeAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -56,5 +56,5 @@
     start = clock();
     LCList = new LinkedCell(*Boundary, params.SphereRadius*2.);
-    Success = FindNonConvexBorder(Boundary, T, LCList, params.SphereRadius, params.filename.c_str());
+    Success = FindNonConvexBorder(Boundary, T, LCList, params.SphereRadius, params.filename.string().c_str());
     //FindDistributionOfEllipsoids(T, &LCList, N, number, params.filename.c_str());
     end = clock();
@@ -90,7 +90,3 @@
   return false;
 }
-
-const string TesselationNonConvexEnvelopeAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/TesselationAction/NonConvexEnvelopeAction.def
===================================================================
--- src/Actions/TesselationAction/NonConvexEnvelopeAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/TesselationAction/NonConvexEnvelopeAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (double)(std::string)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (double)(boost::filesystem::path)
 #define paramtokens ("nonconvex-envelope")("nonconvex-file")
-#define paramdescriptions ("create the non-convex envelope for a molecule")("filename of the non-convex envelope")
+#define paramdescriptions ("radius of the rolling sphere")("filename of the non-convex envelope")
+#undef paramdefaults
 #define paramreferences (SphereRadius)(filename)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "create the non-convex envelope for a molecule"
 #define SHORTFORM "N"
-#define TYPEINFO &typeid(double)
Index: src/Actions/UndoAction.cpp
===================================================================
--- src/Actions/UndoAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
+++ src/Actions/UndoAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -0,0 +1,58 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * UndoAction.cpp
+ *
+ *  Created on: Oct 27, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "ActionHistory.hpp"
+
+#include <iostream>
+
+#include "Helpers/Assert.hpp"
+
+#include "Actions/UndoAction.hpp"
+
+// and construct the stuff
+#include "UndoAction.def"
+#include "Action_impl_pre.hpp"
+
+/** =========== define the function ====================== */
+Action::state_ptr UndoAction::performCall(){
+  std::cout << "Undo" << std::endl;
+  ActionHistory::getInstance().undoLast();
+  return Action::success;
+}
+
+Action::state_ptr UndoAction::performUndo(Action::state_ptr){
+  ASSERT(0,"Cannot undo an undo (should use redo for this");
+  return Action::success;
+}
+
+Action::state_ptr UndoAction::performRedo(Action::state_ptr){
+  ASSERT(0,"Cannot redo an undo");
+  return Action::success;
+}
+
+bool UndoAction::canUndo(){
+  return false;
+}
+
+bool UndoAction::shouldUndo(){
+  return false;
+}
+/** =========== end of function ====================== */
Index: src/Actions/UndoAction.def
===================================================================
--- src/Actions/UndoAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
+++ src/Actions/UndoAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -0,0 +1,28 @@
+/*
+ * UndoAction.def
+ *
+ *  Created on: Oct 27, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+
+// 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
+#undef paramtypes
+#undef paramreferences
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#undef CATEGORY 
+#define MENUNAME "edit"
+#define MENUPOSITION 1
+#define ACTIONNAME Undo
+#define TOKEN "undo"
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "undo last action"
+#undef SHORTFORM
Index: src/Actions/UndoAction.hpp
===================================================================
--- src/Actions/UndoAction.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
+++ src/Actions/UndoAction.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -0,0 +1,21 @@
+/*
+ * UndoAction.hpp
+ *
+ *  Created on: Oct 27, 2010
+ *      Author: heber
+ */
+
+#ifndef UNDOACTION_HPP_
+#define UNDOACTION_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Actions/Action.hpp"
+
+#include "UndoAction.def"
+#include "Actions/Action_impl_header.hpp"
+
+#endif /* UNDOACTION_HPP_ */
Index: src/Actions/ValueStorage.cpp
===================================================================
--- src/Actions/ValueStorage.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ValueStorage.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -20,27 +20,318 @@
 #include "Helpers/MemDebug.hpp"
 
-#include "ValueStorage.hpp"
 #include "Patterns/Singleton_impl.hpp"
 
+#include "Actions/OptionTrait.hpp"
+#include "Actions/OptionRegistry.hpp"
+#include "Actions/Values.hpp"
+#include "Actions/ValueStorage.hpp"
+#include "Descriptors/AtomIdDescriptor.hpp"
+#include "Descriptors/MoleculeIdDescriptor.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "LinearAlgebra/BoxVector.hpp"
+#include "LinearAlgebra/Matrix.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "atom.hpp"
+#include "Box.hpp"
+#include "element.hpp"
+#include "molecule.hpp"
+#include "periodentafel.hpp"
+#include "World.hpp"
+
 ValueStorage::ValueStorage() :
-  MapOfActions_instance(MapOfActions::getInstance())
+OptionRegistry_instance(OptionRegistry::getInstance())
 {};
 
 ValueStorage::~ValueStorage() {};
 
+
+bool ValueStorage::isCurrentValuePresent(const char *name) const
+{
+  return (CurrentValueMap.find(name) != CurrentValueMap.end());
+}
+
+void ValueStorage::queryCurrentValue(const char * name, const atom * &_T)
+{
+  int atomID = -1;
+  if (typeid( atom *) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    if (CurrentValueMap.find(name) == CurrentValueMap.end())
+      throw MissingValueException(__FILE__, __LINE__);
+    atomID = lexical_cast<int>(CurrentValueMap[name].c_str());
+    CurrentValueMap.erase(name);
+  } else if (typeid( const atom *) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    if (CurrentValueMap.find(name) == CurrentValueMap.end())
+      throw MissingValueException(__FILE__, __LINE__);
+    atomID = lexical_cast<int>(CurrentValueMap[name].c_str());
+    CurrentValueMap.erase(name);
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+  _T = World::getInstance().getAtom(AtomById(atomID));
+}
+
+void ValueStorage::queryCurrentValue(const char * name, const element * &_T)  {
+  int Z = -1;
+  if (typeid(const element *) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    if (CurrentValueMap.find(name) == CurrentValueMap.end())
+      throw MissingValueException(__FILE__, __LINE__);
+    Z = lexical_cast<int>(CurrentValueMap[name].c_str());
+    CurrentValueMap.erase(name);
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+  _T = World::getInstance().getPeriode()->FindElement(Z);
+}
+
+void ValueStorage::queryCurrentValue(const char * name, const molecule * &_T) {
+  int molID = -1;
+  if (typeid( const molecule *) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    if (CurrentValueMap.find(name) == CurrentValueMap.end())
+      throw MissingValueException(__FILE__, __LINE__);
+    molID = lexical_cast<int>(CurrentValueMap[name].c_str());
+    CurrentValueMap.erase(name);
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+  _T = World::getInstance().getMolecule(MoleculeById(molID));
+}
+
+void ValueStorage::queryCurrentValue(const char * name, class Box &_T) {
+  Matrix M;
+  double tmp;
+  if (typeid( Box ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    if (CurrentValueMap.find(name) == CurrentValueMap.end())
+      throw MissingValueException(__FILE__, __LINE__);
+    std::istringstream stream(CurrentValueMap[name]);
+    stream >> tmp;
+    M.set(0,0,tmp);
+    stream >> tmp;
+    M.set(0,1,tmp);
+    M.set(1,0,tmp);
+    stream >> tmp;
+    M.set(0,2,tmp);
+    M.set(2,0,tmp);
+    stream >> tmp;
+    M.set(1,1,tmp);
+    stream >> tmp;
+    M.set(1,2,tmp);
+    M.set(2,1,tmp);
+    stream >> tmp;
+    M.set(2,2,tmp);
+    _T = M;
+    CurrentValueMap.erase(name);
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::queryCurrentValue(const char * name, class Vector &_T) {
+  if (typeid( Vector ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    std::istringstream stream(CurrentValueMap[name]);
+    CurrentValueMap.erase(name);
+    stream >> _T[0];
+    stream >> _T[1];
+    stream >> _T[2];
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::queryCurrentValue(const char * name, class BoxVector &_T) {
+  if (typeid( BoxVector ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    std::istringstream stream(CurrentValueMap[name]);
+    CurrentValueMap.erase(name);
+    stream >> _T[0];
+    stream >> _T[1];
+    stream >> _T[2];
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::queryCurrentValue(const char * name, std::vector<const atom *>&_T)
+{
+  int atomID = -1;
+  atom *Walker = NULL;
+  if (typeid( std::vector<const atom *> ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    if (CurrentValueMap.find(name) == CurrentValueMap.end())
+      throw MissingValueException(__FILE__, __LINE__);
+    std::istringstream stream(CurrentValueMap[name]);
+    CurrentValueMap.erase(name);
+    while (!stream.fail()) {
+      stream >> atomID >> ws;
+      Walker = World::getInstance().getAtom(AtomById(atomID));
+      if (Walker != NULL)
+        _T.push_back(Walker);
+      atomID = -1;
+      Walker = NULL;
+    }
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::queryCurrentValue(const char * name, std::vector<const element *>&_T)
+{
+  int Z = -1;
+  const element *elemental = NULL;
+  if (typeid( std::vector<const element *> ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    if (CurrentValueMap.find(name) == CurrentValueMap.end())
+      throw MissingValueException(__FILE__, __LINE__);
+    std::istringstream stream(CurrentValueMap[name]);
+    CurrentValueMap.erase(name);
+    while (!stream.fail()) {
+      stream >> Z >> ws;
+      elemental = World::getInstance().getPeriode()->FindElement(Z);
+      if (elemental != NULL)
+        _T.push_back(elemental);
+      Z = -1;
+    }
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::queryCurrentValue(const char * name, std::vector<const molecule *>&_T)
+{
+  int molID = -1;
+  molecule *mol = NULL;
+  if (typeid( std::vector<const molecule *> ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    if (CurrentValueMap.find(name) == CurrentValueMap.end())
+      throw MissingValueException(__FILE__, __LINE__);
+    std::istringstream stream(CurrentValueMap[name]);
+    CurrentValueMap.erase(name);
+    while (!stream.fail()) {
+      stream >> molID >> ws;
+      mol = World::getInstance().getMolecule(MoleculeById(molID));
+      if (mol != NULL)
+        _T.push_back(mol);
+      molID = -1;
+      mol = NULL;
+    }
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::queryCurrentValue(const char * name, boost::filesystem::path&_T)
+{
+  std::string tmp;
+  if (typeid( boost::filesystem::path ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    if (CurrentValueMap.find(name) == CurrentValueMap.end())
+      throw MissingValueException(__FILE__, __LINE__);
+    std::istringstream stream(CurrentValueMap[name]);
+    CurrentValueMap.erase(name);
+    if (!stream.fail()) {
+      stream >> tmp >> ws;
+      _T = tmp;
+    }
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::setCurrentValue(const char * name, const atom * &_T)
+{
+  if (typeid( const atom *) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    std::ostringstream stream;
+    stream << _T->getId();
+    CurrentValueMap[name] = stream.str();
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::setCurrentValue(const char * name, const element * &_T)
+{
+  if (typeid( const element *) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    std::ostringstream stream;
+    stream << _T->getAtomicNumber();
+    CurrentValueMap[name] = stream.str();
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::setCurrentValue(const char * name, const molecule * &_T)
+{
+  if (typeid( const molecule *) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    std::ostringstream stream;
+    stream << _T->getId();
+    CurrentValueMap[name] = stream.str();
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::setCurrentValue(const char * name, class Box &_T)
+{
+  const Matrix &M = _T.getM();
+  if (typeid( Box ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    std::ostringstream stream;
+    stream << M.at(0,0) << " ";
+    stream << M.at(0,1) << " ";
+    stream << M.at(0,2) << " ";
+    stream << M.at(1,1) << " ";
+    stream << M.at(1,2) << " ";
+    stream << M.at(2,2) << " ";
+    CurrentValueMap[name] = stream.str();
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::setCurrentValue(const char * name, class Vector &_T)
+{
+  if (typeid( Vector ) == *(OptionRegistry_instance.getOptionByName(name)->getType())){
+    std::ostringstream stream;
+    stream << _T[0] << " ";
+    stream << _T[1] << " ";
+    stream << _T[2] << " ";
+    CurrentValueMap[name] = stream.str();
+  } else  if (typeid( BoxVector ) == *(OptionRegistry_instance.getOptionByName(name)->getType())){
+    std::ostringstream stream;
+    stream << _T[0] << " ";
+    stream << _T[1] << " ";
+    stream << _T[2] << " ";
+    CurrentValueMap[name] = stream.str();
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::setCurrentValue(const char * name, std::vector<const atom *>&_T)
+{
+  if (typeid( std::vector<const atom *> ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    std::ostringstream stream;
+    for (std::vector<const atom *>::const_iterator iter = _T.begin(); iter != _T.end(); ++iter) {
+      stream << (*iter)->getId() << " ";
+    }
+    CurrentValueMap[name] = stream.str();
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::setCurrentValue(const char * name, std::vector<const element *>&_T)
+{
+  if (typeid( std::vector<const element *> ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    std::ostringstream stream;
+    for (std::vector<const element *>::const_iterator iter = _T.begin(); iter != _T.end(); ++iter) {
+      stream << (*iter)->getAtomicNumber() << " ";
+    }
+    CurrentValueMap[name] = stream.str();
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::setCurrentValue(const char * name, std::vector<const molecule *>&_T)
+{
+  if (typeid( std::vector<const molecule *> ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    std::ostringstream stream;
+    for (std::vector<const molecule *>::const_iterator iter = _T.begin(); iter != _T.end(); ++iter) {
+      stream << (*iter)->getId() << " ";
+    }
+    CurrentValueMap[name] = stream.str();
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
+void ValueStorage::setCurrentValue(const char * name, boost::filesystem::path &_T)
+{
+  if (typeid( boost::filesystem::path ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {
+    std::ostringstream stream;
+    stream << _T.string();
+    CurrentValueMap[name] = stream.str();
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
 const std::string ValueStorage::getCurrentValue(std::string actionname) {
-  return MapOfActions::getInstance().getCurrentValue(actionname);
-}
-
-const std::string ValueStorage::getDescription(std::string actionname) {
-  return MapOfActions::getInstance().getDescription(actionname);
-}
-
-const std::string ValueStorage::getShortForm(std::string actionname) {
-  return MapOfActions::getInstance().getShortForm(actionname);
-}
-
-const std::type_info * ValueStorage::getType(std::string actionname) {
-  return MapOfActions::getInstance().getType(actionname);
+  return CurrentValueMap[actionname];
 }
 
Index: src/Actions/ValueStorage.hpp
===================================================================
--- src/Actions/ValueStorage.hpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/ValueStorage.hpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -9,5 +9,32 @@
 #define VALUESTORAGE_HPP_
 
-#include "Actions/MapOfActions.hpp"
+#include <boost/filesystem.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/program_options.hpp>
+
+#include <map>
+#include <set>
+#include <vector>
+#include <typeinfo>
+
+#include "Actions/OptionTrait.hpp"
+#include "Actions/OptionRegistry.hpp"
+#include "Exceptions/IllegalTypeException.hpp"
+#include "Exceptions/MissingValueException.hpp"
+#include "Helpers/Assert.hpp"
+#include "Patterns/Singleton.hpp"
+
+class MapOfActionsTest;
+
+class Box;
+class atom;
+class element;
+class molecule;
+class Vector;
+
+namespace po = boost::program_options;
+
+using boost::lexical_cast;
+
 #include "Patterns/Singleton.hpp"
 
@@ -21,4 +48,17 @@
 
 public:
+
+  bool isCurrentValuePresent(const char *name) const;
+  void queryCurrentValue(const char * name, const atom * &_T);
+  void queryCurrentValue(const char * name, const element * &_T);
+  void queryCurrentValue(const char * name, const molecule * &_T);
+  void queryCurrentValue(const char * name, class Box &_T);
+  void queryCurrentValue(const char * name, class Vector &_T);
+  void queryCurrentValue(const char * name, class BoxVector &_T);
+  void queryCurrentValue(const char * name, std::vector<const atom *>&_T);
+  void queryCurrentValue(const char * name, std::vector<const element *>&_T);
+  void queryCurrentValue(const char * name, std::vector<const molecule *>&_T);
+  void queryCurrentValue(const char * name, boost::filesystem::path&_T);
+
   /** Gets a value from the storage
    * If the value is not present, an ASSERT is thrown unless optional is set to true.
@@ -27,12 +67,39 @@
    * \return true - value present, false - value not present (only given when optional set to true)
    */
-  template <typename T> bool queryCurrentValue(const char *name, T &_T, const bool optional = false) {
-    if (optional) {
-      if (!MapOfActions_instance.isCurrentValuePresent(name))
-        return false;
-    }
-    MapOfActions_instance.queryCurrentValue(name, _T);
-    return true;
+  template<typename T> void queryCurrentValue(const char * name, T &_T)
+  {
+    if (typeid( T ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) { // constructor of type_info is private, hence can only store by ref or ptr
+      if (CurrentValueMap.find(name) == CurrentValueMap.end())
+        throw MissingValueException(__FILE__, __LINE__);
+      _T = lexical_cast<T>(CurrentValueMap[name].c_str());
+      CurrentValueMap.erase(name);
+    } else
+      throw IllegalTypeException(__FILE__,__LINE__);
   }
+  template<typename T> void queryCurrentValue(const char * name, std::vector<T> &_T)
+  {
+    T temp;
+    if (typeid( std::vector<T> ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) { // constructor of type_info is private, hence can only store by ref or ptr
+      if (CurrentValueMap.find(name) == CurrentValueMap.end())
+        throw MissingValueException(__FILE__, __LINE__);
+      std::istringstream stream(CurrentValueMap[name]);
+      CurrentValueMap.erase(name);
+      while (!stream.fail()) {
+        stream >> temp >> std::ws;
+        _T.push_back(temp);
+      }
+    } else
+      throw IllegalTypeException(__FILE__,__LINE__);
+  }
+
+  void setCurrentValue(const char * name, const atom * &_T);
+  void setCurrentValue(const char * name, const element * &_T);
+  void setCurrentValue(const char * name, const molecule * &_T);
+  void setCurrentValue(const char * name, class Box &_T);
+  void setCurrentValue(const char * name, class Vector &_T);
+  void setCurrentValue(const char * name, std::vector<const atom *>&_T);
+  void setCurrentValue(const char * name, std::vector<const element *>&_T);
+  void setCurrentValue(const char * name, std::vector<const molecule *>&_T);
+  void setCurrentValue(const char * name, boost::filesystem::path&_T);
 
   /** Sets a value in the storage.
@@ -40,16 +107,31 @@
    * \param _T value
    */
-  template <typename T> void setCurrentValue(const char *name, T &_T) {
-    MapOfActions_instance.setCurrentValue(name, _T);
+  template<class T> void setCurrentValue(const char * name, T &_T)
+  {
+    std::ostringstream stream;
+    if (typeid( T ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {  // constructor of type_info is private, hence can only store by ref or ptr
+      stream << _T;
+      CurrentValueMap[name] = stream.str();
+    } else
+      throw IllegalTypeException(__FILE__,__LINE__);
+  }
+  /** Sets a value in the storage.
+   * \param name key of value
+   * \param _T value
+   */
+  template<class T> void setCurrentValue(const char * name, std::vector<T> &_T)
+  {
+    std::ostringstream stream;
+    if (typeid( std::vector<T> ) == *(OptionRegistry_instance.getOptionByName(name)->getType())) {  // constructor of type_info is private, hence can only store by ref or ptr
+      std::ostringstream stream;
+      for (typename std::vector<T>::const_iterator iter = _T.begin(); iter != _T.end(); ++iter) {
+        stream << (*iter) << " ";
+      }
+      CurrentValueMap[name] = stream.str();
+    } else
+      throw IllegalTypeException(__FILE__,__LINE__);
   }
 
-  /** Obtain a descriptive text for a given key.
-   * \param actionname key
-   * \return text describing the key's contents
-   */
   const std::string getCurrentValue(std::string actionname);
-  const std::string getDescription(std::string actionname);
-  const std::string getShortForm(std::string actionname);
-  const std::type_info * getType(std::string actionname);
 
 protected:
@@ -57,5 +139,7 @@
   ~ValueStorage();
 
-  MapOfActions &MapOfActions_instance;
+  std::map<std::string, std::string> CurrentValueMap;
+
+  OptionRegistry &OptionRegistry_instance;
 };
 
Index: src/Actions/WorldAction/AddEmptyBoundaryAction.cpp
===================================================================
--- src/Actions/WorldAction/AddEmptyBoundaryAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/AddEmptyBoundaryAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -98,7 +98,3 @@
   return false;
 }
-
-const string WorldAddEmptyBoundaryAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/WorldAction/AddEmptyBoundaryAction.def
===================================================================
--- src/Actions/WorldAction/AddEmptyBoundaryAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/AddEmptyBoundaryAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -12,8 +12,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (Vector)
 #define paramtokens ("boundary")
-#define paramdescriptions ("change box to add an empty boundary around all atoms")
+#define paramdescriptions ("desired minimum distance to boundary for each axis over all atoms")
+#undef paramdefaults
 #define paramreferences (boundary)
 
@@ -30,6 +31,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "change box to add an empty boundary around all atoms"
 #define SHORTFORM "c"
-#define TYPEINFO &typeid(VectorValue)
Index: src/Actions/WorldAction/BoundInBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/BoundInBoxAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/BoundInBoxAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -69,7 +69,3 @@
   return false;
 }
-
-const string WorldBoundInBoxAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/WorldAction/BoundInBoxAction.def
===================================================================
--- src/Actions/WorldAction/BoundInBoxAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/BoundInBoxAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "bound all atoms in the domain"
 #undef SHORTFORM
-#define TYPEINFO &typeid(void)
Index: src/Actions/WorldAction/CenterInBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/CenterInBoxAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/CenterInBoxAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -71,7 +71,3 @@
   return false;
 }
-
-const string WorldCenterInBoxAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/WorldAction/CenterInBoxAction.def
===================================================================
--- src/Actions/WorldAction/CenterInBoxAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/CenterInBoxAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -12,8 +12,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (Box)
 #define paramtokens ("center-in-box")
-#define paramdescriptions ("center all atoms in the domain")
+#define paramdescriptions ("symmetric matrix of new domain")
+#undef paramdefaults
 #define paramreferences (cell_size)
 
@@ -30,6 +31,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "center all atoms in the domain"
 #define SHORTFORM "b"
-#define TYPEINFO &typeid(BoxValue)
Index: src/Actions/WorldAction/CenterOnEdgeAction.cpp
===================================================================
--- src/Actions/WorldAction/CenterOnEdgeAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/CenterOnEdgeAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -94,7 +94,3 @@
   return false;
 }
-
-const string WorldCenterOnEdgeAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/WorldAction/CenterOnEdgeAction.def
===================================================================
--- src/Actions/WorldAction/CenterOnEdgeAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/CenterOnEdgeAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "center edge of all atoms on (0,0,0)"
 #define SHORTFORM "O"
-#define TYPEINFO &typeid(void)
Index: src/Actions/WorldAction/ChangeBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/ChangeBoxAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/ChangeBoxAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -68,7 +68,3 @@
   return false;
 }
-
-const string WorldChangeBoxAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/WorldAction/ChangeBoxAction.def
===================================================================
--- src/Actions/WorldAction/ChangeBoxAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/ChangeBoxAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -12,8 +12,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (Box)
 #define paramtokens ("change-box")
-#define paramdescriptions ("change the symmetrc matrix of the simulation domain")
+#define paramdescriptions ("symmetrc matrix of the new simulation domain")
+#undef paramdefaults
 #define paramreferences (cell_size)
 
@@ -30,6 +31,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "change the symmetrc matrix of the simulation domain"
 #define SHORTFORM "B"
-#define TYPEINFO &typeid(BoxValue)
Index: src/Actions/WorldAction/InputAction.cpp
===================================================================
--- src/Actions/WorldAction/InputAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/InputAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -104,7 +104,3 @@
   return false;
 }
-
-const string WorldInputAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/WorldAction/InputAction.def
===================================================================
--- src/Actions/WorldAction/InputAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/InputAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (boost::filesystem::path)
 #define paramtokens ("input")
-#define paramdescriptions ("specify input files")
+#define paramdescriptions ("name of input files")
+#undef paramdefaults
 #define paramreferences (filename)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "specify input files"
 #define SHORTFORM "i"
-#define TYPEINFO &typeid(boost::filesystem::path)
Index: src/Actions/WorldAction/OutputAction.cpp
===================================================================
--- src/Actions/WorldAction/OutputAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/OutputAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -66,7 +66,3 @@
   return false;
 }
-
-const string WorldOutputAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/WorldAction/OutputAction.def
===================================================================
--- src/Actions/WorldAction/OutputAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/OutputAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #undef paramtypes
 #undef paramtokens
 #undef paramdescriptions
+#undef paramdefaults
 #undef paramreferences
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "write output files"
-#define SHORTFORM "o"
-#define TYPEINFO &typeid(void)
+#undef SHORTFORM
Index: src/Actions/WorldAction/RepeatBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/RepeatBoxAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/RepeatBoxAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -148,7 +148,3 @@
   return false;
 }
-
-const string WorldRepeatBoxAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/WorldAction/RepeatBoxAction.def
===================================================================
--- src/Actions/WorldAction/RepeatBoxAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/RepeatBoxAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -12,8 +12,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (Vector)
 #define paramtokens ("repeat-box")
-#define paramdescriptions ("create periodic copies of the simulation box per axis")
+#define paramdescriptions ("number of copies to create per axis")
+#undef paramdefaults
 #define paramreferences (Repeater)
 
@@ -30,6 +31,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "create periodic copies of the simulation box per axis"
 #define SHORTFORM "d"
-#define TYPEINFO &typeid(VectorValue)
Index: src/Actions/WorldAction/ScaleBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/ScaleBoxAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/ScaleBoxAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -86,7 +86,3 @@
   return false;
 }
-
-const string WorldScaleBoxAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/WorldAction/ScaleBoxAction.def
===================================================================
--- src/Actions/WorldAction/ScaleBoxAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/ScaleBoxAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -12,8 +12,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (Vector)
 #define paramtokens ("scale-box")
-#define paramdescriptions ("scale box and atomic positions inside")
+#define paramdescriptions ("scaling factor for each axis")
+#undef paramdefaults
 #define paramreferences (Scaler)
 
@@ -30,6 +31,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "scale box and atomic positions inside"
 #define SHORTFORM "s"
-#define TYPEINFO &typeid(VectorValue)
Index: src/Actions/WorldAction/SetDefaultNameAction.cpp
===================================================================
--- src/Actions/WorldAction/SetDefaultNameAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/SetDefaultNameAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -73,7 +73,3 @@
   return true;
 }
-
-const string WorldSetDefaultNameAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/WorldAction/SetDefaultNameAction.def
===================================================================
--- src/Actions/WorldAction/SetDefaultNameAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/SetDefaultNameAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (std::string)
 #define paramtokens ("default-molname")
-#define paramdescriptions ("set the default name of new molecules")
+#define paramdescriptions ("new default name of new molecules")
+#undef paramdefaults
 #define paramreferences (newname)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "set the default name of new molecules"
 #define SHORTFORM "X"
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/WorldAction/SetGaussianBasisAction.cpp
===================================================================
--- src/Actions/WorldAction/SetGaussianBasisAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/SetGaussianBasisAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -73,7 +73,3 @@
   return true;
 }
-
-const string WorldSetGaussianBasisAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/WorldAction/SetGaussianBasisAction.def
===================================================================
--- src/Actions/WorldAction/SetGaussianBasisAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/SetGaussianBasisAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
 #define paramtypes (std::string)
 #define paramtokens ("set-basis")
-#define paramdescriptions ("set the name of the gaussian basis set for MPQC")
+#define paramdescriptions ("name of the gaussian basis set for MPQC")
+#undef paramdefaults
 #define paramreferences (newname)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "set the name of the gaussian basis set for MPQC"
 #define SHORTFORM "M"
-#define TYPEINFO &typeid(std::string)
Index: src/Actions/WorldAction/SetOutputFormatsAction.cpp
===================================================================
--- src/Actions/WorldAction/SetOutputFormatsAction.cpp	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/SetOutputFormatsAction.cpp	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -71,7 +71,3 @@
   return false;
 }
-
-const string WorldSetOutputFormatsAction::getName() {
-  return NAME;
-}
 /** =========== end of function ====================== */
Index: src/Actions/WorldAction/SetOutputFormatsAction.def
===================================================================
--- src/Actions/WorldAction/SetOutputFormatsAction.def	(revision 53be342642ecc5d8c92481d78bf7924d629aad3f)
+++ src/Actions/WorldAction/SetOutputFormatsAction.def	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -11,8 +11,9 @@
 // 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
-#define paramtypes (vector<std::string>)
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (std::vector<std::string>)
 #define paramtokens ("set-output")
 #define paramdescriptions ("specify output formats")
+#undef paramdefaults
 #define paramreferences (FormatList)
 
@@ -29,6 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#undef DEFAULTVALUE
 #define DESCRIPTION "specify output formats"
 #define SHORTFORM "o"
-#define TYPEINFO &typeid(std::vector<std::string>)
Index: src/Actions/convert5.sh
===================================================================
--- src/Actions/convert5.sh	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
+++ src/Actions/convert5.sh	(revision 76cec6c27521e13434c84ce3ad89ba64ea437510)
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+
+for file in `find . -name '*.def'`; do 
+       sed -i -e "s/\(.*paramdescriptions.*\)/\1\n#undef paramdefaults/" -e "s#\(// \"undefine\" if no parameters are required\)#\1, use (NODEFAULT) for each (undefined) default value#" $file; 
+done
+
