diff --git a/GUI/Model/Device/DatafileItem.cpp b/GUI/Model/Device/DatafileItem.cpp
index dfa68bb16e3c35e04fa18ac014cdce0e72baceb7..80307ad5f65abfd3bd1772710b79542553bbb60d 100644
--- a/GUI/Model/Device/DatafileItem.cpp
+++ b/GUI/Model/Device/DatafileItem.cpp
@@ -34,7 +34,7 @@ const QString BinaryData("BinaryData");
 const QString Data("Data");
 const QString InstrumentId("InstrumentId");
 const QString Name("Name");
-const QString NativeData("NativeData");
+const QString NativeData("NativeData");           // obsolete since v22.0
 const QString NativeDataUnits("NativeDataUnits"); // obsolete since v22.0
 const QString PresentationType("PresentationType");
 
@@ -117,22 +117,6 @@ size_t DatafileItem::rank() const
     return data1DItem() ? 1 : 2;
 }
 
-bool DatafileItem::hasNativeData() const
-{
-    return nativeDataItem() && nativeDataItem()->c_field();
-}
-
-DataItem* DatafileItem::nativeDataItem() const
-{
-    return m_nativeDataItem.get();
-}
-
-DataItem* DatafileItem::initNativeData()
-{
-    initDataItem(rank(), m_nativeDataItem);
-    return m_nativeDataItem.get();
-}
-
 bool DatafileItem::holdsDimensionalData() const
 {
     const Frame& frame = dataItem()->c_field()->frame();
@@ -143,11 +127,6 @@ bool DatafileItem::holdsDimensionalData() const
     return false;
 }
 
-const Datafield* DatafileItem::nativeDatafield() const
-{
-    return hasNativeData() ? nativeDataItem()->c_field() : nullptr;
-}
-
 //! Sets Datafield to underlying item.
 
 void DatafileItem::setTheDatafield(const Datafield& data)
@@ -232,9 +211,6 @@ void DatafileItem::updateFileName()
 {
     if (DataItem* item = dataItem())
         item->setFileName(GUI::Path::intensityDataFileName(realItemName(), "realdata"));
-
-    if (DataItem* item = nativeDataItem())
-        item->setFileName(GUI::Path::intensityDataFileName(realItemName(), "nativedata"));
 }
 
 void DatafileItem::writeTo(QXmlStreamWriter* w) const
@@ -265,14 +241,6 @@ void DatafileItem::writeTo(QXmlStreamWriter* w) const
         m_dataItem->writeTo(w);
         w->writeEndElement();
     }
-
-    // native data
-    if (m_nativeDataItem) {
-        w->writeStartElement(Tag::NativeData);
-        XML::writeAttribute(w, XML::Attrib::type, m_nativeDataItem->TYPE);
-        m_nativeDataItem->writeTo(w);
-        w->writeEndElement();
-    }
 }
 
 void DatafileItem::readFrom(QXmlStreamReader* r)
@@ -312,12 +280,6 @@ void DatafileItem::readFrom(QXmlStreamReader* r)
             m_dataItem->readFrom(r);
             XML::gotoEndElementOfTag(r, tag);
 
-            // native data
-        } else if (tag == Tag::NativeData) {
-            ASSERT(m_dataItem); // read 'm_dataItem' before
-            initNativeData()->readFrom(r);
-            XML::gotoEndElementOfTag(r, tag);
-
         } else
             r->skipCurrentElement();
     }
@@ -327,30 +289,16 @@ void DatafileItem::writeDatafiles(const QString& projectDir) const
 {
     if (m_dataItem)
         m_dataItem->saveDatafield(projectDir);
-
-    if (m_nativeDataItem)
-        m_nativeDataItem->saveDatafield(projectDir);
 }
 
 QString DatafileItem::readDatafiles(const QString& projectDir, MessageService* messageService)
 {
-    QString dataError, nativeDataError;
-
-    if (m_dataItem)
-        dataError = m_dataItem->loadDatafield(messageService, projectDir, rank());
-
-    if (m_nativeDataItem)
-        nativeDataError = m_nativeDataItem->loadDatafield(messageService, projectDir, rank());
-
-    // return error message
-    if (dataError.isEmpty() && nativeDataError.isEmpty())
-        return {};
-    else if (!dataError.isEmpty() && nativeDataError.isEmpty())
-        return (dataError);
-    else if (dataError.isEmpty() && !nativeDataError.isEmpty())
-        return (nativeDataError);
-    else
-        return (dataError + "\n" + nativeDataError);
+    if (m_dataItem) {
+        QString dataError = m_dataItem->loadDatafield(messageService, projectDir, rank());
+        if (!dataError.isEmpty())
+            return (dataError);
+    }
+    return {};
 }
 
 void DatafileItem::copyTo(DatafileItem* const dest) const
