diff --git a/GUI/coregui/Models/BeamItem.cpp b/GUI/coregui/Models/BeamItem.cpp
index f703949e972e124d6bd511c362fa4c52d785c6f8..ab44487835321a58271c97d89e85c8686de748a7 100644
--- a/GUI/coregui/Models/BeamItem.cpp
+++ b/GUI/coregui/Models/BeamItem.cpp
@@ -17,6 +17,7 @@
 #include "InterferenceFunctionItems.h"
 #include "ComboProperty.h"
 #include "AngleProperty.h"
+#include "DistributionItem.h"
 #include "Units.h"
 #include <QDebug>
 
@@ -53,7 +54,7 @@ void BeamItem::onPropertyChange(const QString &name)
 
 
 const QString BeamWavelengthItem::P_DISTRIBUTION = "Distribution";
-const QString BeamWavelengthItem::P_VALUE = "Value";
+const QString BeamWavelengthItem::P_CACHED_VALUE = "Value";
 
 BeamWavelengthItem::BeamWavelengthItem(ParameterizedItem *parent)
     : ParameterizedItem(Constants::BeamWavelengthType, parent)
@@ -61,28 +62,53 @@ BeamWavelengthItem::BeamWavelengthItem(ParameterizedItem *parent)
     setItemName(Constants::BeamWavelengthType);
     registerGroupProperty(P_DISTRIBUTION, Constants::DistributionExtendedGroup);
     setGroupProperty(P_DISTRIBUTION, Constants::DistributionGateType);
-    registerProperty(P_VALUE, 0.1, PropertyAttribute(AttLimits::lowerLimited(1e-4), 4));
+    registerProperty(P_CACHED_VALUE, 0.1, PropertyAttribute(PropertyAttribute::HIDDEN, AttLimits::lowerLimited(1e-4), 4));
 
 }
 
 void BeamWavelengthItem::onPropertyChange(const QString &name)
 {
+    qDebug() << " ";
+    qDebug() << " ";
+    qDebug() << " ";
+    qDebug() << " ";
+    qDebug() << "BeamWavelengthItem::onPropertyChange(const QString &name)" << name;
+
     if(name == P_DISTRIBUTION) {
         ParameterizedItem *distribution = getSubItems()[P_DISTRIBUTION];
         if(distribution) {
             if(distribution->modelType() == Constants::DistributionNoneType) {
-                setPropertyAppearance(P_VALUE, PropertyAttribute::VISIBLE);
+                setPropertyAppearance(P_CACHED_VALUE, PropertyAttribute::VISIBLE);
                 qDebug() << "XXX setting to visible";
             } else {
-                setPropertyAppearance(P_VALUE, PropertyAttribute::HIDDEN);
+                setPropertyAppearance(P_CACHED_VALUE, PropertyAttribute::HIDDEN);
                 qDebug() << "XXX setting to hidden";
             }
-            ParameterizedItem::onPropertyChange(P_VALUE);
+            ParameterizedItem::onPropertyChange(P_CACHED_VALUE);
         }
     }
     ParameterizedItem::onPropertyChange(name);
 }
 
+void BeamWavelengthItem::onSubItemChanged(const QString &propertyName)
+{
+    qDebug() << " ";
+    qDebug() << " ";
+    qDebug() << " ";
+    qDebug() << " ";
+    qDebug() << "BeamWavelengthItem::onSubItemChanged(const QString &propertyName)" << propertyName;
+    if(propertyName == P_DISTRIBUTION) {
+        ParameterizedItem *distribution = getSubItems()[P_DISTRIBUTION];
+        Q_ASSERT(distribution);
+        if(distribution->modelType() == Constants::DistributionNoneType) {
+            double cached_value = getRegisteredProperty(P_CACHED_VALUE).toDouble();
+            distribution->setRegisteredProperty(DistributionNoneItem::P_VALUE, cached_value);
+            distribution->setPropertyAttribute(DistributionNoneItem::P_VALUE, PropertyAttribute(AttLimits::lowerLimited(1e-4), 4));
+        }
+    }
+    ParameterizedItem::onSubItemChanged(propertyName);
+}
+
 
 const QString TestBeamItem::P_INTENSITY = "Intensity [1/s]";
 const QString TestBeamItem::P_WAVELENGTH = "Wavelength";
