Index: src/Actions/Makefile.am
===================================================================
--- src/Actions/Makefile.am	(revision 3610bbd6dd22cef268eb768a7a49227356ab66d0)
+++ src/Actions/Makefile.am	(revision 0286bc68dfc4d223023e8fa98a68a958f8bc8a40)
@@ -30,5 +30,6 @@
   ${TESSELATIONACTIONHEADER} \
   ${WORLDACTIONHEADER} \
-  MapOfActions.hpp
+  MapOfActions.hpp \
+  Values.hpp
   
 ANALYSISACTIONSOURCE = \
Index: src/Actions/MapOfActions.cpp
===================================================================
--- src/Actions/MapOfActions.cpp	(revision 3610bbd6dd22cef268eb768a7a49227356ab66d0)
+++ src/Actions/MapOfActions.cpp	(revision 0286bc68dfc4d223023e8fa98a68a958f8bc8a40)
@@ -12,7 +12,43 @@
 #include "Helpers/Assert.hpp"
 
+#include <boost/lexical_cast.hpp>
+#include <boost/optional.hpp>
+#include <boost/program_options.hpp>
+
 #include "CommandLineParser.hpp"
 #include "log.hpp"
 #include "verbose.hpp"
+
+#include "Actions/Values.hpp"
+
+void validate(boost::any& v, const std::vector<std::string>& values, VectorValue *, int)
+{
+  VectorValue VV;
+  if (values.size() != 3) {
+    cerr <<  "Specified vector does not have three components but " << values.size() << endl;
+    throw boost::program_options::validation_error("Specified vector does not have three components");
+  }
+  VV.x = boost::lexical_cast<double>(values.at(0));
+  VV.y = boost::lexical_cast<double>(values.at(1));
+  VV.z = boost::lexical_cast<double>(values.at(2));
+  v = boost::any(VectorValue(VV));
+}
+
+void validate(boost::any& v, const std::vector<std::string>& values, BoxValue *, int)
+{
+  BoxValue BV;
+  if (values.size() != 6) {
+    cerr <<  "Specified vector does not have three components but " << values.size() << endl;
+    throw boost::program_options::validation_error("Specified symmetric box matrix does not have six components");
+  }
+  BV.xx = boost::lexical_cast<double>(values.at(0));
+  BV.xy = boost::lexical_cast<double>(values.at(1));
+  BV.xz = boost::lexical_cast<double>(values.at(2));
+  BV.yy = boost::lexical_cast<double>(values.at(3));
+  BV.yz = boost::lexical_cast<double>(values.at(4));
+  BV.zz = boost::lexical_cast<double>(values.at(5));
+  v = boost::any(BoxValue(BV));
+}
+
 
 /** Constructor of class MapOfActions.
@@ -76,4 +112,5 @@
   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"] = "set of elements";
   DescriptionMap["end-mol"] = "last or end step";
@@ -133,6 +170,6 @@
   TypeMap["bond-table"] = String;
   TypeMap["boundary"] = Vector;
-  TypeMap["center-in-box"] = ListOfDoubles;
-  TypeMap["change-box"] = ListOfDoubles;
+  TypeMap["center-in-box"] = Box;
+  TypeMap["change-box"] = Box;
   TypeMap["change-element"] = Element;
   TypeMap["change-molname"] = String;
@@ -171,9 +208,10 @@
   TypeMap["bin-start"] = Double;
   TypeMap["distance"] = Double;
-  TypeMap["distances"] = ListOfDoubles;
+  TypeMap["distances"] = Vector;
+  TypeMap["DoRotate"] = Boolean;
   TypeMap["elements"] = Element;
   TypeMap["elements"] = ListOfElements;
   TypeMap["length"] = Double;
-  TypeMap["lengths"] = ListOfDoubles;
+  TypeMap["lengths"] = Vector;
   TypeMap["MaxDistance"] = Double;
   TypeMap["molecule-by-id"] = Molecule;
@@ -202,5 +240,5 @@
 //	generic.insert("element-db");
 //	generic.insert("fastparsing");
-//  generic.insert("fill-molecule");
+  generic.insert("fill-molecule");
 //  generic.insert("fragment-mol");
   generic.insert("help");
@@ -215,5 +253,5 @@
 //  generic.insert("remove-atom");
 //  generic.insert("remove-sphere");
-    generic.insert("repeat-box");
+  generic.insert("repeat-box");
 //  generic.insert("rotate-to-pas");
 //	generic.insert("save-adjacency");
@@ -238,7 +276,4 @@
     generic.insert("input");
 //  generic.insert("length");
-//  generic.insert("lengths");
-//  generic.insert("MaxDistance");
-//  generic.insert("molecule-by-id");
 //  generic.insert("output-file");
 //  generic.insert("periodic");
@@ -248,4 +283,12 @@
     // positional arguments
     inputfile.insert("input");
+
+    // hidden arguments
+//  generic.insert("distance");
+    generic.insert("DoRotate");
+    generic.insert("distances");
+    generic.insert("lengths");
+    generic.insert("MaxDistance");
+    generic.insert("molecule-by-id");
 }
 
@@ -284,4 +327,11 @@
               ;
             break;
+          case Box:
+            ListRunner->second->add_options()
+              (getKeyAndShortForm(*OptionRunner).c_str(),
+                  po::value<BoxValue>()->multitoken(),
+                  getDescription(*OptionRunner).c_str())
+              ;
+            break;
           case Integer:
             ListRunner->second->add_options()
@@ -337,12 +387,5 @@
             ListRunner->second->add_options()
               (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value< vector<double> >()->multitoken(),
-                  getDescription(*OptionRunner).c_str())
-              ;
-            break;
-          case Box:
-            ListRunner->second->add_options()
-              (getKeyAndShortForm(*OptionRunner).c_str(),
-                  po::value< vector<double> >(),
+                  po::value<VectorValue>()->multitoken(),
                   getDescription(*OptionRunner).c_str())
               ;
Index: src/Actions/Values.hpp
===================================================================
--- src/Actions/Values.hpp	(revision 0286bc68dfc4d223023e8fa98a68a958f8bc8a40)
+++ src/Actions/Values.hpp	(revision 0286bc68dfc4d223023e8fa98a68a958f8bc8a40)
@@ -0,0 +1,29 @@
+/*
+ * Values.hpp
+ *
+ *  Created on: Jun 7, 2010
+ *      Author: heber
+ */
+
+#ifndef VALUES_HPP_
+#define VALUES_HPP_
+
+struct VectorValue
+{
+  double x;
+  double y;
+  double z;
+};
+
+struct BoxValue
+{
+  double xx;
+  double xy;
+  double xz;
+  double yy;
+  double yz;
+  double zz;
+};
+
+
+#endif /* VALUES_HPP_ */
Index: src/UIElements/CommandLineUI/CommandLineDialog.cpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineDialog.cpp	(revision 3610bbd6dd22cef268eb768a7a49227356ab66d0)
+++ src/UIElements/CommandLineUI/CommandLineDialog.cpp	(revision 0286bc68dfc4d223023e8fa98a68a958f8bc8a40)
@@ -15,4 +15,6 @@
 #include <Descriptors/MoleculeIdDescriptor.hpp>
 #include "CommandLineUI/CommandLineDialog.hpp"
