Index: src/Actions/MapOfActions.cpp
===================================================================
--- src/Actions/MapOfActions.cpp	(revision dde125b0d55be10505f7893922a77c27d75e2f3f)
+++ src/Actions/MapOfActions.cpp	(revision 0b0a20eccd97295d1e20b853c15636671763345f)
@@ -343,15 +343,20 @@
   TypeMap["start-step"] = &typeid(int);
 
+  TypeEnumMap[&typeid(void)] = None;
+  TypeEnumMap[&typeid(bool)] = Boolean;
   TypeEnumMap[&typeid(int)] = Integer;
+  TypeEnumMap[&typeid(std::vector<int>)] = ListOfIntegers;
   TypeEnumMap[&typeid(double)] = Double;
-  TypeEnumMap[&typeid(bool)] = Boolean;
+  TypeEnumMap[&typeid(std::vector<double>)] = ListOfDoubles;
   TypeEnumMap[&typeid(std::string)] = String;
+  TypeEnumMap[&typeid(std::vector<std::string>)] = ListOfStrings;
+  TypeEnumMap[&typeid(VectorValue)] = Vector;
+  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(element)] = Element;
   TypeEnumMap[&typeid(std::vector<element *>)] = ListOfElements;
-  TypeEnumMap[&typeid(molecule)] = Molecule;
-  TypeEnumMap[&typeid(VectorValue)] = Vector;
-  TypeEnumMap[&typeid(BoxValue)] = Box;
-
 
   // default values for any action that needs one (always string!)
@@ -580,4 +585,23 @@
 }
 
