Index: src/UIElements/QT4/QTDialog.cpp
===================================================================
--- src/UIElements/QT4/QTDialog.cpp	(revision 3731b4909c6d6ae4b595859d66058d1e878886f9)
+++ src/UIElements/QT4/QTDialog.cpp	(revision 7cd6e7ab696a3676cd5e8add0454d596f7c6cf0f)
@@ -17,4 +17,5 @@
 #include <QtGui/QDoubleSpinBox>
 #include <Qt/qlineedit.h>
+#include <Qt/qlistwidget.h>
 #include <Qt/qdialogbuttonbox.h>
 #include <Qt/qpushbutton.h>
@@ -28,4 +29,5 @@
 #include "element.hpp"
 #include "molecule.hpp"
+#include "Descriptors/AtomIdDescriptor.hpp"
 #include "Descriptors/MoleculeIdDescriptor.hpp"
 #include "Matrix.hpp"
@@ -95,4 +97,9 @@
 }
 
+void QTDialog::queryAtoms(char const*, string){
+  // TODO
+  ASSERT(false, "Not implemented yet");
+}
+
 void QTDialog::queryBox(char const*, string){
   // TODO
@@ -106,8 +113,17 @@
 }
 
+void QTDialog::queryInts(const char *title,string)
+{
+  registerQuery(new IntsQTQuery(title,inputLayout,this));
+}
+
 void QTDialog::queryDouble(const char* title,string){
   registerQuery(new DoubleQTQuery(title,inputLayout,this));
 }
 
+void QTDialog::queryDoubles(const char* title,string){
+  registerQuery(new DoublesQTQuery(title,inputLayout,this));
+}
+
 void QTDialog::queryString(const char* title,string)
 {
@@ -123,4 +139,10 @@
 {
   registerQuery(new MoleculeQTQuery(title,inputLayout,this));
+}
+
+void QTDialog::queryMolecules(const char *title,string)
+{
+  // TODO
+  ASSERT(false, "Not implemented yet");
 }
 
@@ -129,6 +151,16 @@
 }
 
+void QTDialog::queryVectors(const char* title, bool check,string) {
+  // TODO
+  ASSERT(false, "Not implemented yet");
+}
+
 void QTDialog::queryElement(const char* title, string){
   registerQuery(new ElementQTQuery(title,inputLayout,this));
+}
+
+void QTDialog::queryElements(const char* title, string){
+  // TODO
+  ASSERT(false, "Not implemented yet");
 }
 
@@ -157,9 +189,55 @@
 }
 
-// Handling is easy since the GUI makes it impossible to enter invalid values
-bool QTDialog::IntQTQuery::handle()
-{
-  return true;
-}
+bool QTDialog::IntQTQuery::handle() {
+  return true;
+}
+
+
+QTDialog::IntsQTQuery::IntsQTQuery(string _title,QBoxLayout *_parent,QTDialog *_dialog) :
+    Dialog::IntsQuery(_title),
+    parent(_parent)
+{
+  QHBoxLayout * thisHLayout = new QHBoxLayout();
+  QVBoxLayout * thisV1Layout = new QVBoxLayout();
+  QVBoxLayout * thisV2Layout = new QVBoxLayout();
+
+  QLabel *titleLabel = new QLabel(QString(getTitle().c_str()));
+  QLabel *inputLabel = new QLabel("Enter to add");
+  QListWidget* inputList = new QListWidget();
+  inputList->setSelectionMode(QAbstractItemView::ExtendedSelection);
+  QLineEdit* inputBox = new QLineEdit();
+  inputLabel->setBuddy(inputBox);
+  titleLabel->setBuddy(inputList);
+  QPushButton* AddButton = new QPushButton("Add");
+  AddButton->setEnabled(false);
+  QPushButton* RemoveButton = new QPushButton("Remove");
+  RemoveButton->setEnabled(false);
+
+  thisV1Layout->addWidget(titleLabel);
+  thisV1Layout->addWidget(inputList);
+  thisV2Layout->addWidget(inputLabel);
+  thisV2Layout->addWidget(inputBox);
+  thisV2Layout->addWidget(AddButton);
+  thisV2Layout->addWidget(RemoveButton);
+  parent->addLayout(thisHLayout);
+  thisHLayout->addLayout(thisV1Layout);
+  thisHLayout->addLayout(thisV2Layout);
+
+  pipe = new QTQueryListPipe<int>(&tmp,_dialog,inputBox,inputList,AddButton,RemoveButton);
+  connect(inputBox,SIGNAL(textChanged(const QString&)),pipe,SLOT(IntegerEntered(const QString&)));
+  connect(inputList,SIGNAL(itemSelectionChanged()),pipe,SLOT(IntegerSelected()));
+  connect(AddButton,SIGNAL(Clicked()),pipe,SLOT(AddValue()));
+  connect(RemoveButton,SIGNAL(Clicked()),pipe,SLOT(RemoveRow()));
+}
+
+QTDialog::IntsQTQuery::~IntsQTQuery()
+{
+  delete pipe;
+}
+
+bool QTDialog::IntsQTQuery::handle() {
+  return true;
+}
+
 
 QTDialog::DoubleQTQuery::DoubleQTQuery(string title,QBoxLayout *_parent,QTDialog *_dialog) :
