diff --git a/GUI/coregui/Models/GroupItem.cpp b/GUI/coregui/Models/GroupItem.cpp
index 0d9bbaf6decb2e738360a3d44c548f73e77475c2..ec92c13c1205b622c20e5bc4720dcbc7af629eec 100644
--- a/GUI/coregui/Models/GroupItem.cpp
+++ b/GUI/coregui/Models/GroupItem.cpp
@@ -20,17 +20,6 @@
 #include "ComboProperty.h"
 #include "GUIHelpers.h"
 
-namespace {
-QVariant createCombo(const GroupItemController& groupProperty)
-{
-    ComboProperty result;
-    result.setValues(groupProperty.itemLabels());
-    result.setCurrentIndex(groupProperty.currentIndex());
-    return result.variant();
-}
-
-}
-
 const QString GroupItem::T_ITEMS = "Item tag";
 
 GroupItem::GroupItem() : SessionItem(Constants::GroupItemType)
@@ -41,17 +30,14 @@ GroupItem::GroupItem() : SessionItem(Constants::GroupItemType)
     mapper()->setOnValueChange([this]() { onValueChange(); });
 }
 
-GroupItem::~GroupItem(){}
+GroupItem::~GroupItem() = default;
 
 void GroupItem::setGroupInfo(const GroupInfo& groupInfo)
 {
     if (m_controller)
         throw GUIHelpers::Error("GroupItem::setGroup() -> Error. Attempt to set group twice.");
 
-    m_controller.reset(new GroupItemController);
-    m_controller->setGroupInfo(groupInfo);
-    m_controller->setGroupItem(this);
-
+    m_controller = std::make_unique<GroupItemController>(this, groupInfo);
     updateComboValue();
 }
 
@@ -100,6 +86,6 @@ void GroupItem::onValueChange()
 
 void GroupItem::updateComboValue()
 {
-    setValue(createCombo(*m_controller.get()));
+    setValue(m_controller->createCombo());
 }
 
diff --git a/GUI/coregui/Models/GroupItemController.cpp b/GUI/coregui/Models/GroupItemController.cpp
index 030ee7ff4c5beadea7739fd4e76d304fa7e7b598..42310cfba023e03df7ee381edab9c18bb66b981f 100644
--- a/GUI/coregui/Models/GroupItemController.cpp
+++ b/GUI/coregui/Models/GroupItemController.cpp
@@ -16,10 +16,14 @@
 
 #include "GroupItemController.h"
 #include "ItemFactory.h"
+#include "ComboProperty.h"
 
-GroupItemController::GroupItemController()
-    : m_groupItem(nullptr)
+GroupItemController::GroupItemController(SessionItem* groupItem, GroupInfo groupInfo)
+    : m_groupItem(groupItem)
+    , m_groupInfo(groupInfo)
 {
+    m_current_type = m_groupInfo.defaultType();
+    m_groupItem->insertItem(-1, createCorrespondingItem());
 }
 
 SessionItem* GroupItemController::currentItem()
@@ -27,14 +31,6 @@ SessionItem* GroupItemController::currentItem()
     return m_groupItem ? m_groupItem->getChildOfType(currentType()) : nullptr;
 }
 
-void GroupItemController::setGroupItem(SessionItem* groupItem)
-{
-    Q_ASSERT(groupItem);
-    m_groupItem = groupItem;
-    SessionItem* item = createCorrespondingItem();
-    m_groupItem->insertItem(-1, item);
-}
-
 QString GroupItemController::currentType() const
 {
     return m_current_type;
@@ -45,7 +41,7 @@ void GroupItemController::setCurrentType(const QString& type)
     if (type == currentType())
         return;
 
-    SessionItem* prevItem = currentItem();
+    auto prevItem = currentItem();
     m_current_type = type;
 
     if (m_groupItem) {
@@ -53,29 +49,17 @@ void GroupItemController::setCurrentType(const QString& type)
             item->setVisible(true);
             item->setEnabled(true);
         } else {
-            SessionItem* new_item = createCorrespondingItem();
-            m_groupItem->insertItem(-1, new_item);
+            m_groupItem->insertItem(-1, createCorrespondingItem());
         }
         if (prevItem) {
             prevItem->setVisible(false);
             prevItem->setEnabled(false);
         }
-        //m_groupItem->emitDataChanged();
     }
 }
 
-void GroupItemController::setCurrentTypeName(const QString& type)
-{
-    if (type == currentType())
-        return;
-
-    SessionItem* prevItem = currentItem();
-    m_current_type = type;
-    if (prevItem) {
-        prevItem->setVisible(false);
-        prevItem->setEnabled(false);
-    }
-}
+//! Returns item of give type. If it doesn't exist, it will be created.
+//! Method do _not_ change current item.
 
 SessionItem* GroupItemController::getItemOfType(const QString& type)
 {
@@ -89,7 +73,6 @@ SessionItem* GroupItemController::getItemOfType(const QString& type)
                 new_item->setEnabled(false);
             }
             m_groupItem->insertItem(-1, new_item);
-            //m_groupItem->emitDataChanged();
             return new_item;
         }
     }
@@ -121,10 +104,12 @@ QStringList GroupItemController::itemLabels() const
     return m_groupInfo.itemLabels();
 }
 