+void MapOfActions::queryCurrentValue(const char * name, std::vector<atom *>&_T)
+{
+  int atomID = -1;
+  atom *Walker = NULL;
+  if (typeid( std::vector<atom *> ) == *TypeMap[name]) {
+    if (CurrentValue.find(name) == CurrentValue.end())
+      throw MissingValueException(__FILE__, __LINE__);
+    std::istringstream stream(CurrentValue[name]);
+    CurrentValue.erase(name);
+    while (!stream.fail()) {
+      stream >> atomID;
+      Walker = World::getInstance().getAtom(AtomById(atomID));
+      if (Walker != NULL)
+        _T.push_back(Walker);
+    }
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
 void MapOfActions::queryCurrentValue(const char * name, std::vector<element *>&_T)
 {
@@ -599,8 +623,9 @@
 }
 
-void MapOfActions::queryCurrentValue(const char * name, std::vector<std::string>&_T)
-{
-  std::string temp;
-  if (typeid( std::vector<std::string> ) == *TypeMap[name]) {
+void MapOfActions::queryCurrentValue(const char * name, std::vector<molecule *>&_T)
+{
+  int molID = -1;
+  molecule *mol = NULL;
+  if (typeid( std::vector<molecule *> ) == *TypeMap[name]) {
     if (CurrentValue.find(name) == CurrentValue.end())
       throw MissingValueException(__FILE__, __LINE__);
@@ -608,6 +633,8 @@
     CurrentValue.erase(name);
     while (!stream.fail()) {
-      stream >> temp >> ws;
-      _T.push_back(temp);
+      stream >> molID;
+      mol = World::getInstance().getMolecule(MoleculeById(molID));
+      if (mol != NULL)
+        _T.push_back(mol);
     }
   } else
@@ -674,4 +701,16 @@
 }
 
+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() << " ";
+    }
+    CurrentValue[name] = stream.str();
+  } else
+    throw IllegalTypeException(__FILE__,__LINE__);
+}
+
 void MapOfActions::setCurrentValue(const char * name, std::vector<element *>&_T)
 {
@@ -679,5 +718,5 @@
     std::ostringstream stream;
     for (std::vector<element *>::iterator iter = _T.begin(); iter != _T.end(); ++iter) {
-      stream << (*iter)->Z;
+      stream << (*iter)->Z << " ";
     }
     CurrentValue[name] = stream.str();
@@ -686,10 +725,10 @@
 }
 
-void MapOfActions::setCurrentValue(const char * name, std::vector<std::string>&_T)
-{
-  if (typeid( std::vector<std::string> ) == *TypeMap[name]) {
+void MapOfActions::setCurrentValue(const char * name, std::vector<molecule *>&_T)
+{
+  if (typeid( std::vector<molecule *> ) == *TypeMap[name]) {
     std::ostringstream stream;
-    for (std::vector<std::string>::iterator iter = _T.begin(); iter != _T.end(); ++iter) {
-      stream << (*iter);
+    for (std::vector<molecule *>::iterator iter = _T.begin(); iter != _T.end(); ++iter) {
+      stream << (*iter)->getId() << " ";
     }
     CurrentValue[name] = stream.str();
@@ -765,5 +804,5 @@
     for (set<string>::iterator OptionRunner = ListRunner->first->begin(); OptionRunner != ListRunner->first->end(); ++OptionRunner) {
       if (hasValue(*OptionRunner)) {
-        DoLog(0) && (Log() << Verbose(0) << "Adding option " << *OptionRunner << " with type " << TypeMap[*OptionRunner] << " to CommandLineParser." << endl);
+        DoLog(3) && (Log() << Verbose(3) << "Adding option " << *OptionRunner << " with type " << TypeMap[*OptionRunner]->name() << " to CommandLineParser." << endl);
            switch(TypeEnumMap[TypeMap[*OptionRunner]]) {
           default:
@@ -798,5 +837,5 @@
               ;
             break;
-          case ListOfInts:
+          case ListOfIntegers:
             ListRunner->second->add_options()
               (getKeyAndShortForm(*OptionRunner).c_str(),
@@ -830,5 +869,5 @@
               ;
             break;
-          case ListOfString:
+          case ListOfStrings:
             ListRunner->second->add_options()
               (getKeyAndShortForm(*OptionRunner).c_str(),
@@ -837,5 +876,19 @@
               ;
             break;
-          case Axis:
+          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(),
@@ -846,12 +899,12 @@
               ;
             break;
-          case Vector:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value<VectorValue>(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case Molecule:
+          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(),
@@ -862,20 +915,4 @@
               ;
             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(),
-                  CurrentValue.find(*OptionRunner) != CurrentValue.end() ?
-                        po::value< int >()->default_value(atoi(CurrentValue[*OptionRunner].c_str())) :
-                        po::value< int >(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
           case ListOfAtoms:
             ListRunner->second->add_options()
@@ -901,5 +938,5 @@
         }
       } else {
-        DoLog(0) && (Log() << Verbose(0) << "Adding option " << *OptionRunner << " to CommandLineParser." << endl);
+        DoLog(3) && (Log() << Verbose(3) << "Adding option " << *OptionRunner << " to CommandLineParser." << endl);
         ListRunner->second->add_options()
           (getKeyAndShortForm(*OptionRunner).c_str(), getDescription(*OptionRunner).c_str())
@@ -910,5 +947,5 @@
   // add positional arguments
   for (set<string>::iterator OptionRunner = inputfile.begin(); OptionRunner != inputfile.end(); ++OptionRunner) {
-    DoLog(0) && (Log() << Verbose(0) << "Adding option " << *OptionRunner << " to positional CommandLineParser." << endl);
+    DoLog(3) && (Log() << Verbose(3) << "Adding option " << *OptionRunner << " to positional CommandLineParser." << endl);
     CommandLineParser::getInstance().inputfile.add((*OptionRunner).c_str(), -1);
   }
Index: src/Actions/MapOfActions.hpp
===================================================================
--- src/Actions/MapOfActions.hpp	(revision dde125b0d55be10505f7893922a77c27d75e2f3f)
+++ src/Actions/MapOfActions.hpp	(revision 0b0a20eccd97295d1e20b853c15636671763345f)
@@ -135,5 +135,5 @@
   friend class MapOfActionsTest;
 public:
-  enum OptionTypes { None, Boolean, Integer, ListOfInts, Double, ListOfDoubles, String, ListOfString, Axis, Vector, Box, Molecule, ListOfMolecules, Atom, ListOfAtoms, Element, ListOfElements };
+  enum OptionTypes { None, Boolean, Integer, ListOfIntegers, Double, ListOfDoubles, String, ListOfStrings, Vector, ListOfVectors, Box, Molecule, ListOfMolecules, Atom, ListOfAtoms, Element, ListOfElements };
 
   // getter for the action descriptions and short forms
@@ -167,6 +167,7 @@
   void queryCurrentValue(const char * name, class Box &_T);
   void queryCurrentValue(const char * name, class Vector &_T);
+  void queryCurrentValue(const char * name, std::vector<atom *>&_T);
   void queryCurrentValue(const char * name, std::vector<element *>&_T);
-  void queryCurrentValue(const char * name, std::vector<std::string>&_T);
+  void queryCurrentValue(const char * name, std::vector<molecule *>&_T);
   template<typename T> void queryCurrentValue(const char * name, T &_T)
   {
@@ -179,4 +180,19 @@
       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 (CurrentValue.find(name) == CurrentValue.end())
+        throw MissingValueException(__FILE__, __LINE__);
+      std::istringstream stream(CurrentValue[name]);
+      CurrentValue.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);
@@ -185,6 +201,7 @@
   void setCurrentValue(const char * name, class Box &_T);
   void setCurrentValue(const char * name, class Vector &_T);
+  void setCurrentValue(const char * name, std::vector<atom *>&_T);
   void setCurrentValue(const char * name, std::vector<element *>&_T);
-  void setCurrentValue(const char * name, std::vector<std::string>&_T);
+  void setCurrentValue(const char * name, std::vector<molecule *>&_T);
   template<class T> void setCurrentValue(const char * name, T &_T)
   {
@@ -192,4 +209,16 @@
     if (typeid( T ) == *TypeMap[name]) {  // constructor of type_info is private, hence can only store by ref or ptr
       stream << _T;
+      CurrentValue[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 (std::vector<std::string>::iterator iter = _T.begin(); iter != _T.end(); ++iter) {
+        stream << (*iter) << " ";
+      }
       CurrentValue[name] = stream.str();
     } else
Index: src/Exceptions/MissingValueException.cpp
===================================================================
--- src/Exceptions/MissingValueException.cpp	(revision 0b0a20eccd97295d1e20b853c15636671763345f)
+++ src/Exceptions/MissingValueException.cpp	(revision 0b0a20eccd97295d1e20b853c15636671763345f)
@@ -0,0 +1,21 @@
+/*
+ * MissingValueException.cpp
+ *
+ *  Created on: Jul 23, 2010
+ *      Author: heber
+ */
+
+#include "MissingValueException.hpp"
+
+using namespace std;
+
+MissingValueException::MissingValueException(string _file, int _line) :
+  CustomException(_file,_line)
+{}
+
+MissingValueException::~MissingValueException() throw ()
+{}
+
+const char* MissingValueException::what() const throw(){
+  return "Value necessary for Action not present in ValueStorage";
+}
Index: src/Exceptions/MissingValueException.hpp
===================================================================
--- src/Exceptions/MissingValueException.hpp	(revision 0b0a20eccd97295d1e20b853c15636671763345f)
+++ src/Exceptions/MissingValueException.hpp	(revision 0b0a20eccd97295d1e20b853c15636671763345f)
@@ -0,0 +1,22 @@
+/*
+ * MissingValueException.hpp
+ *
+ *  Created on: Jul 23, 2010
+ *      Author: heber
+ */
+
+#ifndef MISSINGVALUEEXCEPTION_HPP_
+#define MISSINGVALUEEXCEPTION_HPP_
+
+#include "Exceptions/CustomException.hpp"
+
+class MissingValueException : public CustomException
+{
+public:
+  MissingValueException(std::string _file, int _line);
+  virtual ~MissingValueException() throw ();
+
+  virtual const char* what() const throw();
+};
+
+#endif /* MISSINGVALUEEXCEPTION_HPP_ */