+
+#include "Actions/Values.hpp"
 
 #include "element.hpp"
@@ -116,24 +118,9 @@
 
 bool CommandLineDialog::BooleanCommandLineQuery::handle() {
-  bool badInput = false;
-  char input = ' ';
-  do{
-    badInput = false;
-    Log() << Verbose(0) << getTitle();
-    cin >> input;
-    if ((input == 'y' ) || (input == 'Y')) {
-      tmp = true;
-    } else if ((input == 'n' ) || (input == 'N')) {
-      tmp = false;
-    } else {
-      badInput=true;
-      cin.clear();
-      cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
-      Log() << Verbose(0) << "Input was not of [yYnN]!" << endl;
-    }
-  } while(badInput);
-  // clear the input buffer of anything still in the line
-  cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
-  return true;
+  if (CommandLineParser::getInstance().vm.count(getTitle())) {
+    tmp = CommandLineParser::getInstance().vm[getTitle()].as<bool>();
+    return true;
+  } else
+    return false;
 }
 
@@ -210,10 +197,10 @@
 
 bool CommandLineDialog::VectorCommandLineQuery::handle() {
-  vector<double> temp;
-  if (CommandLineParser::getInstance().vm.count(getTitle())) {
-    temp = CommandLineParser::getInstance().vm[getTitle()].as<vector<double> >();
-    assert((temp.size() == 3) && "Vector from command line does not have three components.");
-    for (int i=0;i<NDIM;i++)
-      tmp->at(i) = temp[i];
+  VectorValue temp;
+  if (CommandLineParser::getInstance().vm.count(getTitle())) {
+    temp = CommandLineParser::getInstance().vm[getTitle()].as< VectorValue >();
+    tmp->at(0) = temp.x;
+    tmp->at(1) = temp.y;
+    tmp->at(2) = temp.z;
     return true;
   } else
@@ -230,11 +217,13 @@
 
 bool CommandLineDialog::BoxCommandLineQuery::handle() {
-  vector<double> temp;
-  if (CommandLineParser::getInstance().vm.count(getTitle())) {
-    temp = CommandLineParser::getInstance().vm[getTitle()].as<vector<double> >();
-    assert((temp.size() == 6) && "Symmetric box matrix from command line does not have six components.");
-    for (int i=0;i<6;i++) {
-      tmp[i] = temp[i];
-    }
+  BoxValue temp;
+  if (CommandLineParser::getInstance().vm.count(getTitle())) {
+    temp = CommandLineParser::getInstance().vm[getTitle()].as< BoxValue >();
+    tmp[0] = temp.xx;
+    tmp[1] = temp.xy;
+    tmp[2] = temp.xz;
+    tmp[3] = temp.yy;
+    tmp[4] = temp.yz;
+    tmp[5] = temp.zz;
     return true;
   } else
