diff --git a/GUI/coregui/Models/GroupItem.cpp b/GUI/coregui/Models/GroupItem.cpp
index de656dabb0ca035ccaa13b835ced2a1ec68a5024..dfe5e588ab7424c4e126477d9cee46cc7dbfaed7 100644
--- a/GUI/coregui/Models/GroupItem.cpp
+++ b/GUI/coregui/Models/GroupItem.cpp
@@ -15,26 +15,21 @@
 // ************************************************************************** //
 
 #include "GroupItem.h"
+#include "GUIHelpers.h"
 
 const QString GroupItem::T_ITEMS = "Item tag";
 
-GroupItem::GroupItem()
-    :SessionItem(Constants::GroupItemType)
+GroupItem::GroupItem() : SessionItem(Constants::GroupItemType)
 {
     registerTag(T_ITEMS);
     setDefaultTag(T_ITEMS);
-
-//    mapper()->setOnChildPropertyChange(
-//                [this](SessionItem* item, const QString &name)
-//    {
-//        group()->setCurrentLabel(item->itemLabel());
-////        emitDataChanged();
-//    });
-
 }
 
 void GroupItem::setGroup(GroupProperty_t group)
 {
+    if (value().isValid())
+        throw GUIHelpers::Error("GroupItem::setGroup() -> Error. Attempt to set group twice.");
+
     group->setGroupItem(this);
     setValue(QVariant::fromValue(group));
 }
@@ -44,9 +39,16 @@ GroupProperty_t GroupItem::group() const
     return value().value<GroupProperty_t>();
 }
 
-SessionItem *GroupItem::currentItem()
+SessionItem* GroupItem::currentItem()
+{
+    return value().isValid() ? group()->getCurrentItem() : nullptr;
+}
+
+SessionItem* GroupItem::setCurrentType(const QString& modelType)
 {
-    return group()->getCurrentItem();
+    GroupProperty_t group_property = group();
+    group_property->setCurrentType(modelType);
+    return currentItem();
 }
 
 QStringList GroupItem::translateList(const QStringList& list) const
diff --git a/GUI/coregui/Models/GroupItem.h b/GUI/coregui/Models/GroupItem.h
index b9751ff490c35eb9da8718118c99648c28e3afee..ccda647e3f48da6aff436482b50d37bdab071ec3 100644
--- a/GUI/coregui/Models/GroupItem.h
+++ b/GUI/coregui/Models/GroupItem.h
@@ -22,16 +22,17 @@
 
 class BA_CORE_API_ GroupItem : public SessionItem
 {
-
 public:
     static const QString T_ITEMS;
     GroupItem();
+
     void setGroup(GroupProperty_t group);
     GroupProperty_t group() const;
-    SessionItem *currentItem();
+    SessionItem* currentItem();
 
-    QStringList translateList(const QStringList& list) const;
+    SessionItem* setCurrentType(const QString& modelType);
 
+    QStringList translateList(const QStringList& list) const;
 };
 
 #endif // GROUPITEM_H
diff --git a/GUI/coregui/Models/GroupProperty.cpp b/GUI/coregui/Models/GroupProperty.cpp
index e642c71b69cecacf2edb9ac3a74adb407a56f645..093b3aadce53f34eab510866c1e6c7debf65b0d5 100644
--- a/GUI/coregui/Models/GroupProperty.cpp
+++ b/GUI/coregui/Models/GroupProperty.cpp
@@ -26,7 +26,7 @@ GroupProperty::GroupProperty(QString group_name)
 SessionItem *GroupProperty::getCurrentItem()
 {
     if(m_groupItem) return m_groupItem->getChildByName(this->getCurrentType());
-    return 0;
+    return nullptr;
 }
 
 void GroupProperty::setGroupItem(SessionItem *groupItem)
@@ -48,7 +48,7 @@ QString GroupProperty::getCurrentType() const
     return m_current_type;
 }
 
