diff --git a/DDG4/plugins/Geant4RegexSensitivesConstruction.cpp b/DDG4/plugins/Geant4RegexSensitivesConstruction.cpp
index 60d7c6f12ebdf061e383698c19836e882f72852f..cdd0e158a58f425c26ec88d6d46e16c6bdf2f503 100644
--- a/DDG4/plugins/Geant4RegexSensitivesConstruction.cpp
+++ b/DDG4/plugins/Geant4RegexSensitivesConstruction.cpp
@@ -39,11 +39,11 @@ namespace dd4hep {
     class Geant4RegexSensitivesConstruction : public Geant4DetectorConstruction   {
     public:
       std::string detector_name;
-      std::string regex_value;
+      std::vector<std::string> regex_values;
       std::size_t collect_volumes(std::set<Volume>&  volumes,
                                   PlacedVolume       pv,
                                   const std::string& path,
-                                  std::regex&        match);
+                                  const std::vector<std::regex>& matches);
     public:
       /// Initializing constructor for DDG4
       Geant4RegexSensitivesConstruction(Geant4Context* ctxt, const std::string& nam);
@@ -82,8 +82,8 @@ DECLARE_GEANT4ACTION(Geant4RegexSensitivesConstruction)
 Geant4RegexSensitivesConstruction::Geant4RegexSensitivesConstruction(Geant4Context* ctxt, const std::string& nam)
 : Geant4DetectorConstruction(ctxt,nam)
 {
-  declareProperty("Detector",      detector_name);
-  declareProperty("Regex",         regex_value);
+  declareProperty("Detector", detector_name);
+  declareProperty("Match",    regex_values);
   InstanceCount::increment(this);
 }
 
@@ -96,24 +96,27 @@ std::size_t
 Geant4RegexSensitivesConstruction::collect_volumes(std::set<Volume>&  volumes,
                                                    PlacedVolume       pv,
                                                    const std::string& path,
-                                                   std::regex&        match)
+                                                   const std::vector<std::regex>& matches)
 {
   std::size_t count = 0;
   // Try to minimize a bit the number of regex matches.
   if ( volumes.find(pv.volume()) == volumes.end() )  {
     if( !path.empty() )  {
-      std::smatch sm;
-      bool stat = std::regex_match(path, sm, match);
-      if( stat )  {
-        volumes.insert(pv.volume());
+      for( const auto& m : matches )  {
+        std::smatch sm;
+        bool stat = std::regex_match(path, sm, m);
+        if( stat )  {
+          volumes.insert(pv.volume());
+          ++count;
+          break;
+        }
       }
-      ++count;
     }
     // Now recurse down the daughters
     for( int i=0, num = pv->GetNdaughters(); i < num; ++i )  {
       PlacedVolume daughter = pv->GetDaughter(i);
       std::string  daughter_path = path + "/" + daughter.name();
-      count += this->collect_volumes(volumes, daughter, daughter_path, match);
+      count += this->collect_volumes(volumes, daughter, daughter_path, matches);
     }
   }
   return count;
@@ -142,22 +145,24 @@ void Geant4RegexSensitivesConstruction::constructSensitives(Geant4DetectorConstr
 
   std::set<Volume> volumes;
   int flags = std::regex_constants::icase | std::regex_constants::ECMAScript;
-  std::regex expression(regex_value, (std::regex_constants::syntax_option_type)flags);
-
+  std::vector<std::regex> expressions;
+  for( const auto& val : regex_values )  {
+    std::regex e(val, (std::regex_constants::syntax_option_type)flags);
+    expressions.emplace_back(e);
+  }
   TTimeStamp start;
   print("+++ Detector: %s Starting to scan volume....", det);
-  std::size_t num_nodes = this->collect_volumes(volumes, de.placement(), de.placementPath(), expression);
+  std::size_t num_nodes = this->collect_volumes(volumes, de.placement(), de.placementPath(), expressions);
   for( const auto& vol : volumes )  {
     G4LogicalVolume* g4vol = g4info->g4Volumes[vol];
     if( !g4vol )  {
-      except("+++ Failed to access G4LogicalVolume for SD %s of type %s",
-             nam.c_str(), typ.c_str());
+      except("+++ Failed to access G4LogicalVolume for SD %s of type %s", nam.c_str(), typ.c_str());
     }
     print("+++ Detector: %s Assign sensitive detector [%s] to volume: %s.",
           nam.c_str(), typ.c_str(), vol.name());
     ctxt->setSensitiveDetector(g4vol, g4sd);
   }
   TTimeStamp stop;
-  print("+++ Detector: %s Handled %ld nodes with %ld sensitive volume type. Total of %7.3f seconds.",
+  print("+++ Detector: %s Handled %ld nodes with %ld sensitive volume type(s). Total of %7.3f seconds.",
         det, num_nodes, volumes.size(), stop.AsDouble()-start.AsDouble() );
 }
diff --git a/examples/ClientTests/compact/BoxOfStraws.xml b/examples/ClientTests/compact/BoxOfStraws.xml
index 752b9381c177b637e44fec34ff1f5e3d4d4f58fa..94f7c676dd824ca5e850bfae9737d103d4d47b5f 100644
--- a/examples/ClientTests/compact/BoxOfStraws.xml
+++ b/examples/ClientTests/compact/BoxOfStraws.xml
@@ -13,12 +13,12 @@
 -->
  
   <info name="BoxOfStraws"
-	title="Test with silicon boxes"
+	title="Test with a box of straws"
 	author="Markus Frank"
-	url="http://www.cern.ch/frankm"
+	url="http://www.cern.ch"
 	status="development"
 	version="1.0">
-    <comment>Alignment test with 2 simple boxes</comment>        
+    <comment>Detector scalability test with a box of straws</comment>        
   </info>
 
   <includes>
@@ -37,8 +37,8 @@
     <vis name="Invisible" showDaughters="false" visible="false"/>
     <vis name="InvisibleWithChildren" showDaughters="true" visible="false"/>
     <vis name="VisibleRed"   alpha="0.4" r="1.0" g="0.0" b="0.0" showDaughters="true" visible="true"/>
-    <vis name="VisibleBlue"  alpha="1.0" r="0.0" g="0.0" b="1.0" showDaughters="false" visible="true"/>
-    <vis name="VisibleGreen" alpha="1.0" r="0.0" g="1.0" b="0.0" drawingStyle="solid" lineStyle="solid" showDaughters="true" visible="true"/>
+    <vis name="VisibleBlue"  alpha="1.0" r="0.0" g="0.0" b="1.0" showDaughters="true" visible="true"/>
+    <vis name="VisibleGreen" alpha="1.0" r="0.0" g="1.0" b="0.0" showDaughters="false" visible="true"/>
   </display>
 
   <limits>
@@ -57,10 +57,13 @@
   <detectors>
     <detector id="1" name="BoxOfStrawsDet" type="DD4hep_BoxOfStraws" readout="BoxOfStrawsHits" vis="VisibleGreen" region="StrawRegion" limits="BoxOfStrawsLimitSet">
       <box      x="1*m"    y="1*m" z="1000*mm"  limits="BoxOfStrawsLimitSet" vis="VisibleRed"/>
-      <straw rmax="2*mm"   y="1*m" thickness="0.5*mm" vis="VisibleBlue">
+      <straw rmax="0.5*mm" y="1*m" thickness="0.1*mm" vis="VisibleBlue">
+        <material name="Iron"/>
+      </straw>
+      <gas vis="VisibleGreen">
         <material name="Argon"/>
         <non_sensitive/>
-      </straw>
+      </gas>
       <position x="0*m"   y="0*m"   z="0*m"/>
       <rotation x="0"     y="0"     z="0"/>
     </detector>
@@ -74,7 +77,7 @@
 
   <fields>
     <field name="GlobalSolenoid" type="solenoid" 
-	   inner_field="5.0*tesla"
+	   inner_field="3.0*tesla"
 	   outer_field="-1.5*tesla" 
 	   zmax="2*m"
 	   outer_radius="2*m">
diff --git a/examples/ClientTests/scripts/BoxOfStraws.py b/examples/ClientTests/scripts/BoxOfStraws.py
index 9eabae0e5985ea9ea97dc2b774de5cfffe46e5cb..45c766dbfcb103c441c156848c7de89176142321 100644
--- a/examples/ClientTests/scripts/BoxOfStraws.py
+++ b/examples/ClientTests/scripts/BoxOfStraws.py
@@ -32,7 +32,8 @@ def run():
   args = DDG4.CommandLine()
   kernel = DDG4.Kernel()
   logger = DDG4.Logger('BoxOfStraws')
-  kernel.loadGeometry(str("file:" + os.environ['DD4hepExamplesINSTALL'] + "/examples/ClientTests/compact/BoxOfStraws.xml"))
+  install_dir = os.environ['DD4hepExamplesINSTALL']
+  kernel.loadGeometry(str('file:' + install_dir + '/examples/ClientTests/compact/BoxOfStraws.xml'))
 
   DDG4.importConstants(kernel.detectorDescription(), debug=False)
   geant4 = DDG4.Geant4(kernel)
@@ -49,32 +50,32 @@ def run():
   geant4.setupTrackingField(prt=True)
   #
   # Configure G4 geometry setup
-  seq, act = geant4.addDetectorConstruction("Geant4DetectorGeometryConstruction/ConstructGeo")
+  seq, act = geant4.addDetectorConstruction('Geant4DetectorGeometryConstruction/ConstructGeo')
   act.DebugVolumes = True
   #
   # Assign sensitive detectors according to the declarations 'tracker' or 'calorimeter', etc
-  seq, act = geant4.addDetectorConstruction("Geant4DetectorSensitivesConstruction/ConstructSD")
+  seq, act = geant4.addDetectorConstruction('Geant4DetectorSensitivesConstruction/ConstructSD')
   #
   # Assign sensitive detectors in Geant4 by matching a regular expression in the detector sub-tree
-  seq, act = geant4.addDetectorConstruction("Geant4RegexSensitivesConstruction/ConstructSDRegEx")
+  seq, act = geant4.addDetectorConstruction('Geant4RegexSensitivesConstruction/ConstructSDRegEx')
   act.Detector = 'BoxOfStrawsDet'
   act.OutputLevel = Output.ALWAYS
-  act.Regex = '/world_volume_(.*)/BoxOfStrawsDet_(.*)/layer_(.*)/straw_(.*)/gas_(.*)'
-  act.Regex = '/world_volume_(.*)/BoxOfStrawsDet_(.*)/layer_(.*)/straw_(.*)'
+  act.Match = ['/world_volume_(.*)/BoxOfStrawsDet_(.*)/layer_(.*)/straw_(.*)/gas_(.*)']
+  act.Match = ['/world_volume_(.*)/BoxOfStrawsDet_(.*)/layer_(.*)/straw_(.*)']
   #
   # Configure I/O
   geant4.setupROOTOutput('RootOutput', 'BoxOfStraws_' + time.strftime('%Y-%m-%d_%H-%M'))
   #
   # Setup particle gun
-  gun = geant4.setupGun("Gun", particle='pi+', energy=100 * GeV, multiplicity=1)
+  gun = geant4.setupGun('Gun', particle='pi+', energy=100 * GeV, multiplicity=1)
   gun.enableUI()
   #
   # And handle the simulation particles.
-  part = DDG4.GeneratorAction(kernel, "Geant4ParticleHandler/ParticleHandler")
+  part = DDG4.GeneratorAction(kernel, 'Geant4ParticleHandler/ParticleHandler')
   kernel.generatorAction().adopt(part)
   part.SaveProcesses = ['Decay']
-  part.MinimalKineticEnergy = 100 * MeV
-  user = DDG4.Action(kernel, "Geant4TCUserParticleHandler/UserParticleHandler")
+  part.MinimalKineticEnergy = 50 * MeV
+  user = DDG4.Action(kernel, 'Geant4TCUserParticleHandler/UserParticleHandler')
   user.TrackingVolume_Zmax = 2.5 * m
   user.TrackingVolume_Rmax = 2.5 * m
   part.adopt(user)
diff --git a/examples/ClientTests/src/BoxOfStraws_geo.cpp b/examples/ClientTests/src/BoxOfStraws_geo.cpp
index 058414b06a08a587b15f22c6d383bdfaa8f87539..29637c6a9e04eab20dff3921a19d08357115b5b2 100644
--- a/examples/ClientTests/src/BoxOfStraws_geo.cpp
+++ b/examples/ClientTests/src/BoxOfStraws_geo.cpp
@@ -29,6 +29,7 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
   xml_dim_t    x_rot   = x_det.child(_U(rotation));
   xml_dim_t    x_pos   = x_det.child(_U(position));
   xml_det_t    x_straw = x_det.child(_Unicode(straw));
+  xml_det_t    x_gas   = x_det.child(_Unicode(gas));
   std::string  nam     = x_det.nameStr();
   const double thick   = x_straw.thickness();
   const double delta   = 2e0*x_straw.rmax();
@@ -36,18 +37,19 @@ static Ref_t create_detector(Detector& description, xml_h e, SensitiveDetector s
   const int    num_z   = int(2e0*x_box.z() / delta);
 
   Tube   straw(0., x_straw.rmax()-tol, x_straw.y()-tol);
-  Volume straw_vol("straw", straw, description.material("Iron"));
+  Volume straw_vol("straw", straw, description.material(x_straw.materialStr()));
+  straw_vol.setAttributes(description, x_straw.regionStr(), x_straw.limitsStr(), x_straw.visStr());
   
-  Tube   straw_gas(0., x_straw.rmax()-tol-thick, x_straw.y()-tol-thick);
-  Volume straw_gas_vol("gas", straw_gas, description.material(x_straw.materialStr()));
+  Tube   straw_gas(0., straw.rMax()-thick, straw.dZ()-thick);
+  Volume straw_gas_vol("gas", straw_gas, description.material(x_gas.materialStr()));
+  straw_gas_vol.setAttributes(description, x_gas.regionStr(), x_gas.limitsStr(), x_gas.visStr());
 
-  straw_vol.setAttributes(description, x_straw.regionStr(), x_straw.limitsStr(), x_straw.visStr());
   straw_vol.placeVolume(straw_gas_vol);
 
   printout(INFO, "BoxOfStraws", "%s: Straw: rmax: %7.3f y: %7.3f mat: %s vis: %s solid: %s",
            nam.c_str(), x_straw.rmax(), x_straw.y(), x_straw.materialStr().c_str(),
            x_straw.visStr().c_str(), straw.type());
-  if ( x_straw.hasChild(_U(sensitive)) )  {
+  if( x_gas.hasChild(_U(sensitive)) )  {
     sens.setType("tracker");
     straw_gas_vol.setSensitiveDetector(sens);
   }