diff --git a/benchmarks/others/config.yml b/benchmarks/others/config.yml
index 718b572faeac190eef1f067dc9a465f7f084cd90..5bef64db1a2e8d013ea8c9d6451ecf0b518026fa 100644
--- a/benchmarks/others/config.yml
+++ b/benchmarks/others/config.yml
@@ -1,34 +1,75 @@
-bench:materialscan:
+variables:
+  ETAMIN: "-4.5"
+  ETAMAX: "+4.5"
+  ETASTEP: "0.01"
+  PHIMIN: "0.0"
+  PHIMAX: "6.28318530718"
+  PHISTEP: "0.01"
+  TRACKING_RHOMAX: "103."
+  TRACKING_ZNMAX: "191."
+  TRACKING_ZPMAX: "350."
+  ECAL_RHOMAX: "230."
+  ECAL_ZNMAX: "355."
+  ECAL_ZPMAX: "380."
+
+bench:materialScanEta:
+  stage: benchmarks
+  extends: .det_benchmark
+  script:
+    - echo ".x benchmarks/others/materialScanEta.cxx($ETAMIN, $ETAMAX, $ETASTEP, $PHIMIN)" | materialScan ${DETECTOR_PATH}/${JUGGLER_DETECTOR}.xml -interactive
+    - mkdir results/images/
+    - mv materialScanEta.png results/images/materialScanEta.png
+    - mv materialScanEta.pdf results/images/materialScanEta.pdf
+
+bench:materialScanEta:tracking:
+  stage: benchmarks
+  extends: .det_benchmark
+  script:
+    - echo ".x benchmarks/others/materialScanEta.cxx($ETAMIN, $ETAMAX, $ETASTEP, $PHIMIN, $TRACKING_RHOMAX, $TRACKING_ZNMAX, $TRACKING_ZPMAX)" | materialScan ${DETECTOR_PATH}/${JUGGLER_DETECTOR}.xml -interactive
+    - mkdir results/images/
+    - mv materialScanEta.png results/images/materialScanEtaTracking.png
+    - mv materialScanEta.pdf results/images/materialScanEtaTracking.pdf
+
+bench:materialScanEta:ecal:
+  stage: benchmarks
+  extends: .det_benchmark
+  script:
+    - echo ".x benchmarks/others/materialScanEta.cxx($ETAMIN, $ETAMAX, $ETASTEP, $PHIMIN, $ECAL_RHOMAX, $ECAL_ZNMAX, $ECAL_ZPMAX)" | materialScan ${DETECTOR_PATH}/${JUGGLER_DETECTOR}.xml -interactive
+    - mkdir results/images/
+    - mv materialScanEta.png results/images/materialScanEtaEcal.png
+    - mv materialScanEta.pdf results/images/materialScanEtaEcal.pdf
+
+bench:materialScanEtaPhi:
   stage: benchmarks
   extends: .det_benchmark
   script:
-    - echo ".x benchmarks/others/materialScan.cxx(-4.5, +4.5, 0.01, 750., 0.0)" | materialScan ${DETECTOR_PATH}/${JUGGLER_DETECTOR}.xml -interactive
+    - echo ".x benchmarks/others/materialScanEtaPhi.cxx($ETAMIN, $ETAMAX, $ETASTEP, $PHIMIN, $PHIMAX, $PHISTEP)" | materialScan ${DETECTOR_PATH}/${JUGGLER_DETECTOR}.xml -interactive
     - mkdir results/images/
-    - mv materialScan.png results/images/materialScan.png
-    - mv materialScan.pdf results/images/materialScan.pdf
+    - mv materialScanEtaPhi.png results/images/materialScanEtaPhi.png
+    - mv materialScanEtaPhi.pdf results/images/materialScanEtaPhi.pdf
 
-bench:materialscan:tracking:
+bench:materialScanEtaPhi:tracking:
   stage: benchmarks
   extends: .det_benchmark
   script:
-    - echo ".x benchmarks/others/materialScan.cxx(-4.5, +4.5, 0.01, 750., 0.0, 103., 191., 350.)" | materialScan ${DETECTOR_PATH}/${JUGGLER_DETECTOR}.xml -interactive
+    - echo ".x benchmarks/others/materialScanEtaPhi.cxx($ETAMIN, $ETAMAX, $ETASTEP, $PHIMIN, $PHIMAX, $PHISTEP, $TRACKING_RHOMAX, $TRACKING_ZNMAX, $TRACKING_ZPMAX)" | materialScan ${DETECTOR_PATH}/${JUGGLER_DETECTOR}.xml -interactive
     - mkdir results/images/