@@ -192,4 +270,50 @@
 
 
+QTDialog::DoublesQTQuery::DoublesQTQuery(string title,QBoxLayout *_parent,QTDialog *_dialog) :
+    Dialog::DoublesQuery(title),
+    parent(_parent)
+{
+  QHBoxLayout * thisHLayout = new QHBoxLayout();
+  QVBoxLayout * thisV1Layout = new QVBoxLayout();
+  QVBoxLayout * thisV2Layout = new QVBoxLayout();
+
+  QLabel *titleLabel = new QLabel(QString(getTitle().c_str()));
+  QLabel *inputLabel = new QLabel("Enter to add");
+  QListWidget* inputList = new QListWidget();
+  inputList->setSelectionMode(QAbstractItemView::ExtendedSelection);
+  QLineEdit* inputBox = new QLineEdit();
+  inputLabel->setBuddy(inputBox);
+  titleLabel->setBuddy(inputList);
+  QPushButton* AddButton = new QPushButton("Add");
+  AddButton->setEnabled(false);
+  QPushButton* RemoveButton = new QPushButton("Remove");
+  RemoveButton->setEnabled(false);
+
+  thisV1Layout->addWidget(titleLabel);
+  thisV1Layout->addWidget(inputList);
+  thisV2Layout->addWidget(inputLabel);
+  thisV2Layout->addWidget(inputBox);
+  thisV2Layout->addWidget(AddButton);
+  thisV2Layout->addWidget(RemoveButton);
+  parent->addLayout(thisHLayout);
+  thisHLayout->addLayout(thisV1Layout);
+  thisHLayout->addLayout(thisV2Layout);
+
+  pipe = new QTQueryListPipe<double>(&tmp,_dialog,inputBox,inputList,AddButton,RemoveButton);
+  connect(inputBox,SIGNAL(textChanged(const QString&)),pipe,SLOT(IntegerEntered(const QString&)));
+  connect(inputList,SIGNAL(itemSelectionChanged()),pipe,SLOT(IntegerSelected()));
+  connect(AddButton,SIGNAL(Clicked()),pipe,SLOT(AddValue()));
+  connect(RemoveButton,SIGNAL(Clicked()),pipe,SLOT(RemoveRow()));}
+
+QTDialog::DoublesQTQuery::~DoublesQTQuery()
+{
+  delete pipe;
+}
+
+bool QTDialog::DoublesQTQuery::handle() {
+  return true;
+}
+
+
 QTDialog::StringQTQuery::StringQTQuery(string _title,QBoxLayout *_parent,QTDialog *_dialog) :
     Dialog::StringQuery(_title),
@@ -223,15 +347,35 @@
     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&)));
