diff --git a/Core/Fitting/FitObjective.cpp b/Core/Fitting/FitObjective.cpp
index af5b2656c9a5463c6ef730a8aa777807a94aeb6d..87391672636ca24ba021be2507fb692639ffae5b 100644
--- a/Core/Fitting/FitObjective.cpp
+++ b/Core/Fitting/FitObjective.cpp
@@ -126,6 +126,11 @@ SimulationResult FitObjective::relativeDifference(size_t i_item) const
     return m_fit_objects[check_index(i_item)]->relativeDifference();
 }
 
+SimulationResult FitObjective::absoluteDifference(size_t i_item) const
+{
+    return m_fit_objects[check_index(i_item)]->absoluteDifference();
+}
+
 void FitObjective::initPrint(int every_nth)
 {
     m_fit_status->initPrint(every_nth);
diff --git a/Core/Fitting/FitObjective.h b/Core/Fitting/FitObjective.h
index 60e335bb04b314f4eb8e5a2899c2bc63189fa19f..2a9e2246e50f61848f298c63ab9376374d383884 100644
--- a/Core/Fitting/FitObjective.h
+++ b/Core/Fitting/FitObjective.h
@@ -82,6 +82,10 @@ public:
     //! @param i_item: the index of fit pair
     SimulationResult relativeDifference(size_t i_item = 0) const;
 
+    //! Returns absolute value of difference between simulation and experimental data.
+    //! @param i_item: the index of fit pair
+    SimulationResult absoluteDifference(size_t i_item = 0) const;
+
     //! Initializes printing to standard output during the fitting.
     //! @param every_nth: Print every n'th iteration.
     void initPrint(int every_nth);
diff --git a/Core/Fitting/SimDataPair.cpp b/Core/Fitting/SimDataPair.cpp
index 85b799093980bd1c90b228d1f2427d78408a31ab..647c4d36f449649eee44839b2cd2beb8244ec1ba 100644
--- a/Core/Fitting/SimDataPair.cpp
+++ b/Core/Fitting/SimDataPair.cpp
@@ -87,6 +87,20 @@ SimulationResult SimDataPair::relativeDifference() const
     return SimulationResult(*roi_data, *converter);
 }
 
+SimulationResult SimDataPair::absoluteDifference() const
+{
+    auto converter = UnitConverterUtils::createConverter(*m_simulation);
+    auto roi_data = UnitConverterUtils::createOutputData(*converter.get(), converter->defaultUnits());
+    auto detector = m_simulation->getInstrument().getDetector();
+
+    detector->iterate([&](IDetector::const_iterator it){
+        const size_t index = it.roiIndex();
+        (*roi_data)[index] = std::abs(m_simulation_result[index] - m_experimental_data[index]);
+    });
+
+    return SimulationResult(*roi_data, *converter);
+}
+
 SimDataPair::~SimDataPair() = default;
 
 void SimDataPair::runSimulation(const Fit::Parameters& params)
diff --git a/Core/Fitting/SimDataPair.h b/Core/Fitting/SimDataPair.h
index ee903fbb7c777a3b70058d3708d8708b72334509..6d74666f2cc0fc6ad8b048a7dcb2be8035ee5186 100644
--- a/Core/Fitting/SimDataPair.h
+++ b/Core/Fitting/SimDataPair.h
@@ -41,6 +41,8 @@ public:
 
     SimulationResult relativeDifference() const;
 
+    SimulationResult absoluteDifference() const;
+
     void runSimulation(const Fit::Parameters& params);
 
     std::vector<double> experimental_array() const;