@@ -358,10 +306,14 @@ void DatafileItem::copyTo(DatafileItem* const dest) const
     GUI::Util::copyContents(this, dest);
 
     if (m_dataItem)
+<<<<<<< HEAD
         dest->dataItem()->setDatafield(*dataItem()->c_field());
 
     if (m_nativeDataItem)
         dest->nativeDataItem()->setDatafield(*nativeDataItem()->c_field());
+=======
+        realdata_dst->dataItem()->setDatafield(*dataItem()->c_field());
+>>>>>>> f7e5c9987a (rm all 'nativeUnits')
 }
 
 std::vector<int> DatafileItem::shape() const
@@ -384,8 +336,5 @@ void DatafileItem::updateToInstrument(const InstrumentItem* instrument)
         return;
 
     // instrument == nullptr => unlinking => going back to native data
-    auto* native_data_item = nativeDataItem();
-    auto* data_source = native_data_item ? native_data_item : data_item;
-
-    std::unique_ptr<Datafield> native_data(data_source->c_field()->clone());
+    // TODO now the function does nothing. do not remove this function, but give it meaning again
 }
diff --git a/GUI/Model/Device/DatafileItem.h b/GUI/Model/Device/DatafileItem.h
index 99d47cdfda8ef299e7c5da54fec53041180eb4d9..d27a5d99054e6b70c108be2d5d5fd95052132e41 100644
--- a/GUI/Model/Device/DatafileItem.h
+++ b/GUI/Model/Device/DatafileItem.h
@@ -51,17 +51,7 @@ public:
 
     size_t rank() const;
 
-    // native data
-
-    bool hasNativeData() const;
-    DataItem* nativeDataItem() const;
-
-    DataItem* initNativeData();
-
     bool holdsDimensionalData() const;
-
-    const Datafield* nativeDatafield() const;
-
     void setTheDatafield(const Datafield& data);
 
     // instrument
@@ -106,19 +96,7 @@ private:
     QString m_presentationType;
 
     // DataItem can be `Data2DItem` and `Data1DItem` (default `Data2DItem`).
-    /*
-      "Native_data" is introduced and used in specular mode to keep the original axis
-      of the dataset. It also stores a copy of original intensity values inside datafield,
-      but these values are always the same for "data" and "native_data".
-
-      At the moment of loading file to DatafileItem "data" and "native_data" are completely equal.
-      But after linking DatafileItem to instrument and changing the current units the axis of "data"
-      is changed. When we unlink DatafileItem from instrument, we restore the original axis from
-      "native_data", because now there is no other way to transform axis without Frame
-      coming from instrument.
-    */
     std::unique_ptr<DataItem> m_dataItem;
-    std::unique_ptr<DataItem> m_nativeDataItem;
 };
 
 #endif // BORNAGAIN_GUI_MODEL_DEVICE_DATAFILEITEM_H
diff --git a/GUI/Model/Device/InstrumentItems.cpp b/GUI/Model/Device/InstrumentItems.cpp
index fb69b026e1f0de54c019c9615cc8f80b58133c8b..78d5ef737d2a150c52c49ec762383c9a9cc4f030 100644
--- a/GUI/Model/Device/InstrumentItems.cpp
+++ b/GUI/Model/Device/InstrumentItems.cpp
@@ -371,7 +371,7 @@ void SpecularInstrumentItem::updateToRealData(const DatafileItem* item)
     if (shape().size() != item->shape().size())
         throw std::runtime_error("Specular instrument type is incompatible with passed data shape");
 
-    const auto& dataAxis = item->nativeDatafield()->axis(0);
+    const auto& dataAxis = item->dataItem()->c_field()->axis(0);
     scanItem()->updateToData(dataAxis);
     scanItem()->grazingScanItem()->updateAxIndicators(makeFrame());
 }
@@ -393,12 +393,7 @@ bool SpecularInstrumentItem::alignedWith(const DatafileItem* item) const
     if (!instrumentAxis)
         return false;
 
-    if (!item->hasNativeData())
-        return false;
-
-    // TODO remove native data from everywhere
-    // https://jugit.fz-juelich.de/mlz/bornagain/-/issues/331
-    const auto& native_axis = item->nativeDatafield()->axis(0);
+    const auto& native_axis = item->dataItem()->c_field()->axis(0);
     return *instrumentAxis == native_axis;
 }
 
diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp
index c6513972b2e5bda5fc4e2ca13a109ab8fca961dd..cf709399a613dd409a08fbac377d62ed7e695ac3 100644
--- a/GUI/Model/Job/JobItem.cpp
+++ b/GUI/Model/Job/JobItem.cpp
@@ -664,11 +664,7 @@ void JobItem::updateFileName()
     if (DataItem* item = simulatedDataItem())
         item->setFileName(GUI::Path::intensityDataFileName(jobName(), "jobdata"));
 
-    if (DatafileItem* real = realItem()) {
+    if (DatafileItem* real = realItem())
         if (DataItem* item = real->dataItem())
             item->setFileName(GUI::Path::intensityDataFileName(jobName(), "refdata"));
-
-        if (DataItem* item = real->nativeDataItem())
-            item->setFileName(GUI::Path::intensityDataFileName(identifier(), "nativedata"));
-    }
 }
diff --git a/GUI/Model/Model/DatafilesModel.cpp b/GUI/Model/Model/DatafilesModel.cpp
index e005ec1436666b13289105b16e02468aa36eac59..e0fd2959e481c7058e775be8a6dd3ff0ec1e708c 100644
--- a/GUI/Model/Model/DatafilesModel.cpp
+++ b/GUI/Model/Model/DatafilesModel.cpp
@@ -37,12 +37,10 @@ DatafilesModel::~DatafilesModel() = default;
 QVector<DataItem*> DatafilesModel::dataItems() const
 {
     QVector<DataItem*> result;
-    for (auto* realData : realItems()) {
+    for (auto* realData : realItems())
         if (auto* data2DItem = realData->dataItem())
             result.push_back(data2DItem);
-        if (auto* native_data_item = realData->nativeDataItem())
-            result.push_back(native_data_item);
-    }
+
     return result;
 }
 
diff --git a/GUI/Model/Model/JobModel.cpp b/GUI/Model/Model/JobModel.cpp
index 5b386d0a9c2c802f61132441491ca23a194c7f66..3f826bc0832f7b16f727ba10f281e57b414cb0be 100644
--- a/GUI/Model/Model/JobModel.cpp
+++ b/GUI/Model/Model/JobModel.cpp
@@ -125,14 +125,10 @@ QVector<DataItem*> JobModel::dataItems() const
         if (auto* dataItem = jobItem->simulatedDataItem())
             result.push_back(dataItem);
 
-        if (auto* real_data = dynamic_cast<DatafileItem*>(jobItem->realItem())) {
+        if (auto* real_data = dynamic_cast<DatafileItem*>(jobItem->realItem()))
             if (auto* data_item = real_data->dataItem())
                 result.push_back(data_item);
-            if (auto* native_data = real_data->nativeDataItem())
-                result.push_back(native_data);
-        }
     }
-
     return result;
 }
 
diff --git a/GUI/View/Data/DatafilesSelector.cpp b/GUI/View/Data/DatafilesSelector.cpp
index 77c87907d92945ecee722928f631f607f8bfff69..85e9b8f5421c227ba33ca41201a4697f8d531623 100644
--- a/GUI/View/Data/DatafilesSelector.cpp
+++ b/GUI/View/Data/DatafilesSelector.cpp
@@ -297,8 +297,6 @@ void DatafilesSelector::importData1D()
             realItem->setTheDatafield(*df);
             setCurrentItem(realItem);
 
-            realItem->initNativeData();
-            realItem->nativeDataItem()->setDatafield(*df);
             realItem->updateFileName();
         } catch (std::exception& ex) {
             m_treeModel->removeDataItem(realItem);
diff --git a/Tests/Unit/GUI/TestLinkInstrument.cpp b/Tests/Unit/GUI/TestLinkInstrument.cpp
index 9d27153acd628f409abf7d1ce717e983b5cd29d8..f76b3f3f3acbd83a8264ec6617df23e7ad0ce361 100644
--- a/Tests/Unit/GUI/TestLinkInstrument.cpp
+++ b/Tests/Unit/GUI/TestLinkInstrument.cpp
@@ -81,8 +81,6 @@ TEST(TestLinkInstrument, canLinkToSpecular)
     instrument->scanItem()->grazingScanItem()->selectListScan();
 
     realData->dataItem()->setOriginalDatafield({frame.clonedAxes()});
-    realData->initNativeData();
-    realData->nativeDataItem()->setOriginalDatafield({frame.clonedAxes()});
 
     ASSERT_TRUE(
         document.linkInstrumentManager()->canLinkDataToInstrument(realData, identifier, nullptr));