Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision efc3cb9ffa0e3dc29c97a339e0879a611a41bf3f)
+++ src/Makefile.am	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -124,4 +124,5 @@
 UISOURCE = \
   ${ACTIONSSOURCE} \
+  ${COMMANDLINEUISOURCE} \
   ${MENUSOURCE} \
   ${TEXTUISOURCE} \
@@ -133,4 +134,5 @@
 UIHEADER = \
   ${ACTIONSHEADER} \
+  ${COMMANDLINEUIHEADER} \
   ${MENUHEADER} \
   ${TEXTUIHEADER} \
@@ -150,4 +152,15 @@
   UIElements/TextUIFactory.hpp \
   UIElements/TextWindow.hpp
+
+COMMANDLINEUISOURCE = \
+  UIElements/CommandLineDialog.cpp \
+  UIElements/CommandLineStatusIndicator.cpp \
+  UIElements/CommandLineUIFactory.cpp \
+  UIElements/CommandLineWindow.cpp
+COMMANDLINEUIHEADER = \
+  UIElements/CommandLineDialog.hpp \
+  UIElements/CommandLineStatusIndicator.hpp \
+  UIElements/CommandLineUIFactory.hpp \
+  UIElements/CommandLineWindow.hpp
 
 # all these files are only used for legacy reasons while the transition is in progress