diff --git a/GUI/coregui/Models/BeamItem.h b/GUI/coregui/Models/BeamItem.h
index 4f2d15d8a418032d8b55926222e069a9c2daf420..bcdedbe25cdb104686102d3d7195814301270d16 100644
--- a/GUI/coregui/Models/BeamItem.h
+++ b/GUI/coregui/Models/BeamItem.h
@@ -40,10 +40,11 @@ class BA_CORE_API_ BeamWavelengthItem : public ParameterizedItem
     Q_OBJECT
 public:
     static const QString P_DISTRIBUTION;
-    static const QString P_VALUE;
+    static const QString P_CACHED_VALUE;
     explicit BeamWavelengthItem(ParameterizedItem *parent=0);
     ~BeamWavelengthItem(){}
     void onPropertyChange(const QString &name);
+    void onSubItemChanged(const QString &propertyName);
 };
 
 
diff --git a/GUI/coregui/Models/FancyGroupProperty.cpp b/GUI/coregui/Models/FancyGroupProperty.cpp
index 907747af573077feb774b803cac099d5bb5e6c44..4ac972485a8af70619376740f02be546f9eda439 100644
--- a/GUI/coregui/Models/FancyGroupProperty.cpp
+++ b/GUI/coregui/Models/FancyGroupProperty.cpp
@@ -64,7 +64,7 @@ void FancyGroupProperty::setValue(const QString &value)
 
     if(m_parent) {
         m_parent->addPropertyItem(getGroupName(), createCorrespondingItem());
-        emit m_parent->subItemChanged(getGroupName());
+        //emit m_parent->subItemChanged(getGroupName());
     }
 }
 
diff --git a/GUI/coregui/Models/ParameterizedItem.cpp b/GUI/coregui/Models/ParameterizedItem.cpp
index 3aae81f704b141484aa36636a4c5f1b2e08af8ef..b48c3a2840ce8b5c3125099f29de04fa03065441 100644
--- a/GUI/coregui/Models/ParameterizedItem.cpp
+++ b/GUI/coregui/Models/ParameterizedItem.cpp
@@ -143,28 +143,6 @@ void ParameterizedItem::setItemPort(ParameterizedItem::PortInfo::EPorts nport)
     setRegisteredProperty(P_PORT, nport);
 }
 
-
-//! this slot is called when SubItem change one of its properties
-void ParameterizedItem::onSubItemPropertyChanged(const QString & propertyName)
-{
-    Q_UNUSED(propertyName);
-    ParameterizedItem *propertyItem = qobject_cast<ParameterizedItem *>(sender());
-    for(QMap<QString, ParameterizedItem *>::iterator it=m_sub_items.begin();
-        it!= m_sub_items.end(); ++it) {
-        if(it.value() == propertyItem) {
-            FancyGroupProperty_t group_property =
-                    getRegisteredProperty(it.key()).value<FancyGroupProperty_t>();
-            group_property->setValueLabel(propertyItem->getItemLabel());
-            emit subItemPropertyChanged(it.key(), propertyName);
-            if (m_parent) m_parent->onChildPropertyChange();
-            return;
-        }
-    }
-    throw GUIHelpers::Error("ParameterizedItem::onSubItemPropertyChanged() ->"
-                            " Error. No such propertyItem found");
-}
-
-
 void ParameterizedItem::addToValidChildren(const QString &name, PortInfo::EPorts nport, int nmax_items)
 {
     m_valid_children.append(name);
@@ -177,7 +155,6 @@ void ParameterizedItem::addToValidChildren(const QString &name, PortInfo::EPorts
     }
 }
 
-
 void ParameterizedItem::addPropertyItem(QString name, ParameterizedItem *item)
 {
     //if (!item) return;
@@ -191,12 +168,12 @@ void ParameterizedItem::addPropertyItem(QString name, ParameterizedItem *item)
     }
     m_sub_items[name] = item;
     item->m_parent = this;
-    connect(item, SIGNAL(propertyChanged(QString)), this, SLOT(onSubItemPropertyChanged(QString)));
+    //connect(item, SIGNAL(propertyChanged(QString)), this, SLOT(onSubItemPropertyChanged(QString)), Qt::UniqueConnection);
+    onSubItemChanged(name);
     onChildPropertyChange();
     qDebug() << "ParameterizedItem::addPropertyItem() -> about to leave" << name;
 }
 
