diff --git a/source/ArmarXGui/gui-plugins/ObserverPropertiesPlugin/CMakeLists.txt b/source/ArmarXGui/gui-plugins/ObserverPropertiesPlugin/CMakeLists.txt
index d99bc476290357f0ba9f540fdc50de3d93564ee9..ae64b2e6d82526ff2d7345bbd9ebd02e910ac5fb 100644
--- a/source/ArmarXGui/gui-plugins/ObserverPropertiesPlugin/CMakeLists.txt
+++ b/source/ArmarXGui/gui-plugins/ObserverPropertiesPlugin/CMakeLists.txt
@@ -51,6 +51,7 @@ set(GUI_MOC_HDRS
 
 set(GUI_UIS
     ObserverProperties.ui
+    widgets/properties/FilterPropertiesDialog.ui
 )
 
 set(COMPONENT_LIBS ArmarXGui ArmarXCoreObservers ArmarXCoreEigen3Variants ${QT_LIBRARIES})
diff --git a/source/ArmarXGui/gui-plugins/ObserverPropertiesPlugin/widgets/ObserverWidget.cpp b/source/ArmarXGui/gui-plugins/ObserverPropertiesPlugin/widgets/ObserverWidget.cpp
index 8b62c44723fb1b1062da956c7c48540f9dc46de4..f4ab80e1ffef9b3ce174fe414ec1b8155ab1761e 100644
--- a/source/ArmarXGui/gui-plugins/ObserverPropertiesPlugin/widgets/ObserverWidget.cpp
+++ b/source/ArmarXGui/gui-plugins/ObserverPropertiesPlugin/widgets/ObserverWidget.cpp
@@ -15,9 +15,9 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  *
- * @package    
- * @author     
- * @date       
+ * @package
+ * @author
+ * @date
  * @copyright  http://www.gnu.org/licenses/gpl-2.0.txt
  *             GNU General Public License
  */
@@ -30,7 +30,9 @@
 #include <QItemSelectionModel>
 #include "../ObserverWidgetController.h"
 #include <ArmarXGui/gui-plugins/ObserverPropertiesPlugin/widgets/properties/DataFieldPropertiesWidget.h>
+#include <ArmarXGui/gui-plugins/ObserverPropertiesPlugin/ui_FilterPropertiesDialog.h>
 #include <ArmarXCore/observers/filters/AverageFilter.h>
+#include <ArmarXCore/observers/filters/ButterworthFilter.h>
 #include <ArmarXCore/observers/filters/GaussianFilter.h>
 #include <ArmarXCore/observers/filters/MedianFilter.h>
 
@@ -136,21 +138,65 @@ void ObserverWidget::filterSelected()
     if (action)
     {
         auto widget = qobject_cast<DataFieldPropertiesWidget*>(propertiesWidget);
-        if (action->text() == "MedianFilter")
+        DatafieldFilterBasePtr filter;
+        if (action->text() == "Median Filter")
         {
-            emit createFilterClicked(widget->getDatafieldIdentifier()->getIdentifierStr(),
-                                     new filters::MedianFilter());
+            filter = new filters::MedianFilter();
         }
-        else if (action->text() == "AverageFilter")
+        else if (action->text() == "Average Filter")
         {
-            emit createFilterClicked(widget->getDatafieldIdentifier()->getIdentifierStr(),
-                                     new filters::AverageFilter());
+            filter = new filters::MedianFilter();
+        }
+        else if (action->text() == "Gaussian Filter")
+        {
+            filter = new filters::MedianFilter();
+        }
+        else if (action->text() == "Butterworth Filter")
+        {
+            filter = new filters::ButterworthFilter(10, 100, Lowpass, 1);
         }
-        else if (action->text() == "GaussianFilter")
+        else
         {
+            ARMARX_ERROR << "Filter " << action->text().toStdString() << " is unknown";
+            return;
+        }
+        QDialog d;
+        Ui::FilterPropertiesDialog dSetup;
+        dSetup.setupUi(&d);
+        dSetup.tableWidget->setSortingEnabled(false);
+        StringFloatDictionary props = filter->getProperties();
+        ARMARX_INFO << VAROUT(props);
+        dSetup.tableWidget->setRowCount(props.size());
+        dSetup.tableWidget->setColumnCount(2);
+        int i = 0;
+        for (auto & p : props)
+        {
+            auto keyItem = new QTableWidgetItem(p.first.c_str());
+            keyItem->setFlags(Qt::ItemIsEnabled);
+            dSetup.tableWidget->setItem(i, 0, keyItem);
+            auto valueItem = new QTableWidgetItem(QString::number(p.second));
+            dSetup.tableWidget->setItem(i, 1, valueItem);
+            i++;
+        }
+        dSetup.groupBox->setTitle(action->text() + " properties");
+        if (d.exec() == QDialog::Accepted)
+        {
+            props.clear();
+            for (int i = 0; i < dSetup.tableWidget->rowCount(); ++i)
+            {
+                bool ok;
+                float value = dSetup.tableWidget->item(i, 1)->text().toFloat(&ok);
+                if (ok)
+                {
+                    props[dSetup.tableWidget->item(i, 0)->text().toStdString()] = value;
+                }
+            }
+            ARMARX_INFO << VAROUT(props);
+            filter->setProperties(props);
             emit createFilterClicked(widget->getDatafieldIdentifier()->getIdentifierStr(),
-                                     new filters::GaussianFilter());
+                                     filter);
         }
+
     }
 }
 
@@ -179,9 +225,10 @@ void ObserverWidget::treeView_contextMenu(const QPoint& point)
     if (widget)
     {
         QMenu* filters = treeViewMenu.addMenu("Filters");
-        filters->addAction("MedianFilter", this, SLOT(filterSelected()));
-        filters->addAction("AverageFilter", this, SLOT(filterSelected()));
-        filters->addAction("GaussianFilter", this, SLOT(filterSelected()));
+        filters->addAction("Median Filter", this, SLOT(filterSelected()));
+        filters->addAction("Average Filter", this, SLOT(filterSelected()));
+        filters->addAction("Gaussian Filter", this, SLOT(filterSelected()));
+        filters->addAction("Butterworth Filter", this, SLOT(filterSelected()));
 
 
     }
diff --git a/source/ArmarXGui/gui-plugins/ObserverPropertiesPlugin/widgets/properties/FilterPropertiesDialog.ui b/source/ArmarXGui/gui-plugins/ObserverPropertiesPlugin/widgets/properties/FilterPropertiesDialog.ui
new file mode 100644
index 0000000000000000000000000000000000000000..a0eb05b958a9e47e6c3b2f38ce85ce22778a8acd
--- /dev/null
+++ b/source/ArmarXGui/gui-plugins/ObserverPropertiesPlugin/widgets/properties/FilterPropertiesDialog.ui
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FilterPropertiesDialog</class>
+ <widget class="QDialog" name="FilterPropertiesDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Filter Properties</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <item>
+       <widget class="QTableWidget" name="tableWidget"/>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>FilterPropertiesDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>FilterPropertiesDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>