Index: src/Actions/MapOfActions.cpp
===================================================================
--- src/Actions/MapOfActions.cpp	(revision edb454f225715c8d558cd5602a7e4cca50e48a72)
+++ src/Actions/MapOfActions.cpp	(revision cd8e55e569af57209f37ce90b3bf55ed71ad6d52)
@@ -198,4 +198,5 @@
   ShortFormMap["linear-interpolate"] = "L";
   ShortFormMap["nonconvex-envelope"] = "N";
+//  ShortFormMap["output"] = "o";
   ShortFormMap["pair-correlation"] = "C";
   ShortFormMap["parse-xyz"] = "p";
@@ -236,5 +237,5 @@
   TypeMap["molecular-volume"] = Molecule;
   TypeMap["nonconvex-envelope"] = Molecule;
-  TypeMap["output"] = String;
+  TypeMap["output"] = ListOfString;
   TypeMap["parse-xyz"] = String;
   TypeMap["pair-correlation"] = String;
@@ -559,4 +560,11 @@
               ;
             break;
+          case ListOfString:
+            ListRunner->second->add_options()
+              (getKeyAndShortForm(*OptionRunner).c_str(),
+                  po::value< vector<std::string> >()->multitoken(),
+                  getDescription(*OptionRunner).c_str())
+              ;
+            break;
           case Axis:
             ListRunner->second->add_options()
Index: src/Actions/MapOfActions.hpp
===================================================================
--- src/Actions/MapOfActions.hpp	(revision edb454f225715c8d558cd5602a7e4cca50e48a72)
+++ src/Actions/MapOfActions.hpp	(revision cd8e55e569af57209f37ce90b3bf55ed71ad6d52)
@@ -123,5 +123,5 @@
   friend class MapOfActionsTest;
 public:
-  enum OptionTypes { None, Boolean, Integer, ListOfInts, Double, ListOfDoubles, String, Axis, Vector, Box, Molecule, ListOfMolecules, Atom, ListOfAtoms, Element, ListOfElements };
+  enum OptionTypes { None, Boolean, Integer, ListOfInts, Double, ListOfDoubles, String, ListOfString, Axis, Vector, Box, Molecule, ListOfMolecules, Atom, ListOfAtoms, Element, ListOfElements };
 
   // getter for the action descriptions and short forms
Index: src/UIElements/CommandLineUI/CommandLineDialog.cpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineDialog.cpp	(revision edb454f225715c8d558cd5602a7e4cca50e48a72)
+++ src/UIElements/CommandLineUI/CommandLineDialog.cpp	(revision cd8e55e569af57209f37ce90b3bf55ed71ad6d52)
@@ -65,4 +65,8 @@
 }
 