-}
+  QHBoxLayout * thisHLayout = new QHBoxLayout();
+  QVBoxLayout * thisV1Layout = new QVBoxLayout();
+  QVBoxLayout * thisV2Layout = new QVBoxLayout();
+
+  QLabel *titleLabel = new QLabel(QString(getTitle().c_str()));
+  QLabel *inputLabel = new QLabel("Enter to add");
+  QListWidget* inputList = new QListWidget();
+  inputList->setSelectionMode(QAbstractItemView::ExtendedSelection);
+  QLineEdit* inputBox = new QLineEdit();
+  inputLabel->setBuddy(inputBox);
+  titleLabel->setBuddy(inputList);
+  QPushButton* AddButton = new QPushButton("Add");
+  AddButton->setEnabled(false);
+  QPushButton* RemoveButton = new QPushButton("Remove");
+  RemoveButton->setEnabled(false);
+
+  thisV1Layout->addWidget(titleLabel);
+  thisV1Layout->addWidget(inputList);
+  thisV2Layout->addWidget(inputLabel);
+  thisV2Layout->addWidget(inputBox);
+  thisV2Layout->addWidget(AddButton);
+  thisV2Layout->addWidget(RemoveButton);
+  parent->addLayout(thisHLayout);
+  thisHLayout->addLayout(thisV1Layout);
+  thisHLayout->addLayout(thisV2Layout);
+
+  pipe = new QTQueryListPipe<std::string>(&tmp,_dialog,inputBox,inputList,AddButton,RemoveButton);
+  connect(inputBox,SIGNAL(textChanged(const QString&)),pipe,SLOT(IntegerEntered(const QString&)));
+  connect(inputList,SIGNAL(itemSelectionChanged()),pipe,SLOT(IntegerSelected()));
+  connect(AddButton,SIGNAL(Clicked()),pipe,SLOT(AddValue()));
+  connect(RemoveButton,SIGNAL(Clicked()),pipe,SLOT(RemoveRow()));}
 
 QTDialog::StringsQTQuery::~StringsQTQuery()
@@ -293,4 +437,40 @@
 }
 
+QTDialog::MoleculesQTQuery::MoleculesQTQuery(string _title, QBoxLayout *_parent,QTDialog *_dialog) :
+    Dialog::MoleculesQuery(_title),
+    parent(_parent)
+{
+  thisLayout = new QHBoxLayout();
+  titleLabel = new QLabel(QString(getTitle().c_str()));
+  inputBox = new QComboBox();
+  // add all molecules to the combo box
+  vector<molecule*> molecules = World::getInstance().getAllMolecules();
+  for(vector<molecule*>::iterator iter  = molecules.begin();
+      iter != molecules.end();
+      ++iter) {
+    stringstream sstr;
+    sstr << (*iter)->IndexNr << "\t" << (*iter)->getName();
+    inputBox->addItem(QString(sstr.str().c_str()),QVariant((*iter)->IndexNr));
+  }
+  parent->addLayout(thisLayout);
+  thisLayout->addWidget(titleLabel);
+  thisLayout->addWidget(inputBox);
+
+  pipe = new MoleculesQTQueryPipe(&tmp,_dialog,inputBox);
+  pipe->update(inputBox->currentIndex());
+  connect(inputBox,SIGNAL(currentIndexChanged(int)),pipe,SLOT(update(int)));
+}
+
+QTDialog::MoleculesQTQuery::~MoleculesQTQuery()
+{
+  delete pipe;
+}
+
+// Handling is easy, since the GUI makes it impossible to select invalid values
+bool QTDialog::MoleculesQTQuery::handle()
+{
+  return true;
+}
+
 QTDialog::VectorQTQuery::VectorQTQuery(std::string title, bool _check,QBoxLayout *_parent,QTDialog *_dialog) :
     Dialog::VectorQuery(title,_check),
@@ -304,18 +484,16 @@
   subLayout = new QVBoxLayout();
   mainLayout->addLayout(subLayout);
-  for(int i=0; i<3; i++) {
-    coordLayout[i] = new QHBoxLayout();
-    subLayout->addLayout(coordLayout[i]);
-    coordLabel[i] = new QLabel(QString(coords[i]));
-    coordLayout[i]->addWidget(coordLabel[i]);
-    coordInput[i] = new QDoubleSpinBox();
-    coordInput[i]->setRange(0,M.at(i,i));
-    coordInput[i]->setDecimals(3);
-    coordLayout[i]->addWidget(coordInput[i]);
-    pipe[i] = new DoubleQTQueryPipe(&((*tmp)[i]),_dialog);
-    pipe[i]->update(coordInput[i]->value());
-    connect(coordInput[i],SIGNAL(valueChanged(double)),pipe[i],SLOT(update(double)));
-
-  }
+  QComboBox* inputBox = new QComboBox();
+  coordLayout = new QHBoxLayout();
+  subLayout->addLayout(coordLayout);
+  coordLabel = new QLabel(QString("x,y,z"));
+  coordLayout->addWidget(coordLabel);
+  coordInput = new QDoubleSpinBox();
+//  coordInput->setRange(0,M.at(i,i));
+  coordInput->setDecimals(3);
+  coordLayout->addWidget(coordInput);
+  pipe = new VectorQTQueryPipe(&(tmp),_dialog,inputBox);
+  //pipe->update(coordInput->value());
+  connect(coordInput,SIGNAL(valueChanged(double)),pipe,SLOT(update(double)));
   parent->addLayout(mainLayout);
 }
