diff --git a/Device/Detector/IDetector.cpp b/Device/Detector/IDetector.cpp
index dd976601c1e690db8cb8110b39f031415de5d416..6bceef47dd6dfdff0ab0b924f6f189141848af0c 100644
--- a/Device/Detector/IDetector.cpp
+++ b/Device/Detector/IDetector.cpp
@@ -192,9 +192,10 @@ void IDetector::setDataToDetectorMap(OutputData<double>& detectorMap,
 {
     if (elements.empty())
         return;
-    iterateOverNonMaskedPoints([&](const_iterator it) {
-        detectorMap[it.roiIndex()] = elements[it.elementIndex()].intensity();
-    });
+
+    size_t elementIndex = 0;
+    for (auto it = beginNonMaskedPoints(); it != endNonMaskedPoints(); ++it)
+        detectorMap[it.roiIndex()] = elements[elementIndex++].intensity();
 }
 
 size_t IDetector::numberOfSimulationElements() const
diff --git a/Device/Detector/IDetector.h b/Device/Detector/IDetector.h
index 3e14fd4a680751fc55997ffb337f6634ad39bff8..8218f47dc4f6d3f84e4a1f4b062eec6908a3d157 100644
--- a/Device/Detector/IDetector.h
+++ b/Device/Detector/IDetector.h
@@ -119,6 +119,7 @@ public:
 
 #ifndef SWIG
     //! Returns empty detector map in given axes units.
+    //! This map is a data array limited to the size of the "Region of interest"
     std::unique_ptr<OutputData<double>> createDetectorMap() const;
 #endif // USER_API
 
diff --git a/Device/Detector/SimulationAreaIterator.cpp b/Device/Detector/SimulationAreaIterator.cpp
index 339e6e4fcb15ba9f6ffcebb91c240bed4f4e23e9..1b7cdc361e2fb3cd8ff3ddb05990cbcb20746b79 100644
--- a/Device/Detector/SimulationAreaIterator.cpp
+++ b/Device/Detector/SimulationAreaIterator.cpp
@@ -19,7 +19,6 @@ SimulationAreaIterator::SimulationAreaIterator(const IDetector* detector, Mode m
     : m_detector(detector)
     , m_index(start_at_index)
     , m_maxIndex(m_detector->sizeOfRegionOfInterest())
-    , m_element_index(0)
     , m_mode(mode)
 {
     if (m_index > m_maxIndex)
@@ -58,10 +57,9 @@ size_t SimulationAreaIterator::detectorIndex() const
 SimulationAreaIterator& SimulationAreaIterator::operator++()
 {
     size_t index = nextIndex(m_index);
-    if (index != m_index) {
-        ++m_element_index;
+    if (index != m_index)
         m_index = index;
-    }
+
     return *this;
 }
 
@@ -77,7 +75,6 @@ size_t SimulationAreaIterator::nextIndex(size_t currentIndex)
     // #baROI + this can be optimized: Check whether a RegionOfInterest is present, then do not
     // check every single point
 
-
     size_t result = ++currentIndex;
     if (result < m_maxIndex) {
         while (isMasked(result)) {
diff --git a/Device/Detector/SimulationAreaIterator.h b/Device/Detector/SimulationAreaIterator.h
index cb98af7871390a5d576c4ae67e99abfb555a739c..d938bbc31a69a2f59a5cebf440db101aa7fb611f 100644
--- a/Device/Detector/SimulationAreaIterator.h
+++ b/Device/Detector/SimulationAreaIterator.h
@@ -50,7 +50,6 @@ public:
     SimulationAreaIterator createEnd() const;
 
     size_t index() const { return m_index; }
-    size_t elementIndex() const { return m_element_index; }
     size_t roiIndex() const;
     size_t detectorIndex() const;
 
@@ -71,9 +70,8 @@ private:
     bool isMasked(size_t index) const;
 
     const IDetector* m_detector;
-    size_t m_index;         //!< ROI related index
-    size_t m_maxIndex;      //!< ROI related maximum index
-    size_t m_element_index; //!< sequential number for SimulationElementVector
+    size_t m_index;    //!< ROI related index
+    size_t m_maxIndex; //!< ROI related maximum index
     Mode m_mode;
 };
 
diff --git a/Tests/UnitTests/Core/Instrument/SimulationAreaTest.cpp b/Tests/UnitTests/Core/Instrument/SimulationAreaTest.cpp
index 40506f399af4db6bfdfb411efb1c96f6cdc498c7..894ed78547e7270721dcec13cf89e3d1c614292d 100644
--- a/Tests/UnitTests/Core/Instrument/SimulationAreaTest.cpp
+++ b/Tests/UnitTests/Core/Instrument/SimulationAreaTest.cpp
@@ -17,14 +17,12 @@ TEST_F(SimulationAreaTest, iteratorOperations)
     // begin iterator
     SimulationAreaIterator it_begin = detector.beginNonMaskedPoints();
     EXPECT_EQ(it_begin.index(), 0u);
-    EXPECT_EQ(it_begin.elementIndex(), 0u);
     EXPECT_TRUE(it_begin == detector.beginNonMaskedPoints());
     EXPECT_FALSE(it_begin != detector.beginNonMaskedPoints());
 
     // end iterator
     SimulationAreaIterator it_end = detector.endNonMaskedPoints();
     EXPECT_EQ(it_end.index(), detector.totalSize());
-    EXPECT_EQ(it_end.elementIndex(), 0u); // has initial value
 
     // begin/end comparison
     EXPECT_TRUE(it_begin != it_end);
@@ -38,18 +36,15 @@ TEST_F(SimulationAreaTest, iteratorOperations)
     // increment
     it++;
     EXPECT_EQ(it.index(), 1u);
-    EXPECT_EQ(it.elementIndex(), 1u);
     EXPECT_TRUE(it != it_begin);
     EXPECT_FALSE(it == it_begin);
     ++it;
     EXPECT_EQ(it.index(), 2u);
-    EXPECT_EQ(it.elementIndex(), 2u);
 
     // incrementing well behind the end
     for (size_t i = 0; i < 100; ++i)
         ++it;
     EXPECT_EQ(it.index(), detector.totalSize());
-    EXPECT_EQ(it.elementIndex(), detector.totalSize());
 }
 
 //! Iteration over non-masked detector
@@ -59,18 +54,14 @@ TEST_F(SimulationAreaTest, detectorIteration)
     SphericalDetector detector(4, -1.0, 3.0, 2, 0.0, 2.0);
 
     std::vector<size_t> expectedIndexes = {0, 1, 2, 3, 4, 5, 6, 7};
-    std::vector<size_t> expectedElementIndexes = {0, 1, 2, 3, 4, 5, 6, 7};
 
     std::vector<size_t> indexes;
-    std::vector<size_t> elementIndexes;
     std::vector<size_t> detectorIndexes;
     for (auto it = detector.beginNonMaskedPoints(); it != detector.endNonMaskedPoints(); ++it) {
         indexes.push_back(it.index());
-        elementIndexes.push_back(it.elementIndex());
         detectorIndexes.push_back(it.detectorIndex());
     }
     EXPECT_EQ(indexes, expectedIndexes);
-    EXPECT_EQ(elementIndexes, expectedElementIndexes);
     EXPECT_EQ(detectorIndexes, expectedIndexes);
 }
 
@@ -83,15 +74,10 @@ TEST_F(SimulationAreaTest, maskedIteration)
     detector.addMask(Rectangle(3.1, 3.1, 3.9, 3.9), true);
 
     std::vector<size_t> expectedIndexes = {0, 1, 2, 3, 4, 7, 8, 11, 12, 15, 16, 17, 18};
-    std::vector<size_t> expectedElementIndexes = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
     std::vector<size_t> indexes;
-    std::vector<size_t> elementIndexes;
-    for (auto it = detector.beginNonMaskedPoints(); it != detector.endNonMaskedPoints(); ++it) {
+    for (auto it = detector.beginNonMaskedPoints(); it != detector.endNonMaskedPoints(); ++it)
         indexes.push_back(it.index());
-        elementIndexes.push_back(it.elementIndex());
-    }
     EXPECT_EQ(indexes, expectedIndexes);
-    EXPECT_EQ(elementIndexes, expectedElementIndexes);
 }
 
 //! Iteration over the detector with first and last bin masked
@@ -104,16 +90,11 @@ TEST_F(SimulationAreaTest, maskedCornerIteration)
 
     std::vector<size_t> expectedIndexes = {1,  2,  3,  4,  5,  6,  7,  8,  9,
                                            10, 11, 12, 13, 14, 15, 16, 17, 18};
-    std::vector<size_t> expectedElementIndexes = {0, 1,  2,  3,  4,  5,  6,  7,  8,
-                                                  9, 10, 11, 12, 13, 14, 15, 16, 17};
     std::vector<size_t> indexes;
     std::vector<size_t> elementIndexes;
-    for (auto it = detector.beginNonMaskedPoints(); it != detector.endNonMaskedPoints(); ++it) {
+    for (auto it = detector.beginNonMaskedPoints(); it != detector.endNonMaskedPoints(); ++it)
         indexes.push_back(it.index());
-        elementIndexes.push_back(it.elementIndex());
-    }
     EXPECT_EQ(indexes, expectedIndexes);
-    EXPECT_EQ(elementIndexes, expectedElementIndexes);
 }
 
 //! Iteration when whole detector is masked