+void CommandLineDialog::queryStrings(const char* title, vector<string> * target, string _description){
+  registerQuery(new StringsCommandLineQuery(title,target, _description));
+}
+
 void CommandLineDialog::queryAtom(const char* title, atom **target, string _description) {
   registerQuery(new AtomCommandLineQuery(title,target, _description));
@@ -139,4 +143,30 @@
   if (CommandLineParser::getInstance().vm.count(getTitle())) {
     tmp = CommandLineParser::getInstance().vm[getTitle()].as<string>();
+    return true;
+  } else {
+    DoeLog(1) && (eLog() << Verbose(1) << "CommandLineUI parsing error: Missing string for " << getTitle() << "." << endl);
+    return false;
+  }
+}
+
+CommandLineDialog::StringsCommandLineQuery::StringsCommandLineQuery(string title,vector<string> *_target, string _description) :
+    Dialog::StringsQuery(title,_target, _description)
+{}
+
+CommandLineDialog::StringsCommandLineQuery::~StringsCommandLineQuery() {}
+
+bool CommandLineDialog::StringsCommandLineQuery::handle() {
+  if (CommandLineParser::getInstance().vm.count(getTitle())) {
+    temp = CommandLineParser::getInstance().vm[getTitle()].as<string>();
+    // dissect by ","
+    string::iterator olditer = temp.begin();
+    for(string::iterator iter = temp.begin(); iter != temp.end(); ++iter) {
+      if (*iter == ' ') {
+        tmp.push_back(string(iter, olditer));
+        olditer = iter;
+      }
+    }
+    if (olditer != temp.begin())  // insert last part also
+      tmp.push_back(string(olditer, temp.end()));
     return true;
   } else {
Index: src/UIElements/CommandLineUI/CommandLineDialog.hpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineDialog.hpp	(revision edb454f225715c8d558cd5602a7e4cca50e48a72)
+++ src/UIElements/CommandLineUI/CommandLineDialog.hpp	(revision cd8e55e569af57209f37ce90b3bf55ed71ad6d52)
@@ -31,4 +31,5 @@
   virtual void queryBoolean(const char *, bool *, std::string = "");
   virtual void queryString(const char*, std::string *, std::string = "");
+  virtual void queryStrings(const char*, std::vector<std::string> *, std::string = "");
   virtual void queryDouble(const char*, double*, std::string = "");
   virtual void queryAtom(const char*,atom**, std::string = "");
@@ -75,4 +76,11 @@
   };
 
+  class StringsCommandLineQuery : public Dialog::StringsQuery {
+  public:
+    StringsCommandLineQuery(std::string title, std::vector<std::string> *_target, std::string _description = "");
+    virtual ~StringsCommandLineQuery();
+    virtual bool handle();
+  };
+
   class AtomCommandLineQuery : public Dialog::AtomQuery {
   public:
Index: src/UIElements/Dialog.cpp
===================================================================
--- src/UIElements/Dialog.cpp	(revision edb454f225715c8d558cd5602a7e4cca50e48a72)
+++ src/UIElements/Dialog.cpp	(revision cd8e55e569af57209f37ce90b3bf55ed71ad6d52)
@@ -128,4 +128,16 @@
 }
 
+// Strings Queries
+
+Dialog::StringsQuery::StringsQuery(string title,vector<string> *_target, std::string _description) :
+    Query(title, _description), target(_target)
+{}
+
+Dialog::StringsQuery::~StringsQuery() {};
+
+void Dialog::StringsQuery::setResult() {
+  *target = tmp;
+}
+
 // Double Queries
 
Index: src/UIElements/Dialog.hpp
===================================================================
--- src/UIElements/Dialog.hpp	(revision edb454f225715c8d558cd5602a7e4cca50e48a72)
+++ src/UIElements/Dialog.hpp	(revision cd8e55e569af57209f37ce90b3bf55ed71ad6d52)
@@ -40,4 +40,5 @@
   virtual void queryDouble(const char*,double *, std::string = "")=0;
   virtual void queryString(const char*, std::string *, std::string = "")=0;
+  virtual void queryStrings(const char*, std::vector<std::string> *, std::string = "")=0;
   virtual void queryAtom(const char*,atom**,std::string = "")=0;
   virtual void queryMolecule(const char*,molecule**, std::string = "")=0;
@@ -134,4 +135,17 @@
   private:
     std::string *target;
+  };
+
+  class StringsQuery : public Query {
+  public:
+    StringsQuery(std::string title,std::vector<std::string> *_target, std::string _description = "");
+    virtual ~StringsQuery();
+    virtual bool handle()=0;
+    virtual void setResult();
+  protected:
+    std::string temp;
+    std::vector<std::string> tmp;
+  private:
+    std::vector<std::string> *target;
   };
 
Index: src/UIElements/QT4/QTDialog.cpp
===================================================================
--- src/UIElements/QT4/QTDialog.cpp	(revision edb454f225715c8d558cd5602a7e4cca50e48a72)
+++ src/UIElements/QT4/QTDialog.cpp	(revision cd8e55e569af57209f37ce90b3bf55ed71ad6d52)
@@ -113,4 +113,9 @@
 }
 
+void QTDialog::queryStrings(const char* title, std::vector<std::string> *target,string)
+{
+  registerQuery(new StringsQTQuery(title,target,inputLayout,this));
+}
+
 void QTDialog::queryMolecule(const char *title,molecule **target,string)
 {
@@ -210,4 +215,42 @@
 {
   return tmp!="";
+}
+
+QTDialog::StringsQTQuery::StringsQTQuery(string _title,vector<string> *_target,QBoxLayout *_parent,QTDialog *_dialog) :
+    Dialog::StringsQuery(_title,_target),
+    parent(_parent)
+{
+  thisLayout = new QHBoxLayout();
+  titleLabel = new QLabel(QString(getTitle().c_str()));
+  inputBox = new QLineEdit();
+  parent->addLayout(thisLayout);
+  thisLayout->addWidget(titleLabel);
+  thisLayout->addWidget(inputBox);
+
+  pipe = new StringQTQueryPipe(&temp,_dialog);
+  pipe->update(inputBox->text());
+  connect(inputBox,SIGNAL(textChanged(const QString&)),pipe,SLOT(update(const QString&)));
+}
+
+QTDialog::StringsQTQuery::~StringsQTQuery()
+{
+  delete pipe;
+}
+
+// All values besides the empty string are valid
+bool QTDialog::StringsQTQuery::handle()
+{
+  // dissect by ","
+  string::iterator olditer = temp.begin();
+  for(string::iterator iter = temp.begin(); iter != temp.end(); ++iter) {
+    if (*iter == ' ') {
+      tmp.push_back(string(iter, olditer));
+      olditer = iter;
+    }
+  }
+  if (olditer != temp.begin())  // insert last part also
+    tmp.push_back(string(olditer, temp.end()));
+
+  return temp!="";
 }
 
Index: src/UIElements/QT4/QTDialog.hpp
===================================================================
--- src/UIElements/QT4/QTDialog.hpp	(revision edb454f225715c8d558cd5602a7e4cca50e48a72)
+++ src/UIElements/QT4/QTDialog.hpp	(revision cd8e55e569af57209f37ce90b3bf55ed71ad6d52)
@@ -40,4 +40,5 @@
   virtual void queryDouble(const char*,double *,std::string = "");
   virtual void queryString(const char*, std::string *,std::string = "");
+  virtual void queryStrings(const char*, std::vector<std::string> *,std::string = "");
   virtual void queryAtom(const char*,atom**,std::string = "");
   virtual void queryMolecule(const char*,molecule**,std::string = "");
@@ -93,4 +94,18 @@
     };
 