Index: src/UIElements/CommandLineDialog.cpp
===================================================================
--- src/UIElements/CommandLineDialog.cpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
+++ src/UIElements/CommandLineDialog.cpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -0,0 +1,233 @@
+/*
+ * CommandLineDialog.cpp
+ *
+ *  Created on: May 8, 2010
+ *      Author: heber
+ */
+
+
+#include <iostream>
+
+#include "UIElements/CommandLineDialog.hpp"
+
+#include "World.hpp"
+#include "periodentafel.hpp"
+#include "atom.hpp"
+#include "molecule.hpp"
+#include "log.hpp"
+#include "verbose.hpp"
+
+using namespace std;
+
+
+CommandLineDialog::CommandLineDialog()
+{
+}
+
+CommandLineDialog::~CommandLineDialog()
+{
+}
+
+
+void CommandLineDialog::queryInt(const char* title, int* target){
+  registerQuery(new IntTextQuery(title,target));
+}
+
+void CommandLineDialog::queryDouble(const char* title, double* target){
+  registerQuery(new DoubleTextQuery(title,target));
+}
+
+void CommandLineDialog::queryString(const char* title, string* target){
+  registerQuery(new StringTextQuery(title,target));
+}
+
+void CommandLineDialog::queryMolecule(const char* title, molecule **target, MoleculeListClass *molecules) {
+  registerQuery(new MoleculeTextQuery(title,target,molecules));
+}
+
+void CommandLineDialog::queryVector(const char* title, Vector *target,const double *const cellSize, bool check) {
+  registerQuery(new VectorTextQuery(title,target,cellSize,check));
+}
+
+void CommandLineDialog::queryElement(const char* title, const element **target){
+  registerQuery(new ElementTextQuery(title,target));
+}
+
+/************************** Query Infrastructure ************************/
+
+CommandLineDialog::IntTextQuery::IntTextQuery(string title,int *_target) :
+    Dialog::IntQuery(title,_target)
+{}
+
+CommandLineDialog::IntTextQuery::~IntTextQuery() {}
+
+bool CommandLineDialog::IntTextQuery::handle() {
+  bool badInput = false;
+  do{
+    badInput = false;
+    Log() << Verbose(0) << getTitle();
+    cin >> tmp;
+    if(cin.fail()){
+      badInput=true;
+      cin.clear();
+      cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
+      Log() << Verbose(0) << "Input was not a number!" << endl;
+    }
+  } while(badInput);
+  // clear the input buffer of anything still in the line
+  cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
+  return true;
+}
+
+CommandLineDialog::StringTextQuery::StringTextQuery(string title,string *_target) :
+    Dialog::StringQuery(title,_target)
+{}
+
+CommandLineDialog::StringTextQuery::~StringTextQuery() {}
+
+bool CommandLineDialog::StringTextQuery::handle() {
+  Log() << Verbose(0) << getTitle();
+  getline(cin,tmp);
+  return true;
+}
+
+CommandLineDialog::DoubleTextQuery::DoubleTextQuery(string title,double *_target) :
+    Dialog::DoubleQuery(title,_target)
+{}
+
+CommandLineDialog::DoubleTextQuery::~DoubleTextQuery() {}
+
+bool CommandLineDialog::DoubleTextQuery::handle() {
+  bool badInput = false;
+  do{
+    badInput = false;
+    Log() << Verbose(0) << getTitle();
+    cin >> tmp;
+    if(cin.fail()){
+      badInput = true;
+      cin.clear();
+      cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
+      Log() << Verbose(0) << "Input was not a number!" << endl;
+    }
+  }while(badInput);
+  cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
+  return true;
+}
+
+CommandLineDialog::MoleculeTextQuery::MoleculeTextQuery(string title, molecule **_target, MoleculeListClass *_molecules) :
+    Dialog::MoleculeQuery(title,_target,_molecules)
+{}
+
+CommandLineDialog::MoleculeTextQuery::~MoleculeTextQuery() {}
+
+bool CommandLineDialog::MoleculeTextQuery::handle() {
+  int idxOfMol=0;
+  bool badInput = false;
+  do{
+    badInput = false;
+    Log() << Verbose(0) << getTitle();
+    cin >> idxOfMol;
+    if(cin.fail()){
+      badInput = true;
+      cin.clear();
+      cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
+      Log() << Verbose(0) << "Input was not a number!" << endl;
+      continue;
+    }
+
+    tmp = molecules->ReturnIndex(idxOfMol);
+    if(!tmp && idxOfMol!=-1){
+      Log() << Verbose(0) << "Invalid Molecule Index" << endl;
+      badInput = true;
+    }
+
+  } while(badInput);
+  cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
+  return (idxOfMol!=-1);
+}
+
+CommandLineDialog::VectorTextQuery::VectorTextQuery(std::string title, Vector *_target, const double *const _cellSize, bool _check) :
+    Dialog::VectorQuery(title,_target,_cellSize,_check)
+{}
+
+CommandLineDialog::VectorTextQuery::~VectorTextQuery()
+{}
+
+bool CommandLineDialog::VectorTextQuery::handle() {
+  Log() << Verbose(0) << getTitle();
+
+  char coords[3] = {'x','y','z'};
+  int j = -1;
+  for (int i=0;i<3;i++) {
+    j += i+1;
+    do {
+      Log() << Verbose(0) << coords[i] << "[0.." << cellSize[j] << "]: ";
+      cin >> (*tmp)[i];
+    } while ((((*tmp)[i] < 0) || ((*tmp)[i] >= cellSize[j])) && (check));
+  }
+  return true;
+}
+
+
+CommandLineDialog::ElementTextQuery::ElementTextQuery(std::string title, const element **target) :
+    Dialog::ElementQuery(title,target)
+{}
+
+CommandLineDialog::ElementTextQuery::~ElementTextQuery()
+{}
+
+bool CommandLineDialog::ElementTextQuery::handle() {
+  bool badInput=false;
+  bool aborted = false;
+  do{
+    badInput = false;
+    Log() << Verbose(0) << getTitle();
+
+    // try to read as Atomic number
+    int Z;
+    cin >> Z;
+    if(!cin.fail()){
+      if(Z==-1){
+        aborted = true;
+      }
+      else{
+        tmp = World::getInstance().getPeriode()->FindElement(Z);
+        if(!tmp){
+          Log() << Verbose(0) << "No element with this atomic number!" << endl;
+          badInput = true;
+        }
+      }
+      continue;
+    }
+    else{
+      cin.clear();
+    }
+
+    // Try to read as shorthand
+    // the last buffer content was not removed, so we read the
+    // same thing again, this time as a string
+    string shorthand;
+    cin >> shorthand;
+    if(!cin.fail()){
+      if(shorthand.empty()){
+        aborted = true;
+      }
+      else{
+        tmp = World::getInstance().getPeriode()->FindElement(shorthand.c_str());
+        if(!tmp){
+          Log() << Verbose(0) << "No element with this shorthand!" << endl;
+          badInput = true;
+        }
+      }
+    }
+    else{
+      Log() << Verbose(0) << "Could not read input. Try Again." << endl;
+      cin.clear();
+      cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
+      badInput = true;
+    }
+
+  }while(badInput);
+  cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
+  return !aborted;
+}
Index: src/UIElements/CommandLineDialog.hpp
===================================================================
--- src/UIElements/CommandLineDialog.hpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
+++ src/UIElements/CommandLineDialog.hpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -0,0 +1,76 @@
+/*
+ * CommandLineDialog.hpp
+ *
+ *  Created on: May 8, 2010
+ *      Author: heber
+ */
+
+#ifndef COMMANDLINEDIALOG_HPP_
+#define COMMANDLINEDIALOG_HPP_
+
+#include <string>
+
+#include "UIElements/Dialog.hpp"
+
+/** CommandLineUIFactory implementation of the Dialog.
+ * The idea here is that for each query the parsed command line options are used instead.
+ */
+class CommandLineDialog : public Dialog
+{
+public:
+  CommandLineDialog();
+  virtual ~CommandLineDialog();
+
+  virtual void queryInt(const char *, int *);
+  virtual void queryString(const char*, std::string *);
+  virtual void queryDouble(const char*, double*);
+  virtual void queryMolecule(const char*,molecule**,MoleculeListClass*);
+  virtual void queryVector(const char*,Vector *,const double * const,bool);
+  virtual void queryElement(const char*,const element **);
+
+protected:
+  // specialized stuff for text queries
+  class IntTextQuery : public Dialog::IntQuery {
+  public:
+    IntTextQuery(std::string title, int *_target);
+    virtual ~IntTextQuery();
+    virtual bool handle();
+  };
+
+  class DoubleTextQuery : public Dialog::DoubleQuery {
+  public:
+    DoubleTextQuery(std::string title, double *_target);
+    virtual ~DoubleTextQuery();
+    virtual bool handle();
+  };
+
+  class StringTextQuery : public Dialog::StringQuery {
+  public:
+    StringTextQuery(std::string title, std::string *_target);
+    virtual ~StringTextQuery();
+    virtual bool handle();
+  };
+
+  class MoleculeTextQuery : public Dialog::MoleculeQuery {
+  public:
+    MoleculeTextQuery(std::string title, molecule **_target, MoleculeListClass *_molecules);
+    virtual ~MoleculeTextQuery();
+    virtual bool handle();
+  };
+
+  class VectorTextQuery : public Dialog::VectorQuery {
+  public:
+    VectorTextQuery(std::string title,Vector *_target,const double *const _cellSize,bool _check);
+    virtual ~VectorTextQuery();
+    virtual bool handle();
+  };
+
+  class ElementTextQuery : public Dialog::ElementQuery {
+  public:
+    ElementTextQuery(std::string title, const element **_target);
+    virtual ~ElementTextQuery();
+    virtual bool handle();
+  };
+};
+
+#endif /* COMMANDLINEDIALOG_HPP_ */
Index: src/UIElements/CommandLineStatusIndicator.cpp
===================================================================
--- src/UIElements/CommandLineStatusIndicator.cpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
+++ src/UIElements/CommandLineStatusIndicator.cpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -0,0 +1,57 @@
+/*
+ * CommandLineStatusIndicator.cpp
+ *
+ *  Created on: May 8, 2010
+ *      Author: heber
+ */
+
+
+#include "CommandLineStatusIndicator.hpp"
+
+#include <iostream>
+
+#include "Actions/Process.hpp"
+
+using namespace std;
+
+CommandLineStatusIndicator::CommandLineStatusIndicator()
+{
+  Process::AddObserver(this);
+}
+
+CommandLineStatusIndicator::~CommandLineStatusIndicator()
+{
+  Process::RemoveObserver(this);
+}
+
+void CommandLineStatusIndicator::update(Observable *subject){
+  Process *proc;
+  // we are only observing Processes
+  if((proc=dynamic_cast<Process*>(subject))){
+    // see what kind of progress we have to display
+    if(proc->getMaxSteps()>0){
+      if(!proc->doesStop()){
+        cout << "Busy (" << proc->getName() << ") ";
+        // we can show a percentage done
+        cout << (int)proc->getDoneRatio() << "% done" << endl;
+      }
+    }
+    else{
+      // we only show some kind of busy animation
+      if(proc->doesStart()){
+        cout << "Busy (" << proc->getName() << ")";
+      }
+      if(!proc->doesStop()){
+        cout << ".";
+      }
+      else {
+        cout << endl;
+      }
+    }
+  }
+}
+
+void CommandLineStatusIndicator::subjectKilled(Observable *subject){
+
+}
+
Index: src/UIElements/CommandLineStatusIndicator.hpp
===================================================================
--- src/UIElements/CommandLineStatusIndicator.hpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
+++ src/UIElements/CommandLineStatusIndicator.hpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -0,0 +1,26 @@
+/*
+ * CommandLineStatusIndicator.hpp
+ *
+ *  Created on: May 8, 2010
+ *      Author: heber
+ */
+
+#ifndef COMMANDLINESTATUSINDICATOR_HPP_
+#define COMMANDLINESTATUSINDICATOR_HPP_
+
+#include "Patterns/Observer.hpp"
+
+class CommandLineStatusIndicator : public Observer
+{
+public:
+  CommandLineStatusIndicator();
+  virtual ~CommandLineStatusIndicator();
+
+  void update(Observable *subject);
+  void subjectKilled(Observable *subject);
+
+private:
+
+};
+
+#endif /* COMMANDLINESTATUSINDICATOR_HPP_ */
Index: src/UIElements/CommandLineUIFactory.cpp
===================================================================
--- src/UIElements/CommandLineUIFactory.cpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
+++ src/UIElements/CommandLineUIFactory.cpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -0,0 +1,32 @@
+/*
+ * CommandLineUIFactory.cpp
+ *
+ *  Created on: May 8, 2010
+ *      Author: heber
+ */
+
+
+#include "UIElements/CommandLineUIFactory.hpp"
+#include "UIElements/CommandLineWindow.hpp"
+#include "UIElements/CommandLineDialog.hpp"
+
+
+CommandLineUIFactory::CommandLineUIFactory()
+{
+  // TODO Auto-generated constructor stub
+
+}
+
+CommandLineUIFactory::~CommandLineUIFactory()
+{
+  // TODO Auto-generated destructor stub
+}
+
+
+Dialog* CommandLineUIFactory::makeDialog() {
+  return NULL;
+}
+
+MainWindow* CommandLineUIFactory::makeMainWindow(menuPopulaters populaters,MoleculeListClass *molecules, config *configuration, periodentafel *periode, char *ConfigFileName) {
+  return new CommandLineWindow(populaters,molecules,configuration,periode,ConfigFileName);
+}
Index: src/UIElements/CommandLineUIFactory.hpp
===================================================================
--- src/UIElements/CommandLineUIFactory.hpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
+++ src/UIElements/CommandLineUIFactory.hpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -0,0 +1,28 @@
+/*
+ * CommandLineUIFactory.hpp
+ *
+ *  Created on: May 8, 2010
+ *      Author: heber
+ */
+
+#ifndef COMMANDLINEUIFACTORY_HPP_
+#define COMMANDLINEUIFACTORY_HPP_
+
+#include "UIElements/UIFactory.hpp"
+
+class CommandLineUIFactory : public UIFactory
+{
+friend class UIFactory;
+
+public:
+  virtual ~CommandLineUIFactory();
+
+  virtual Dialog* makeDialog();
+  virtual MainWindow* makeMainWindow(menuPopulaters,MoleculeListClass *, config *, periodentafel *, char *);
+
+protected:
+  CommandLineUIFactory();
+};
+
+
+#endif /* COMMANDLINEUIFACTORY_HPP_ */
Index: src/UIElements/CommandLineWindow.cpp
===================================================================
--- src/UIElements/CommandLineWindow.cpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
+++ src/UIElements/CommandLineWindow.cpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -0,0 +1,32 @@
+/*
+ * CommandLineWindow.cpp
+ *
+ *  Created on: May 8, 2010
+ *      Author: heber
+ */
+
+#include <boost/bind.hpp>
+
+#include "UIElements/CommandLineWindow.hpp"
+#include "UIElements/CommandLineStatusIndicator.hpp"
+
+#include <iostream>
+
+using namespace std;
+
+// TODO: see what code can be moved to a base class for Graphic and CommandLine Windows
+CommandLineWindow::CommandLineWindow(menuPopulaters populaters,MoleculeListClass *molecules, config *configuration, periodentafel *periode, char *ConfigFileName)
+{
+
+  // Add status indicators etc...
+
+  statusIndicator = new CommandLineStatusIndicator();
+}
+
+CommandLineWindow::~CommandLineWindow()
+{
+  delete statusIndicator;
+}
+
+void CommandLineWindow::display() {
+}
Index: src/UIElements/CommandLineWindow.hpp
===================================================================
--- src/UIElements/CommandLineWindow.hpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
+++ src/UIElements/CommandLineWindow.hpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -0,0 +1,29 @@
+/*
+ * CommandLineWindow.hpp
+ *
+ *  Created on: May 8, 2010
+ *      Author: heber
+ */
+
+#ifndef COMMANDLINEWINDOW_HPP_
+#define COMMANDLINEWINDOW_HPP_
+
+#include "UIElements/MainWindow.hpp"
+
+class CommandLineStatusIndicator;
+
+class CommandLineWindow : public MainWindow
+{
+public:
+  CommandLineWindow(menuPopulaters,MoleculeListClass *, config *, periodentafel *, char *);
+  virtual ~CommandLineWindow();
+
+  virtual void display();
+
+private:
+
+  CommandLineStatusIndicator *statusIndicator;
+
+};
+
+#endif /* COMMANDLINEWINDOW_HPP_ */
Index: src/UIElements/Dialog.cpp
===================================================================
--- src/UIElements/Dialog.cpp	(revision efc3cb9ffa0e3dc29c97a339e0879a611a41bf3f)
+++ src/UIElements/Dialog.cpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -51,6 +51,7 @@
 
 // Base class