-void GroupProperty::setCurrentType(const QString &type, bool)
+void GroupProperty::setCurrentType(const QString &type)
 {
     if(type == getCurrentType()) return;
 
diff --git a/GUI/coregui/Models/GroupProperty.h b/GUI/coregui/Models/GroupProperty.h
index 66bf5289feede0638d1ec965db2afec4257cff1f..e6afc6302ce2f3f481b4c0826365d374a1e38a3d 100644
--- a/GUI/coregui/Models/GroupProperty.h
+++ b/GUI/coregui/Models/GroupProperty.h
@@ -36,7 +36,7 @@ public:
     SessionItem *createCorrespondingItem();
 
     QString getCurrentType() const;
-    void setCurrentType(const QString &type, bool = true);
+    void setCurrentType(const QString &type);
 
     QString getCurrentLabel() const;
 
diff --git a/GUI/coregui/Models/InterferenceFunctionItems.cpp b/GUI/coregui/Models/InterferenceFunctionItems.cpp
index 5008356b4b93555dafc1adf865b371cfd58be0f8..f4f07f996ae838d9c81e10ffe5bc0a3db0575132 100644
--- a/GUI/coregui/Models/InterferenceFunctionItems.cpp
+++ b/GUI/coregui/Models/InterferenceFunctionItems.cpp
@@ -28,6 +28,8 @@
 #include "InterferenceFunction2DParaCrystal.h"
 #include "InterferenceFunctionRadialParaCrystal.h"
 #include "InterferenceFunction1DLattice.h"
+#include "GroupItem.h"
+#include <QDebug>
 
 InterferenceFunctionItem::InterferenceFunctionItem(const QString& modelType)
     : SessionGraphicsItem(modelType)
@@ -104,10 +106,15 @@ InterferenceFunction2DParaCrystalItem::InterferenceFunction2DParaCrystalItem()
         }
     });
 
-    mapper()->setOnChildPropertyChange([this](SessionItem* item, const QString&) {
-        if (item->modelType() == Constants::GroupItemType) {
+    mapper()->setOnChildPropertyChange([this](SessionItem* item, const QString& property) {
+        if (item->modelType() == Constants::GroupItemType && item->displayName() ==
+            InterferenceFunction2DLatticeItem::P_LATTICE_TYPE) {
             update_rotation_availability();
         }
+//        if (item->modelType() == Constants::GroupItemType && property == GroupItem::T_ITEMS && isTag(P_PDF1) && isTag(P_PDF2)) {
+//            qDebug() << item->modelType() << property;
+//            update_distribution_displaynames();
+//        }
     });
 }
 
@@ -145,6 +152,29 @@ void InterferenceFunction2DParaCrystalItem::update_rotation_availability()
     angleItem->setEnabled(!getItemValue(P_XI_INTEGRATION).toBool());
 }
 
+//void InterferenceFunction2DParaCrystalItem::update_distribution_displaynames()
+//{
+//    GroupItem *group1 = dynamic_cast<GroupItem*>(getItem(P_PDF1));
+//    GroupItem *group2 = dynamic_cast<GroupItem*>(getItem(P_PDF2));
+
+//    if(!group1 || !group2)
+//        return;
+
+//    SessionItem *pdf1 = group1->currentItem();
+//    SessionItem *pdf2 = group2->currentItem();
+
+//    if(pdf1 && pdf2) {
+//        qDebug() << pdf1->displayName() << pdf2->displayName();
+//        if(pdf1->modelType() == pdf2->modelType()) {
+//            pdf1->setDisplayName(pdf1->modelType()+QString::number(0));
+//            pdf2->setDisplayName(pdf2->modelType()+QString::number(1));
+//        } else {
+//            pdf1->setDisplayName(pdf1->modelType());
+//            pdf2->setDisplayName(pdf2->modelType());
+//        }
+//    }
+//}
+
 // --------------------------------------------------------------------------------------------- //
 
 const QString InterferenceFunction1DLatticeItem::P_LENGTH =
diff --git a/GUI/coregui/Models/InterferenceFunctionItems.h b/GUI/coregui/Models/InterferenceFunctionItems.h
index 13db27f348d76a6093e0ca6dc200996d67d07148..0efb72be58dd3cc1e673cb4d2fa88635b906585d 100644
--- a/GUI/coregui/Models/InterferenceFunctionItems.h
+++ b/GUI/coregui/Models/InterferenceFunctionItems.h
@@ -55,6 +55,7 @@ public:
     std::unique_ptr<IInterferenceFunction> createInterferenceFunction() const;
 private:
     void update_rotation_availability();
+//    void update_distribution_displaynames();
 };
 
 class BA_CORE_API_ InterferenceFunction1DLatticeItem : public InterferenceFunctionItem
diff --git a/GUI/coregui/Models/SessionItem.cpp b/GUI/coregui/Models/SessionItem.cpp
index e5b51ddb9fe93fc10498781c1d6ffe6b9f6a6a0e..ccdeb26a71b3d329851c26e21d0c5feb1b16a35a 100644
--- a/GUI/coregui/Models/SessionItem.cpp
+++ b/GUI/coregui/Models/SessionItem.cpp
@@ -500,11 +500,9 @@ SessionItem *SessionItem::getGroupItem(const QString &name, const QString &type)
 
 SessionItem *SessionItem::setGroupProperty(const QString &name, const QString &value) const
 {
-    if (GroupItem *item = dynamic_cast<GroupItem *>(getItem(name))) {
-        GroupProperty_t group_property = item->group();
-        group_property->setCurrentType(value);
-        return group_property->getCurrentItem();
-    }
+    if (GroupItem *item = dynamic_cast<GroupItem *>(getItem(name)))
+        return item->setCurrentType(value);
+
     return nullptr;
 }
 