-void GroupItemController::setGroupInfo(GroupInfo groupInfo)
+QVariant GroupItemController::createCombo() const
 {
-    m_groupInfo = std::move(groupInfo);
-    setCurrentType(m_groupInfo.defaultType());
+    ComboProperty result;
+    result.setValues(itemLabels());
+    result.setCurrentIndex(currentIndex());
+    return result.variant();
 }
 
 SessionItem* GroupItemController::addItem(const QString& item_type)
diff --git a/GUI/coregui/Models/GroupItemController.h b/GUI/coregui/Models/GroupItemController.h
index a7d78f45a82efa8868b6de076b856e47ee0c15ab..b2055b688c8f36d9fbc5b18c104b1bc4d673f112 100644
--- a/GUI/coregui/Models/GroupItemController.h
+++ b/GUI/coregui/Models/GroupItemController.h
@@ -18,8 +18,8 @@
 #define GROUPITEMCONTROLLER_H
 
 #include "GroupInfo.h"
-#include <QSharedPointer>
 #include <QStringList>
+#include <QVariant>
 
 class SessionItem;
 
@@ -28,26 +28,27 @@ class SessionItem;
 class BA_CORE_API_ GroupItemController
 {
 public:
-    void setGroupItem(SessionItem* groupItem);
+    GroupItemController(SessionItem* groupItem, GroupInfo groupInfo);
 
     SessionItem* currentItem();
 
     QString currentType() const;
     void setCurrentType(const QString& type);
-    void setCurrentTypeName(const QString& type);
 
     SessionItem* getItemOfType(const QString& type);
 
     int currentIndex() const;
     void setCurrentIndex(int index);
 
+    // FIXME remove after qtpropertybrowserframework removal
     QString currentLabel() const;
 
     QStringList itemTypes() const;
+
+    // FIXME make private after qtpropertybrowserframework removal
     QStringList itemLabels() const;
 
-    GroupItemController();
-    void setGroupInfo(GroupInfo groupInfo);
+    QVariant createCombo() const;
 
 private:
 
@@ -62,6 +63,7 @@ private:
 };
 
 // TODO Remove simultaneously with qtpropertybrowserframework
+#include <QSharedPointer>
 typedef QSharedPointer<GroupItemController> ObsoleteGroupProperty_t;
 Q_DECLARE_METATYPE(ObsoleteGroupProperty_t)
 
diff --git a/GUI/coregui/Models/SessionXML.cpp b/GUI/coregui/Models/SessionXML.cpp
index 18116c7530e81b9b28fda65cfb7928493fa29435..6315bd32277dcfe715fc15cd79a4dc108f7172cf 100644
--- a/GUI/coregui/Models/SessionXML.cpp
+++ b/GUI/coregui/Models/SessionXML.cpp
@@ -38,7 +38,7 @@ const QString qstring_type_name = "QString";
 void report_error(WarningMessageService* messageService, SessionItem* item,
                   const QString& error_type, const QString& message);
 
-SessionItem* createItem(SessionItem* parent, const QString& modelType, const QString& tag);
+SessionItem* createItem(SessionItem* item, const QString& modelType, const QString& tag);
 }
 
 void SessionXML::writeTo(QXmlStreamWriter* writer, SessionItem* parent)
@@ -255,20 +255,19 @@ void report_error(WarningMessageService* messageService, SessionItem* item,
     }
 }
 
-SessionItem* createItem(SessionItem* parent, const QString& modelType, const QString& tag)
+SessionItem* createItem(SessionItem* item, const QString& modelType, const QString& tag)
 {
     SessionItem* result(nullptr);
 
-    if (parent->modelType() == Constants::GroupItemType) {
-        result = parent->parent()
-                     ->item<GroupItem>(parent->parent()->tagFromItem(parent))
-                     .getItemOfType(modelType);
+    if (item->modelType() == Constants::GroupItemType) {
+        if (auto groupItem = dynamic_cast<GroupItem*>(item))
+            result = groupItem->getItemOfType(modelType);
     } else {
-        SessionTagInfo info = parent->getTagInfo(tag);
+        SessionTagInfo info = item->getTagInfo(tag);
         if (info.min == 1 && info.max == 1 && info.childCount == 1)
-            result = parent->getItem(tag);
+            result = item->getItem(tag);
         else
-            result = parent->model()->insertNewItem(modelType, parent->index(), -1, tag);
+            result = item->model()->insertNewItem(modelType, item->index(), -1, tag);
     }
     Q_ASSERT(result);
     return result;
diff --git a/GUI/coregui/Views/PropertyEditor/CustomEditors.h b/GUI/coregui/Views/PropertyEditor/CustomEditors.h
index bf2f143b47bbf6fe65cc47ffe0cc265125260daa..c10f1a8288826798fe1aed9dc856a6b40a20925a 100644
--- a/GUI/coregui/Views/PropertyEditor/CustomEditors.h
+++ b/GUI/coregui/Views/PropertyEditor/CustomEditors.h
@@ -138,5 +138,4 @@ private:
     QCheckBox *m_checkBox;
 };
 
-
 #endif  //  CUSTOMEDITORS_H