@@ -325,4 +503,38 @@
 
 bool QTDialog::VectorQTQuery::handle() {
+  return true;
+}
+
+
+QTDialog::VectorsQTQuery::VectorsQTQuery(std::string title, bool _check,QBoxLayout *_parent,QTDialog *_dialog) :
+    Dialog::VectorsQuery(title,_check),
+    parent(_parent)
+{
+  const Matrix& M = World::getInstance().getDomain().getM();
+  const char *coords[3] = {"x:","y:","z:"};
+  mainLayout= new QHBoxLayout();
+  titleLabel = new QLabel(QString(getTitle().c_str()));
+  mainLayout->addWidget(titleLabel);
+  subLayout = new QVBoxLayout();
+  mainLayout->addLayout(subLayout);
+  QComboBox* inputBox = new QComboBox();
+  coordLayout = new QHBoxLayout();
+  subLayout->addLayout(coordLayout);
+  coordLabel = new QLabel(QString("x,y,z"));
+  coordLayout->addWidget(coordLabel);
+  coordInput = new QDoubleSpinBox();
+//  coordInput->setRange(0,M.at(i,i));
+  coordInput->setDecimals(3);
+  coordLayout->addWidget(coordInput);
+  pipe = new VectorsQTQueryPipe(&(tmp),_dialog,inputBox);
+  //pipe->update(coordInput->value());
+  connect(coordInput,SIGNAL(valueChanged(double)),pipe,SLOT(update(double)));
+  parent->addLayout(mainLayout);
+}
+
+QTDialog::VectorsQTQuery::~VectorsQTQuery()
+{}
+
+bool QTDialog::VectorsQTQuery::handle() {
   return true;
 }
@@ -363,5 +575,108 @@
 }
 
+
+QTDialog::ElementsQTQuery::ElementsQTQuery(std::string _title, QBoxLayout *_parent, QTDialog *_dialog) :
+    Dialog::ElementsQuery(_title),
+    parent(_parent)
+{
+  periodentafel *periode = World::getInstance().getPeriode();
+  thisLayout = new QHBoxLayout();
+  titleLabel = new QLabel(QString(getTitle().c_str()));
+  inputBox = new QComboBox();
+  for(periodentafel::const_iterator iter = periode->begin();
+      iter!=periode->end();
+      ++iter)
+  {
+    stringstream sstr;
+    sstr << (*iter).first << "\t" << (*iter).second->name;
+    inputBox->addItem(QString(sstr.str().c_str()),QVariant((*iter).first));
+  }
+  parent->addLayout(thisLayout);
+  thisLayout->addWidget(titleLabel);
+  thisLayout->addWidget(inputBox);
+
+  pipe = new ElementsQTQueryPipe(&tmp,_dialog,inputBox);
+  pipe->update(inputBox->currentIndex());
+  connect(inputBox,SIGNAL(currentIndexChanged(int)),pipe,SLOT(update(int)));
+}
+
+QTDialog::ElementsQTQuery::~ElementsQTQuery()
+{
+  delete pipe;
+}
+
+bool QTDialog::ElementsQTQuery::handle(){
+  return true;
+}
+
 /*************************** Plumbing *******************************/
