diff --git a/tests/framework/testGeometry.cpp b/tests/framework/testGeometry.cpp
index d9a01a3b2b1d89bd6967612236889f94474b6753..e021d301426095f7eb4a12c5af780341014b4eb5 100644
--- a/tests/framework/testGeometry.cpp
+++ b/tests/framework/testGeometry.cpp
@@ -334,6 +334,8 @@ TEST_CASE("Distance between points") {
   CHECK(distance(p5, p6) / 1_m == Approx(1));
 }
 
+TEST_CASE("Geometry Tree") {}
+
 TEST_CASE("Path") {
   // define a known CS
   CoordinateSystemPtr root = get_root_CoordinateSystem();
diff --git a/tests/media/testEnvironment.cpp b/tests/media/testEnvironment.cpp
index 3eab2cd6b9e5cdce3efc87ae48a9281145fbcb72..9a5cfab0e81d99f816abfc7da29c31e4e8ebe378 100644
--- a/tests/media/testEnvironment.cpp
+++ b/tests/media/testEnvironment.cpp
@@ -38,10 +38,43 @@ CoordinateSystemPtr const& gCS = get_root_CoordinateSystem();
 
 Point const gOrigin(gCS, {0_m, 0_m, 0_m});
 
+TEST_CASE("VolumeTree") {
+  logging::set_level(logging::level::info);
+  Environment<IEmpty> env;
+  auto& universe = *(env.getUniverse());
+  auto world = Environment<IEmpty>::createNode<Sphere>(Point{gCS, 0_m, 0_m, 0_m}, 150_km);
+  // volume cut partly by "world"
+  auto vol1 =
+      Environment<IEmpty>::createNode<Sphere>(Point{gCS, 0_m, 0_m, 140_km}, 20_km);
+  // partly overlap with "vol1"
+  auto vol2 = Environment<IEmpty>::createNode<Sphere>(Point{gCS, 0_m, 0_m, 120_km}, 5_km);
+  vol1->excludeOverlapWith(vol2);
+  world->addChild(std::move(vol1));
+  world->addChild(std::move(vol2));
+
+  // in world
+  CHECK(dynamic_cast<Sphere const&>(
+            world->getContainingNode(Point(gCS, 0_m, 0_m, 0_m))->getVolume())
+            .getRadius() == 150_km);
+  // in vol1
+  CHECK(dynamic_cast<Sphere const&>(
+            world->getContainingNode(Point(gCS, 0_m, 0_m, 149_km))->getVolume())
+            .getRadius() == 20_km);
+  // outside world, in universe
+  CHECK(world->getContainingNode(Point(gCS, 0_m, 151_km, 0_m)) == nullptr);
+  // in vol2
+  CHECK(dynamic_cast<Sphere const&>(
+            world->getContainingNode(Point(gCS, 0_m, 0_km, 119_km))->getVolume())
+            .getRadius() == 5_km);
+  CHECK(dynamic_cast<Sphere const&>(
+            world->getContainingNode(Point(gCS, 0_m, 0_km, 121_km))->getVolume())
+            .getRadius() == 5_km);
+  universe.addChild(std::move(world));
+}
+
 TEST_CASE("HomogeneousMedium") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   NuclearComposition const protonComposition(std::vector<Code>{Code::Proton},
                                              std::vector<float>{1.f});
@@ -54,7 +87,6 @@ TEST_CASE("HomogeneousMedium") {
 TEST_CASE("FlatExponential") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   NuclearComposition const protonComposition(std::vector<Code>{Code::Proton},
                                              std::vector<float>{1.f});
@@ -117,7 +149,6 @@ TEST_CASE("FlatExponential") {
 TEST_CASE("SlidingPlanarExponential") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   NuclearComposition const protonComposition(std::vector<Code>{Code::Proton},
                                              std::vector<float>{1.f});
@@ -178,7 +209,6 @@ struct Exponential {
 TEST_CASE("InhomogeneousMedium") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   Vector direction(gCS, QuantityVector<dimensionless_d>(1, 0, 0));
 
@@ -227,7 +257,6 @@ TEST_CASE("InhomogeneousMedium") {
 TEST_CASE("LayeredSphericalAtmosphereBuilder") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   LayeredSphericalAtmosphereBuilder builder =
       make_layered_spherical_atmosphere_builder<>::create(gOrigin,
@@ -267,7 +296,6 @@ TEST_CASE("LayeredSphericalAtmosphereBuilder") {
 TEST_CASE("LayeredSphericalAtmosphereBuilder w/ magnetic field") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   // setup our interface types
   using ModelInterface = IMagneticFieldModel<IMediumModel>;
diff --git a/tests/media/testMedium.cpp b/tests/media/testMedium.cpp
index edcba45fc6fe01a3b5554878fcca735627b7a9d7..709185d18524b7d5536657ffbd005bbafde9cfb9 100644
--- a/tests/media/testMedium.cpp
+++ b/tests/media/testMedium.cpp
@@ -27,7 +27,6 @@ using namespace corsika;
 TEST_CASE("MediumProperties") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   // test access of medium properties via enum and class types
 
@@ -45,7 +44,6 @@ TEST_CASE("MediumProperties") {
 TEST_CASE("MediumPropertyModel w/ Homogeneous") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   CoordinateSystemPtr gCS = get_root_CoordinateSystem();
 
diff --git a/tests/media/testShowerAxis.cpp b/tests/media/testShowerAxis.cpp
index 19d7635aedebd4ff901396af86cc4651ba94b3e2..9378d9b41fcab19f9bf3a1b1547c3f9cdb59e6b4 100644
--- a/tests/media/testShowerAxis.cpp
+++ b/tests/media/testShowerAxis.cpp
@@ -48,7 +48,6 @@ auto setupEnvironment(Code vTargetCode) {
 TEST_CASE("Homogeneous Density") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   auto [env, csPtr, nodePtr] = setupEnvironment(Code::Nitrogen);
   auto const& cs = *csPtr;
@@ -62,7 +61,7 @@ TEST_CASE("Homogeneous Density") {
   Point const injectionPos = showerCore + Vector<dimensionless_d>{cs, {0, 0, 1}} * t;
 
   ShowerAxis const showerAxis{injectionPos, (showerCore - injectionPos), *env,
-                              true, // -> do not throw exceptions
+                              true, // -> throw exceptions
                               20};  // -> number of bins
 
   CHECK(showerAxis.getSteplength() == 500_m);
@@ -83,4 +82,11 @@ TEST_CASE("Homogeneous Density") {
 
   CHECK_THROWS(showerAxis.getX(-1_m));
   CHECK_THROWS(showerAxis.getX((injectionPos - showerCore).getNorm() + 1_m));
+
+  ShowerAxis const showerAxisNoThrow{injectionPos, (showerCore - injectionPos), *env,
+                                     false, // -> do not throw exceptions
+                                     20};   // -> number of bins
+  CHECK(showerAxisNoThrow.getX(-1_m) == showerAxis.getMinimumX());
+  CHECK(showerAxisNoThrow.getX((injectionPos - showerCore).getNorm() + 1_m) ==
+        showerAxis.getMaximumX());
 }