diff --git a/GUI/Model/Data/Data2DItem.cpp b/GUI/Model/Data/Data2DItem.cpp
index 6d1599473ca6b296d9d494adba3db4a3492150d4..d68f949ddf0dc8616215d6b3507870e42298b310 100644
--- a/GUI/Model/Data/Data2DItem.cpp
+++ b/GUI/Model/Data/Data2DItem.cpp
@@ -17,9 +17,12 @@
 #include "Base/Axis/Scale.h"
 #include "Base/Util/Assert.h"
 #include "Device/Data/Datafield.h"
+#include "Device/Mask/IShape2D.h"
+#include "Device/Mask/MaskStack.h"
 #include "GUI/Model/Axis/AmplitudeAxisItem.h"
 #include "GUI/Model/Axis/BasicAxisItem.h"
 #include "GUI/Model/Mask/MaskeditorListmodel.h"
+#include "GUI/Model/Mask/MaskItems.h"
 #include "GUI/Model/Mask/ProjectionList.h"
 #include "GUI/Support/Style/QCP_Util.h"
 #include "GUI/Support/XML/UtilXML.h"
@@ -365,6 +368,37 @@ MaskeditorListmodel* Data2DItem::getOrCreateMaskModel()
     return m_mask_model.get();
 }
 
+Datafield* Data2DItem::createMaskedField() const
+{
+    // Requesting mask information
+    std::unique_ptr<IShape2D> roi;
+    Datafield* result = c_field()->clone();
+    MaskStack detectorMask;
+    const QVector<const MaskItem*> maskItems = maskContainerItem()->maskItems();
+    for (auto maskIter = maskItems.rbegin(); maskIter != maskItems.rend(); maskIter++)
+        if ((*maskIter)->isVisible()) {
+            if (auto* roiItem = dynamic_cast<const RegionOfInterestItem*>((*maskIter)))
+                roi = roiItem->createShape();
+            else {
+                std::unique_ptr<IShape2D> shape((*maskIter)->createShape());
+                detectorMask.pushMask(*shape, (*maskIter)->maskValue(), false);
+            }
+        }
+
+    // ROI mask has to be the last one, it can not be "unmasked" by other shapes
+    if (roi)
+        detectorMask.pushMask(*roi, true, false);
+
+    if (!detectorMask.hasMasks())
+        return nullptr;
+
+    for (size_t i = 0; i < result->size(); ++i)
+        if (detectorMask.isMasked(i, result->frame()))
+            (*result)[i] = 0;
+
+    return result;
+}
+
 ProjectionList* Data2DItem::projectionContainerItem()
 {
     return m_proj_model ? m_proj_model->projnItem() : nullptr;
diff --git a/GUI/Model/Data/Data2DItem.h b/GUI/Model/Data/Data2DItem.h
index aef93ea2b8b05e8f1401ce53225a10db2d5e6232..d7b2f7263d9fa6ab0d648b20fcca1957da9c49fa 100644
--- a/GUI/Model/Data/Data2DItem.h
+++ b/GUI/Model/Data/Data2DItem.h
@@ -78,6 +78,7 @@ public:
     MaskList* maskContainerItem();
     const MaskList* maskContainerItem() const;
     MaskeditorListmodel* getOrCreateMaskModel();
+    Datafield* createMaskedField() const;
 
     ProjectionList* projectionContainerItem();
     const ProjectionList* projectionContainerItem() const;
diff --git a/GUI/View/Canvas/MaskEditorCanvas.cpp b/GUI/View/Canvas/MaskEditorCanvas.cpp
index c75abd1c4440014e04c9d54eca186ef747e47ad1..a0ee95f8451c5cdef5b58cff79be31f53bc54b28 100644
--- a/GUI/View/Canvas/MaskEditorCanvas.cpp
+++ b/GUI/View/Canvas/MaskEditorCanvas.cpp
@@ -14,8 +14,6 @@
 
 #include "GUI/View/Canvas/MaskEditorCanvas.h"
 #include "Device/Data/Datafield.h"
-#include "Device/Mask/IShape2D.h"
-#include "Device/Mask/MaskStack.h"
 #include "GUI/Model/Data/Data2DItem.h"
 #include "GUI/Model/Mask/MaskItems.h"
 #include "GUI/Model/Mask/MaskList.h"
@@ -27,45 +25,6 @@
 #include "GUI/View/Scene/MaskGraphicsView.h"
 #include <QVBoxLayout>
 
-namespace {
-
-//! Constructs Datafield which contains original intensity data except masked areas,
-//! and areas outside of ROI, where bin content is set to zero.
-
-Datafield* createMaskPresentation(Data2DItem* data2DItem)
-{
-    // Requesting mask information
-    std::unique_ptr<IShape2D> roi;
-    Datafield* result = data2DItem->c_field()->clone();
-    MaskStack detectorMask;
-    const QVector<const MaskItem*> maskItems = data2DItem->maskContainerItem()->maskItems();
-    for (auto maskIter = maskItems.rbegin(); maskIter != maskItems.rend(); maskIter++)
-        if ((*maskIter)->isVisible()) {
-            if (auto* roiItem = dynamic_cast<const RegionOfInterestItem*>((*maskIter)))
-                roi = roiItem->createShape();
-            else {
-                std::unique_ptr<IShape2D> shape((*maskIter)->createShape());
-                detectorMask.pushMask(*shape, (*maskIter)->maskValue(), false);
-            }
-        }
-
-    // ROI mask has to be the last one, it can not be "unmasked" by other shapes
-    if (roi)
-        detectorMask.pushMask(*roi, true, false);
-
-    if (!detectorMask.hasMasks())
-        return nullptr;
-
-    for (size_t i = 0; i < result->size(); ++i)
-        if (detectorMask.isMasked(i, result->frame()))
-            (*result)[i] = 0;
-
-    return result;
-}
-
-} // namespace
-
-
 MaskEditorCanvas::MaskEditorCanvas(QWidget* parent)
     : QWidget(parent)
     , m_scene(new MaskGraphicsScene)
@@ -114,7 +73,7 @@ void MaskEditorCanvas::onPresentationChange(bool pixelized)
     ASSERT(m_data2DItem);
 
     if (pixelized) {
-        if (Datafield* maskedData = ::createMaskPresentation(m_data2DItem)) {
+        if (Datafield* maskedData = m_data2DItem->createMaskedField()) {
             // store data backup
             m_backup_data.reset(m_data2DItem->c_field()->clone());
             m_backup_interpolated = m_data2DItem->isInterpolated();