-    - mv materialScan.png results/images/materialScanTracking.png
-    - mv materialScan.pdf results/images/materialScanTracking.pdf
+    - mv materialScanEtaPhi.png results/images/materialScanEtaPhiTracking.png
+    - mv materialScanEtaPhi.pdf results/images/materialScanEtaPhiTracking.pdf
 
-bench:materialscan:ecal:
+bench:materialScanEtaPhi:ecal:
   stage: benchmarks
   extends: .det_benchmark
   script:
-    - echo ".x benchmarks/others/materialScan.cxx(-4.5, +4.5, 0.01, 750., 0.0, 230., 355., 380.)" | materialScan ${DETECTOR_PATH}/${JUGGLER_DETECTOR}.xml -interactive
+    - echo ".x benchmarks/others/materialScanEtaPhi.cxx($ETAMIN, $ETAMAX, $ETASTEP, $PHIMIN, $PHIMAX, $PHISTEP, $ECAL_RHOMAX, $ECAL_ZNMAX, $ECAL_ZPMAX)" | materialScan ${DETECTOR_PATH}/${JUGGLER_DETECTOR}.xml -interactive
     - mkdir results/images/
-    - mv materialScan.png results/images/materialScanEcal.png
-    - mv materialScan.pdf results/images/materialScanEcal.pdf
+    - mv materialScanEtaPhi.png results/images/materialScanEtaPhiEcal.png
+    - mv materialScanEtaPhi.pdf results/images/materialScanEtaPhiEcal.pdf
 
 collect_results:materialscan:
   extends: .det_benchmark
   stage: collect
   needs:
-    - ["bench:materialscan", "bench:materialscan:tracking"]
+    - ["bench:materialScanEta", "bench:materialScanEta:tracking", "bench:materialScanEta:ecal", "bench:materialScanEtaPhi", "bench:materialScanEtaPhi:tracking", "bench:materialScanEtaPhi:ecal"]
   script:
     - ls -lrht
diff --git a/benchmarks/others/materialScan.cxx b/benchmarks/others/materialScanEta.cxx
similarity index 85%
rename from benchmarks/others/materialScan.cxx
rename to benchmarks/others/materialScanEta.cxx
index dbc7cfc8f2a84cb21698f0849439a65fa5b58d6a..525bd51c90a5e0d4f0f112f93ca3856087c30a27 100644
--- a/benchmarks/others/materialScan.cxx
+++ b/benchmarks/others/materialScanEta.cxx
@@ -40,29 +40,40 @@ Color_t color(const Material& m) {
   }
 }
 
