diff --git a/GUI/coregui/Models/GroupItem.cpp b/GUI/coregui/Models/GroupItem.cpp
index 3ed87642dee691f45fb81c7f9be7f21022f82565..cb00a25e6d627e9c0fa9368b3e4c16c404162877 100644
--- a/GUI/coregui/Models/GroupItem.cpp
+++ b/GUI/coregui/Models/GroupItem.cpp
@@ -16,6 +16,30 @@
 
 #include "GroupItem.h"
 #include "GUIHelpers.h"
+#include "ComboProperty.h"
+#include <QDebug>
+#include "GUIHelpers.h"
+
+namespace {
+//QVariant createCombo(const GroupInfo& groupInfo)
+//{
+//    ComboProperty result;
+//    result.setValues(groupInfo.itemLabels());
+
+//    int index = groupInfo.itemTypes().indexOf(groupInfo.defaultType());
+//    result.setCurrentIndex(index);
+//    return result.variant();
+//}
+
+QVariant createCombo(GroupProperty_t groupProperty)
+{
+    ComboProperty result;
+    result.setValues(groupProperty->itemLabels());
+    result.setCurrentIndex(groupProperty->currentIndex());
+    return result.variant();
+}
+
+}
 
 const QString GroupItem::T_ITEMS = "Item tag";
 
@@ -23,25 +47,30 @@ GroupItem::GroupItem() : SessionItem(Constants::GroupItemType)
 {
     registerTag(T_ITEMS);
     setDefaultTag(T_ITEMS);
+
+    mapper()->setOnValueChange([this]() { onValueChange(); });
 }
 
 void GroupItem::setGroupInfo(const GroupInfo& groupInfo)
 {
-    if (m_groupInfo.isValid())
-        throw GUIHelpers::Error("GroupItem::setGroup() -> Error. Attempt to set GroupInfo twice.");
+    if (m_groupProperty)
+        throw GUIHelpers::Error("GroupItem::setGroup() -> Error. Attempt to set group twice.");
 
-    m_groupInfo = groupInfo;
+    GroupProperty_t prop(new GroupProperty);
+    prop->setGroupInfo(groupInfo);
 
-    GroupProperty_t groupProperty(new GroupProperty);
-    groupProperty->setGroupInfo(groupInfo);
+    prop->setGroupItem(this);
+    m_groupProperty = prop;
+    setValue(createCombo(groupProperty()));
+    emitDataChanged(); // necessary because ComboProperty variant comparators are disabled
 
-    groupProperty->setGroupItem(this);
-    setValue(QVariant::fromValue(groupProperty));
+//    setValue(QVariant::fromValue(groupProperty));
 }
 
 SessionItem* GroupItem::currentItem() const
 {
-    return value().isValid() ? groupProperty()->currentItem() : nullptr;
+//    return value().isValid() ? groupProperty()->currentItem() : nullptr;
+    return groupProperty() ? groupProperty()->currentItem() : nullptr;
 }
 
 QString GroupItem::currentType() const
@@ -49,10 +78,18 @@ QString GroupItem::currentType() const
     return groupProperty()->currentType();
 }
 
+#include <QDebug>
 SessionItem* GroupItem::setCurrentType(const QString& modelType)
 {
-    GroupProperty_t group_property = groupProperty();
-    group_property->setCurrentType(modelType);
+    qDebug() << "GroupItem::setCurrentType -> current"
+             << groupProperty()->currentType() << groupProperty()->currentIndex();
+    qDebug() << "   setting" << modelType;
+    groupProperty()->setCurrentType(modelType);
+    qDebug() << "GroupItem::setCurrentType -> current"
+             << groupProperty()->currentType() << groupProperty()->currentIndex();
+
+    setValue(createCombo(groupProperty()));
+    emitDataChanged(); // necessary because ComboProperty variant comparators are disabled
 
     return currentItem();
 }