diff --git a/Tests/Functional/GUI/GUITranslationTest/main.cpp b/Tests/Functional/GUI/GUITranslationTest/main.cpp
index d8f70393efa14d182efddc3706b77c30db6baf74..d1d3706038bf2095ee94a6281af530fd1aa3f0d2 100644
--- a/Tests/Functional/GUI/GUITranslationTest/main.cpp
+++ b/Tests/Functional/GUI/GUITranslationTest/main.cpp
@@ -21,9 +21,9 @@ bool run_tests() {
 
     std::vector<std::pair<std::string, std::string>> conditions = {
         //    {"BasicGISAS", "CylindersAndPrismsBuilder"},
-    {"BasicGISAS", "RotatedPyramidsBuilder"},
+//    {"BasicGISAS", "RotatedPyramidsBuilder"},
 //    {"BasicGISAS", "RadialParaCrystalBuilder"},
-//    {"BasicGISAS", "Basic2DParaCrystalBuilder"},
+    {"BasicGISAS", "Basic2DParaCrystalBuilder"},
 //    {"BasicGISAS", "Lattice1DBuilder"},
 //    {"BasicGISAS", "Basic2DLatticeBuilder"},
 //    {"BasicGISAS", "SquareLatticeBuilder"},
diff --git a/Tests/UnitTests/GUI/TestGUI.cpp b/Tests/UnitTests/GUI/TestGUI.cpp
index e0a40142e548566a298ebb559cc450f500f8588f..0c4dda97d46b0a0d0966eeba71ebce08da404a12 100644
--- a/Tests/UnitTests/GUI/TestGUI.cpp
+++ b/Tests/UnitTests/GUI/TestGUI.cpp
@@ -18,6 +18,7 @@
 #include "TestMaterialModel.h"
 #include "TestComboProperty.h"
 #include "TestTranslations.h"
+#include "TestGroupProperty.h"
 
 int main(int argc, char** argv) {
     QCoreApplication app(argc, argv);
@@ -42,6 +43,7 @@ int main(int argc, char** argv) {
     TestMaterialModel testMaterialModel;
     TestComboProperty testComboProperty;
     TestTranslations testTranslations;
+    TestGroupProperty testGroupProperty;
 
     bool status(false);
 
@@ -63,6 +65,7 @@ int main(int argc, char** argv) {
     status |= QTest::qExec(&testMaterialModel, argc, argv);
     status |= QTest::qExec(&testComboProperty, argc, argv);
     status |= QTest::qExec(&testTranslations, argc, argv);
+    status |= QTest::qExec(&testGroupProperty, argc, argv);
 
     return status;
 }
diff --git a/Tests/UnitTests/GUI/TestGroupProperty.h b/Tests/UnitTests/GUI/TestGroupProperty.h
new file mode 100644
index 0000000000000000000000000000000000000000..6560bb2edb720a4237d8bd95c2f93bed61e6cc79
--- /dev/null
+++ b/Tests/UnitTests/GUI/TestGroupProperty.h
@@ -0,0 +1,45 @@
+#include <QtTest>
+#include <QDebug>
+#include "GroupItem.h"
+#include "GroupPropertyRegistry.h"
+#include "GUIHelpers.h"
+#include "verify_throw_macro.h"
+
+class TestGroupProperty : public QObject {
+    Q_OBJECT
+
+private slots:
+    void test_CreateGroup();
+};
+
+inline void TestGroupProperty::test_CreateGroup()
+{
+    GroupProperty_t property = GroupPropertyRegistry::createGroupProperty(
+        "MyGroupProperty", Constants::DistributionGroup);
+
+    QCOMPARE(property->getCurrentType(), Constants::DistributionCosineType);
+
+    GroupItem groupItem;
+    QCOMPARE(groupItem.childItems().size(), 0);
+    QVERIFY(groupItem.currentItem() == nullptr);
+
+    // setting group property
+    groupItem.setGroup(property);
+    QCOMPARE(groupItem.childItems().size(), 1);
+    QCOMPARE(groupItem.childItems()[0], groupItem.currentItem());
+    QCOMPARE(groupItem.currentItem()->modelType(), Constants::DistributionCosineType);
+
+    // setting group property twice
+    QVERIFY_THROW(groupItem.setGroup(property), GUIHelpers::Error);
+
+    // changing current item
+    SessionItem *newItem = groupItem.setCurrentType(Constants::DistributionNoneType);
+    QCOMPARE(newItem, groupItem.currentItem());
+    QCOMPARE(newItem->modelType(), Constants::DistributionNoneType);
+    QCOMPARE(groupItem.childItems().size(), 2);
+
+}
+
+//GroupProperty_t group_property = item->group();
+//group_property->setCurrentType(value);
+//return group_property->getCurrentItem();