@@ -124,14 +105,11 @@ TEST_F(SimulationAreaTest, allMaskedIteration)
     detector.addMask(Rectangle(-0.9, 0.1, 3.9, 3.9), true);
 
     std::vector<size_t> indexes;
-    std::vector<size_t> elementIndexes;
 
-    for (auto it = detector.beginNonMaskedPoints(); it != detector.endNonMaskedPoints(); ++it) {
+    for (auto it = detector.beginNonMaskedPoints(); it != detector.endNonMaskedPoints(); ++it)
         indexes.push_back(it.index());
-        elementIndexes.push_back(it.elementIndex());
-    }
+
     EXPECT_EQ(indexes.size(), size_t(0));
-    EXPECT_EQ(elementIndexes.size(), size_t(0));
 }
 
 //! Iteration when RegionOfInterest and masks are present
@@ -144,35 +122,29 @@ TEST_F(SimulationAreaTest, maskAndRoiIteration)
 
     std::vector<size_t> expectedRoiIndexes = {1, 2, 3, 4, 5, 6, 7, 8};
     std::vector<size_t> expectedDetectorIndexes = {6, 7, 9, 10, 11, 13, 14, 15};
-    std::vector<size_t> expectedElementIndexes = {0, 1, 2, 3, 4, 5, 6, 7};
     std::vector<size_t> indexes;
     std::vector<size_t> elementIndexes;
     std::vector<size_t> detectorIndexes;
     std::vector<size_t> roiIndexes;
     for (auto it = detector.beginNonMaskedPoints(); it != detector.endNonMaskedPoints(); ++it) {
         indexes.push_back(it.index());
-        elementIndexes.push_back(it.elementIndex());
         detectorIndexes.push_back(it.detectorIndex());
         roiIndexes.push_back(it.roiIndex());
     }
     EXPECT_EQ(indexes, expectedRoiIndexes);
