diff --git a/DDCore/include/DD4hep/VolumeManager.h b/DDCore/include/DD4hep/VolumeManager.h
index 532a42393cafd2ad081eb2f9c61c3cf16f8aea5b..c98a787e7f985d489b9c81e4e115735865699cc6 100644
--- a/DDCore/include/DD4hep/VolumeManager.h
+++ b/DDCore/include/DD4hep/VolumeManager.h
@@ -84,6 +84,20 @@ namespace dd4hep {
     Position localToWorld(const double local[3])  const;
     /// Transform local coordinates to the world coordinates
     Position localToWorld(const Position& local)  const;
+
+    /// Transform world coordinates to the DetElement coordinates
+    Position worldToElement(const Position& world)  const;
+    /// Transform world coordinates to the DetElement coordinates
+    Position worldToElement(const double world[3])  const;
+    /// Transform world coordinates to the DetElement coordinates
+    void worldToElement(const double world[3], double element[3])  const;
+
+    /// Transform world coordinates to the local coordinates
+    Position worldToLocal(const Position& world)  const;
+    /// Transform world coordinates to the local coordinates
+    Position worldToLocal(const double world[3])  const;
+    /// Transform world coordinates to the local coordinates
+    void worldToLocal(const double world[3], double local[3])  const;
   };
 
   /// Class to support the retrieval of detector elements and volumes given a valid identifier
diff --git a/DDCore/src/VolumeManager.cpp b/DDCore/src/VolumeManager.cpp
index 25744142cac4c44fada7f650d67ea1c53e48e919..b6dba694eb82b3decb20556436071502fe413a16 100644
--- a/DDCore/src/VolumeManager.cpp
+++ b/DDCore/src/VolumeManager.cpp
@@ -355,6 +355,43 @@ Position VolumeManagerContext::localToWorld(const Position& local)  const   {
   return localToWorld(l);
 }
 
+/// Transform world coordinates to the DetElement coordinates
+Position VolumeManagerContext::worldToElement(const double world[3])  const    {
+  return element.nominal().worldToLocal(world);
+}
+
+/// Transform world coordinates to the DetElement coordinates
+Position VolumeManagerContext::worldToElement(const Position& world)  const    {
+  return element.nominal().worldToLocal(world);
+}
+
+/// Transform world coordinates to the DetElement coordinates
+void VolumeManagerContext::worldToElement(const double world[3], double elt[3])  const    {
+  element.nominal().worldToLocal(world, elt);
+}
+
+/// Transform world coordinates to the local coordinates
+Position VolumeManagerContext::worldToLocal(const double world[3])  const    {
+  double elt[3], local[3];
+  worldToElement(world, elt);
+  toElement().MasterToLocal(elt, local);
+  return { local[0], local[1], local[2] };
+}
+
+/// Transform world coordinates to the local coordinates
+Position VolumeManagerContext::worldToLocal(const Position& world)  const    {
+  double global[3];
+  world.GetCoordinates(global);
+  return worldToLocal(global);
+}
+
+/// Transform world coordinates to the DetElement coordinates
+void VolumeManagerContext::worldToLocal(const double world[3], double local[3])  const    {
+  double elt[3];
+  worldToElement(world, elt);
+  toElement().MasterToLocal(elt, local);
+}
+
 /// Initializing constructor to create a new object
 VolumeManager::VolumeManager(const Detector& description, const string& nam, DetElement elt, Readout ro, int flags) {
   printout(INFO, "VolumeManager", " - populating volume ids - be patient ..."  );