diff --git a/gui2/model/modelutils.cpp b/gui2/model/modelutils.cpp
index 0af18248016867b4776eb41121258ec93d0338fb..ae871453cf348be9d2afb334f560528c55072cf9 100644
--- a/gui2/model/modelutils.cpp
+++ b/gui2/model/modelutils.cpp
@@ -20,6 +20,20 @@
 #include "mvvm/standarditems/data1ditem.h"
 #include "mvvm/standarditems/graphitem.h"
 
+namespace {
+bool areCompatibleAxes(const ModelView::Data1DItem& item1, const ModelView::Data1DItem& item2)
+{
+    // TODO consider moving the logic on board of Data1DItem, consider implement getAxis() getter.
+    auto axis1 = item1.getItem(ModelView::Data1DItem::T_AXIS);
+    auto axis2 = item2.getItem(ModelView::Data1DItem::T_AXIS);
+    if (!axis1 || !axis2)
+        return false;
+
+    return axis1->modelType() == axis2->modelType();
+}
+
+} // namespace
+
 namespace gui2 {
 
 ModelView::ExternalProperty Utils::CreateProperty(const ModelView::GraphItem* graph)
@@ -64,12 +78,17 @@ std::vector<double> Utils::CreateDiffVector(const std::vector<double>& a,
 void Utils::SetDifference(const ModelView::Data1DItem* data1, const ModelView::Data1DItem* data2,
                           ModelView::Data1DItem* target)
 {
-    // It is expected that difference graph has compatible axis.
+    if (!areCompatibleAxes(*data1, *data2) || !areCompatibleAxes(*data1, *target))
+        return;
+
+    // We expect same number of points to caclulate the difference graph.
     if (data1->binCenters().size() != data2->binCenters().size())
         return;
 
-    target->item<ModelView::PointwiseAxisItem>(ModelView::Data1DItem::T_AXIS)
-        ->setParameters(data1->binCenters());
+    if (data1->binCenters() != target->binCenters()) {
+        target->item<ModelView::PointwiseAxisItem>(ModelView::Data1DItem::T_AXIS)
+            ->setParameters(data1->binCenters());
+    }
     target->setValues(CreateDiffVector(data1->binValues(), data2->binValues()));
 }