-
 ParameterizedItem *ParameterizedItem::registerGroupProperty(const QString &group_name, const Constants::ModelType &group_model)
 {
     qDebug() << "ParameterizedItem::registerGroupProperty() ->"
@@ -337,6 +314,39 @@ void ParameterizedItem::onChildPropertyChange()
     if (m_parent) m_parent->onChildPropertyChange();
 }
 
+//! called when new SubItem appeared
+void ParameterizedItem::onSubItemChanged(const QString &propertyName)
+{
+    connect(m_sub_items[propertyName], SIGNAL(propertyChanged(QString)), this, SLOT(processSubItemPropertyChanged(QString)), Qt::UniqueConnection);
+    emit subItemChanged(propertyName);
+}
+
+//! called when SubItem change one of its properties
+void ParameterizedItem::processSubItemPropertyChanged(const QString & propertyName)
+{
+    Q_UNUSED(propertyName);
+    ParameterizedItem *propertyItem = qobject_cast<ParameterizedItem *>(sender());
+    for(QMap<QString, ParameterizedItem *>::iterator it=m_sub_items.begin();
+        it!= m_sub_items.end(); ++it) {
+        if(it.value() == propertyItem) {
+            FancyGroupProperty_t group_property =
+                    getRegisteredProperty(it.key()).value<FancyGroupProperty_t>();
+            group_property->setValueLabel(propertyItem->getItemLabel());
+//            emit subItemPropertyChanged(it.key(), propertyName);
+//            if (m_parent) m_parent->onChildPropertyChange();
+            onSubItemPropertyChanged(it.key(), propertyName);
+            return;
+        }
+    }
+    throw GUIHelpers::Error("ParameterizedItem::onSubItemPropertyChanged() ->"
+                            " Error. No such propertyItem found");
+}
+
+void ParameterizedItem::onSubItemPropertyChanged(const QString &property_group, const QString &property_name)
+{
+    emit subItemPropertyChanged(property_group, property_name);
+    if (m_parent) m_parent->onChildPropertyChange();
+}
 
 PropertyAttribute ParameterizedItem::getPropertyAttribute(const QString &name) const
 {
diff --git a/GUI/coregui/Models/ParameterizedItem.h b/GUI/coregui/Models/ParameterizedItem.h
index 9819a03e30fef80a8f0b84a96edaa99cd0d3ba23..1ece46eb838fa37384dfb8a87e83c9c1bef25459 100644
--- a/GUI/coregui/Models/ParameterizedItem.h
+++ b/GUI/coregui/Models/ParameterizedItem.h
@@ -130,18 +130,22 @@ public:
     QStringList getParameterTreeList() const;
 
     virtual void onChildPropertyChange();
-
-public slots:
-    virtual void onSubItemPropertyChanged(const QString &propertyName);
+    void setPropertyAttribute(const QString &name, const PropertyAttribute &attribute);
 
 signals:
     void propertyChanged(const QString &propertyName);
     void subItemChanged(const QString &propertyName);
     void subItemPropertyChanged(const QString &property_group, const QString &property_name);
 
+protected slots:
+    virtual void onSubItemChanged(const QString &propertyName);
+    virtual void onSubItemPropertyChanged(const QString &property_group, const QString &property_name);
+
+private slots:
+    virtual void processSubItemPropertyChanged(const QString &propertyName);
+
 protected:
     void addToValidChildren(const QString &name, PortInfo::EPorts nport = PortInfo::PORT_0, int nmax_children = 0);
-    void setPropertyAttribute(const QString &name, const PropertyAttribute &attribute);
 
     QStringList m_registered_properties;
 
diff --git a/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.cpp b/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.cpp
index 158fe1554b824606b787274b3e0e66fb1983c469..24ff22c06eda0d185eb023b2f875d3d3ef409cb0 100644
--- a/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.cpp
+++ b/GUI/coregui/Views/PropertyEditor/AwesomePropertyEditor.cpp
@@ -402,7 +402,9 @@ void AwesomePropertyEditor::insertQtVariantProperty(QtVariantProperty *qtVariant
             } else {
                 // our parent property is already at the top, so need to add into the browser
                 QtBrowserItem *browserItem = m_d->m_browser->insertProperty(qtVariantItem, parent_qtproperty);
-                Q_ASSERT(browserItem);
+                if(!browserItem) {
+                    throw GUIHelpers::Error("AwesomePropertyEditor::insertQtVariantProperty() -> Failed while inserting property");
+                }
             }
         }
         else {