+    class StringsQTQuery : public Dialog::StringsQuery {
+    public:
+      StringsQTQuery(std::string _title, std::vector<std::string> *_target, QBoxLayout *_parent,QTDialog *_dialog);
+      virtual ~StringsQTQuery();
+      virtual bool handle();
+    private:
+      QBoxLayout *parent;
+      QBoxLayout *thisLayout;
+      QLabel *titleLabel;
+      QLineEdit *inputBox;
+
+      StringQTQueryPipe *pipe;
+    };
+
     class MoleculeQTQuery : public Dialog::MoleculeQuery {
     public:
Index: src/UIElements/TextUI/TextDialog.cpp
===================================================================
--- src/UIElements/TextUI/TextDialog.cpp	(revision edb454f225715c8d558cd5602a7e4cca50e48a72)
+++ src/UIElements/TextUI/TextDialog.cpp	(revision cd8e55e569af57209f37ce90b3bf55ed71ad6d52)
@@ -56,4 +56,8 @@
 void TextDialog::queryString(const char* title, string* target, string description){
   registerQuery(new StringTextQuery(title,target,description));
+}
+
+void TextDialog::queryStrings(const char* title, vector<string>* target, string description){
+  registerQuery(new StringsTextQuery(title,target,description));
 }
 
@@ -153,4 +157,27 @@
   Log() << Verbose(0) << getTitle();
   getline(cin,tmp);
+  return true;
+}
+
+TextDialog::StringsTextQuery::StringsTextQuery(string title,vector<string> *_target, std::string _description) :
+    Dialog::StringsQuery(title,_target,_description)
+{}
+
+TextDialog::StringsTextQuery::~StringsTextQuery() {}
+
+bool TextDialog::StringsTextQuery::handle() {
+  Log() << Verbose(0) << getTitle();
+  getline(cin,temp);
+  // dissect by ","
+  string::iterator olditer = temp.begin();
+  for(string::iterator iter = temp.begin(); iter != temp.end(); ++iter) {
+    if (*iter == ' ') {
+      tmp.push_back(string(iter, olditer));
+      olditer = iter;
+    }
+  }
+  if (olditer != temp.begin())  // insert last part also
+    tmp.push_back(string(olditer, temp.end()));
+
   return true;
 }
Index: src/UIElements/TextUI/TextDialog.hpp
===================================================================
--- src/UIElements/TextUI/TextDialog.hpp	(revision edb454f225715c8d558cd5602a7e4cca50e48a72)
+++ src/UIElements/TextUI/TextDialog.hpp	(revision cd8e55e569af57209f37ce90b3bf55ed71ad6d52)
@@ -28,4 +28,5 @@
   virtual void queryInt(const char *, int *, std::string = "");
   virtual void queryString(const char*, std::string *, std::string = "");
+  virtual void queryStrings(const char*, std::vector<std::string> *, std::string = "");
   virtual void queryDouble(const char*, double*, std::string = "");
   virtual void queryAtom(const char*,atom**,std::string = "");
@@ -72,4 +73,11 @@
   };
 
+  class StringsTextQuery : public Dialog::StringsQuery {
+  public:
+    StringsTextQuery(std::string title, std::vector<std::string> *_target, std::string _description = NULL);
+    virtual ~StringsTextQuery();
+    virtual bool handle();
+  };
+
   class AtomTextQuery : public Dialog::AtomQuery {
   public:
