diff --git a/GUI/coregui/Models/SpecularDataItem.cpp b/GUI/coregui/Models/SpecularDataItem.cpp
index 756f409376734c6721b0bcd51add7cf0c864694f..158b6babe6743d0c9c28c9d1dbdfb29edf654875 100644
--- a/GUI/coregui/Models/SpecularDataItem.cpp
+++ b/GUI/coregui/Models/SpecularDataItem.cpp
@@ -23,9 +23,8 @@ const QString SpecularDataItem::P_AXES_UNITS = "Axes Units";
 const QString SpecularDataItem::P_TITLE = "Title";
 const QString SpecularDataItem::P_XAXIS = "x-axis";
 const QString SpecularDataItem::P_YAXIS = "y-axis";
-const QString SpecularDataItem::P_FILE_NAME = "FileName";
 
-SpecularDataItem::SpecularDataItem() : SessionItem(Constants::SpecularDataType)
+SpecularDataItem::SpecularDataItem() : DataItem(Constants::SpecularDataType)
 {
     ComboProperty units = ComboProperty() << Constants::UnitsNbins;
     addProperty(P_AXES_UNITS, units.variant());
@@ -45,27 +44,11 @@ SpecularDataItem::SpecularDataItem() : SessionItem(Constants::SpecularDataType)
 
     setXaxisTitle("X [nbins]");
     setYaxisTitle("Signal [a.u.]");
-
-    // name of the file used to serialize given SpecularDataItem
-    addProperty(P_FILE_NAME, QStringLiteral("undefined"))->setVisible(false);
-
-    mapper()->setOnPropertyChange([this](const QString& name)
-    {
-        if(name == P_FILE_NAME)
-            setLastModified(QDateTime::currentDateTime());
-    });
-
-    mapper()->setOnValueChange([this]()
-    {
-        // OutputData was modified
-        setLastModified(QDateTime::currentDateTime());
-    });
 }
 
 void SpecularDataItem::setOutputData(OutputData<double>* data)
 {
-    Q_ASSERT(data);
-    m_data.reset(data);
+    DataItem::setOutputData(data);
 
     updateAxesZoomLevel();
     updateAxesLabels();
@@ -78,11 +61,7 @@ void SpecularDataItem::setOutputData(OutputData<double>* data)
 
 void SpecularDataItem::setRawDataVector(const OutputData<double>* data)
 {
-    if (!m_data->hasSameDimensions(*data)) {
-        throw GUIHelpers::Error("SpecularDataItem::setRawDataVector() -> Error. "
-                                "Different dimensions of data.");
-    }
-    m_data->setRawDataVector(data->getRawDataVector());
+    DataItem::setRawDataVector(data);
     emitDataChanged();
 }
 
@@ -158,12 +137,6 @@ QString SpecularDataItem::selectedAxesUnits() const
     return combo.getValue();
 }
 
-QString SpecularDataItem::fileName(const QString& projectDir) const
-{
-    QString filename = getItemValue(SpecularDataItem::P_FILE_NAME).toString();
-    return projectDir.isEmpty() ? filename : projectDir + QStringLiteral("/") + filename;
-}
-
 void SpecularDataItem::setLowerX(double xmin)
 {
     getItem(P_XAXIS)->setItemValue(BasicAxisItem::P_MIN, xmin);
@@ -283,13 +256,3 @@ void SpecularDataItem::resetView()
     setAxesRangeToData();
     computeDataRange();
 }
-
-QDateTime SpecularDataItem::lastModified() const
-{
-    return m_last_modified;
-}
-
-void SpecularDataItem::setLastModified(const QDateTime &dtime)
-{
-    m_last_modified = dtime;
-}
diff --git a/GUI/coregui/Models/SpecularDataItem.h b/GUI/coregui/Models/SpecularDataItem.h
index 2912ac3012e0a72e35373f660d93181cdcc9571c..2ec6db95f62de2563b33f57b8f863585c5026c4a 100644
--- a/GUI/coregui/Models/SpecularDataItem.h
+++ b/GUI/coregui/Models/SpecularDataItem.h
@@ -15,30 +15,25 @@
 #ifndef SPECULARDATAITEM_H
 #define SPECULARDATAITEM_H
 
-#include "SessionItem.h"
-#include "OutputData.h"
-#include <QDateTime>
+#include "DataItem.h"
 
 class AmplitudeAxisItem;
 class BasicAxisItem;
 class MaskContainerItem;
 class ProjectionContainerItem;
 
-class BA_CORE_API_ SpecularDataItem : public SessionItem
+class BA_CORE_API_ SpecularDataItem : public DataItem
 {
 public:
     static const QString P_TITLE;
     static const QString P_AXES_UNITS;
     static const QString P_XAXIS;
     static const QString P_YAXIS;
-    static const QString P_FILE_NAME;
 
     SpecularDataItem();
 
-    OutputData<double>* getOutputData() { return m_data.get(); }
-    const OutputData<double>* getOutputData() const { return m_data.get(); }
-    void setOutputData(OutputData<double>* data);
-    void setRawDataVector(const OutputData<double>* data);
+    void setOutputData(OutputData<double>* data) override;
+    void setRawDataVector(const OutputData<double>* data) override;
 
     //! Number of bins in data
     int getNbins() const;
@@ -65,8 +60,6 @@ public:
 
     QString selectedAxesUnits() const;
 
-    QString fileName(const QString& projectDir = QString()) const;
-
     void updateDataRange();
     void computeDataRange();
     QPair<double, double> dataRange() const;
@@ -77,9 +70,6 @@ public:
 
     void resetView();
 
-    QDateTime lastModified() const;
-    void setLastModified(const QDateTime& dtime);
-
 public slots:
     void setLowerX(double xmin);
     void setUpperX(double xmax);
@@ -93,9 +83,6 @@ public slots:
 private:
     void updateAxesZoomLevel();
     void updateAxesLabels();
-
-    std::unique_ptr<OutputData<double>> m_data; //!< simulation results
-    QDateTime m_last_modified;
 };
 
 #endif // SPECULARDATAITEM_H