+
+
+template<typename T> QTQueryListPipe<T>::QTQueryListPipe(std::vector<T> *_content, QTDialog *_dialog, QLineEdit *_inputBox, QListWidget *_inputList, QPushButton *_AddButton, QPushButton *_RemoveButton) :
+  content(_content),
+  dialog(_dialog),
+  inputBox(_inputBox),
+  inputList(_inputList),
+  AddButton(_AddButton),
+  RemoveButton(_RemoveButton)
+{}
+
+template<typename T> QTQueryListPipe<T>::~QTQueryListPipe()
+{}
+
+template<typename T> void QTQueryListPipe<T>::IntegerEntered(const QString&)
+{
+  AddButton->setEnabled(true);
+}
+
+template<typename T> void QTQueryListPipe<T>::IntegerSelected()
+{
+  if (inputList->selectedItems().empty())
+    RemoveButton->setEnabled(false);
+  else
+    RemoveButton->setEnabled(true);
+}
+
+template<typename T> void QTQueryListPipe<T>::AddInteger() {
+  // type-check
+  std::string text = inputBox->text().toStdString();
+  int number = 0;
+  try {
+    number = boost::lexical_cast<int>(text);
+  } catch (boost::bad_lexical_cast&) {
+    return;
+  };
+  // add item to both
+  inputList->addItem(QString(number));
+  AddValue(number);
+}
+
+template<typename T> void QTQueryListPipe<T>::AddValue(T item) {
+  content->push_back(item);
+
+  dialog->update();
+}
+
+template<typename T> void QTQueryListPipe<T>::RemoveInteger() {
+  QList<QListWidgetItem *> items = inputList->selectedItems();
+  for (QList<QListWidgetItem *>::iterator iter = items.begin(); !items.empty(); iter = items.begin()) {
+    // obtain which position item has (by making it current item)
+    inputList->setCurrentItem(*iter);
+    // remove
+    QTQueryListPipe<T>::RemoteRow(inputList->currentRow()); // template parameters needs to be known, such that compiler knows which to call
+    inputList->removeItemWidget(*iter);
+  }
+}
+
+template<typename T> void QTQueryListPipe<T>::RemoveRow(int row) {
+  int counter = 0;
+  typename std::vector<T>::iterator iter = content->begin();
+  for (; iter != content->end(); ++iter)
+    if (counter++ == row)
+      break;
+  if (iter != content->end())
+      content->erase(iter);
+}
+
 
 StringQTQueryPipe::StringQTQueryPipe(string *_content, QTDialog *_dialog) :
@@ -403,4 +718,66 @@
   dialog->update();
 }
+
+VectorQTQueryPipe::VectorQTQueryPipe(Vector *_content, QTDialog *_dialog, QComboBox *_theBox) :
+  content(_content),
+  dialog(_dialog),
+  theBox(_theBox)
+{}
+
+VectorQTQueryPipe::~VectorQTQueryPipe()
+{}
+
+void VectorQTQueryPipe::update() {
+  dialog->update();
+}
+
+VectorsQTQueryPipe::VectorsQTQueryPipe(std::vector<Vector> *_content, QTDialog *_dialog, QComboBox *_theBox) :
+  content(_content),
+  dialog(_dialog),
+  theBox(_theBox)
+{}
+
+VectorsQTQueryPipe::~VectorsQTQueryPipe()
+{}
+
+void VectorsQTQueryPipe::update() {
+  dialog->update();
+}
+
+AtomQTQueryPipe::AtomQTQueryPipe(atom **_content, QTDialog *_dialog, QComboBox *_theBox) :
+  content(_content),
+  dialog(_dialog),
+  theBox(_theBox)
+{}
+
+AtomQTQueryPipe::~AtomQTQueryPipe()
+{}
+
+void AtomQTQueryPipe::update(int newIndex) {
+  QVariant data = theBox->itemData(newIndex);
+  int idx = data.toInt();
+  (*content) = World::getInstance().getAtom(AtomById(idx));
+  dialog->update();
+}
+
+
+AtomsQTQueryPipe::AtomsQTQueryPipe(std::vector<atom *>*_content, QTDialog *_dialog, QComboBox *_theBox) :
+  content(_content),
+  dialog(_dialog),
+  theBox(_theBox)
+{}
+
+AtomsQTQueryPipe::~AtomsQTQueryPipe()
+{}
+
+void AtomsQTQueryPipe::update(int newIndex) {
+  QVariant data = theBox->itemData(newIndex);
+  int idx = data.toInt();
+  atom *Walker = World::getInstance().getAtom(AtomById(idx));
+  if (Walker)
+    (*content).push_back(Walker) ;
+  dialog->update();
+}
+
 
 MoleculeQTQueryPipe::MoleculeQTQueryPipe(molecule **_content, QTDialog *_dialog, QComboBox *_theBox) :
@@ -420,11 +797,28 @@
 }
 
-ElementQTQueryPipe::ElementQTQueryPipe(std::vector<element *> *_content, QTDialog *_dialog, QComboBox *_theBox) :
+
+MoleculesQTQueryPipe::MoleculesQTQueryPipe(std::vector<molecule *>*_content, QTDialog *_dialog, QComboBox *_theBox) :
   content(_content),
   dialog(_dialog),
   theBox(_theBox)