-    EXPECT_EQ(elementIndexes, expectedElementIndexes);
     EXPECT_EQ(detectorIndexes, expectedDetectorIndexes);
     EXPECT_EQ(roiIndexes, expectedRoiIndexes);
 
     // Now same as above, but using IDetector::iterate
     indexes.clear();
-    elementIndexes.clear();
     detectorIndexes.clear();
     roiIndexes.clear();
     detector.iterateOverNonMaskedPoints([&](IDetector::const_iterator it) {
         indexes.push_back(it.index());
-        elementIndexes.push_back(it.elementIndex());
         detectorIndexes.push_back(it.detectorIndex());
         roiIndexes.push_back(it.roiIndex());
     });
     EXPECT_EQ(indexes, expectedRoiIndexes);
-    EXPECT_EQ(elementIndexes, expectedElementIndexes);
     EXPECT_EQ(detectorIndexes, expectedDetectorIndexes);
     EXPECT_EQ(roiIndexes, expectedRoiIndexes);
 }
@@ -187,36 +159,29 @@ TEST_F(SimulationAreaTest, maskAndRoiIterationVisitMasks)
 
     std::vector<size_t> expectedRoiIndexes = {0, 1, 2, 3, 4, 5, 6, 7, 8};
     std::vector<size_t> expectedDetectorIndexes = {5, 6, 7, 9, 10, 11, 13, 14, 15};
-    std::vector<size_t> expectedElementIndexes = {0, 1, 2, 3, 4, 5, 6, 7, 8};
     std::vector<size_t> indexes;
-    std::vector<size_t> elementIndexes;
     std::vector<size_t> detectorIndexes;
     std::vector<size_t> roiIndexes;
     for (auto it = detector.beginRegionOfInterestPoints();
          it != detector.endRegionOfInterestPoints(); ++it) {
         indexes.push_back(it.index());
-        elementIndexes.push_back(it.elementIndex());
         detectorIndexes.push_back(it.detectorIndex());
         roiIndexes.push_back(it.roiIndex());
     }
     EXPECT_EQ(indexes, expectedRoiIndexes);
-    EXPECT_EQ(elementIndexes, expectedElementIndexes);
     EXPECT_EQ(detectorIndexes, expectedDetectorIndexes);
     EXPECT_EQ(roiIndexes, expectedRoiIndexes);
 
     // Now same as above, but using IDetector::iterate
     indexes.clear();
-    elementIndexes.clear();
     detectorIndexes.clear();
     roiIndexes.clear();
     detector.iterateOverRegionOfInterest([&](IDetector::const_iterator it) {
         indexes.push_back(it.index());
-        elementIndexes.push_back(it.elementIndex());
         detectorIndexes.push_back(it.detectorIndex());
         roiIndexes.push_back(it.roiIndex());
     });
     EXPECT_EQ(indexes, expectedRoiIndexes);