-void materialScan(
+void materialScanEta(
     double etamin = -2.0, // minimum eta
     double etamax = +1.0, // maximum eta
     double etastep = 0.2, // steps in eta
-    double rmax = 100.0, // maximum radius to scan to
     double phi = 0.0, // phi angle for material scan
     double rhomax = 10000.0, // maximum distance from z axis
     double znmax = 10000.0, // maximum negative endcap z plane (positive number)
     double zpmax = 10000.0 // maximum positive endcap z plane (positive number)
 ) {
   // check inputs
-  if (etamin > etamax || rmax <= 0.0) {
+  if (etamin > etamax) {
     std::cout << "Error: ordered eta range required" << std::endl;
     return -1;
   }
+  if (rhomax <= 0.0) {
+    std::cout << "Error: positive rhomax required" << std::endl;
+    return -1;
+  }
+  if (znmax <= 0.0) {
+    std::cout << "Error: positive znmax required" << std::endl;
+    return -1;
+  }
+  if (zpmax <= 0.0) {
+    std::cout << "Error: positive zpmax required" << std::endl;
+    return -1;
+  }
 
   // get material scans
   size_t total{0};
   std::vector<dd4hep::rec::MaterialVec> scan;
   double x0{0}, y0{0}, z0{0};
   for (double eta = etamin; eta <= etamax + 0.5*etastep; eta += etastep) {
-    double theta = 2.0 * (atan(1) - atan(exp(-eta)));
-    double r = min((theta > 0? zpmax: -znmax) / sin(theta), min(rmax, rhomax / cos(theta)));
+    double theta = 2.0 * (atan(1) - atan(exp(-eta))); // |theta| < 90 deg, cos(theta) > 0, sin(theta) can be 0
+    double r = min((theta < 0? -znmax: zpmax) / sin(theta), rhomax / cos(theta)); // theta == 0 results in min(+inf, rhomax)
     double x = r * cos(theta) * cos(phi);
     double y = r * cos(theta) * sin(phi);
     double z = r * sin(theta); 
@@ -105,7 +116,7 @@ void materialScan(
   std::cout << histograms.size() << " histograms created" << std::endl;
 
   // plot histograms as stack
-  THStack hs("hs",Form("Material Scan (r < %.0f cm, rho < %.0f cm, -%.0f cm < z < %.0f cm)", rmax, rhomax, znmax, zpmax));
+  THStack hs("hs",Form("Material Scan (rho < %.0f cm, -%.0f cm < z < %.0f cm)", rhomax, znmax, zpmax));
   for (auto& h: histograms) {
     hs.Add(&h);
   }
@@ -116,6 +127,6 @@ void materialScan(
   hs.GetXaxis()->SetTitle("eta");
   hs.GetYaxis()->SetTitle("Fraction X0");
   hs.SetMinimum(2.5e-3);
-  cs.SaveAs("materialScan.png");
-  cs.SaveAs("materialScan.pdf");
+  cs.SaveAs("materialScanEta.png");
+  cs.SaveAs("materialScanEta.pdf");
 }
diff --git a/benchmarks/others/materialScanEtaPhi.cxx b/benchmarks/others/materialScanEtaPhi.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..dc6705580a22cd9252a9491b42cd794eb8fe222a
--- /dev/null
+++ b/benchmarks/others/materialScanEtaPhi.cxx
@@ -0,0 +1,74 @@
+#import <iostream>
+#import <vector>
+
+#include <DDRec/Material.h>
+#include <DDRec/MaterialScan.h>
+
+#include <TH1F.h>
+#include <THStack.h>
+
+void materialScanEtaPhi(
+    double etamin = -2.0, // minimum eta
+    double etamax = +1.0, // maximum eta
+    double etastep = 0.2, // steps in eta
+    double phimin = 0.0, // minimum phi
+    double phimax = 2.0 * M_PI, // maximum phi
+    double phistep = M_PI / 2, // steps in phi
+    double rhomax = 10000.0, // maximum distance from z axis
+    double znmax = 10000.0, // maximum negative endcap z plane (positive number)
+    double zpmax = 10000.0 // maximum positive endcap z plane (positive number)
+) {
+  // check inputs
+  if (etamin > etamax) {
+    std::cout << "Error: ordered eta range required" << std::endl;
+    return -1;
+  }
+  if (phimin > phimax) {
+    std::cout << "Error: ordered phi range required" << std::endl;
+    return -1;
+  }
+  if (rhomax <= 0.0) {
+    std::cout << "Error: positive rhomax required" << std::endl;
+    return -1;
+  }
+  if (znmax <= 0.0) {
+    std::cout << "Error: positive znmax required" << std::endl;
+    return -1;
+  }
+  if (zpmax <= 0.0) {
+    std::cout << "Error: positive zpmax required" << std::endl;
+    return -1;
+  }
+
+  // get material scans
+  size_t total{0};
+  double x0{0}, y0{0}, z0{0};
+  TH2F h2("h2","Material Scan Eta vs Phi",
+    (etamax-etamin)/etastep+1,etamin,etamax,
+    (phimax-phimin)/phistep+1,phimin,phimax
+  );
+  for (double eta = etamin; eta <= etamax + 0.5*etastep; eta += etastep) {
+    for (double phi = phimin; phi <= phimax + 0.5*phistep; phi += phistep) {
+      double theta = 2.0 * (atan(1) - atan(exp(-eta))); // |theta| < 90 deg, cos(theta) > 0, sin(theta) can be 0 
+      double r = min((theta < 0? -znmax: zpmax) / sin(theta), rhomax / cos(theta)); // theta == 0 results in min(+inf, rhomax)
+      double x = r * cos(theta) * cos(phi);
+      double y = r * cos(theta) * sin(phi);
+      double z = r * sin(theta); 
+      auto scan = gMaterialScan->scan(x0,y0,z0,x,y,z);
+      double X0{0};
+      for (auto& mat_len: scan)
+        X0 +=  mat_len.second / mat_len.first.radLength();
+      h2.Fill(eta,phi,X0);
+    }
+  }
+
+  // plot histograms as stack
+  TCanvas cs("cs","Material Scan Eta vs Phi",1920,1080);
+  auto pad = cs.cd();
+  cs.SetLogz();
+  h2.Draw("colz");
+  h2.GetXaxis()->SetTitle("eta");
+  h2.GetYaxis()->SetTitle("phi");
+  cs.SaveAs("materialScanEtaPhi.png");
+  cs.SaveAs("materialScanEtaPhi.pdf");
+}