diff --git a/DDCore/src/plugins/ShapePlugins.cpp b/DDCore/src/plugins/ShapePlugins.cpp
index a620ad18752e5d563ae345eab7b0dfa137a502fd..871e70af96eddec9a9f233ee182257a58a5ff9ef 100644
--- a/DDCore/src/plugins/ShapePlugins.cpp
+++ b/DDCore/src/plugins/ShapePlugins.cpp
@@ -102,8 +102,9 @@ static Handle<TObject> create_Tube(Detector&, xml_h element)   {
   Solid solid;
   xml_dim_t e(element);
   xml_attr_t aphi = element.attr_nothrow(_U(phi1));
-  if ( aphi )  {
-    double phi1 = e.phi1();
+  xml_attr_t bphi = element.attr_nothrow(_U(phi2));
+  if ( aphi || bphi )  {
+    double phi1 = e.phi1(0.0);
     double phi2 = e.phi2(2*M_PI);
     solid = Tube(e.rmin(0.0),e.rmax(),e.dz(0.0),phi1, phi2);
   }
@@ -231,9 +232,23 @@ DECLARE_XML_SHAPE(Trapezoid__shape_constructor,create_Trd2)
 DECLARE_XML_SHAPE(Trd2__shape_constructor,create_Trd2)
 
 static Handle<TObject> create_Torus(Detector&, xml_h element)   {
-  xml_dim_t e(element);
-  double startphi = e.hasAttr(_U(phi)) ? e.phi() : e.startphi(M_PI);
-  Solid solid = Torus(e.r(), e.rmin(), e.rmax(), phi, e.deltaphi(2.*M_PI));
+  Solid      solid;
+  xml_dim_t  e(element);
+  xml_attr_t aphi = element.attr_nothrow(_U(phi1));
+  xml_attr_t bphi = element.attr_nothrow(_U(phi2));
+  if ( aphi || bphi )  {
+    double phi1 = e.phi1(0.0);
+    double phi2 = e.phi2(2*M_PI);
+    /// Old naming: angles from [phi1,phi2]
+    solid = Torus(e.r(), e.rmin(0.0), e.rmax(), phi1, phi2);
+  }
+  else  {
+    double start_phi = e.startphi(0.0);
+    double delta_phi = e.deltaphi(2*M_PI);
+    while ( start_phi > 2.0*M_PI ) start_phi -= 2.0*M_PI;
+    /// New naming: angles from [startphi,startphi+deltaphi]
+    solid = Torus(e.r(), e.rmin(0.0), e.rmax(), start_phi, start_phi+delta_phi);
+  }
   if ( e.hasAttr(_U(name)) ) solid->SetName(e.attr<string>(_U(name)).c_str());
   return solid;
 }