-{
-  content->resize(1);
-}
+{}
+
+MoleculesQTQueryPipe::~MoleculesQTQueryPipe()
+{}
+
+void MoleculesQTQueryPipe::update(int newIndex) {
+  QVariant data = theBox->itemData(newIndex);
+  int idx = data.toInt();
+  molecule *mol = World::getInstance().getMolecule(MoleculeById(idx));
+  if (mol)
+    (*content).push_back(mol);
+  dialog->update();
+}
+
+ElementQTQueryPipe::ElementQTQueryPipe(element **_content, QTDialog *_dialog, QComboBox *_theBox) :
+  content(_content),
+  dialog(_dialog),
+  theBox(_theBox)
+{}
 
 ElementQTQueryPipe::~ElementQTQueryPipe()
@@ -434,6 +828,25 @@
   QVariant data = theBox->itemData(newIndex);
   int idx = data.toInt();
-  (*content)[0] = World::getInstance().getPeriode()->FindElement(idx);
-  dialog->update();
-}
-
+  *content = World::getInstance().getPeriode()->FindElement(idx);
+  dialog->update();
+}
+
+ElementsQTQueryPipe::ElementsQTQueryPipe(std::vector<element *>*_content, QTDialog *_dialog, QComboBox *_theBox) :
+  content(_content),
+  dialog(_dialog),
+  theBox(_theBox)
+{}
+
+ElementsQTQueryPipe::~ElementsQTQueryPipe()
+{}
+
+void ElementsQTQueryPipe::update(int newIndex) {
+  QVariant data = theBox->itemData(newIndex);
+  int idx = data.toInt();
+  element *elemental = World::getInstance().getPeriode()->FindElement(idx);
+  if(elemental)
+    (*content).push_back(elemental);
+  dialog->update();
+}
+
+
Index: src/UIElements/QT4/QTDialog.hpp
===================================================================
--- src/UIElements/QT4/QTDialog.hpp	(revision 3731b4909c6d6ae4b595859d66058d1e878886f9)
+++ src/UIElements/QT4/QTDialog.hpp	(revision 7cd6e7ab696a3676cd5e8add0454d596f7c6cf0f)
@@ -17,4 +17,5 @@
 class QDoubleSpinBox;
 class QLineEdit;
+class QListWidget;
 class QComboBox;
 class QDialogButtonBox;
@@ -22,9 +23,18 @@
 
 // Forward declarations for plumbing
+template<typename T> class QTQueryListPipe;
 class StringQTQueryPipe;
+class StringsQTQueryPipe;
 class IntQTQueryPipe;
 class DoubleQTQueryPipe;
+class DoublesQTQueryPipe;
+class AtomQTQueryPipe;
+class AtomsQTQueryPipe;
 class MoleculeQTQueryPipe;
+class MoleculesQTQueryPipe;
 class ElementQTQueryPipe;
+class ElementsQTQueryPipe;
+class VectorQTQueryPipe;
+class VectorsQTQueryPipe;
 
 class QTDialog : public QDialog, public Dialog
@@ -38,12 +48,18 @@
   virtual void queryBoolean(const char *, std::string = "");
   virtual void queryInt(const char *,std::string = "");
+  virtual void queryInts(const char *,std::string = "");
   virtual void queryDouble(const char*,std::string = "");
+  virtual void queryDoubles(const char*,std::string = "");
   virtual void queryString(const char*,std::string = "");
   virtual void queryStrings(const char*,std::string = "");
   virtual void queryAtom(const char*,std::string = "");
+  virtual void queryAtoms(const char*,std::string = "");
   virtual void queryMolecule(const char*,std::string = "");
+  virtual void queryMolecules(const char*,std::string = "");
   virtual void queryVector(const char*,bool,std::string = "");
+  virtual void queryVectors(const char*,bool,std::string = "");
   virtual void queryBox(const char*, std::string = "");
   virtual void queryElement(const char*,std::string = "");
+  virtual void queryElements(const char*,std::string = "");
 
   virtual bool display();
@@ -66,4 +82,21 @@
     };
 
+  class IntsQTQuery : public Dialog::IntsQuery {
+    public:
+      IntsQTQuery(std::string _title,QBoxLayout *_parent,QTDialog *_dialog);
+      virtual ~IntsQTQuery();
+      virtual bool handle();
+      void IntegerEntered(const QString&);
+      void IntegerSelected();
+      void AddInteger();
+      void RemoveInteger();
+    private:
+      QBoxLayout *parent;
+      QBoxLayout *thisLayout;
+      QLabel *titleLabel;
+
+      QTQueryListPipe<int> *pipe;
+    };
+
     class DoubleQTQuery : public Dialog::DoubleQuery {
     public:
@@ -80,4 +113,18 @@
     };
 
