diff --git a/Core/Scan/AngularSpecScan.cpp b/Core/Scan/AngularSpecScan.cpp
index ff125dfb4c14b40a327be1a4e77df327865b4bac..fc1e1a252e6f3b39710a3fecbaeac46d8e9c8230 100644
--- a/Core/Scan/AngularSpecScan.cpp
+++ b/Core/Scan/AngularSpecScan.cpp
@@ -89,7 +89,7 @@ AngularSpecScan::generateElements(const Instrument& instrument) const
                                     [](const ParameterSample& sample) { return sample.value; });
 
     std::vector<SpecularElement> result;
-    result.reserve(numberOfDiffuseElements());
+    result.reserve(numberOfElements());
     for (size_t i = 0; i < m_inc_angle->size(); ++i) {
         for (size_t k = 0, size_incs = incs[i].size(); k < size_incs; ++k) {
             const double inc = incs[i][k];
@@ -182,7 +182,7 @@ void AngularSpecScan::setAbsoluteAngularResolution(const IRangedDistribution& di
 
 std::vector<double> AngularSpecScan::footprint(size_t start, size_t n_elements) const
 {
-    if (start + n_elements > numberOfDiffuseElements())
+    if (start + n_elements > numberOfElements())
         throw std::runtime_error("Error in AngularSpecScan::footprint: given index exceeds the "
                                  "number of simulation elements");
 
@@ -217,7 +217,7 @@ std::vector<double> AngularSpecScan::footprint(size_t start, size_t n_elements)
     return result;
 }
 
-size_t AngularSpecScan::numberOfDiffuseElements() const
+size_t AngularSpecScan::numberOfElements() const
 {
     return m_inc_angle->size() * m_wl_resolution->nSamples() * m_inc_resolution->nSamples();
 }
diff --git a/Core/Scan/AngularSpecScan.h b/Core/Scan/AngularSpecScan.h
index 6c85e5c7ac7ef9df58217c5adb69fbd4d3300729..ca5c499341e2f7390e55a7cdd72f9a971460c576 100644
--- a/Core/Scan/AngularSpecScan.h
+++ b/Core/Scan/AngularSpecScan.h
@@ -53,7 +53,7 @@ public:
     std::vector<double> footprint(size_t i, size_t n_elements) const override;
 
     //! Returns the number of simulation elements
-    size_t numberOfDiffuseElements() const override;
+    size_t numberOfElements() const override;
 
     CoordSystem1D* createCoordSystem() const override;
 
diff --git a/Core/Scan/ISpecularScan.h b/Core/Scan/ISpecularScan.h
index 9dbedb9e6762a3b8cb0858c78dd7e3629072ae44..40c4bf0f56c9ff0ba215b4bb78eadd4fdc7f3288 100644
--- a/Core/Scan/ISpecularScan.h
+++ b/Core/Scan/ISpecularScan.h
@@ -50,7 +50,7 @@ public:
     virtual std::vector<double> footprint(size_t i, size_t n_elements) const = 0;
 
     //! Returns the number of simulation elements
-    virtual size_t numberOfDiffuseElements() const = 0;
+    virtual size_t numberOfElements() const = 0;
 
     virtual CoordSystem1D* createCoordSystem() const = 0;
 
diff --git a/Core/Scan/QSpecScan.cpp b/Core/Scan/QSpecScan.cpp
index ae43c992ad002abad54ea9d461b9cac56757b616..16ee20ec7f3d5ab580c542bbfb7138048579eb72 100644
--- a/Core/Scan/QSpecScan.cpp
+++ b/Core/Scan/QSpecScan.cpp
@@ -65,14 +65,14 @@ std::vector<SpecularElement> QSpecScan::generateElements(const Instrument& instr
 
 std::vector<double> QSpecScan::footprint(size_t i, size_t n_elements) const
 {
-    if (i + n_elements > numberOfDiffuseElements())
+    if (i + n_elements > numberOfElements())
         throw std::runtime_error("Error in QSpecScan::footprint: given index exceeds the "
                                  "number of simulation elements");
     return std::vector<double>(n_elements, 1.0);
 }
 
 //! Returns the number of simulation elements
-size_t QSpecScan::numberOfDiffuseElements() const
+size_t QSpecScan::numberOfElements() const
 {
     return m_qs->size() * m_resolution->nSamples();
 }
@@ -152,7 +152,7 @@ std::vector<double> QSpecScan::generateQzVector() const
     const auto samples = applyQResolution();
 
     std::vector<double> result;
-    result.reserve(numberOfDiffuseElements());
+    result.reserve(numberOfElements());
     for (size_t i = 0, size_out = samples.size(); i < size_out; ++i)
         for (size_t j = 0, size_in = samples[i].size(); j < size_in; ++j)
             result.push_back(samples[i][j].value);
diff --git a/Core/Scan/QSpecScan.h b/Core/Scan/QSpecScan.h
index 8fa6bb2951b6a871e9e62ee783c6ea588c7ad864..54402cb3f0f63121b3477fd2689418635ff5047f 100644
--- a/Core/Scan/QSpecScan.h
+++ b/Core/Scan/QSpecScan.h
@@ -57,7 +57,7 @@ public:
     std::vector<double> footprint(size_t i, size_t n_elements) const override;
 
     //! Returns the number of simulation elements
-    size_t numberOfDiffuseElements() const override;
+    size_t numberOfElements() const override;
 
     CoordSystem1D* createCoordSystem() const override;
 
diff --git a/Core/Simulation/DepthProbeSimulation.cpp b/Core/Simulation/DepthProbeSimulation.cpp
index c10d4ee9b85854c422be83dfb56aaf75b23b9157..af1fdcd10c68cc06a519f8474fe771108a731683 100644
--- a/Core/Simulation/DepthProbeSimulation.cpp
+++ b/Core/Simulation/DepthProbeSimulation.cpp
@@ -38,7 +38,7 @@ DepthProbeSimulation::DepthProbeSimulation() : ISimulation()
 
 DepthProbeSimulation::~DepthProbeSimulation() = default;
 
-size_t DepthProbeSimulation::numberOfDiffuseElements() const
+size_t DepthProbeSimulation::numberOfElements() const
 {
     return getAlphaAxis()->size();
 }
diff --git a/Core/Simulation/DepthProbeSimulation.h b/Core/Simulation/DepthProbeSimulation.h
index f1912ccfc61ccde3a62e641ff3d67106a8817548..58f90053b08b32f701bb0642e5534e86bf0d71f8 100644
--- a/Core/Simulation/DepthProbeSimulation.h
+++ b/Core/Simulation/DepthProbeSimulation.h
@@ -68,7 +68,7 @@ private:
     void initDiffuseElementVector() override;
 
     //! Gets the number of elements this simulation needs to calculate
-    size_t numberOfDiffuseElements() const override;
+    size_t numberOfElements() const override;
 
     //! Generate simulation elements for given beam
     std::vector<DepthProbeElement> generateElements(const Beam& beam);
diff --git a/Core/Simulation/ISimulation.cpp b/Core/Simulation/ISimulation.cpp
index f0ed66e8fb511c1627e3701cbecf5e76e6464de2..55d4de98fe3179e9de7134d98b02025844b83b07 100644
--- a/Core/Simulation/ISimulation.cpp
+++ b/Core/Simulation/ISimulation.cpp
@@ -162,7 +162,7 @@ void ISimulation::runSimulation()
 
     const auto re_sample = ProcessedSample::make(*sample(), options(), force_polarized);
 
-    const size_t total_size = numberOfDiffuseElements();
+    const size_t total_size = numberOfElements();
     size_t param_combinations = m_distribution_handler.getTotalNumberOfSamples();
 
     m_progress.reset();
diff --git a/Core/Simulation/ISimulation.h b/Core/Simulation/ISimulation.h
index 80e8dfa4675d4aa2ee40d1c8e0c693ecd3d6d934..69eb6616c873bd2316dbe358188ec8462cad78f5 100644
--- a/Core/Simulation/ISimulation.h
+++ b/Core/Simulation/ISimulation.h
@@ -112,7 +112,7 @@ protected:
     virtual void updateIntensityMap() {}
 
     //! Gets the number of elements this simulation needs to calculate
-    virtual size_t numberOfDiffuseElements() const = 0;
+    virtual size_t numberOfElements() const = 0;
 
     ProgressHandler& progress() { return m_progress; }
 
diff --git a/Core/Simulation/ISimulation2D.cpp b/Core/Simulation/ISimulation2D.cpp
index bcb38be0bd1adba5396bc37d4b62953c04701edf..73e7a84eb42da6d607af6f2ff6c85f53fcddb14b 100644
--- a/Core/Simulation/ISimulation2D.cpp
+++ b/Core/Simulation/ISimulation2D.cpp
@@ -71,11 +71,11 @@ void ISimulation2D::setRegionOfInterest(double xlow, double ylow, double xup, do
     detector2D().setRegionOfInterest(xlow, ylow, xup, yup);
 }
 
-size_t ISimulation2D::numberOfDiffuseElements() const
+size_t ISimulation2D::numberOfElements() const
 {
     if (!m_detector_context)
-        throw std::runtime_error("Error in numberOfDiffuseElements(): no detector context");
-    return m_detector_context->numberOfDiffuseElements();
+        throw std::runtime_error("Error in numberOfElements(): no detector context");
+    return m_detector_context->numberOfElements();
 }
 
 void ISimulation2D::setDetectorParameters(size_t n_x, double x_min, double x_max, size_t n_y,
@@ -111,7 +111,7 @@ std::vector<DiffuseElement> ISimulation2D::generateElements(const Beam& beam)
     const Eigen::Matrix2cd analyzer_operator = detector.detectionProperties().analyzerOperator();
     const size_t spec_index = detector.indexOfSpecular(beam);
 
-    const size_t N = m_detector_context->numberOfDiffuseElements();
+    const size_t N = m_detector_context->numberOfElements();
 
     std::vector<DiffuseElement> result;
     result.reserve(N);
diff --git a/Core/Simulation/ISimulation2D.h b/Core/Simulation/ISimulation2D.h
index 30cf682d109f2f049aa4001e52d6e290aa403a68..666c2c6b8575d1fa3afc5facb90201bbfe9e0762 100644
--- a/Core/Simulation/ISimulation2D.h
+++ b/Core/Simulation/ISimulation2D.h
@@ -69,7 +69,7 @@ protected:
     virtual void initCoordSystem() {}
 
     //! Gets the number of elements this simulation needs to calculate
-    size_t numberOfDiffuseElements() const override;
+    size_t numberOfElements() const override;
 
     //! Generate a single threaded computation for a given range of simulation elements
     //! @param start Index of the first element to include into computation
diff --git a/Core/Simulation/OffSpecularSimulation.cpp b/Core/Simulation/OffSpecularSimulation.cpp
index abbc60a6a24b4191562ba8f6d3a24411c7940727..f265b58755fbde475b5eb4cfc251ddf4e2ad3dea 100644
--- a/Core/Simulation/OffSpecularSimulation.cpp
+++ b/Core/Simulation/OffSpecularSimulation.cpp
@@ -39,10 +39,10 @@ void OffSpecularSimulation::prepareSimulation()
     ISimulation2D::prepareSimulation();
 }
 
-size_t OffSpecularSimulation::numberOfDiffuseElements() const
+size_t OffSpecularSimulation::numberOfElements() const
 {
     checkInitialization();
-    return ISimulation2D::numberOfDiffuseElements() * m_alpha_i_axis->size();
+    return ISimulation2D::numberOfElements() * m_alpha_i_axis->size();
 }
 
 SimulationResult OffSpecularSimulation::result() const
diff --git a/Core/Simulation/OffSpecularSimulation.h b/Core/Simulation/OffSpecularSimulation.h
index 6f78a05fc6a6fb9d8cce341bc5ac7cc129472f07..cf96d76f633765964faa0b64d5e68227374bbab5 100644
--- a/Core/Simulation/OffSpecularSimulation.h
+++ b/Core/Simulation/OffSpecularSimulation.h
@@ -66,7 +66,7 @@ private:
     void updateIntensityMap() override;
 
     //! Gets the number of elements this simulation needs to calculate
-    size_t numberOfDiffuseElements() const override;
+    size_t numberOfElements() const override;
 
     //! Normalize, apply detector resolution and transfer detector image corresponding to
     //! alpha_i = m_alpha_i_axis->bin(index)
diff --git a/Core/Simulation/SpecularSimulation.cpp b/Core/Simulation/SpecularSimulation.cpp
index da64f9e64f5cb3578abdb755c473bde2cad8c337..51ce6723b617a44eb9caf562d5e4d18e5d4ac704 100644
--- a/Core/Simulation/SpecularSimulation.cpp
+++ b/Core/Simulation/SpecularSimulation.cpp
@@ -77,9 +77,9 @@ void SpecularSimulation::prepareSimulation()
     ISimulation::prepareSimulation();
 }
 
-size_t SpecularSimulation::numberOfDiffuseElements() const
+size_t SpecularSimulation::numberOfElements() const
 {
-    return m_scan->numberOfDiffuseElements();
+    return m_scan->numberOfElements();
 }
 
 SimulationResult SpecularSimulation::result() const
diff --git a/Core/Simulation/SpecularSimulation.h b/Core/Simulation/SpecularSimulation.h
index df66b84ba5cad14e6f4898a4a05f2a185f103739..5d57d850cf3c7e3451a749e6f6c5dc4a4c6faf93 100644
--- a/Core/Simulation/SpecularSimulation.h
+++ b/Core/Simulation/SpecularSimulation.h
@@ -87,7 +87,7 @@ private:
     void moveDataFromCache() override;
 
     //! Gets the number of elements this simulation needs to calculate
-    size_t numberOfDiffuseElements() const override;
+    size_t numberOfElements() const override;
 
     std::vector<double> rawResults() const override;
     void setRawResults(const std::vector<double>& raw_data) override;
diff --git a/Device/Detector/DetectorContext.cpp b/Device/Detector/DetectorContext.cpp
index 6fb7d716d253b6e0874460d44fcb27d796440959..6786c71cf37549d92a7a62d24bd97418eb163c02 100644
--- a/Device/Detector/DetectorContext.cpp
+++ b/Device/Detector/DetectorContext.cpp
@@ -20,7 +20,7 @@ DetectorContext::DetectorContext(const IDetector2D* detector)
     setup_context(detector);
 }
 
-size_t DetectorContext::numberOfDiffuseElements() const
+size_t DetectorContext::numberOfElements() const
 {
     return m_active_indices.size();
 }
diff --git a/Device/Detector/DetectorContext.h b/Device/Detector/DetectorContext.h
index b0a09330d5f2c882d42226c6e79f2cbcd6f32894..ad7f0bd0ca57dac22278de64113f69e711497b37 100644
--- a/Device/Detector/DetectorContext.h
+++ b/Device/Detector/DetectorContext.h
@@ -37,7 +37,7 @@ public:
     DetectorContext(const DetectorContext& other) = delete;
     DetectorContext& operator=(const DetectorContext& other) = delete;
 
-    size_t numberOfDiffuseElements() const;
+    size_t numberOfElements() const;
 
     std::unique_ptr<IPixel> createPixel(size_t element_index) const;
 
diff --git a/Device/Detector/IDetector.cpp b/Device/Detector/IDetector.cpp
index 5bf26d3aba45fb5059bac99023a7901f19a964f8..cce43130b1e423ada84491e193e25480f21b34da 100644
--- a/Device/Detector/IDetector.cpp
+++ b/Device/Detector/IDetector.cpp
@@ -240,7 +240,7 @@ void IDetector::setDataToDetectorMap(OutputData<double>& detectorMap,
         detectorMap[it.roiIndex()] = elements[elementIndex++].intensity();
 }
 
-size_t IDetector::numberOfDiffuseElements() const
+size_t IDetector::numberOfElements() const
 {
     size_t result(0);
     iterateOverNonMaskedPoints([&result](const_iterator) { ++result; });
diff --git a/Device/Detector/IDetector.h b/Device/Detector/IDetector.h
index a9c4be11e490512e76e73d257f00f7707363f02f..1a8da686496156d396dc849d78c48e4c8f42d87d 100644
--- a/Device/Detector/IDetector.h
+++ b/Device/Detector/IDetector.h
@@ -165,7 +165,7 @@ public:
     virtual Axes::Coords defaultCoords() const = 0;
 
     //! Returns number of simulation elements.
-    size_t numberOfDiffuseElements() const;
+    size_t numberOfElements() const;
 
     //! The lower and upper bound of the region of interest. If no region of interest is explicitly
     //! defined, then the whole detector is taken as "region of interest".
diff --git a/Tests/Unit/Core/SpecularScanTest.cpp b/Tests/Unit/Core/SpecularScanTest.cpp
index c6566c5d515b8dc3855cb9343570258dcb540961..44dc339b243c31641630150cea9dff48615d2440 100644
--- a/Tests/Unit/Core/SpecularScanTest.cpp
+++ b/Tests/Unit/Core/SpecularScanTest.cpp
@@ -20,7 +20,7 @@ TEST_F(SpecularScanTest, AngularScanInit)
     auto check = [](const AngularSpecScan& scan, const IAxis& axis) {
         EXPECT_EQ(scan.wavelength(), 0.1);
         EXPECT_EQ(axis, *scan.coordinateAxis());
-        EXPECT_EQ(scan.numberOfDiffuseElements(), axis.size());
+        EXPECT_EQ(scan.numberOfElements(), axis.size());
         EXPECT_EQ(scan.footprintFactor(), nullptr);
         EXPECT_EQ(scan.footprint(0, 1), std::vector<double>{1.0});
         EXPECT_THROW(scan.footprint(1, axis.size()), std::runtime_error);
@@ -129,7 +129,7 @@ TEST_F(SpecularScanTest, QScanInit)
 {
     auto check = [](const QSpecScan& scan, const IAxis& axis) {
         EXPECT_EQ(axis, *scan.coordinateAxis());
-        EXPECT_EQ(scan.numberOfDiffuseElements(), axis.size());
+        EXPECT_EQ(scan.numberOfElements(), axis.size());
         EXPECT_EQ(scan.footprintFactor(), nullptr);
         EXPECT_EQ(scan.footprint(0, 1), std::vector<double>{1.0});
         EXPECT_EQ(scan.offset(), 0.);
@@ -204,16 +204,16 @@ TEST_F(SpecularScanTest, GenerateSimElements)
     AngularSpecScan scan(0.1, std::vector<double>{0.0, 0.2, 0.3});
     const Instrument instrument;
     std::vector<SpecularElement> eles = scan.generateElements(instrument);
-    EXPECT_EQ(eles.size(), scan.numberOfDiffuseElements());
-    EXPECT_EQ(scan.numberOfDiffuseElements(), 3u);
+    EXPECT_EQ(eles.size(), scan.numberOfElements());
+    EXPECT_EQ(scan.numberOfElements(), 3u);
     for (size_t i = 0; i < eles.size(); ++i)
         EXPECT_TRUE(eles[i].isCalculated());
 
     const auto scan2_qvector = std::vector<double>{0.0, 0.2, 0.3};
     QSpecScan scan2(scan2_qvector);
     std::vector<SpecularElement> eles2 = scan2.generateElements(instrument);
-    EXPECT_EQ(eles2.size(), scan2.numberOfDiffuseElements());
-    EXPECT_EQ(scan2.numberOfDiffuseElements(), 3u);
+    EXPECT_EQ(eles2.size(), scan2.numberOfElements());
+    EXPECT_EQ(scan2.numberOfElements(), 3u);
     for (size_t i = 0; i < eles2.size(); ++i)
         EXPECT_TRUE(eles2[i].isCalculated());