-Dialog::Query::Query(string _title) :
-    title(_title)
+Dialog::Query::Query(string _title, string _description) :
+    title(_title),
+    description(_description)
 {}
 
@@ -61,8 +62,11 @@
 }
 
+const std::string Dialog::Query::getDescription() const{
+  return description;
+}
 // Int Queries
 
-Dialog::IntQuery::IntQuery(string title,int *_target) :
-    Query(title), target(_target)
+Dialog::IntQuery::IntQuery(string title,int *_target, std::string description) :
+    Query(title, description), target(_target)
 {}
 
@@ -75,6 +79,6 @@
 // String Queries
 
-Dialog::StringQuery::StringQuery(string title,string *_target) :
-    Query(title), target(_target)
+Dialog::StringQuery::StringQuery(string title,string *_target, std::string _description) :
+    Query(title, _description), target(_target)
 {}
 
@@ -87,6 +91,6 @@
 // Double Queries
 
-Dialog::DoubleQuery::DoubleQuery(string title,double *_target) :
-    Query(title), target(_target)
+Dialog::DoubleQuery::DoubleQuery(string title,double *_target, std::string _description) :
+    Query(title, _description), target(_target)
 {}
 
@@ -100,6 +104,6 @@
 // Molecule Queries
 
-Dialog::MoleculeQuery::MoleculeQuery(string title, molecule **_target, MoleculeListClass *_molecules) :
-    Query(title),
+Dialog::MoleculeQuery::MoleculeQuery(string title, molecule **_target, MoleculeListClass *_molecules, std::string _description) :
+    Query(title, _description),
     tmp(0),
     molecules(_molecules),