@@ -65,11 +102,30 @@ QStringList GroupItem::translateList(const QStringList& list) const
 
 GroupProperty_t GroupItem::groupProperty() const
 {
-    return value().value<GroupProperty_t>();
+    return m_groupProperty;
+//    return value().value<GroupProperty_t>();
 }
 
 SessionItem* GroupItem::getItemOfType(const QString& type)
 {
-    return groupProperty()->getItemOfType(type);
+    SessionItem* result = groupProperty()->getItemOfType(type);
+
+//    setValue(createCombo(groupProperty()));
+
+    return result;
+}
+
+void GroupItem::onValueChange()
+{
+    if (!value().canConvert<ComboProperty>())
+        throw GUIHelpers::Error("GroupItem::onValueChange() -> Error. Wrong property type");
+
+    qDebug() << "GroupItem::onValueChange()";
+
+    ComboProperty property = value().value<ComboProperty>();
+    if (property.currentIndex() != m_groupProperty->currentIndex()) {
+        qDebug() << "GroupItem::onValueChange() -> setting index" << property.currentIndex();
+        m_groupProperty->setCurrentIndex(property.currentIndex());
+    }
 }
 
diff --git a/GUI/coregui/Models/GroupItem.h b/GUI/coregui/Models/GroupItem.h
index 2614749e7622fded3ee31dfbc0bc6d978c32e114..7c08b05c718ab2eec8f79c6f5d3bf58a2e73b375 100644
--- a/GUI/coregui/Models/GroupItem.h
+++ b/GUI/coregui/Models/GroupItem.h
@@ -42,9 +42,9 @@ public:
     SessionItem* getItemOfType(const QString& type);
 
 private:
+    void onValueChange();
     GroupProperty_t groupProperty() const;
-
-    GroupInfo m_groupInfo;
+    GroupProperty_t m_groupProperty;
 };
 
 #endif // GROUPITEM_H
diff --git a/GUI/coregui/Models/GroupProperty.cpp b/GUI/coregui/Models/GroupProperty.cpp
index dfa27c9e5b6c16ca03812bb02870f33939e921c6..0c76bdd24498d0e1ff3259afa5dc1b35e3471efe 100644
--- a/GUI/coregui/Models/GroupProperty.cpp
+++ b/GUI/coregui/Models/GroupProperty.cpp
@@ -60,7 +60,7 @@ void GroupProperty::setCurrentType(const QString& type)
             prevItem->setVisible(false);
             prevItem->setEnabled(false);
         }
-        m_groupItem->emitDataChanged();
+        //m_groupItem->emitDataChanged();
     }
 }
 
@@ -89,7 +89,7 @@ SessionItem* GroupProperty::getItemOfType(const QString& type)
                 new_item->setEnabled(false);
             }
             m_groupItem->insertItem(-1, new_item);
-            m_groupItem->emitDataChanged();
+            //m_groupItem->emitDataChanged();
             return new_item;
         }
     }
diff --git a/Tests/UnitTests/GUI/TestGroupItem.h b/Tests/UnitTests/GUI/TestGroupItem.h
index b3387293ff99cc1218e5a1d6c33d5d7ac343adb3..7c9d66d3802249275cd27924a471b03995179c96 100644
--- a/Tests/UnitTests/GUI/TestGroupItem.h
+++ b/Tests/UnitTests/GUI/TestGroupItem.h
@@ -1,9 +1,11 @@
 #include <QtTest>
+#include "test_utils.h"
 #include "GroupInfo.h"
 #include "GroupItem.h"
+#include "ComboProperty.h"
 #include "GroupPropertyRegistry.h"
 #include "GUIHelpers.h"
