diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp
index 8874acf1db48509cf690147b5fba7080c303f127..4227eda766d2b397a7b791513bcce651e09bf9cb 100644
--- a/GUI/coregui/Models/InstrumentItems.cpp
+++ b/GUI/coregui/Models/InstrumentItems.cpp
@@ -131,14 +131,13 @@ void SpecularInstrumentItem::updateToRealData(const RealDataItem* item)
         throw GUIHelpers::Error("Error in SpecularInstrumentItem::updateToRealData: The type "
                                 "of instrument is incompatible with passed data shape.");
 
-    QString units = item->getItemValue(RealDataItem::P_NATIVE_DATA_UNITS).toString();
     const auto& data = item->nativeData()->getOutputData()->axis(0);
-    beamItem()->updateToData(data, units);
+    beamItem()->updateToData(data, item->nativeDataUnits());
 }
 
 bool SpecularInstrumentItem::alignedWith(const RealDataItem* item) const
 {
-    const QString native_units = item->getItemValue(RealDataItem::P_NATIVE_DATA_UNITS).toString();
+    const QString native_units = item->nativeDataUnits();
     if (native_units == "nbins") {
         return beamItem()->currentInclinationAxisItem()->modelType() == "BasicAxis"
                && shape() == item->shape();
diff --git a/GUI/coregui/Models/RealDataItem.cpp b/GUI/coregui/Models/RealDataItem.cpp
index d708878d79face28972426da0b46f4500c91d6fb..30dcfdca7a8624b7b36d46fb582a6b4fb0078414 100644
--- a/GUI/coregui/Models/RealDataItem.cpp
+++ b/GUI/coregui/Models/RealDataItem.cpp
@@ -107,6 +107,11 @@ const DataItem* RealDataItem::nativeData() const
     return dynamic_cast<const DataItem*>(getItem(T_NATIVE_DATA));
 }
 
+QString RealDataItem::nativeDataUnits() const
+{
+    return getItemValue(P_NATIVE_DATA_UNITS).toString();
+}
+
 //! Sets OutputData to underlying item. Creates it, if not exists.
 
 void RealDataItem::setOutputData(OutputData<double>* data)
@@ -169,6 +174,21 @@ void RealDataItem::linkToInstrument(const InstrumentItem* instrument, bool make_
         updateToInstrument();
 }
 
+QString RealDataItem::instrumentId() const
+{
+    return getItemValue(P_INSTRUMENT_ID).toString();
+}
+
+void RealDataItem::setInstrumentId(const QString& id)
+{
+    setItemValue(P_INSTRUMENT_ID, id);
+}
+
+void RealDataItem::clearInstrumentId()
+{
+    setItemValue(P_INSTRUMENT_ID, QString());
+}
+
 std::vector<int> RealDataItem::shape() const
 {
     auto data_item = dataItem();
diff --git a/GUI/coregui/Models/RealDataItem.h b/GUI/coregui/Models/RealDataItem.h
index 97aa4886dd40640709cf31bd7e89ab51349a3731..a53bb8c3a111cb4889a571872a2c1f42f8d4e757 100644
--- a/GUI/coregui/Models/RealDataItem.h
+++ b/GUI/coregui/Models/RealDataItem.h
@@ -28,13 +28,19 @@ class ImportDataInfo;
 //! The RealDataItem class represents intensity data imported from file and intended for fitting.
 
 class BA_CORE_API_ RealDataItem : public SessionItem {
+
+    friend class TestView;
+
 public:
-    static const QString T_INTENSITY_DATA;
     static const QString P_INSTRUMENT_ID;
+
+private:
+    static const QString T_INTENSITY_DATA;
     static const QString P_INSTRUMENT_NAME;
     static const QString T_NATIVE_DATA;
     static const QString P_NATIVE_DATA_UNITS;
 
+public:
     RealDataItem();
 
     IntensityDataItem* intensityDataItem();
@@ -48,6 +54,7 @@ public:
 
     DataItem* nativeData();
     const DataItem* nativeData() const;
+    QString nativeDataUnits() const;
 
     void setOutputData(OutputData<double>* data);
     void setImportData(ImportDataInfo data);
@@ -55,6 +62,10 @@ public:
 
     void linkToInstrument(const InstrumentItem* instrument, bool make_update = true);
 
+    QString instrumentId() const;
+    void setInstrumentId(const QString& id);
+    void clearInstrumentId();
+
     //! Returns the shape of underlying data item
     std::vector<int> shape() const;
 
diff --git a/GUI/coregui/Views/ImportDataWidgets/LinkInstrumentManager.cpp b/GUI/coregui/Views/ImportDataWidgets/LinkInstrumentManager.cpp
index 7469a8eaa5b5d24cb76498a144ebd8e262e96ddc..151b4e89cf606abfcd02140df4e1b7e4ea0c5ea7 100644
--- a/GUI/coregui/Views/ImportDataWidgets/LinkInstrumentManager.cpp
+++ b/GUI/coregui/Views/ImportDataWidgets/LinkInstrumentManager.cpp
@@ -141,7 +141,7 @@ void LinkInstrumentManager::setOnRealDataPropertyChange(SessionItem* dataItem,
 {
     if (property == RealDataItem::P_INSTRUMENT_ID) {
         RealDataItem* realDataItem = dynamic_cast<RealDataItem*>(dataItem);
-        QString identifier = dataItem->getItemValue(RealDataItem::P_INSTRUMENT_ID).toString();
+        const QString identifier = realDataItem->instrumentId();
         realDataItem->linkToInstrument(instrument(identifier));
     }
 }
@@ -185,12 +185,12 @@ void LinkInstrumentManager::onRealDataRowsChange(const QModelIndex& parent, int,
 void LinkInstrumentManager::updateLinks()
 {
     for (auto realDataItem : m_realDataModel->topItems<RealDataItem>()) {
-        QString identifier = realDataItem->getItemValue(RealDataItem::P_INSTRUMENT_ID).toString();
+        const QString identifier = realDataItem->instrumentId();
         auto instrumentItem = instrument(identifier);
 
         if (!instrumentItem) {
             // if no instrument with P_INSTRUMENT_ID exists, break the link
-            realDataItem->setItemValue(RealDataItem::P_INSTRUMENT_ID, QString());
+            realDataItem->clearInstrumentId();
         } else {
             // refresh the link to update axes
             realDataItem->linkToInstrument(instrumentItem);
@@ -249,7 +249,7 @@ void LinkInstrumentManager::onInstrumentLayoutChange(InstrumentItem* changedInst
 {
     for (auto realDataItem : linkedItems(changedInstrument))
         if (!changedInstrument->alignedWith(realDataItem))
-            realDataItem->setItemValue(RealDataItem::P_INSTRUMENT_ID, QString());
+            realDataItem->clearInstrumentId();
         else
             realDataItem->linkToInstrument(changedInstrument);
 }
@@ -260,9 +260,8 @@ QList<RealDataItem*> LinkInstrumentManager::linkedItems(InstrumentItem* instrume
 {
     QList<RealDataItem*> result;
     for (auto realDataItem : m_realDataModel->topItems<RealDataItem>()) {
-        QString linkedIdentifier =
-            realDataItem->getItemValue(RealDataItem::P_INSTRUMENT_ID).toString();
-        QString instrumentIdentifier =
+        const QString linkedIdentifier = realDataItem->instrumentId();
+        const QString instrumentIdentifier =
             instrumentItem->getItemValue(InstrumentItem::P_IDENTIFIER).toString();
 
         if (linkedIdentifier == instrumentIdentifier)
diff --git a/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.cpp b/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.cpp
index 75b54ab76c48f31911279b8fcae064cc7cfdf174..b285a7b2a511ca9d6dd6593561b0de00eff59e66 100644
--- a/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.cpp
+++ b/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.cpp
@@ -44,7 +44,10 @@ RealDataPropertiesWidget::RealDataPropertiesWidget(QWidget* parent)
     mainLayout->addStretch();
     setLayout(mainLayout);
 
-    setComboConnected(true);
+    connect(m_instrumentCombo,
+            static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
+            &RealDataPropertiesWidget::onInstrumentComboIndexChanged);
+
     connect(m_linkManager, &LinkInstrumentManager::instrumentMapUpdated, this,
             &RealDataPropertiesWidget::onInstrumentMapUpdate);
 
@@ -85,7 +88,7 @@ void RealDataPropertiesWidget::setItem(SessionItem* item)
                                                   this);
 
     // Set combo selector to show linked instrument
-    setComboToIdentifier(item->getItemValue(RealDataItem::P_INSTRUMENT_ID).toString());
+    setComboToIdentifier(m_currentDataItem->instrumentId());
 }
 
 //! Processes user interaction with instrument selector combo. If there is realDataItem,
@@ -98,17 +101,15 @@ void RealDataPropertiesWidget::onInstrumentComboIndexChanged(int index)
     if (!m_currentDataItem)
         return;
 
-    QString dataLink = m_currentDataItem->getItemValue(RealDataItem::P_INSTRUMENT_ID).toString();
+    QString dataLink = m_currentDataItem->instrumentId();
     if (m_current_id == dataLink)
         return;
 
-    if (m_linkManager->canLinkDataToInstrument(m_currentDataItem, m_current_id)) {
-        m_currentDataItem->setItemValue(RealDataItem::P_INSTRUMENT_ID, m_current_id);
-
-    } else {
+    if (m_linkManager->canLinkDataToInstrument(m_currentDataItem, m_current_id))
+        m_currentDataItem->setInstrumentId(m_current_id);
+    else
         // LinkManager doesn't allow to link data to instrument.
         setComboToIdentifier(dataLink); // Returning Combo selector to previous state
-    }
 }
 
 //! Updates instrument selector for new instruments and their names.
@@ -116,7 +117,8 @@ void RealDataPropertiesWidget::onInstrumentComboIndexChanged(int index)
 
 void RealDataPropertiesWidget::onInstrumentMapUpdate()
 {
-    setComboConnected(false);
+    QSignalBlocker b(m_instrumentCombo);
+
     m_instrumentCombo->clear();
     m_instrumentCombo->addItems(m_linkManager->instrumentNames());
     int index = m_linkManager->instrumentComboIndex(m_current_id);
@@ -127,44 +129,26 @@ void RealDataPropertiesWidget::onInstrumentMapUpdate()
         m_current_id = "";
         m_instrumentCombo->setCurrentIndex(0);
     }
-    setComboConnected(true);
 }
 
 //! Updates instrument combo on link change of current RealDataItem.
 
 void RealDataPropertiesWidget::onRealDataPropertyChanged(const QString& name)
 {
-    if (name == RealDataItem::P_INSTRUMENT_ID) {
-        setComboToIdentifier(
-            m_currentDataItem->getItemValue(RealDataItem::P_INSTRUMENT_ID).toString());
-    }
+    if (name == RealDataItem::P_INSTRUMENT_ID)
+        setComboToIdentifier(m_currentDataItem->instrumentId());
 }
 
 //! Sets instrument combo selector to the state corresponding to given instrument identifier.
 
 void RealDataPropertiesWidget::setComboToIdentifier(const QString& identifier)
 {
-    setComboConnected(false);
+    QSignalBlocker b(m_instrumentCombo);
+
     m_current_id = identifier;
-    int index = m_linkManager->instrumentComboIndex(identifier);
+    const int index = m_linkManager->instrumentComboIndex(identifier);
     ASSERT(index >= 0);
     m_instrumentCombo->setCurrentIndex(index);
-    setComboConnected(true);
-}
-
-//! Sets connected/disconnected for instrument combo selector.
-
-void RealDataPropertiesWidget::setComboConnected(bool isConnected)
-{
-    if (isConnected) {
-        connect(m_instrumentCombo,
-                static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
-                &RealDataPropertiesWidget::onInstrumentComboIndexChanged);
-    } else {
-        disconnect(m_instrumentCombo,
-                   static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
-                   &RealDataPropertiesWidget::onInstrumentComboIndexChanged);
-    }
 }
 
 //! Sets all widget's children enabled/disabled. When no RealDataItem selected all
diff --git a/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.h b/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.h
index 6f5d81384ed6b4ac1d1d1bdb1a85142329ffd8a7..fb2b159aa498bcb7d84be44d393c3ccfc50d4436 100644
--- a/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.h
+++ b/GUI/coregui/Views/ImportDataWidgets/RealDataPropertiesWidget.h
@@ -48,7 +48,6 @@ public slots:
 
 private:
     void setComboToIdentifier(const QString& identifier);
-    void setComboConnected(bool isConnected);
     void setPropertiesEnabled(bool enabled);
 
     LinkInstrumentManager* m_linkManager;
diff --git a/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.cpp b/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.cpp
index f70833573febb09bd5ffb6a58abf4a96d495d3a3..6060066cb3312acf997542e3ec8514cef156a28e 100644
--- a/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.cpp
+++ b/GUI/coregui/Views/ImportDataWidgets/RealDataSelectorActions.cpp
@@ -45,7 +45,11 @@ bool openRotateWarningDialog(QWidget* parent)
 
 bool rotationAffectsSetup(IntensityDataItem& intensityItem)
 {
-    if (intensityItem.parent()->getItemValue(RealDataItem::P_INSTRUMENT_ID).toBool())
+    const RealDataItem* parentRealDataItem = dynamic_cast<RealDataItem*>(intensityItem.parent());
+    const bool hasLinkToInstrument =
+        parentRealDataItem != nullptr && !parentRealDataItem->instrumentId().isEmpty();
+
+    if (hasLinkToInstrument)
         return true;
 
     if (intensityItem.maskContainerItem() && intensityItem.maskContainerItem()->hasChildren())
@@ -62,10 +66,9 @@ bool rotationAffectsSetup(IntensityDataItem& intensityItem)
 
 void resetSetup(IntensityDataItem& intensityItem)
 {
-
-    auto data_parent = intensityItem.parent();
-    if (data_parent->getItemValue(RealDataItem::P_INSTRUMENT_ID).toBool())
-        data_parent->setItemValue(RealDataItem::P_INSTRUMENT_ID, QString());
+    RealDataItem* parentRealDataItem = dynamic_cast<RealDataItem*>(intensityItem.parent());
+    if (parentRealDataItem)
+        parentRealDataItem->clearInstrumentId();
 
     if (auto maskContainer = intensityItem.maskContainerItem())
         maskContainer->model()->removeRows(0, maskContainer->numberOfChildren(),
diff --git a/Tests/UnitTests/GUI/TestLinkInstrument.cpp b/Tests/UnitTests/GUI/TestLinkInstrument.cpp
index 6828b9510462b8aad4bfd9299a397fb6973190f8..900ab24fcbee721b31071a76e8ce7c2dac1cdb61 100644
--- a/Tests/UnitTests/GUI/TestLinkInstrument.cpp
+++ b/Tests/UnitTests/GUI/TestLinkInstrument.cpp
@@ -78,5 +78,5 @@ TEST_F(TestLinkInstrument, test_canLinkToInstrument)
     x_axis->setItemValue(BasicAxisItem::P_NBINS, 10);
 
     EXPECT_EQ(manager.linkedItems(instrument), QList<RealDataItem*>());
-    EXPECT_EQ(realData->getItemValue(RealDataItem::P_INSTRUMENT_ID).toString(), QString());
+    EXPECT_EQ(realData->instrumentId(), QString());
 }