+    class DoublesQTQuery : public Dialog::DoublesQuery {
+    public:
+      DoublesQTQuery(std::string title,QBoxLayout *_parent,QTDialog *_dialog);
+      virtual ~DoublesQTQuery();
+      virtual bool handle();
+    private:
+      QBoxLayout *parent;
+      QBoxLayout *thisLayout;
+      QLabel *titleLabel;
+      QDoubleSpinBox *inputBox;
+
+      QTQueryListPipe<double> *pipe;
+    };
+
     class StringQTQuery : public Dialog::StringQuery {
     public:
@@ -105,5 +152,33 @@
       QLineEdit *inputBox;
 
-      StringQTQueryPipe *pipe;
+      QTQueryListPipe<std::string> *pipe;
+    };
+
+    class AtomQTQuery : public Dialog::AtomQuery {
+    public:
+      AtomQTQuery(std::string _title, QBoxLayout *_parent,QTDialog *_dialog);
+      virtual ~AtomQTQuery();
+      virtual bool handle();
+    private:
+      QBoxLayout *parent;
+      QBoxLayout *thisLayout;
+      QLabel *titleLabel;
+      QComboBox *inputBox;
+
+      AtomQTQueryPipe *pipe;
+    };
+
+    class AtomsQTQuery : public Dialog::AtomsQuery {
+    public:
+      AtomsQTQuery(std::string _title, QBoxLayout *_parent,QTDialog *_dialog);
+      virtual ~AtomsQTQuery();
+      virtual bool handle();
+    private:
+      QBoxLayout *parent;
+      QBoxLayout *thisLayout;
+      QLabel *titleLabel;
+      QComboBox *inputBox;
+
+      AtomsQTQueryPipe *pipe;
     };
 
@@ -122,4 +197,18 @@
     };
 
+    class MoleculesQTQuery : public Dialog::MoleculesQuery {
+    public:
+      MoleculesQTQuery(std::string _title, QBoxLayout *_parent,QTDialog *_dialog);
+      virtual ~MoleculesQTQuery();
+      virtual bool handle();
+    private:
+      QBoxLayout *parent;
+      QBoxLayout *thisLayout;
+      QLabel *titleLabel;
+      QComboBox *inputBox;
+
+      MoleculesQTQueryPipe *pipe;
+    };
+
     class VectorQTQuery : public Dialog::VectorQuery {
     public:
@@ -132,9 +221,26 @@
       QLabel *titleLabel;
       QBoxLayout *subLayout;
-      QBoxLayout *coordLayout[3];
-      QLabel *coordLabel[3];
-      QDoubleSpinBox *coordInput[3];
-
-      DoubleQTQueryPipe *pipe[3];
+      QBoxLayout *coordLayout;
+      QLabel *coordLabel;
+      QDoubleSpinBox *coordInput;
+
+      VectorQTQueryPipe *pipe;
+    };
+
+    class VectorsQTQuery : public Dialog::VectorsQuery {
+    public:
+      VectorsQTQuery(std::string title,bool _check,QBoxLayout *,QTDialog *);
+      virtual ~VectorsQTQuery();
+      virtual bool handle();
+    private:
+      QBoxLayout *parent;
+      QBoxLayout *mainLayout;
+      QLabel *titleLabel;
+      QBoxLayout *subLayout;
+      QBoxLayout *coordLayout;
+      QLabel *coordLabel;
+      QDoubleSpinBox *coordInput;
+
+      VectorsQTQueryPipe *pipe;
     };
 
@@ -151,4 +257,18 @@
 
       ElementQTQueryPipe *pipe;
+    };
+
+    class ElementsQTQuery : public Dialog::ElementsQuery {
+    public:
+      ElementsQTQuery(std::string _title, QBoxLayout *_parent, QTDialog *_dialog);
+      virtual ~ElementsQTQuery();
+      virtual bool handle();
+    private:
+      QBoxLayout *parent;
+      QBoxLayout *thisLayout;
+      QLabel *titleLabel;
+      QComboBox *inputBox;
+
+      ElementsQTQueryPipe *pipe;
     };
 