@@ -116,6 +120,6 @@
 // Vector Queries
 
-Dialog::VectorQuery::VectorQuery(std::string title,Vector *_target,const double *const _cellSize,bool _check) :
-  Query(title),
+Dialog::VectorQuery::VectorQuery(std::string title,Vector *_target,const double *const _cellSize,bool _check, std::string _description) :
+  Query(title, _description),
   cellSize(_cellSize),
   check(_check),
@@ -135,6 +139,6 @@
 
 // Element Queries
-Dialog::ElementQuery::ElementQuery(std::string title, const element **_target) :
-  Query(title),
+Dialog::ElementQuery::ElementQuery(std::string title, const element **_target, std::string _description) :
+  Query(title, _description),
   tmp(0),
   target(_target)
Index: src/UIElements/Dialog.hpp
===================================================================
--- src/UIElements/Dialog.hpp	(revision efc3cb9ffa0e3dc29c97a339e0879a611a41bf3f)
+++ src/UIElements/Dialog.hpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -23,10 +23,10 @@
   virtual ~Dialog();
 
-  virtual void queryInt(const char *, int *)=0;
-  virtual void queryDouble(const char*,double *)=0;
-  virtual void queryString(const char*, std::string *)=0;
-  virtual void queryMolecule(const char*,molecule**,MoleculeListClass*)=0;
-  virtual void queryVector(const char*,Vector *,const double *const,bool)=0;
-  virtual void queryElement(const char*,const element **)=0;
+  virtual void queryInt(const char *, int *, std::string = "")=0;
+  virtual void queryDouble(const char*,double *, std::string = "")=0;
+  virtual void queryString(const char*, std::string *, std::string = "")=0;
+  virtual void queryMolecule(const char*,molecule**,MoleculeListClass*, std::string = "")=0;
+  virtual void queryVector(const char*,Vector *,const double *const,bool, std::string = "")=0;
+  virtual void queryElement(const char*,const element **, std::string = "")=0;
 
   virtual bool display();
