Index: src/UIElements/Qt4/Pipe/QtQueryListPipe.hpp
===================================================================
--- src/UIElements/Qt4/Pipe/QtQueryListPipe.hpp	(revision b821011a76f662862e258a9f5800fbd44c952960)
+++ src/UIElements/Qt4/Pipe/QtQueryListPipe.hpp	(revision 859a008e875bf15678d5274d66188c486bdf83f6)
@@ -18,4 +18,11 @@
 #include "QtQueryPipe.hpp"
 
+// Qt moc needs these because it generates its own .cpp file from QtQueryListPipe.hpp.
+#include <Qt/qboxlayout.h>
+#include <Qt/qlabel.h>
+#include <Qt/qlineedit.h>
+#include <Qt/qlistwidget.h>
+#include <Qt/qpushbutton.h>
+
 #include <boost/lexical_cast.hpp>
 
@@ -36,10 +43,10 @@
 {}
 
-template<typename T> void QtQueryListPipe<T>::IntegerEntered(const QString&)
+template<typename T> void QtQueryListPipe<T>::elementEntered(const QString& t)
 {
-  AddButton->setEnabled(true);
+  AddButton->setEnabled(t.length() > 0);
 }
 
-template<typename T> void QtQueryListPipe<T>::IntegerSelected()
+template<typename T> void QtQueryListPipe<T>::elementSelected()
 {
   if (inputList->selectedItems().empty())
@@ -49,25 +56,27 @@
 }
 
-template<typename T> void QtQueryListPipe<T>::AddInteger() {
+template<typename T> void QtQueryListPipe<T>::addElement() {
   // type-check
   std::string text = inputBox->text().toStdString();
-  int number = 0;
+  T value;
   try {
-    number = boost::lexical_cast<int>(text);
+    value = boost::lexical_cast<T>(text);
   } catch (boost::bad_lexical_cast&) {
     return;
   };
   // add item to both
-  inputList->addItem(QString(number));
-  AddValue(number);
+  inputList->addItem(QString(toString(value).c_str()));
+  addValue(value);
 }
 
-template<typename T> void QtQueryListPipe<T>::AddValue(T item) {
-  content->push_back(item);
+template<typename T> void QtQueryListPipe<T>::addValue(T item) {
+  std::vector<T> temp = content.get();
+  temp.push_back(item);
+  content.set(temp);
 
   dialog->update();
 }
 
-template<typename T> void QtQueryListPipe<T>::RemoveInteger() {
+template<typename T> void QtQueryListPipe<T>::removeElement() {
   QList<QListWidgetItem *> items = inputList->selectedItems();
   for (QList<QListWidgetItem *>::iterator iter = items.begin(); !items.empty(); iter = items.begin()) {
@@ -75,18 +84,47 @@
     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);
+    QtQueryListPipe<T>::removeRow(inputList->currentRow()); // template parameters needs to be known, such that compiler knows which to call
+    inputList->takeItem(inputList->currentRow());
+    items.erase(iter);
   }
 }
 
-template<typename T> void QtQueryListPipe<T>::RemoveRow(int row) {
+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)
+  std::vector<T> temp = content.get();
+  typename std::vector<T>::iterator iter = temp.begin();
+  for (; iter != temp.end(); ++iter)
     if (counter++ == row)
       break;
-  if (iter != content->end())
-      content->erase(iter);
+  if (iter != temp.end())
+    temp.erase(iter);
+  content.set(temp);
 }
+
+class StringsQtQueryPipe : public QtQueryListPipe<std::string>
+{
+  Q_OBJECT
+public:
+  StringsQtQueryPipe(Parameter<std::vector<std::string> > &_content, QtDialog *_dialog, QLineEdit *_inputBox, QListWidget *_inputList, QPushButton *_AddButton, QPushButton *_RemoveButton) :
+    QtQueryListPipe<std::string>(_content, _dialog, _inputBox, _inputList, _AddButton, _RemoveButton) { }
+
+public slots:
+  virtual void elementEntered(const QString& t)
+  {
+    QtQueryListPipe<std::string>::elementEntered(t);
+  }
+  virtual void elementSelected()
+  {
+    QtQueryListPipe<std::string>::elementSelected();
+  }
+  virtual void addElement()
+  {
+    QtQueryListPipe<std::string>::addElement();
+  }
+  virtual void removeElement()
+  {
+    QtQueryListPipe<std::string>::removeElement();
+  }
+};
 
 
Index: src/UIElements/Qt4/Pipe/QtQueryPipe.hpp
===================================================================
--- src/UIElements/Qt4/Pipe/QtQueryPipe.hpp	(revision b821011a76f662862e258a9f5800fbd44c952960)
+++ src/UIElements/Qt4/Pipe/QtQueryPipe.hpp	(revision 859a008e875bf15678d5274d66188c486bdf83f6)
@@ -24,6 +24,4 @@
 #include <vector>
 
-#include "CodePatterns/MemDebug.hpp"
-
 class QLineEdit;
 class QListWidget;
@@ -36,12 +34,14 @@
     QtQueryListPipe(Parameter<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&);
+
+  // Slots to-be.
+    virtual void addElement();
+    virtual void removeElement();
+    virtual void elementSelected();
+    virtual void elementEntered(const QString&);
 
   private:
-    void AddValue(T item);
-    void RemoveRow(int row);
+    void addValue(T item);
+    void removeRow(int row);
 
     Parameter<std::vector<T> > &content;
Index: src/UIElements/Qt4/Query/QtQuery.hpp
===================================================================
--- src/UIElements/Qt4/Query/QtQuery.hpp	(revision b821011a76f662862e258a9f5800fbd44c952960)
+++ src/UIElements/Qt4/Query/QtQuery.hpp	(revision 859a008e875bf15678d5274d66188c486bdf83f6)
@@ -298,5 +298,5 @@
   QLineEdit *inputBox;
 
-  QtQueryListPipe<std::string> *pipe;
+  StringsQtQueryPipe *pipe;
 };
 
Index: src/UIElements/Qt4/Query/StringsQtQuery.cpp
===================================================================
--- src/UIElements/Qt4/Query/StringsQtQuery.cpp	(revision b821011a76f662862e258a9f5800fbd44c952960)
+++ src/UIElements/Qt4/Query/StringsQtQuery.cpp	(revision 859a008e875bf15678d5274d66188c486bdf83f6)
@@ -60,9 +60,9 @@
   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()));}
+  pipe = new StringsQtQueryPipe(tmp,_dialog,inputBox,inputList,AddButton,RemoveButton);
+  connect(inputBox,SIGNAL(textChanged(const QString&)),pipe,SLOT(elementEntered(const QString&)));
+  connect(inputList,SIGNAL(itemSelectionChanged()),pipe,SLOT(elementSelected()));
+  connect(AddButton,SIGNAL(clicked()),pipe,SLOT(addElement()));
+  connect(RemoveButton,SIGNAL(clicked()),pipe,SLOT(removeElement()));}
 
 QtDialog::StringsQtQuery::~StringsQtQuery()
@@ -74,5 +74,5 @@
 bool QtDialog::StringsQtQuery::handle()
 {
-  // dissect by ","
+/*  // dissect by ","
   std::string::iterator olditer = temp.begin();
   std::vector<std::string> temp_strings;
@@ -87,5 +87,6 @@
   tmp.set(temp_strings);
 
-  return temp!="";
+  return temp!="";*/
+  return true;
 }
 