@@ -164,4 +284,27 @@
 // since MOC doesn't like nested classes
 
+
+template<typename T> class QTQueryListPipe : public QWidget {
+  public:
+    QTQueryListPipe(std::vector<T> *_content, QTDialog *_dialog, QLineEdit *_inputBox, QListWidget *_inputList, QPushButton *_AddButton, QPushButton *_RemoveButton);
+    virtual ~QTQueryListPipe();
+    void AddInteger();
+    void RemoveInteger();
+    void IntegerSelected();
+    void IntegerEntered(const QString&);
+
+  private:
+    void AddValue(T item);
+    void RemoveRow(int row);
+
+    std::vector<T> *content;
+    QTDialog *dialog;
+    QLineEdit *inputBox;
+    QListWidget *inputList;
+    QPushButton *AddButton;
+    QPushButton *RemoveButton;
+};
+
+
 class StringQTQueryPipe : public QWidget {
   Q_OBJECT
@@ -194,4 +337,5 @@
 };
 
+
 class DoubleQTQueryPipe : public QWidget {
   Q_OBJECT
@@ -209,4 +353,37 @@
 };
 
+class AtomQTQueryPipe : public QWidget {
+  Q_OBJECT
+public:
+  AtomQTQueryPipe(atom **_content, QTDialog *_dialog, QComboBox *_theBox);
+  virtual ~AtomQTQueryPipe();
+
+public slots:
+  void update(int);
+
+private:
+  atom **content;
+  QTDialog *dialog;
+  QComboBox *theBox;
+
+};
+
+
+class AtomsQTQueryPipe : public QWidget {
+  Q_OBJECT
+public:
+  AtomsQTQueryPipe(std::vector<atom *>*_content, QTDialog *_dialog, QComboBox *_theBox);
+  virtual ~AtomsQTQueryPipe();
+
+public slots:
+  void update(int);
+
+private:
+  std::vector<atom *>*content;
+  QTDialog *dialog;
+  QComboBox *theBox;
+
+};
+
 class MoleculeQTQueryPipe : public QWidget {
   Q_OBJECT
@@ -225,8 +402,54 @@
 };
 
+class MoleculesQTQueryPipe : public QWidget {
+  Q_OBJECT
+public:
+  MoleculesQTQueryPipe(std::vector<molecule *>*_content, QTDialog *_dialog, QComboBox *_theBox);
+  virtual ~MoleculesQTQueryPipe();
+
+public slots:
+  void update(int);
+
+private:
+  std::vector<molecule *>*content;
+  QTDialog *dialog;
+  QComboBox *theBox;
+
+};
+
+class VectorQTQueryPipe : public QWidget {
+  Q_OBJECT
+public:
+  VectorQTQueryPipe(Vector *_content, QTDialog *_dialog, QComboBox *_theBox);
+  virtual ~VectorQTQueryPipe();
+
+public slots:
+  void update();
+
+private:
+  Vector *content;
+  QTDialog *dialog;
+  QComboBox *theBox;
+};
+
+class VectorsQTQueryPipe : public QWidget {
+  Q_OBJECT
+public:
+  VectorsQTQueryPipe(std::vector<Vector>*_content, QTDialog *_dialog, QComboBox *_theBox);
+  virtual ~VectorsQTQueryPipe();
+
+public slots:
+  void update();
+
+private:
+  std::vector<Vector> *content;
+  QTDialog *dialog;
+  QComboBox *theBox;
+};
+
 class ElementQTQueryPipe : public QWidget {
   Q_OBJECT
 public:
-  ElementQTQueryPipe(std::vector<element *> *_content, QTDialog *_dialog, QComboBox *_theBox);
+  ElementQTQueryPipe(element **_content, QTDialog *_dialog, QComboBox *_theBox);
   virtual ~ElementQTQueryPipe();
 
@@ -235,5 +458,20 @@
 
 private:
-  std::vector<element *> *content;
+  element **content;
+  QTDialog *dialog;
+  QComboBox *theBox;
+};
+
+class ElementsQTQueryPipe : public QWidget {
+  Q_OBJECT
+public:
+  ElementsQTQueryPipe(std::vector<element *>*_content, QTDialog *_dialog, QComboBox *_theBox);
+  virtual ~ElementsQTQueryPipe();
+
+public slots:
+  void update(int);
+
+private:
+  std::vector<element *>*content;
   QTDialog *dialog;
   QComboBox *theBox;
