Index: src/Actions/Values.cpp
===================================================================
--- src/Actions/Values.cpp	(revision a443e14850354bad2596cff04bcc7d39ee6cd0d6)
+++ src/Actions/Values.cpp	(revision cb523179ccdb9c245b65875c4a2b678c4ea59c1e)
@@ -37,4 +37,7 @@
 #include "CodePatterns/Assert.hpp"
 
+#include <boost/lexical_cast.hpp>
+#include <boost/tokenizer.hpp>
+
 #include "Box.hpp"
 #include "LinearAlgebra/BoxVector.hpp"
@@ -44,7 +47,32 @@
 #include "Values.hpp"
 
+static const Vector parseAsVector(const std::string &_string)
+{
+  Vector temp;
+  // dissect by ","
+  typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+  boost::char_separator<char> value_separator(",)(");
+
+  bool status = true;
+  tokenizer tokens(_string, value_separator);
+  if (!_string.empty()) {
+    tokenizer::iterator tok_iter = tokens.begin();
+    for (size_t i=0;i<NDIM;++i) {
+      if (tok_iter == tokens.end()) {
+        status = false;
+        break;
+      }
+      temp[i] = boost::lexical_cast<double>(*(tok_iter++));
+    }
+  }
+  if (!status)
+    temp.Zero();
+
+  return temp;
+}
+
 Vector VectorValue::toVector() const
 {
-  Vector returnVector(vector);
+  Vector returnVector = parseAsVector(vectorstring);
 
   return returnVector;
@@ -54,5 +82,5 @@
 {
   BoxVector returnVector;
-  static_cast<Vector>(returnVector) = Vector(vector); // under its hood it's still a Vector
+  static_cast<Vector>(returnVector) = parseAsVector(vectorstring); // under its hood it's still a Vector
 
   ASSERT(_box.isValid(returnVector),
Index: src/Actions/Values.hpp
===================================================================
--- src/Actions/Values.hpp	(revision a443e14850354bad2596cff04bcc7d39ee6cd0d6)
+++ src/Actions/Values.hpp	(revision cb523179ccdb9c245b65875c4a2b678c4ea59c1e)
@@ -27,8 +27,11 @@
  * are registered as VectorValue and lateron inside the CommandLineQuery placed
  * into the real vector.
+ *
+ * We use this abstraction also for Geometry Objects, i.e. string names
+ * referencing vectors in the GeomtryRegistry.
  */
 struct VectorValue
 {
-  double vector[NDIM];
+  std::string vectorstring;
 
   Vector toVector() const;
Index: src/Parameters/unittests/Makefile.am
===================================================================
--- src/Parameters/unittests/Makefile.am	(revision a443e14850354bad2596cff04bcc7d39ee6cd0d6)
+++ src/Parameters/unittests/Makefile.am	(revision cb523179ccdb9c245b65875c4a2b678c4ea59c1e)
@@ -31,4 +31,6 @@
 	libUnitTest.la \
 	../libMolecuilder.la \
+	../libMolecuilderParameters.la \
+	../libMolecuilderGeometry.la \
 	$(top_builddir)/ThirdParty/LinearAlgebra/src/LinearAlgebra/libLinearAlgebra.la \
 	${CodePatterns_LIBS} \
Index: src/UIElements/CommandLineUI/CommandLineParser_validate.cpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineParser_validate.cpp	(revision a443e14850354bad2596cff04bcc7d39ee6cd0d6)
+++ src/UIElements/CommandLineUI/CommandLineParser_validate.cpp	(revision cb523179ccdb9c245b65875c4a2b678c4ea59c1e)
@@ -66,4 +66,26 @@
         std::string("value"),
         std::string("VectorValue")
+    );
+#endif
+  }
+  VV.vectorstring = values.at(0);
+  v = boost::any(VectorValue(VV));
+}
+
+void validate(boost::any& v, const std::vector<std::string>& values, RealSpaceMatrixValue *, int)
+{
+  RealSpaceMatrixValue RSMV;
+  std::vector<std::string> components;
+
+  // split comma-separated values
+  if (values.size() != 1) {
+    std::cerr <<  "Not one vector but " << values.size() << " given " << std::endl;
+#if BOOST_VERSION < 104200
+    throw boost::program_options::validation_error("Unequal to one vector given");
+#else
+    throw boost::program_options::validation_error(
+        boost::program_options::validation_error::invalid_option_value,
+        std::string("value"),
+        std::string("BoxValue")
     );
 #endif
@@ -83,53 +105,4 @@
   components.push_back(std::string(Biter,argument.end()));
 
-  if (components.size() != 3) {
-    std::cerr <<  "Specified vector does not have three components but " << components.size() << std::endl;
-#if BOOST_VERSION < 104200
-    throw boost::program_options::validation_error("Specified vector does not have three components");
-#else
-    throw boost::program_options::validation_error(
-        boost::program_options::validation_error::invalid_option_value,
-        std::string("value"),
-        std::string("VectorValue")
-    );
-#endif
-  }
-  for (size_t i=0;i<NDIM;++i)
-    VV.vector[i] = boost::lexical_cast<double>(components.at(i));
-  v = boost::any(VectorValue(VV));
-}
-
-void validate(boost::any& v, const std::vector<std::string>& values, RealSpaceMatrixValue *, int)
-{
-  RealSpaceMatrixValue RSMV;
-  std::vector<std::string> components;
-
-  // split comma-separated values
-  if (values.size() != 1) {
-    std::cerr <<  "Not one vector but " << values.size() << " given " << std::endl;
-#if BOOST_VERSION < 104200
-    throw boost::program_options::validation_error("Unequal to one vector given");
-#else
-    throw boost::program_options::validation_error(
-        boost::program_options::validation_error::invalid_option_value,
-        std::string("value"),
-        std::string("BoxValue")
-    );
-#endif
-  }
-  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(std::string(Biter,Aiter));
-      do {
-        Aiter++;
-      } while (*Aiter == ' ' || *Aiter == '\t');
-      Biter = Aiter;
-    }
-  }
-  components.push_back(std::string(Biter,argument.end()));
-
   if (components.size() != 6) {
     std::cerr <<  "Specified vector does not have three components but " << components.size() << std::endl;
Index: src/UIElements/CommandLineUI/Query/VectorCommandLineQuery.cpp
===================================================================
--- src/UIElements/CommandLineUI/Query/VectorCommandLineQuery.cpp	(revision a443e14850354bad2596cff04bcc7d39ee6cd0d6)
+++ src/UIElements/CommandLineUI/Query/VectorCommandLineQuery.cpp	(revision cb523179ccdb9c245b65875c4a2b678c4ea59c1e)
@@ -53,14 +53,8 @@
 
 bool CommandLineDialog::VectorCommandLineQuery::handle() {
-  VectorValue _temp;
+  VectorValue temporary;
   if (CommandLineParser::getInstance().vm.count(getTitle())) {
-    try {
-      _temp = CommandLineParser::getInstance().vm[getTitle()].as< VectorValue >();
-    } catch(boost::bad_any_cast &e) {
-      for (size_t i=0;i<NDIM;++i)
-        _temp.vector[i] = 0.;
-      return false;
-    }
-    temp = _temp.toVector();
+    temporary = CommandLineParser::getInstance().vm[getTitle()].as< VectorValue >();
+    temp = temporary.vectorstring;
     return true;
   }
Index: src/UIElements/CommandLineUI/Query/VectorsCommandLineQuery.cpp
===================================================================
--- src/UIElements/CommandLineUI/Query/VectorsCommandLineQuery.cpp	(revision a443e14850354bad2596cff04bcc7d39ee6cd0d6)
+++ src/UIElements/CommandLineUI/Query/VectorsCommandLineQuery.cpp	(revision cb523179ccdb9c245b65875c4a2b678c4ea59c1e)
@@ -46,5 +46,5 @@
 
 CommandLineDialog::VectorsCommandLineQuery::VectorsCommandLineQuery(Parameter<std::vector<Vector> > &_param, const std::string &_title, const std::string &_description) :
-    Dialog::TQuery<std::vector<Vector> >(_param, _title, _description)
+    Dialog::TQuery< std::vector<Vector> >(_param, _title, _description)
 {}
 
@@ -53,16 +53,8 @@
 
 bool CommandLineDialog::VectorsCommandLineQuery::handle() {
-  std::vector<VectorValue> temporary;
+  std::vector<std::string> temporary;
+  std::stringstream output;
   if (CommandLineParser::getInstance().vm.count(getTitle())) {
-    try {
-      temporary = CommandLineParser::getInstance().vm[getTitle()].as< std::vector<VectorValue> >();
-    } catch(boost::bad_any_cast &e) {
-      temporary.clear();
-      return false;
-    }
-    for(std::vector<VectorValue>::iterator iter = temporary.begin(); iter != temporary.end(); ++iter) {
-      Vector temp_element = (*iter).toVector();
-      temp.push_back(temp_element);
-    }
+    temp = CommandLineParser::getInstance().vm[getTitle()].as< std::vector<std::string> >();
     return true;
   }
Index: src/UIElements/Dialog.cpp
===================================================================
--- src/UIElements/Dialog.cpp	(revision a443e14850354bad2596cff04bcc7d39ee6cd0d6)
+++ src/UIElements/Dialog.cpp	(revision cb523179ccdb9c245b65875c4a2b678c4ea59c1e)
@@ -145,4 +145,22 @@
 }
 
+static const std::string concatenateStrings(const std::vector<std::string> &_strings)
+{
+  std::stringstream output;
+  for (std::vector<std::string>::const_iterator iter = _strings.begin();
+      iter != _strings.end(); ++iter)
+    output << *iter << " ";
+  return output.str();
+}
+
+bool Dialog::TQuery< std::vector<Vector> >::isValid()
+{
+  return param.isValidAsString(concatenateStrings(temp));
+}
+void Dialog::TQuery< std::vector<Vector> >::setResult()
+{
+  param.setAsString(concatenateStrings(temp));
+}
+
 /** With the following boost::preprocessor code we generate template
  * specializations for each desired query types in the abstract class Dialog.
Index: src/UIElements/Dialog.hpp
===================================================================
--- src/UIElements/Dialog.hpp	(revision a443e14850354bad2596cff04bcc7d39ee6cd0d6)
+++ src/UIElements/Dialog.hpp	(revision cb523179ccdb9c245b65875c4a2b678c4ea59c1e)
@@ -304,8 +304,8 @@
   virtual ~TQuery(){}
   virtual bool handle()=0;
-  virtual bool isValid(){ return param.isValid(temp);  }
-  virtual void setResult(){ param.set(temp);  }
+  virtual bool isValid(){ return param.isValidAsString(temp);  }
+  virtual void setResult(){ param.setAsString(temp);  }
 protected:
-  Vector temp;
+  std::string temp;
   Parameter<Vector> &param;
 };
@@ -318,8 +318,8 @@
   virtual ~TQuery(){}
   virtual bool handle()=0;
-  virtual bool isValid(){ return param.isValid(temp);  }
-  virtual void setResult(){ param.set(temp);  }
+  virtual bool isValid();
+  virtual void setResult();
 protected:
-  std::vector<Vector> temp;
+  std::vector<std::string> temp;
   Parameter< std::vector<Vector> > &param;
 };
Index: src/UIElements/Qt4/Query/QtQuery.hpp
===================================================================
--- src/UIElements/Qt4/Query/QtQuery.hpp	(revision a443e14850354bad2596cff04bcc7d39ee6cd0d6)
+++ src/UIElements/Qt4/Query/QtQuery.hpp	(revision cb523179ccdb9c245b65875c4a2b678c4ea59c1e)
@@ -414,4 +414,6 @@
 
 public slots:
+  void pageChanged(int);
+  void onUpdateName(int);
   void onUpdateX(double);
   void onUpdateY(double);
@@ -424,12 +426,16 @@
   QBoxLayout *subLayout;
   QBoxLayout *coordLayout;
-  QLabel *coordLabel;
   QDoubleSpinBox *coordInputX;
   QDoubleSpinBox *coordInputY;
   QDoubleSpinBox *coordInputZ;
   Dialog *dialog;
-};
-
-class QtDialog::VectorsQtQuery : public QWidget, public QtQuery<std::vector<Vector> >, public QtQueryList<Vector> {
+  QBoxLayout *nameLayout;
+  QComboBox *nameComboBox;
+};
+
+class QtDialog::VectorsQtQuery :
+    public QWidget,
+    public QtQuery<std::vector<Vector> >,
+    public QtQueryList<Vector> {
   Q_OBJECT
 public:
Index: src/UIElements/Qt4/Query/QtQueryList.hpp
===================================================================
--- src/UIElements/Qt4/Query/QtQueryList.hpp	(revision a443e14850354bad2596cff04bcc7d39ee6cd0d6)
+++ src/UIElements/Qt4/Query/QtQueryList.hpp	(revision cb523179ccdb9c245b65875c4a2b678c4ea59c1e)
@@ -105,5 +105,5 @@
 class QtQueryList<Vector> : public QtQueryListUntyped {
 public:
-  QtQueryList(Parameter<std::vector<Vector> > &parentParam, QBoxLayout *parent, Dialog *_dialog, std::vector<Vector> &_temp) : QtQueryListUntyped(parent, _dialog), tempRef(_temp)
+  QtQueryList(Parameter<std::vector<Vector> > &parentParam, QBoxLayout *parent, Dialog *_dialog, std::vector<std::string> &_temp) : QtQueryListUntyped(parent, _dialog), tempRef(_temp)
   {
     // do we have an STLVectorValidator?
@@ -137,5 +137,5 @@
     // add item to both
     addElementToListWidget(subParam->getAsString());
-    tempRef.push_back(subParam->get());
+    tempRef.push_back(subParam->getAsString());
     onUpdate();
   }
@@ -151,5 +151,5 @@
   }
 protected:
-  std::vector<Vector> &tempRef;
+  std::vector<std::string> &tempRef;
   Parameter<Vector> *subParam;
 };
Index: src/UIElements/Qt4/Query/VectorQtQuery.cpp
===================================================================
--- src/UIElements/Qt4/Query/VectorQtQuery.cpp	(revision a443e14850354bad2596cff04bcc7d39ee6cd0d6)
+++ src/UIElements/Qt4/Query/VectorQtQuery.cpp	(revision cb523179ccdb9c245b65875c4a2b678c4ea59c1e)
@@ -37,4 +37,5 @@
 #include <Qt/qcombobox.h>
 #include <Qt/qlabel.h>
+#include <Qt/qstackedwidget.h>
 
 //#include "CodePatterns/MemDebug.hpp"
@@ -42,4 +43,8 @@
 #include "UIElements/Qt4/Query/QtQuery.hpp"
 
+#include "CodePatterns/toString.hpp"
+
+#include "Geometry/GeometryRegistry.hpp"
+#include "Parameters/Specifics/Value_vector.hpp"
 
 QtDialog::VectorQtQuery::VectorQtQuery(Parameter<Vector> &_param, const std::string &_title, const std::string &_description, QBoxLayout *_parent,Dialog *_dialog) :
@@ -48,21 +53,40 @@
     dialog(_dialog)
 {
-  temp = Vector(0, 0, 0);
-  if (param.isSet())
-    temp = param.get();
+  Vector temporary(0, 0, 0);
+  temp = "0, 0, 0";
+  if (param.isSet()) {
+    temporary = param.get();
+    temp = param.getAsString();
+  }
   mainLayout= new QHBoxLayout();
   titleLabel = new QLabel(QString(getTitle().c_str()));
   titleLabel->setToolTip(QString(getDescription().c_str()));
   mainLayout->addWidget(titleLabel);
-  subLayout = new QVBoxLayout();
+  subLayout = new QHBoxLayout();
   mainLayout->addLayout(subLayout);
 //  QComboBox* inputBox = new QComboBox();
+
+  QWidget *firstPageWidget = new QWidget;
+  QWidget *secondPageWidget = new QWidget;
+
+  QStackedWidget *stackedWidget = new QStackedWidget;
+  stackedWidget->addWidget(firstPageWidget);
+  stackedWidget->addWidget(secondPageWidget);
+
+  QComboBox *pageComboBox = new QComboBox;
+  pageComboBox->addItem(tr("x,y,z"));
+  pageComboBox->addItem(tr("vector name"));
+  connect(pageComboBox, SIGNAL(activated(int)),
+      stackedWidget, SLOT(setCurrentIndex(int)));
+  connect(pageComboBox, SIGNAL(activated(int)),
+      this, SLOT(pageChanged(int)));
+  subLayout->addWidget(pageComboBox);
+  subLayout->addWidget(stackedWidget);
+
+   // first widget with coordinates
   coordLayout = new QHBoxLayout();
-  subLayout->addLayout(coordLayout);
-  coordLabel = new QLabel(QString("x,y,z"));
-  coordLayout->addWidget(coordLabel);
   coordInputX = new QDoubleSpinBox();
   coordInputX->setRange(-std::numeric_limits<double>::max(),std::numeric_limits<double>::max());
-  coordInputX->setValue(temp[0]);
+  coordInputX->setValue(temporary[0]);
 //  coordInputX->setRange(0,M.at(i,i));
   coordInputX->setDecimals(3);
@@ -70,5 +94,5 @@
   coordInputY = new QDoubleSpinBox();
   coordInputY->setRange(-std::numeric_limits<double>::max(),std::numeric_limits<double>::max());
-  coordInputY->setValue(temp[1]);
+  coordInputY->setValue(temporary[1]);
 //  coordInputY->setRange(0,M.at(i,i));
   coordInputY->setDecimals(3);
@@ -76,5 +100,5 @@
   coordInputZ = new QDoubleSpinBox();
   coordInputZ->setRange(-std::numeric_limits<double>::max(),std::numeric_limits<double>::max());
-  coordInputZ->setValue(temp[2]);
+  coordInputZ->setValue(temporary[2]);
 //  coordInputZ->setRange(0,M.at(i,i));
   coordInputZ->setDecimals(3);
@@ -83,4 +107,22 @@
   connect(coordInputY,SIGNAL(valueChanged(double)),this,SLOT(onUpdateY(double)));
   connect(coordInputZ,SIGNAL(valueChanged(double)),this,SLOT(onUpdateZ(double)));
+  firstPageWidget->setLayout(coordLayout);
+
+  // second widget with string field
+  nameLayout = new QHBoxLayout();
+  nameComboBox = new QComboBox;
+  GeometryRegistry &reg = GeometryRegistry::getInstance();
+//  nameComboBox->setEditable(true);
+  GeometryRegistry::const_iterator iter;
+  for (iter = reg.getBeginIter(); iter != reg.getEndIter(); iter ++){
+    GeometryObject *v = iter->second;
+    nameComboBox->addItem(tr(v->getName().c_str()));
+    nameComboBox->setItemData(nameComboBox->count()-1, tr(toString<Vector>(v->getVector()).c_str()), Qt::ToolTipRole);
+  }
+  connect(nameComboBox, SIGNAL(activated(int)),
+      this, SLOT(onUpdateName(int)));
+  nameLayout->addWidget(nameComboBox);
+  secondPageWidget->setLayout(nameLayout);
+
   parent->addLayout(mainLayout);
 }
@@ -89,16 +131,53 @@
 {}
 
+static void updateVectorString(std::string &_temp, const double newDouble, int component)
+{
+  //!> Internal converter from string to internal type
+  Vector vec = Value<Vector>::parseAsVector(_temp);
+  vec[component] = newDouble;
+  _temp = Value<Vector>::setFromVector(vec);
+}
+
+void QtDialog::VectorQtQuery::pageChanged(int pagenr) {
+  if (pagenr == 1) {
+    // change from x,y,z input
+    onUpdateName(nameComboBox->currentIndex());
+    dialog->update();
+  } else if (pagenr == 0) {
+    // change from name input
+    if (GeometryRegistry::getInstance().isPresentByName(temp)) {
+      const GeometryObject * const v = GeometryRegistry::getInstance().getByName(temp);
+      coordInputX->setValue(v->getVector()[0]);
+      coordInputY->setValue(v->getVector()[1]);
+      coordInputZ->setValue(v->getVector()[2]);
+    } else {
+      coordInputX->setValue(0.);
+      coordInputY->setValue(0.);
+      coordInputZ->setValue(0.);
+    }
+    dialog->update();
+  } else {
+    ASSERT(0, "VectorQtQuery::pageChanged() - unknown page for pageComboBox.");
+  }
+}
+
+void QtDialog::VectorQtQuery::onUpdateName(int index) {
+  const QString itemtext = nameComboBox->itemText(index);
+  temp = itemtext.toStdString();
+  dialog->update();
+}
+
 void QtDialog::VectorQtQuery::onUpdateX(double newDouble) {
-  temp[0] = newDouble;
+  updateVectorString(temp, newDouble, 0);
   dialog->update();
 }
 
 void QtDialog::VectorQtQuery::onUpdateY(double newDouble) {
-  temp[1] = newDouble;
+  updateVectorString(temp, newDouble, 1);
   dialog->update();
 }
 
 void QtDialog::VectorQtQuery::onUpdateZ(double newDouble) {
-  temp[2] = newDouble;
+  updateVectorString(temp, newDouble, 2);
   dialog->update();
 }
Index: src/UIElements/TextUI/Query/VectorsTextQuery.cpp
===================================================================
--- src/UIElements/TextUI/Query/VectorsTextQuery.cpp	(revision a443e14850354bad2596cff04bcc7d39ee6cd0d6)
+++ src/UIElements/TextUI/Query/VectorsTextQuery.cpp	(revision cb523179ccdb9c245b65875c4a2b678c4ea59c1e)
@@ -41,4 +41,5 @@
 #include "CodePatterns/Log.hpp"
 #include "CodePatterns/Verbose.hpp"
+#include "Geometry/GeometryRegistry.hpp"
 #include "LinearAlgebra/Vector.hpp"
 #include "LinearAlgebra/RealSpaceMatrix.hpp"
@@ -54,39 +55,29 @@
 
 bool TextDialog::VectorsTextQuery::handle() {
+  std::stringstream output;
   std::cout << getDescription() << std::endl;
   char coords[3] = {'x', 'y', 'z'};
   const RealSpaceMatrix &M = World::getInstance().getDomain().getM();
-  for (int i=0;i<3;i++)
-    std::cout << coords[i] << "[0.." << M.at(i,i) << ( (i!=2) ? "], " : "]: ");
+  std::cout << "Enter three comma-separated coordinates, vector name, ? for list or empty for end." << std::endl;
+  while (true) {
+    for (int i=0;i<3;i++)
+      std::cout << coords[i] << "[0.." << M.at(i,i) << ( (i!=2) ? "], " : "]: ");
 
-  std::string line;
-  getline(std::cin,line);
+    std::string line;
+    getline(std::cin,line);
 
-  // dissect by ","
-  double coord = 0.;
-  std::string::iterator olditerspace = line.begin();
-  std::string::iterator olditercomma = line.begin();
-  int counter = 0;
-  Vector temp_element;
-  for(std::string::iterator vectoriter = line.begin(); vectoriter != line.end(); ++vectoriter) {
-    if (*vectoriter == ',')
-      counter++;
-    if ((*vectoriter == ' ') && (counter == 2)) {
-      counter = 0;
-      for(std::string::iterator componentiter = olditerspace; (componentiter != vectoriter) && (counter !=3); ++componentiter) {
-        if (*componentiter == ',') {
-          std::istringstream stream(std::string(componentiter, olditercomma));
-          stream >> coord;
-          temp_element[counter++] = coord;
-          olditercomma = componentiter;
-        }
+    if (line == "?") {
+      GeometryRegistry &reg = GeometryRegistry::getInstance();
+
+      GeometryRegistry::const_iterator iter;
+      for (iter = reg.getBeginIter(); iter != reg.getEndIter(); iter ++){
+        GeometryObject *v = iter->second;
+        std::cout << "\t" << *v << std::endl;
       }
-      if ((olditercomma != line.begin()) && (counter != 3)) { // insert last part also
-        std::istringstream stream(std::string(olditercomma, vectoriter));
-        stream >> coord;
-        temp_element[counter++] = coord;
-      }
-      temp.push_back(temp_element);
-      olditerspace = vectoriter;
+    } else if (line.empty()) {
+      break;
+    } else {
+      // simply append with white-space delimiter
+      temp.push_back(line);
     }
   }