-    EXPECT_EQ(elementIndexes, expectedElementIndexes);
     EXPECT_EQ(detectorIndexes, expectedDetectorIndexes);
     EXPECT_EQ(roiIndexes, expectedRoiIndexes);
 }
@@ -231,20 +196,16 @@ TEST_F(SimulationAreaTest, indexInRoi)
 
     std::vector<size_t> expectedIndexes = {1, 2, 3, 4, 5, 6, 7, 8};
     std::vector<size_t> expectedDetectorIndexes = {6, 7, 9, 10, 11, 13, 14, 15};
-    std::vector<size_t> expectedElementIndexes = {0, 1, 2, 3, 4, 5, 6, 7};
     std::vector<size_t> expectedRoi = {1, 2, 3, 4, 5, 6, 7, 8};
     std::vector<size_t> indexes;
-    std::vector<size_t> elementIndexes;
     std::vector<size_t> roiIndexes;
     std::vector<size_t> detectorIndexes;
     for (auto it = detector.beginNonMaskedPoints(); it != detector.endNonMaskedPoints(); ++it) {
         indexes.push_back(it.index());
-        elementIndexes.push_back(it.elementIndex());
         roiIndexes.push_back(it.roiIndex());
         detectorIndexes.push_back(it.detectorIndex());
     }
     EXPECT_EQ(indexes, expectedIndexes);
-    EXPECT_EQ(elementIndexes, expectedElementIndexes);
     EXPECT_EQ(roiIndexes, expectedRoi);
     EXPECT_EQ(detectorIndexes, expectedDetectorIndexes);
 }
diff --git a/Tests/UnitTests/Core/Instrument/SpecularDetector1DTest.cpp b/Tests/UnitTests/Core/Instrument/SpecularDetector1DTest.cpp
index 907f93090aee6d935db39289422291ab72420858..76d5289a97e3693ff0be611a5b2a4bd97635a01c 100644
--- a/Tests/UnitTests/Core/Instrument/SpecularDetector1DTest.cpp
+++ b/Tests/UnitTests/Core/Instrument/SpecularDetector1DTest.cpp
@@ -62,15 +62,10 @@ TEST_F(SpecularDetectorTest, Clone)
 
     // checking iteration over the map of cloned detector
     const std::vector<size_t> expectedDetectorIndexes = {0, 1, 2, 3, 4};
-    const std::vector<size_t> expectedElementIndexes = expectedDetectorIndexes;
     std::vector<size_t> detectorIndexes;
-    std::vector<size_t> elementIndexes;
-    for (auto it = clone->beginNonMaskedPoints(); it != clone->endNonMaskedPoints(); ++it) {
+    for (auto it = clone->beginNonMaskedPoints(); it != clone->endNonMaskedPoints(); ++it)
         detectorIndexes.push_back(it.detectorIndex());
-        elementIndexes.push_back(it.elementIndex());
-    }
     EXPECT_EQ(detectorIndexes, expectedDetectorIndexes);
-    EXPECT_EQ(elementIndexes, expectedElementIndexes);
 
     EXPECT_EQ(clone->detectionProperties().analyzerDirection(), analyzer);
     EXPECT_EQ(clone->detectionProperties().analyzerEfficiency(), 0.33);
diff --git a/Tests/UnitTests/Core/Instrument/SphericalDetectorTest.cpp b/Tests/UnitTests/Core/Instrument/SphericalDetectorTest.cpp
index 76a81cef8f240abcf342ffa44a7a7be358d6463f..198c68aec9d5710a8197735792e8a8e7ad7b569e 100644
--- a/Tests/UnitTests/Core/Instrument/SphericalDetectorTest.cpp
+++ b/Tests/UnitTests/Core/Instrument/SphericalDetectorTest.cpp
@@ -205,15 +205,10 @@ TEST_F(SphericalDetectorTest, Clone)
 
     // checking iteration over the map of cloned detector
     std::vector<size_t> expectedDetectorIndexes = {6, 9, 10, 13, 14, 17};
-    std::vector<size_t> expectedElementIndexes = {0, 1, 2, 3, 4, 5};
     std::vector<size_t> detectorIndexes;
-    std::vector<size_t> elementIndexes;
-    for (auto it = clone->beginNonMaskedPoints(); it != clone->endNonMaskedPoints(); ++it) {
+    for (auto it = clone->beginNonMaskedPoints(); it != clone->endNonMaskedPoints(); ++it)
         detectorIndexes.push_back(it.detectorIndex());
-        elementIndexes.push_back(it.elementIndex());
-    }
     EXPECT_EQ(detectorIndexes, expectedDetectorIndexes);
-    EXPECT_EQ(elementIndexes, expectedElementIndexes);
 }
 
 // Test retrieval of analyzer properties