-#include "verify_throw_macro.h"
+#include "SessionModel.h"
 
 class TestGroupItem : public QObject {
     Q_OBJECT
@@ -47,33 +49,54 @@ inline void TestGroupItem::test_groupInfo()
 
 inline void TestGroupItem::test_CreateGroup()
 {
-    GroupInfo groupInfo = GroupPropertyRegistry::groupInfo(Constants::DistributionGroup);
-    QCOMPARE(groupInfo.defaultType(), Constants::DistributionGaussianType);
+    SessionModel model("TestModel");
 
-    GroupItem groupItem;
-    QCOMPARE(groupItem.children().size(), 0);
-    QVERIFY(groupItem.currentItem() == nullptr);
+    GroupInfo groupInfo = GroupPropertyRegistry::groupInfo(Constants::FormFactorGroup);
+    QCOMPARE(groupInfo.defaultType(), Constants::CylinderType);
+
+    auto groupItem = dynamic_cast<GroupItem*>(model.insertNewItem(Constants::GroupItemType));
+    QCOMPARE(groupItem->children().size(), 0);
+    QVERIFY(groupItem->currentItem() == nullptr);
+    QVERIFY(groupItem->value().isValid() == false);
 
     // setting group property and checking currentItem
-    groupItem.setGroupInfo(groupInfo);
-    QCOMPARE(groupItem.children().size(), 1);
-    QCOMPARE(groupItem.children()[0], groupItem.currentItem());
-    SessionItem *cosineItem = groupItem.currentItem();
-    QCOMPARE(cosineItem->modelType(), Constants::DistributionGaussianType);
+    groupItem->setGroupInfo(groupInfo);
 
     // setting group info twice
-    QVERIFY_THROW(groupItem.setGroupInfo(groupInfo), GUIHelpers::Error);
+    QVERIFY_THROW(groupItem->setGroupInfo(groupInfo), GUIHelpers::Error);
+
+    // checking current item
+    QCOMPARE(groupItem->children().size(), 1);
+    QCOMPARE(groupItem->children()[0], groupItem->currentItem());
+    SessionItem *ffItem = groupItem->currentItem();
+    QCOMPARE(ffItem->modelType(), Constants::CylinderType);
+
+    // checking current variant
+    QVariant value = groupItem->value();
+    QVERIFY(value.canConvert<ComboProperty>() == true);
+    ComboProperty combo = value.value<ComboProperty>();
+    QCOMPARE(combo.getValues(), groupInfo.itemLabels());
+    int index = groupInfo.itemTypes().indexOf(groupInfo.defaultType());
+    QCOMPARE(combo.currentIndex(), index);
+    QCOMPARE(combo.getValue(), groupInfo.itemLabels().at(index));
 
     // changing current item
-    SessionItem *newItem = groupItem.setCurrentType(Constants::DistributionNoneType);
-    QCOMPARE(newItem, groupItem.currentItem());
-    QCOMPARE(newItem->modelType(), Constants::DistributionNoneType);
-    QCOMPARE(groupItem.children().size(), 2);
+    SessionItem *newItem = groupItem->setCurrentType(Constants::FullSphereType);
+    QCOMPARE(newItem, groupItem->currentItem());
+    QCOMPARE(newItem->modelType(), Constants::FullSphereType);
+    QCOMPARE(groupItem->children().size(), 2);
+
+    // checking current variant
+    combo = groupItem->value().value<ComboProperty>();
+    QCOMPARE(combo.getValues(), groupInfo.itemLabels());
+    index = groupInfo.itemTypes().indexOf(Constants::FullSphereType);
+    QCOMPARE(combo.currentIndex(), index);
+    QCOMPARE(combo.getValue(), groupInfo.itemLabels().at(index));
 
     // returning back to previous item
-    QCOMPARE(groupItem.setCurrentType(Constants::DistributionGaussianType), cosineItem);
-    QCOMPARE(groupItem.currentItem(), cosineItem);
-    QCOMPARE(groupItem.children().size(), 2);
+    QCOMPARE(groupItem->setCurrentType(Constants::CylinderType), ffItem);
+    QCOMPARE(groupItem->currentItem(), ffItem);
+    QCOMPARE(groupItem->children().size(), 2);
 }
 
 //! Checking that GroupProperty stays functional if displayName of currentItem is changed.
diff --git a/Tests/UnitTests/GUI/test_utils.h b/Tests/UnitTests/GUI/test_utils.h
index 1516eee6e265d774827fcd196b51e8a0bed622bf..ce564f718b60f1c8d85640fc189b0519fabe7bed 100644
--- a/Tests/UnitTests/GUI/test_utils.h
+++ b/Tests/UnitTests/GUI/test_utils.h
@@ -20,6 +20,7 @@
 #include "SessionXML.h"
 #include "PropertyItem.h"
 #include <QXmlStreamWriter>
+#include "verify_throw_macro.h"
 
 namespace TestUtils
 {
diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp
index 182abc5541c99f92f98a78439a7f630a79c6657c..980a19744c597e8ce4355eef1f3bbad544cc94ca 100644
--- a/auto/Wrap/libBornAgainFit_wrap.cpp
+++ b/auto/Wrap/libBornAgainFit_wrap.cpp
@@ -5627,7 +5627,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_  (PyObject *o, std::complex<double>* val)
 
 
 SWIGINTERNINLINE PyObject*
-SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/share/swig3.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/
+SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/home/pospelov/software/local/share/swig/3.0.8/typemaps/swigmacros.swg,104,%ifcplusplus@*/
 
 const std::complex<double>&