@@ -46,5 +46,5 @@
   class Query {
   public:
-    Query(std::string _title);
+    Query(std::string _title, std::string _description = "");
     virtual ~Query();
     virtual bool handle()=0;
@@ -52,6 +52,8 @@
   protected:
     const std::string getTitle() const;
+    const std::string getDescription() const;
   private:
-    std::string title;
+    std::string title;  //!< short title of the query
+    std::string description; //!< longer description for tooltips or for help
   };
 
@@ -59,5 +61,5 @@
   class IntQuery : public Query {
   public:
-    IntQuery(std::string title,int *_target);
+    IntQuery(std::string title,int *_target, std::string _description = "");
     virtual ~IntQuery();
     virtual bool handle()=0;
@@ -71,5 +73,5 @@
   class DoubleQuery : public Query {
   public:
-    DoubleQuery(std::string title,double *_target);
+    DoubleQuery(std::string title,double *_target, std::string _description = "");
     virtual ~DoubleQuery();
     virtual bool handle()=0;
@@ -83,5 +85,5 @@
   class StringQuery : public Query {
   public:
-    StringQuery(std::string title,std::string *_target);
+    StringQuery(std::string title,std::string *_target, std::string _description = "");
     virtual ~StringQuery();
     virtual bool handle()=0;
@@ -96,5 +98,5 @@
   class MoleculeQuery : public Query {
   public:
-    MoleculeQuery(std::string title, molecule **_target, MoleculeListClass *_molecules);
+    MoleculeQuery(std::string title, molecule **_target, MoleculeListClass *_molecules, std::string _description = "");
     virtual ~MoleculeQuery();
     virtual bool handle()=0;
@@ -109,5 +111,5 @@
   class VectorQuery : public Query {
   public:
-      VectorQuery(std::string title,Vector *_target,const double *const _cellSize,bool _check);
+      VectorQuery(std::string title,Vector *_target,const double *const _cellSize,bool _check, std::string _description = "");
       virtual ~VectorQuery();
       virtual bool handle()=0;
@@ -123,5 +125,5 @@
   class ElementQuery : public Query {
   public:
-    ElementQuery(std::string title, const element**_target);
+    ElementQuery(std::string title, const element**_target, std::string _description = "");
     virtual ~ElementQuery();
     virtual bool handle()=0;
@@ -140,3 +142,4 @@
 };
 
+
 #endif /* DIALOG_HPP_ */
Index: src/UIElements/TextDialog.cpp
===================================================================
--- src/UIElements/TextDialog.cpp	(revision efc3cb9ffa0e3dc29c97a339e0879a611a41bf3f)
+++ src/UIElements/TextDialog.cpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -29,32 +29,32 @@
 
 
-void TextDialog::queryInt(const char* title, int* target){
-  registerQuery(new IntTextQuery(title,target));
-}
-
-void TextDialog::queryDouble(const char* title, double* target){
-  registerQuery(new DoubleTextQuery(title,target));
-}
-
-void TextDialog::queryString(const char* title, string* target){
-  registerQuery(new StringTextQuery(title,target));
-}
-
-void TextDialog::queryMolecule(const char* title, molecule **target, MoleculeListClass *molecules) {
-  registerQuery(new MoleculeTextQuery(title,target,molecules));
-}
-
-void TextDialog::queryVector(const char* title, Vector *target,const double *const cellSize, bool check) {
-  registerQuery(new VectorTextQuery(title,target,cellSize,check));
-}
-
-void TextDialog::queryElement(const char* title, const element **target){
-  registerQuery(new ElementTextQuery(title,target));
+void TextDialog::queryInt(const char* title, int* target, string description){
+  registerQuery(new IntTextQuery(title,target,description));
+}
+
+void TextDialog::queryDouble(const char* title, double* target, string description){
+  registerQuery(new DoubleTextQuery(title,target,description));
+}
+
+void TextDialog::queryString(const char* title, string* target, string description){
+  registerQuery(new StringTextQuery(title,target,description));
+}
+
+void TextDialog::queryMolecule(const char* title, molecule **target, MoleculeListClass *molecules, string description) {
+  registerQuery(new MoleculeTextQuery(title,target,molecules,description));
+}
+
+void TextDialog::queryVector(const char* title, Vector *target,const double *const cellSize, bool check, string description) {
+  registerQuery(new VectorTextQuery(title,target,cellSize,check,description));
+}
+
+void TextDialog::queryElement(const char* title, const element **target, string description){
+  registerQuery(new ElementTextQuery(title,target,description));
 }
 
 /************************** Query Infrastructure ************************/
 
-TextDialog::IntTextQuery::IntTextQuery(string title,int *_target) :
-    Dialog::IntQuery(title,_target)
+TextDialog::IntTextQuery::IntTextQuery(string title,int *_target, std::string _description) :
+    Dialog::IntQuery(title,_target,_description)
 {}
 
@@ -79,6 +79,6 @@
 }
 
-TextDialog::StringTextQuery::StringTextQuery(string title,string *_target) :
-    Dialog::StringQuery(title,_target)
+TextDialog::StringTextQuery::StringTextQuery(string title,string *_target, std::string _description) :
+    Dialog::StringQuery(title,_target,_description)
 {}
 
@@ -91,6 +91,6 @@
 }
 
-TextDialog::DoubleTextQuery::DoubleTextQuery(string title,double *_target) :
-    Dialog::DoubleQuery(title,_target)
+TextDialog::DoubleTextQuery::DoubleTextQuery(string title,double *_target, std::string _description) :
+    Dialog::DoubleQuery(title,_target,_description)
 {}
 
@@ -114,6 +114,6 @@
 }
 
-TextDialog::MoleculeTextQuery::MoleculeTextQuery(string title, molecule **_target, MoleculeListClass *_molecules) :
-    Dialog::MoleculeQuery(title,_target,_molecules)
+TextDialog::MoleculeTextQuery::MoleculeTextQuery(string title, molecule **_target, MoleculeListClass *_molecules, std::string _description) :
+    Dialog::MoleculeQuery(title,_target,_molecules,_description)
 {}
 
@@ -146,6 +146,6 @@
 }
 
-TextDialog::VectorTextQuery::VectorTextQuery(std::string title, Vector *_target, const double *const _cellSize, bool _check) :
-    Dialog::VectorQuery(title,_target,_cellSize,_check)
+TextDialog::VectorTextQuery::VectorTextQuery(std::string title, Vector *_target, const double *const _cellSize, bool _check, std::string _description) :
+    Dialog::VectorQuery(title,_target,_cellSize,_check,_description)
 {}
 
@@ -169,6 +169,6 @@
 
 
-TextDialog::ElementTextQuery::ElementTextQuery(std::string title, const element **target) :
-    Dialog::ElementQuery(title,target)
+TextDialog::ElementTextQuery::ElementTextQuery(std::string title, const element **target, std::string _description) :
+    Dialog::ElementQuery(title,target,_description)
 {}
 
Index: src/UIElements/TextDialog.hpp
===================================================================
--- src/UIElements/TextDialog.hpp	(revision efc3cb9ffa0e3dc29c97a339e0879a611a41bf3f)
+++ src/UIElements/TextDialog.hpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -19,10 +19,10 @@
   virtual ~TextDialog();
 
-  virtual void queryInt(const char *, int *);
-  virtual void queryString(const char*, std::string *);
-  virtual void queryDouble(const char*, double*);
-  virtual void queryMolecule(const char*,molecule**,MoleculeListClass*);
-  virtual void queryVector(const char*,Vector *,const double * const,bool);
-  virtual void queryElement(const char*,const element **);
+  virtual void queryInt(const char *, int *, std::string = "");
+  virtual void queryString(const char*, std::string *, std::string = "");
+  virtual void queryDouble(const char*, double*, std::string = "");
+  virtual void queryMolecule(const char*,molecule**,MoleculeListClass*, std::string = "");
+  virtual void queryVector(const char*,Vector *,const double * const,bool, std::string = "");
+  virtual void queryElement(const char*,const element **, std::string = "");
 
 protected:
@@ -30,5 +30,5 @@
   class IntTextQuery : public Dialog::IntQuery {
   public:
-    IntTextQuery(std::string title, int *_target);
+    IntTextQuery(std::string title, int *_target, std::string _description = NULL);
     virtual ~IntTextQuery();
     virtual bool handle();
@@ -37,5 +37,5 @@
   class DoubleTextQuery : public Dialog::DoubleQuery {
   public:
-    DoubleTextQuery(std::string title, double *_target);
+    DoubleTextQuery(std::string title, double *_target, std::string _description = NULL);
     virtual ~DoubleTextQuery();
     virtual bool handle();
@@ -44,5 +44,5 @@
   class StringTextQuery : public Dialog::StringQuery {
   public:
-    StringTextQuery(std::string title, std::string *_target);
+    StringTextQuery(std::string title, std::string *_target, std::string _description = NULL);
     virtual ~StringTextQuery();
     virtual bool handle();
@@ -51,5 +51,5 @@
   class MoleculeTextQuery : public Dialog::MoleculeQuery {
   public:
-    MoleculeTextQuery(std::string title, molecule **_target, MoleculeListClass *_molecules);
+    MoleculeTextQuery(std::string title, molecule **_target, MoleculeListClass *_molecules, std::string _description = NULL);
     virtual ~MoleculeTextQuery();
     virtual bool handle();
@@ -58,5 +58,5 @@
   class VectorTextQuery : public Dialog::VectorQuery {
   public:
-    VectorTextQuery(std::string title,Vector *_target,const double *const _cellSize,bool _check);
+    VectorTextQuery(std::string title,Vector *_target,const double *const _cellSize,bool _check, std::string _description = NULL);
     virtual ~VectorTextQuery();
     virtual bool handle();
@@ -65,5 +65,5 @@
   class ElementTextQuery : public Dialog::ElementQuery {
   public:
-    ElementTextQuery(std::string title, const element **_target);
+    ElementTextQuery(std::string title, const element **_target, std::string _description = NULL);
     virtual ~ElementTextQuery();
     virtual bool handle();
Index: src/UIElements/UIFactory.cpp
===================================================================
--- src/UIElements/UIFactory.cpp	(revision efc3cb9ffa0e3dc29c97a339e0879a611a41bf3f)
+++ src/UIElements/UIFactory.cpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -13,4 +13,5 @@
 // all factories that can be used:
 #include "UIElements/TextUIFactory.hpp"
+#include "UIElements/CommandLineUIFactory.hpp"
 
 UIFactory::UIFactory()
@@ -30,4 +31,7 @@
       setInstance(new TextUIFactory());
       break;
+    case CommandLine:
+      setInstance(new CommandLineUIFactory());
+      break;
 
     default:
Index: src/UIElements/UIFactory.hpp
===================================================================
--- src/UIElements/UIFactory.hpp	(revision efc3cb9ffa0e3dc29c97a339e0879a611a41bf3f)
+++ src/UIElements/UIFactory.hpp	(revision a2ab15ba2cc94cbece043d75b16c7c3e7c81f308)
@@ -11,4 +11,5 @@
 class MainWindow;
 class Dialog;
+class DialogDescription;
 
 class MoleculeListClass;
@@ -31,5 +32,5 @@
 
 public:
-  enum InterfaceTypes {Text};
+  enum InterfaceTypes {Text, CommandLine};
   virtual ~UIFactory();
 
