diff --git a/source/ArmarXGui/interface/WidgetDescription.ice b/source/ArmarXGui/interface/WidgetDescription.ice
index 2fa8b0d2c9b37454c5db0459969225da07b5aea2..471b6f0bb1eccc2e5937ad10a5a27e6c3d794ab9 100644
--- a/source/ArmarXGui/interface/WidgetDescription.ice
+++ b/source/ArmarXGui/interface/WidgetDescription.ice
@@ -31,6 +31,7 @@ module armarx
     {
         class Widget
         {
+            bool framed = false;
         };
         sequence<Widget> WidgetSeq;
         dictionary<string,Widget> StringWidgetDictionary;
diff --git a/source/ArmarXGui/libraries/DefaultWidgetDescriptions/DefaultWidgetDescriptions.cpp b/source/ArmarXGui/libraries/DefaultWidgetDescriptions/DefaultWidgetDescriptions.cpp
index f948e99c8eeb72ce9dbc6390d54cf1a439657c96..92863f93d0c233a313b6acfc144ee96b4865a9fd 100644
--- a/source/ArmarXGui/libraries/DefaultWidgetDescriptions/DefaultWidgetDescriptions.cpp
+++ b/source/ArmarXGui/libraries/DefaultWidgetDescriptions/DefaultWidgetDescriptions.cpp
@@ -119,7 +119,7 @@ namespace armarx
 
         LabelPtr makeLabel(std::string text)
         {
-            return new Label {std::move(text)};
+            return new Label {false, std::move(text)};
         }
 
         CheckBoxPtr makeCheckBox(std::string name, bool defaultValue, std::string label)
diff --git a/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.cpp b/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.cpp
index 8e0f09c507929573c9e40ccb77ac50f3b6226a6e..c6ac9565393de73a3e5cc2634b375b5c7e1d097c 100644
--- a/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.cpp
+++ b/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.cpp
@@ -51,7 +51,7 @@ namespace armarx
         class DescribedWidget : public DescribedWidgetBase
         {
         public:
-            DescribedWidget(const WidgetPtr&, ValueChangedListenerInterface*) {}
+            DescribedWidget(const WidgetPtr& ptr, ValueChangedListenerInterface*): DescribedWidgetBase(ptr) {}
             virtual std::map<std::string, VariantBasePtr> getVariants() override
             {
                 return {};
@@ -63,7 +63,7 @@ namespace armarx
         {
         public:
             DescribedVBoxLayout(const WidgetPtr& p, ValueChangedListenerInterface* listener)
-                : DescribedWidgetLayoutBase(listener)
+                : DescribedWidgetLayoutBase(p, listener)
             {
                 VBoxLayoutPtr ptr = VBoxLayoutPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -82,7 +82,7 @@ namespace armarx
         {
         public:
             DescribedHBoxLayout(const WidgetPtr& p, ValueChangedListenerInterface* listener)
-                : DescribedWidgetLayoutBase(listener)
+                : DescribedWidgetLayoutBase(p, listener)
             {
                 HBoxLayoutPtr ptr = HBoxLayoutPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -100,7 +100,7 @@ namespace armarx
         {
         public:
             DescribedFormLayout(const WidgetPtr& p, ValueChangedListenerInterface* listener)
-                : DescribedWidgetLayoutBase(listener)
+                : DescribedWidgetLayoutBase(p, listener)
             {
                 FormLayoutPtr ptr = FormLayoutPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -129,7 +129,7 @@ namespace armarx
         {
         public:
             DescribedFormLayoutElement(const WidgetPtr& p, ValueChangedListenerInterface* listener)
-                : DescribedWidgetLayoutBase(listener)
+                : DescribedWidgetLayoutBase(p, listener)
             {
                 FormLayoutElementPtr ptr = FormLayoutElementPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -153,14 +153,13 @@ namespace armarx
         {
         public:
             DescribedGroupBox(const WidgetPtr& p, ValueChangedListenerInterface* listener)
-                : DescribedWidgetLayoutBase(listener)
+                : DescribedWidgetLayoutBase(p, listener)
             {
                 GroupBoxPtr ptr = GroupBoxPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
                 auto ltop = new QHBoxLayout;
                 setLayout(ltop);
                 layout()->setContentsMargins(0, 0, 0, 0);
-
                 QGroupBox* grp = new QGroupBox;
                 ltop->addWidget(grp);
                 grp->setTitle(QString::fromStdString(ptr->label));
@@ -176,7 +175,7 @@ namespace armarx
         class DescribedHSpacer : public DescribedWidgetBase
         {
         public:
-            DescribedHSpacer(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedHSpacer(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 setLayout(new QVBoxLayout);
                 layout()->setContentsMargins(0, 0, 0, 0);
@@ -192,7 +191,7 @@ namespace armarx
         class DescribedVSpacer : public DescribedWidgetBase
         {
         public:
-            DescribedVSpacer(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedVSpacer(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 setLayout(new QVBoxLayout);
                 layout()->setContentsMargins(0, 0, 0, 0);
@@ -208,7 +207,7 @@ namespace armarx
         class DescribedLabel : public DescribedWidgetBase
         {
         public:
-            DescribedLabel(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedLabel(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 auto ptr = LabelPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -227,7 +226,7 @@ namespace armarx
         class DescribedVariantWidget : public DescribedWidgetBase
         {
         public:
-            DescribedVariantWidget(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedVariantWidget(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 auto ptr = VariantWidgetPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -269,7 +268,7 @@ namespace armarx
         class DescribedCheckBox : public DescribedWidgetBase
         {
         public:
-            DescribedCheckBox(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedCheckBox(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 CheckBoxPtr ptr = CheckBoxPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -298,7 +297,7 @@ namespace armarx
         class DescribedIntSpinBox : public DescribedWidgetBase
         {
         public:
-            DescribedIntSpinBox(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedIntSpinBox(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 IntSpinBoxPtr ptr = IntSpinBoxPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -329,7 +328,7 @@ namespace armarx
         class DescribedDoubleSpinBox : public DescribedWidgetBase
         {
         public:
-            DescribedDoubleSpinBox(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedDoubleSpinBox(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 DoubleSpinBoxPtr ptr = DoubleSpinBoxPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -362,7 +361,7 @@ namespace armarx
         class DescribedFloatSpinBox : public DescribedWidgetBase
         {
         public:
-            DescribedFloatSpinBox(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedFloatSpinBox(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 FloatSpinBoxPtr ptr = FloatSpinBoxPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -395,7 +394,7 @@ namespace armarx
         class DescribedStringComboBox : public DescribedWidgetBase
         {
         public:
-            DescribedStringComboBox(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedStringComboBox(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 StringComboBoxPtr ptr = StringComboBoxPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -428,7 +427,7 @@ namespace armarx
         class DescribedLineEdit : public DescribedWidgetBase
         {
         public:
-            DescribedLineEdit(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedLineEdit(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 LineEditPtr ptr = LineEditPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -457,7 +456,7 @@ namespace armarx
         class DescribedDoubleLineEdit : public DescribedWidgetBase
         {
         public:
-            DescribedDoubleLineEdit(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedDoubleLineEdit(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 DoubleLineEditPtr ptr = DoubleLineEditPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -487,7 +486,7 @@ namespace armarx
         class DescribedFloatLineEdit : public DescribedWidgetBase
         {
         public:
-            DescribedFloatLineEdit(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedFloatLineEdit(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 FloatLineEditPtr ptr = FloatLineEditPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -518,7 +517,7 @@ namespace armarx
         class DescribedIntSlider : public DescribedWidgetBase
         {
         public:
-            DescribedIntSlider(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedIntSlider(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 IntSliderPtr ptr = IntSliderPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -549,7 +548,7 @@ namespace armarx
         class DescribedDoubleSlider : public DescribedWidgetBase
         {
         public:
-            DescribedDoubleSlider(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedDoubleSlider(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 DoubleSliderPtr ptr = DoubleSliderPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -582,7 +581,7 @@ namespace armarx
         class DescribedFloatSlider : public DescribedWidgetBase
         {
         public:
-            DescribedFloatSlider(const WidgetPtr& p, ValueChangedListenerInterface*)
+            DescribedFloatSlider(const WidgetPtr& p, ValueChangedListenerInterface*): DescribedWidgetBase(p)
             {
                 FloatSliderPtr ptr = FloatSliderPtr::dynamicCast(p);
                 ARMARX_CHECK_NOT_NULL(ptr);
@@ -614,6 +613,8 @@ namespace armarx
         DescribedWidgetFactoryRegistration<DescribedFloatSlider> registerDescribedFloatSlider {FloatSlider::ice_staticId()};
 
         //functions from base classes
+        DescribedWidgetLayoutBase::DescribedWidgetLayoutBase(WidgetPtr ptr, ValueChangedListenerInterface* listener): DescribedWidgetBase(ptr), listener {listener ? listener : this} {}
+
         std::map<std::string, VariantBasePtr> DescribedWidgetLayoutBase::getVariants()
         {
             std::map<std::string, VariantBasePtr> result;
@@ -641,7 +642,7 @@ namespace armarx
             class ErrorMessageWidget : public DescribedWidgetBase
             {
             public:
-                ErrorMessageWidget(const std::string& errorMessage)
+                ErrorMessageWidget(const std::string& errorMessage): DescribedWidgetBase(nullptr)
                 {
                     setLayout(new QVBoxLayout);
                     setName(".ErrorMessageWidget");
@@ -684,5 +685,19 @@ namespace armarx
             return new ErrorMessageWidget {"makeDescribedWidget: Unknown error"};
         }
 
+        DescribedWidgetBase::DescribedWidgetBase(WidgetPtr ptr)
+        {
+            if (ptr && ptr->framed)
+            {
+                setFrameShape(QFrame::StyledPanel);
+            }
+        }
+
+        ValueChangedListenerInterface::ValueChangedListenerInterface()
+        {
+            setFrameShape(QFrame::NoFrame);
+            setFrameShadow(QFrame::Raised);
+        }
+
     }
 }
diff --git a/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.h b/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.h
index 4f2abe866df4b21fe0d8f2095b975684b0ec9536..baacde9394721dc4453f76b4728c6cc7fa581be9 100644
--- a/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.h
+++ b/source/ArmarXGui/libraries/WidgetDescription/WidgetDescription.h
@@ -25,7 +25,7 @@
 
 #include <functional>
 
-#include <QWidget>
+#include <QFrame>
 
 #include <ArmarXCore/core/util/Registrar.h>
 #include <ArmarXCore/core/exceptions/local/ExpressionException.h>
@@ -36,18 +36,21 @@ namespace armarx
 {
     namespace WidgetDescription
     {
-        class ValueChangedListenerInterface: public QWidget
+        class ValueChangedListenerInterface: public QFrame
         {
             Q_OBJECT
+        public:
+            ValueChangedListenerInterface();
         public slots:
             virtual void valueChangedSlot(std::string name, VariantBasePtr value) {}
         };
 
-
         class DescribedWidgetBase: public ValueChangedListenerInterface
         {
             Q_OBJECT
         public:
+            DescribedWidgetBase(WidgetPtr ptr);
+
             virtual std::map<std::string, VariantBasePtr> getVariants()
             {
                 return {};
@@ -74,7 +77,7 @@ namespace armarx
         {
             Q_OBJECT
         public:
-            DescribedWidgetLayoutBase(ValueChangedListenerInterface* listener): listener {listener ? listener : this} {}
+            DescribedWidgetLayoutBase(WidgetPtr ptr, ValueChangedListenerInterface* listener);
             virtual std::map<std::string, VariantBasePtr> getVariants() override;
             virtual void valueChangedSlot(std::string name, VariantBasePtr value) override
             {