diff --git a/README.md b/README.md
index c4eebab56e737b841c2557daf6c18b8996a938a4..2a0e863dd79c1827a3f257793fae9e9135b75beb 100644
--- a/README.md
+++ b/README.md
@@ -255,7 +255,7 @@ Converts `NET_ASAM_OPENSCENARIO::v1_3::ITransitionDynamics` object type to [mant
 
 | Dependency | Commit | Version | License |
 | ---------- | ------ | ------- | ------- |
-| [MantleAPI](https://gitlab.eclipse.org/eclipse/openpass/mantle-api) | 5541bf1a | 14.0.0 | EPL 2.0 |
+| [MantleAPI](https://gitlab.eclipse.org/eclipse/openpass/mantle-api) | de5e4930 | prepare_integration_of_v9 | EPL 2.0 |
 | [OpenSCENARIO API](https://github.com/RA-Consulting-GmbH/openscenario.api.test/) | 5980e88 | 1.4.0 | Apache 2.0 |
 | [YASE](https://gitlab.eclipse.org/eclipse/openpass/yase) | d0c0e58d | | EPL 2.0 |
 | [Units](https://github.com/nholthaus/units) | e27eed9 | 2.3.4 | MIT License |
diff --git a/engine/BUILD.bazel b/engine/BUILD.bazel
index cbc396a17cf882360e9f72672fcad7fd57c626e9..624b71ce55ac428ac0918e3eec47fd30b5517d45 100644
--- a/engine/BUILD.bazel
+++ b/engine/BUILD.bazel
@@ -108,6 +108,7 @@ cc_test(
     tags = ["test"],
     deps = [
         ":open_scenario_engine",
+        ":open_scenario_engine_test_utils",
         ":test_utils",
         "@googletest//:gtest_main",
         "@mantle_api//:test_utils",
@@ -122,6 +123,7 @@ cc_test(
     tags = ["test"],
     deps = [
         ":open_scenario_engine",
+        ":open_scenario_engine_test_utils",
         "@googletest//:gtest_main",
         "@mantle_api//:test_utils",
     ],
@@ -178,9 +180,9 @@ cc_test(
     data = [":open_scenario_engine_test_data"],
     tags = ["test"],
     deps = [
-        ":test_utils",
         ":open_scenario_engine",
         ":open_scenario_engine_test_utils",
+        ":test_utils",
         "@googletest//:gtest_main",
         "@mantle_api//:test_utils",
     ],
diff --git a/engine/gen/Storyboard/MotionControlAction/LaneChangeAction_base.h b/engine/gen/Storyboard/MotionControlAction/LaneChangeAction_base.h
index e35c1178edccd0807b12e066a3aa324f437483d8..ba3179a7fb8cb7b869aca5086a1f58fd004f7ca5 100644
--- a/engine/gen/Storyboard/MotionControlAction/LaneChangeAction_base.h
+++ b/engine/gen/Storyboard/MotionControlAction/LaneChangeAction_base.h
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -27,7 +27,7 @@ public:
     Entities entities;
     double targetLaneOffset;
     TransitionDynamics laneChangeActionDynamics;
-    std::function<mantle_api::UniqueId()> GetLaneChangeTarget;
+    std::function<mantle_api::LaneId()> GetLaneChangeTarget;
   };
   struct Interfaces
   {
@@ -48,4 +48,4 @@ protected:
   Interfaces mantle;
 };
 
-}  // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace OpenScenarioEngine::v1_3
diff --git a/engine/include/OpenScenarioEngine/OpenScenarioEngine.h b/engine/include/OpenScenarioEngine/OpenScenarioEngine.h
index d1d1f201f18297cadd5d9587c7ac8e91077efab4..af948f63e8607181a724c6836518e6888ed3739f 100644
--- a/engine/include/OpenScenarioEngine/OpenScenarioEngine.h
+++ b/engine/include/OpenScenarioEngine/OpenScenarioEngine.h
@@ -155,6 +155,9 @@ private:
   ///   be used instead
   void ResetStochastics();
 
+  /// Reset all routes in route repository
+  void ResetRoutes();
+
   /// Reset all entities and create new according to scenario description
   void ResetAndCreateEntities();
 
diff --git a/engine/src/Conversion/OscToMantle/ConvertScenarioLongitudinalDistance.cpp b/engine/src/Conversion/OscToMantle/ConvertScenarioLongitudinalDistance.cpp
index d5fdc2f1a6b959d320097a3be83dd38202c6488b..4013080ae9ae05c4dc2cea8bdea63570be7cf2db 100644
--- a/engine/src/Conversion/OscToMantle/ConvertScenarioLongitudinalDistance.cpp
+++ b/engine/src/Conversion/OscToMantle/ConvertScenarioLongitudinalDistance.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2022-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2022-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -31,10 +31,10 @@ LongitudinalDistance ConvertScenarioLongitudinalDistance(const std::shared_ptr<m
 
   if (isSetTimeGap)
   {
-    const auto& refEntity = EntityUtils::GetEntityByName(environment, ConvertScenarioEntity(entityRef));
-    return longitudinalTimeGap * refEntity.GetVelocity().Length().value();
+    const auto refEntity = EntityUtils::GetEntityByName(environment, ConvertScenarioEntity(entityRef));
+    return longitudinalTimeGap * refEntity->GetVelocity().Length().value();
   }
 
   throw std::runtime_error(R"(Warning: LongitudinalDistanceAction: please set either "distance" or "timegap")");
 }
-}  // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace OpenScenarioEngine::v1_3
diff --git a/engine/src/Conversion/OscToMantle/ConvertScenarioPosition.cpp b/engine/src/Conversion/OscToMantle/ConvertScenarioPosition.cpp
index aa7678b008133a4d17858b7579717f18c4287193..f7798ab13a20aeff0d7ed4c53a9de6711c0d3073 100644
--- a/engine/src/Conversion/OscToMantle/ConvertScenarioPosition.cpp
+++ b/engine/src/Conversion/OscToMantle/ConvertScenarioPosition.cpp
@@ -138,17 +138,18 @@ mantle_api::Pose ConvertRelativeLanePosition(
   }
 
   const auto ref_entity_name = relative_lane_position.GetEntityRef()->GetNameRef();
-  if (const auto& ref_entity = environment.GetEntityRepository().Get(ref_entity_name))
+
+  if (const auto ref_entity = environment.GetEntityRepository().Get(ref_entity_name).lock())
   {
     const auto d_lane = relative_lane_position.GetDLane();
     const auto ds_lane = relative_lane_position.GetDsLane();
     const auto offset = relative_lane_position.GetOffset();
 
     const mantle_api::Pose pose_ref{environment.GetGeometryHelper()->TranslateGlobalPositionLocally(
-                                        ref_entity.value().get().GetPosition(),
-                                        ref_entity.value().get().GetOrientation(),
-                                        -ref_entity.value().get().GetProperties()->bounding_box.geometric_center),
-                                    ref_entity.value().get().GetOrientation()};
+                                        ref_entity->GetPosition(),
+                                        ref_entity->GetOrientation(),
+                                        -ref_entity->GetProperties()->bounding_box.geometric_center),
+                                    ref_entity->GetOrientation()};
 
     const auto calculated_pose = environment.GetQueryService().FindRelativeLanePoseAtDistanceFrom(
         pose_ref, d_lane, units::length::meter_t(ds_lane), units::length::meter_t(offset));
diff --git a/engine/src/Conversion/OscToMantle/ConvertScenarioRelativeTargetLane.cpp b/engine/src/Conversion/OscToMantle/ConvertScenarioRelativeTargetLane.cpp
index 82430a7ac0e4f9628befa85649830cf5897b4e31..9fa864af6e0369a94df8cc17b491062045c5de9d 100644
--- a/engine/src/Conversion/OscToMantle/ConvertScenarioRelativeTargetLane.cpp
+++ b/engine/src/Conversion/OscToMantle/ConvertScenarioRelativeTargetLane.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2022-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2022-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -23,9 +23,9 @@ mantle_api::LaneId ConvertScenarioRelativeTargetLane(
     const std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::IRelativeTargetLane>& relativeTargetLane)
 {
   const auto relative_entity_name = relativeTargetLane->GetEntityRef()->GetNameRef();
-  const auto& relative_entity = EntityUtils::GetEntityByName(environment, relative_entity_name);
-  const auto relative_pose = mantle_api::Pose{relative_entity.GetPosition(),
-                                              relative_entity.GetOrientation()};
+  const auto relative_entity = EntityUtils::GetEntityByName(environment, relative_entity_name);
+  const auto relative_pose = mantle_api::Pose{relative_entity->GetPosition(),
+                                              relative_entity->GetOrientation()};
   if (const auto target_lane_id =
           environment->GetQueryService().GetRelativeLaneId(relative_pose, relativeTargetLane->GetValue()))
   {
@@ -36,4 +36,4 @@ mantle_api::LaneId ConvertScenarioRelativeTargetLane(
                            relative_entity_name + "\". Please adjust the scenario.");
 }
 
-}  // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace OpenScenarioEngine::v1_3
diff --git a/engine/src/Conversion/OscToMantle/ConvertScenarioRoute.cpp b/engine/src/Conversion/OscToMantle/ConvertScenarioRoute.cpp
index 935684ec0bfeb12c75814e758dcebf3644beb6d1..1ca5007efb95f76528c5c0deca6177733341018f 100644
--- a/engine/src/Conversion/OscToMantle/ConvertScenarioRoute.cpp
+++ b/engine/src/Conversion/OscToMantle/ConvertScenarioRoute.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -15,9 +15,10 @@
 #include <MantleAPI/Traffic/control_strategy.h>
 #include <openScenarioLib/generated/v1_3/catalog/CatalogHelperV1_3.h>
 
-#include "Utils/Logger.h"
 #include <utility>
 
+#include "Utils/Logger.h"
+
 namespace OpenScenarioEngine::v1_3
 {
 namespace detail
@@ -47,30 +48,30 @@ std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::IRoute> ResolveChoice(const std::sh
   throw std::runtime_error("ConvertScenarioRoute: No route defined or referenced. Please adjust the scenario.");
 }
 
-mantle_api::RouteStrategy ConvertRouteStrategy(
+mantle_api::RoutingStrategy ConvertRouteStrategy(
     const NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum& route_strategy_enum)
 {
   switch (route_strategy_enum)
   {
     case NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum::FASTEST:
-      return mantle_api::RouteStrategy::kFastest;
+      return mantle_api::RoutingStrategy::kFastest;
     case NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum::LEAST_INTERSECTIONS:
-      return mantle_api::RouteStrategy::kLeastIntersections;
+      return mantle_api::RoutingStrategy::kLeastIntersections;
     case NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum::SHORTEST:
-      return mantle_api::RouteStrategy::kShortest;
+      return mantle_api::RoutingStrategy::kShortest;
     case NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum::RANDOM:  // NOLINT(bugprone-branch-clone)
       [[fallthrough]];
     case NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum::UNKNOWN:  // NOLINT(bugprone-branch-clone)
       [[fallthrough]];
     default:
-      return mantle_api::RouteStrategy::kUndefined;
+      return mantle_api::RoutingStrategy::kUndefined;
   }
 }
 
-std::vector<mantle_api::RouteWaypoint> ConvertWaypoints(const std::shared_ptr<mantle_api::IEnvironment>& environment, const std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::IRoute>& route_object)
+std::vector<mantle_api::RoutingWaypoint> ConvertWaypoints(const std::shared_ptr<mantle_api::IEnvironment>& environment, const std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::IRoute>& route_object)
 {
   const auto route_waypoints = route_object->GetWaypoints();
-  std::vector<mantle_api::RouteWaypoint> waypoints;
+  std::vector<mantle_api::RoutingWaypoint> waypoints;
 
   for (size_t i = 0; i < route_waypoints.size(); ++i)
   {
@@ -79,14 +80,14 @@ std::vector<mantle_api::RouteWaypoint> ConvertWaypoints(const std::shared_ptr<ma
     if (auto pose = ConvertScenarioPosition(environment, waypoint->GetPosition()))
     {
       waypoints.emplace_back(
-          mantle_api::RouteWaypoint{
+          mantle_api::RoutingWaypoint{
               pose->position,
               ConvertRouteStrategy(NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::GetFromLiteral(waypoint->GetRouteStrategy().GetLiteral()))});
     }
     else
     {
       Logger::Warning("ConvertScenarioRoute: Could not convert scenario position to global position for route " +
-                                    route_object->GetName() + ", waypoint index " + std::to_string(i) + ". Omitting waypoint");
+                      route_object->GetName() + ", waypoint index " + std::to_string(i) + ". Omitting waypoint");
     }
   }
   return waypoints;
@@ -99,7 +100,7 @@ Route ConvertScenarioRoute(const std::shared_ptr<mantle_api::IEnvironment>& envi
                            const std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::ICatalogReference>& catalogReference)
 {
   route_object = detail::ResolveChoice(route_object, catalogReference);
-  return {route_object->GetClosed(), detail::ConvertWaypoints(environment, route_object)};
+  return {route_object->GetName(), route_object->GetClosed(), detail::ConvertWaypoints(environment, route_object)};
 }
 
-}  // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace OpenScenarioEngine::v1_3
diff --git a/engine/src/Conversion/OscToMantle/ConvertScenarioRoute.h b/engine/src/Conversion/OscToMantle/ConvertScenarioRoute.h
index 8d01b5777258554acd79bf0709a9802687ea997f..80745cca8ff5ef908ffc5a0d989df763e70ea4fc 100644
--- a/engine/src/Conversion/OscToMantle/ConvertScenarioRoute.h
+++ b/engine/src/Conversion/OscToMantle/ConvertScenarioRoute.h
@@ -1,6 +1,5 @@
-
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -22,12 +21,13 @@ namespace OpenScenarioEngine::v1_3
 {
 struct Route
 {
+  std::string name;
   bool closed{false};
-  std::vector<mantle_api::RouteWaypoint> waypoints;
+  std::vector<mantle_api::RoutingWaypoint> waypoints;
 };
 
 Route ConvertScenarioRoute(const std::shared_ptr<mantle_api::IEnvironment>& environment,
                            std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::IRoute> route,
                            const std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::ICatalogReference>& catalogReference);
 
-}  // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace OpenScenarioEngine::v1_3
diff --git a/engine/src/Conversion/OscToMantle/ConvertScenarioSpeedActionTarget.cpp b/engine/src/Conversion/OscToMantle/ConvertScenarioSpeedActionTarget.cpp
index f490b444f8c88a485b5c697f161acc88a95f6573..28dc8433d43a9169365c46058aada69485ef5c95 100644
--- a/engine/src/Conversion/OscToMantle/ConvertScenarioSpeedActionTarget.cpp
+++ b/engine/src/Conversion/OscToMantle/ConvertScenarioSpeedActionTarget.cpp
@@ -1,6 +1,5 @@
-
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -27,9 +26,10 @@ SpeedActionTarget ConvertScenarioSpeedActionTarget(
   if (relative_target_speed)
   {
     /// TODO: continuous need to be taken into consideration at some point as well
-    const auto &relative_entity_name = relative_target_speed->GetEntityRef()->GetNameRef();
+    const auto& relative_entity_name = relative_target_speed->GetEntityRef()->GetNameRef();
 
-    if (!environment->GetEntityRepository().Get(relative_entity_name).has_value())
+    auto entity = environment->GetEntityRepository().Get(relative_entity_name).lock();
+    if (!entity)
     {
       throw std::runtime_error(
           "Relative Entity with name \"" + relative_entity_name +
@@ -37,7 +37,7 @@ SpeedActionTarget ConvertScenarioSpeedActionTarget(
           "scenario.");
     }
 
-    auto target_base = environment->GetEntityRepository().Get(relative_entity_name).value().get().GetVelocity();
+    auto target_base = entity->GetVelocity();
     units::velocity::meters_per_second_t base_magnitude{target_base.Length()};
 
     if (relative_target_speed->GetSpeedTargetValueType() ==
@@ -55,4 +55,4 @@ SpeedActionTarget ConvertScenarioSpeedActionTarget(
   throw std::runtime_error("speedActionTarget needs to have either Relative or Absolute target speed");
 }
 
-}  // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace OpenScenarioEngine::v1_3
diff --git a/engine/src/Conversion/OscToMantle/ConvertScenarioTrafficDefinition.cpp b/engine/src/Conversion/OscToMantle/ConvertScenarioTrafficDefinition.cpp
index c871ea97fc191d83bdb2bb04cf8de22b88d90402..140ca4db5b5ee97fdc0d9f24bbc97372a08496e4 100644
--- a/engine/src/Conversion/OscToMantle/ConvertScenarioTrafficDefinition.cpp
+++ b/engine/src/Conversion/OscToMantle/ConvertScenarioTrafficDefinition.cpp
@@ -1,6 +1,5 @@
-
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -10,6 +9,7 @@
  ********************************************************************************/
 
 #include "Conversion/OscToMantle/ConvertScenarioTrafficDefinition.h"
+
 #include "Conversion/OscToMantle/ConvertScenarioController.h"
 
 namespace OpenScenarioEngine::v1_3
@@ -23,20 +23,20 @@ mantle_api::VehicleClass ConvertVehicleCategory(NET_ASAM_OPENSCENARIO::v1_3::Veh
   const auto literal{vehicle_category.GetLiteral()};
   const auto category{vehicle_category.GetFromLiteral(literal)};
 
-  switch(category)
+  switch (category)
   {
     case NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VehicleCategoryEnum::UNKNOWN:
-      return mantle_api::VehicleClass::kInvalid;
+      return mantle_api::VehicleClass::kUnknown;
     case NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VehicleCategoryEnum::BICYCLE:
       return mantle_api::VehicleClass::kBicycle;
     case NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VehicleCategoryEnum::BUS:
       return mantle_api::VehicleClass::kBus;
     case NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VehicleCategoryEnum::CAR:
-      return mantle_api::VehicleClass::kMedium_car;
+      return mantle_api::VehicleClass::kMediumCar;
     case NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VehicleCategoryEnum::MOTORBIKE:
-      return mantle_api::VehicleClass::kMotorbike;
+      return mantle_api::VehicleClass::kMotorcycle;
     case NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VehicleCategoryEnum::SEMITRAILER:
-      return mantle_api::VehicleClass::kSemitrailer;
+      return mantle_api::VehicleClass::kSemiTrailer;
     case NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VehicleCategoryEnum::TRAILER:
       return mantle_api::VehicleClass::kTrailer;
     case NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VehicleCategoryEnum::TRAIN:
@@ -44,11 +44,11 @@ mantle_api::VehicleClass ConvertVehicleCategory(NET_ASAM_OPENSCENARIO::v1_3::Veh
     case NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VehicleCategoryEnum::TRAM:
       return mantle_api::VehicleClass::kTram;
     case NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VehicleCategoryEnum::TRUCK:
-      return mantle_api::VehicleClass::kHeavy_truck;
+      return mantle_api::VehicleClass::kHeavyTruck;
     case NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VehicleCategoryEnum::VAN:
-      return mantle_api::VehicleClass::kDelivery_van;
+      return mantle_api::VehicleClass::kDeliveryVan;
     default:
-      return mantle_api::VehicleClass::kInvalid;
+      return mantle_api::VehicleClass::kOther;
   }
 }
 
@@ -56,12 +56,12 @@ VehicleCategoryDistribution ConvertVehicleCategoryDistributionEntry(std::shared_
 {
   VehicleCategoryDistribution vehicle_category_distribution{};
 
-  if(entry->IsSetCategory())
+  if (entry->IsSetCategory())
   {
     vehicle_category_distribution.category = ConvertVehicleCategory(entry->GetCategory());
   }
 
-  if(entry->IsSetWeight())
+  if (entry->IsSetWeight())
   {
     vehicle_category_distribution.weight = entry->GetWeight();
   }
@@ -73,33 +73,33 @@ ControllerDistribution ConvertControllerDistributionEntry(std::shared_ptr<NET_AS
 {
   ControllerDistribution controller_distribution{};
 
-  if(entry->IsSetWeight())
+  if (entry->IsSetWeight())
   {
     controller_distribution.weight = entry->GetWeight();
   }
 
   controller_distribution.controller = ConvertScenarioController(entry->GetController(), entry->GetCatalogReference());
-  
+
   return controller_distribution;
 }
 
-} // namespace detail
+}  // namespace detail
 
 TrafficDefinition ConvertScenarioTrafficDefinition(const std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::ITrafficDefinition>& osc_traffic_definition)
 {
-  if(osc_traffic_definition->GetVehicleCategoryDistribution()->GetVehicleCategoryDistributionEntries().empty())
+  if (osc_traffic_definition->GetVehicleCategoryDistribution()->GetVehicleCategoryDistributionEntries().empty())
   {
     throw std::runtime_error("ConvertScenarioTrafficDefinition : the traffic definition has no vehicle distribution");
   }
 
-  if(osc_traffic_definition->GetControllerDistribution()->GetControllerDistributionEntries().empty())
+  if (osc_traffic_definition->GetControllerDistribution()->GetControllerDistributionEntries().empty())
   {
     throw std::runtime_error("ConvertScenarioTrafficDefinition : the traffic definition has no controller distribution");
   }
 
   std::vector<VehicleCategoryDistribution> vehicle_category_distribution_entries;
 
-  for(const auto& vehicle_category_distribution_entry : osc_traffic_definition->GetVehicleCategoryDistribution()->GetVehicleCategoryDistributionEntries())
+  for (const auto& vehicle_category_distribution_entry : osc_traffic_definition->GetVehicleCategoryDistribution()->GetVehicleCategoryDistributionEntries())
   {
     auto converted{detail::ConvertVehicleCategoryDistributionEntry(vehicle_category_distribution_entry)};
     vehicle_category_distribution_entries.push_back(std::move(converted));
@@ -107,7 +107,7 @@ TrafficDefinition ConvertScenarioTrafficDefinition(const std::shared_ptr<NET_ASA
 
   std::vector<ControllerDistribution> controller_distribution_entries;
 
-  for(const auto& controller_distribution_entry : osc_traffic_definition->GetControllerDistribution()->GetControllerDistributionEntries())
+  for (const auto& controller_distribution_entry : osc_traffic_definition->GetControllerDistribution()->GetControllerDistributionEntries())
   {
     auto converted{detail::ConvertControllerDistributionEntry(controller_distribution_entry)};
     controller_distribution_entries.push_back(std::move(converted));
@@ -116,4 +116,4 @@ TrafficDefinition ConvertScenarioTrafficDefinition(const std::shared_ptr<NET_ASA
   return {osc_traffic_definition->GetName(), vehicle_category_distribution_entries, controller_distribution_entries};
 }
 
-}  // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace OpenScenarioEngine::v1_3
diff --git a/engine/src/OpenScenarioEngine.cpp b/engine/src/OpenScenarioEngine.cpp
index 76bd104dbbcfb3e116c90c64e42b95c0062dd992..d15b30dd18b54c3ecde6b3c106747fa7ba087a58 100644
--- a/engine/src/OpenScenarioEngine.cpp
+++ b/engine/src/OpenScenarioEngine.cpp
@@ -154,6 +154,7 @@ void OpenScenarioEngine::Init()
 void OpenScenarioEngine::SetupDynamicContent()
 {
   ResetStochastics();
+  ResetRoutes();
   ResetAndCreateEntities();
   ResetAndCreateControllers();
   ResetAndCreateStoryboard();
@@ -319,6 +320,11 @@ std::unique_ptr<mantle_api::MapDetails> OpenScenarioEngine::GetMapDetails() cons
   return map_details;
 }
 
+void OpenScenarioEngine::ResetRoutes()
+{
+  environment_->GetRouteRepository().Reset();
+}
+
 void OpenScenarioEngine::ResetAndCreateEntities()
 {
   if (!scenario_definition_ptr_->GetEntities())
diff --git a/engine/src/Storyboard/ByEntityCondition/DistanceCondition_impl.cpp b/engine/src/Storyboard/ByEntityCondition/DistanceCondition_impl.cpp
index 5582e59b4538a8f0b452343afb5fdfdb8ab3cebd..98ee3d94d4c696de7065cb8f6b87ee88ba75b607 100644
--- a/engine/src/Storyboard/ByEntityCondition/DistanceCondition_impl.cpp
+++ b/engine/src/Storyboard/ByEntityCondition/DistanceCondition_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -62,9 +62,9 @@ bool DistanceCondition::IsSatisfied() const
   if (values.relativeDistanceType == RelativeDistanceType::kLongitudinal &&
       values.coordinateSystem == CoordinateSystem::kEntity)
   {
-    const auto& triggeringEntity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
+    const auto triggeringEntity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
     const auto distance = EntityUtils::CalculateRelativeLongitudinalDistance(
-        mantle.environment, triggeringEntity, pose.value().position);
+        mantle.environment, *triggeringEntity, pose.value().position);
     return values.rule.IsSatisfied(distance.value());
   }
 
diff --git a/engine/src/Storyboard/ByEntityCondition/ReachPositionCondition_impl.cpp b/engine/src/Storyboard/ByEntityCondition/ReachPositionCondition_impl.cpp
index a5de60868897762e94e5474d0916ae6630099fc9..ac33311b08c25bafeb76d78109e7c738a76a36e6 100644
--- a/engine/src/Storyboard/ByEntityCondition/ReachPositionCondition_impl.cpp
+++ b/engine/src/Storyboard/ByEntityCondition/ReachPositionCondition_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -25,15 +25,15 @@ bool ReachPositionCondition::IsSatisfied() const
     return false;
   }
 
-  const auto& entity = mantle.environment->GetEntityRepository().Get(values.triggeringEntity);
+  auto entity = mantle.environment->GetEntityRepository().Get(values.triggeringEntity).lock();
   if (!entity)
   {
     Logger::Warning("ReachPositionCondition: ReachPositionCondition cannot be satisfied (entity undefined).");
     return false;
   }
 
-  auto current_position = entity->get().GetPosition();
+  auto current_position = entity->GetPosition();
   return (position->position - current_position).Length().value() <= values.tolerance;
 }
 
-}  // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace OpenScenarioEngine::v1_3
diff --git a/engine/src/Storyboard/ByEntityCondition/RelativeDistanceCondition_impl.cpp b/engine/src/Storyboard/ByEntityCondition/RelativeDistanceCondition_impl.cpp
index 33cbb81efb591e7f49aada16131fb6431b58951a..ff46fc4bc5e22075188c96756d5314b39076872a 100644
--- a/engine/src/Storyboard/ByEntityCondition/RelativeDistanceCondition_impl.cpp
+++ b/engine/src/Storyboard/ByEntityCondition/RelativeDistanceCondition_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -20,23 +20,23 @@ bool RelativeDistanceCondition::IsSatisfied() const
 {
   if (values.coordinateSystem == CoordinateSystem::kEntity)
   {
-    const auto& triggeringEntity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
-    const auto& referencedEntity = EntityUtils::GetEntityByName(mantle.environment, values.entityRef);
+    const auto triggeringEntity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
+    const auto referencedEntity = EntityUtils::GetEntityByName(mantle.environment, values.entityRef);
 
     if (values.relativeDistanceType == RelativeDistanceType::kLongitudinal)
     {
       const auto distance = values.freespace
                                 ? EntityUtils::CalculateLongitudinalFreeSpaceDistance(
-                                      mantle.environment, triggeringEntity, referencedEntity)
+                                      mantle.environment, *triggeringEntity, *referencedEntity)
                                 : EntityUtils::CalculateRelativeLongitudinalDistance(
-                                      mantle.environment, triggeringEntity, referencedEntity);
+                                      mantle.environment, *triggeringEntity, *referencedEntity);
       return values.rule.IsSatisfied(distance.value());
     }
 
     if (values.relativeDistanceType == RelativeDistanceType::kLateral && values.freespace)
     {
       const auto distance = EntityUtils::CalculateLateralFreeSpaceDistance(
-          mantle.environment, triggeringEntity, referencedEntity);
+          mantle.environment, *triggeringEntity, *referencedEntity);
       return values.rule.IsSatisfied(distance.value());
     }
   }
diff --git a/engine/src/Storyboard/ByEntityCondition/RelativeSpeedCondition_impl.cpp b/engine/src/Storyboard/ByEntityCondition/RelativeSpeedCondition_impl.cpp
index f2084a483aabc9f8dae36babe5fc336302271e42..c2a0646684bd84915dcb08df6319a4ec2fd4118d 100644
--- a/engine/src/Storyboard/ByEntityCondition/RelativeSpeedCondition_impl.cpp
+++ b/engine/src/Storyboard/ByEntityCondition/RelativeSpeedCondition_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -16,14 +16,14 @@ namespace OpenScenarioEngine::v1_3
 {
 bool RelativeSpeedCondition::IsSatisfied() const
 {
-  const auto& triggeringEntity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
-  const auto triggeringVelocity = triggeringEntity.GetVelocity().Length();
+  const auto triggeringEntity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
+  const auto triggeringVelocity = triggeringEntity->GetVelocity().Length();
 
-  const auto& referencedEntity = EntityUtils::GetEntityByName(mantle.environment, values.entityRef);
-  const auto referencedVelocity = referencedEntity.GetVelocity().Length();
+  const auto referencedEntity = EntityUtils::GetEntityByName(mantle.environment, values.entityRef);
+  const auto referencedVelocity = referencedEntity->GetVelocity().Length();
 
   const auto relativeSpeed = triggeringVelocity - referencedVelocity;
   return values.rule.IsSatisfied(relativeSpeed.value());
 }
 
-}  // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace OpenScenarioEngine::v1_3
diff --git a/engine/src/Storyboard/ByEntityCondition/SpeedCondition_impl.cpp b/engine/src/Storyboard/ByEntityCondition/SpeedCondition_impl.cpp
index 59048e5326e70bcf133bbb75325cf6e6dc364bfb..deedd88ea0e6b99d37aac43d5a7c62a45503677c 100644
--- a/engine/src/Storyboard/ByEntityCondition/SpeedCondition_impl.cpp
+++ b/engine/src/Storyboard/ByEntityCondition/SpeedCondition_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -16,8 +16,8 @@ namespace OpenScenarioEngine::v1_3
 {
 bool SpeedCondition::IsSatisfied() const
 {
-  const auto& triggeringEntity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
-  const auto speed = triggeringEntity.GetVelocity().Length();
+  const auto triggeringEntity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
+  const auto speed = triggeringEntity->GetVelocity().Length();
 
   return values.rule.IsSatisfied(speed.value());
 }
diff --git a/engine/src/Storyboard/ByEntityCondition/TimeHeadwayCondition_impl.cpp b/engine/src/Storyboard/ByEntityCondition/TimeHeadwayCondition_impl.cpp
index 4aa696516bd1cb8af0119a46ee84dc1dbb7f7834..24b9bfbfa458083e09d4d58129941dc5ae27d513 100644
--- a/engine/src/Storyboard/ByEntityCondition/TimeHeadwayCondition_impl.cpp
+++ b/engine/src/Storyboard/ByEntityCondition/TimeHeadwayCondition_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -31,21 +31,21 @@ bool TimeHeadwayCondition::IsSatisfied() const
     return false;
   }
 
-  const auto& ref_entity = EntityUtils::GetEntityByName(mantle.environment, values.entityRef);
-  const auto& trigger_entity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
+  const auto ref_entity = EntityUtils::GetEntityByName(mantle.environment, values.entityRef);
+  const auto trigger_entity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
 
   units::length::meter_t distance{};
   if (values.coordinateSystem == CoordinateSystem::kEntity)
   {
     distance = values.freespace
-                   ? EntityUtils::CalculateLongitudinalFreeSpaceDistance(mantle.environment, trigger_entity, ref_entity)
-                   : EntityUtils::CalculateRelativeLongitudinalDistance(mantle.environment, trigger_entity, ref_entity);
+                   ? EntityUtils::CalculateLongitudinalFreeSpaceDistance(mantle.environment, *trigger_entity, *ref_entity)
+                   : EntityUtils::CalculateRelativeLongitudinalDistance(mantle.environment, *trigger_entity, *ref_entity);
   }
   else if (values.coordinateSystem == CoordinateSystem::kLane)
   {
     const auto longitudinal_lane_distance =
-        mantle.environment->GetQueryService().GetLongitudinalLaneDistanceBetweenPositions(trigger_entity.GetPosition(),
-                                                                                          ref_entity.GetPosition());
+        mantle.environment->GetQueryService().GetLongitudinalLaneDistanceBetweenPositions(trigger_entity->GetPosition(),
+                                                                                          ref_entity->GetPosition());
     if (!longitudinal_lane_distance.has_value())
     {
       throw std::runtime_error(
@@ -57,18 +57,18 @@ bool TimeHeadwayCondition::IsSatisfied() const
     if (values.freespace)
     {
       const auto trigger_entity_lane_orientation =
-          mantle.environment->GetQueryService().GetLaneOrientation(trigger_entity.GetPosition());
+          mantle.environment->GetQueryService().GetLaneOrientation(trigger_entity->GetPosition());
       const auto trigger_entity_corners_along_lane =
           EntityUtils::GetCornerPositionsInLocalSortedByLongitudinalDistance(
-              mantle.environment, trigger_entity, trigger_entity.GetPosition(), trigger_entity_lane_orientation);
+              mantle.environment, *trigger_entity, trigger_entity->GetPosition(), trigger_entity_lane_orientation);
 
       const auto ref_entity_lane_pose = mantle.environment->GetQueryService().FindLanePoseAtDistanceFrom(
-          {trigger_entity.GetPosition(), trigger_entity.GetOrientation()},
+          {trigger_entity->GetPosition(), trigger_entity->GetOrientation()},
           distance,
           mantle_api::Direction::kForward);
       const auto ref_entity_corners_along_lane =
           EntityUtils::GetCornerPositionsInLocalSortedByLongitudinalDistance(
-              mantle.environment, ref_entity, ref_entity.GetPosition(), ref_entity_lane_pose.value().orientation);
+              mantle.environment, *ref_entity, ref_entity->GetPosition(), ref_entity_lane_pose.value().orientation);
 
       distance = distance - (units::math::abs(trigger_entity_corners_along_lane.front().x) +
                              units::math::abs(ref_entity_corners_along_lane.back().x));
@@ -80,7 +80,7 @@ bool TimeHeadwayCondition::IsSatisfied() const
     throw std::runtime_error("TimeHeadwayCondition: The given CoordinateSystem is not supported. Only \"entity\" and \"lane\" coordinate systems are supported for now.");
   }
 
-  const auto trigger_entity_velocity = trigger_entity.GetVelocity().Length();
+  const auto trigger_entity_velocity = trigger_entity->GetVelocity().Length();
   const auto time_headway = trigger_entity_velocity > limits::kAcceptableVelocityMin
                                 ? distance / trigger_entity_velocity
                                 : limits::kTimeHeadwayMax;
diff --git a/engine/src/Storyboard/ByEntityCondition/TimeToCollisionCondition_impl.cpp b/engine/src/Storyboard/ByEntityCondition/TimeToCollisionCondition_impl.cpp
index 6cbea0fe8b903cca724d68ddca888adf862e6dd9..bdd08568cf0948bae31b88665f58579d09bb60cd 100644
--- a/engine/src/Storyboard/ByEntityCondition/TimeToCollisionCondition_impl.cpp
+++ b/engine/src/Storyboard/ByEntityCondition/TimeToCollisionCondition_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -47,9 +47,9 @@ units::time::second_t TTCCalculation::operator()(const std::optional<mantle_api:
 
 bool TimeToCollisionCondition::IsSatisfied() const
 {
-  const auto& triggeringEntity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
+  const auto triggeringEntity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
   const auto ttc = std::visit(
-      TTCCalculation(mantle.environment, triggeringEntity),
+      TTCCalculation(mantle.environment, *triggeringEntity),
       values.timeToCollisionConditionTarget);
   return values.rule.IsSatisfied(ttc.value());
 }
diff --git a/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp b/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp
index 11e1a10b1615575dcf64ac895702726b318a3837..1e6e35aff7db2334b4bd8bb13db4892c6fb0d17d 100644
--- a/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp
+++ b/engine/src/Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2025 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -19,9 +19,9 @@ namespace OpenScenarioEngine::v1_3
 
 bool TraveledDistanceCondition::IsSatisfied()
 {
-  const auto& entity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
+  const auto entity = EntityUtils::GetEntityByName(mantle.environment, values.triggeringEntity);
 
-  auto current_position = entity.GetPosition();
+  auto current_position = entity->GetPosition();
 
   if (!last_position_.has_value())
   {
diff --git a/engine/src/Storyboard/GenericAction/AcquirePositionAction_impl.cpp b/engine/src/Storyboard/GenericAction/AcquirePositionAction_impl.cpp
index 2c38bb5aea8981949154f2d55f3076b5542debd4..3445be9fd02f380e54975bddc1d7ada1e5a97c27 100644
--- a/engine/src/Storyboard/GenericAction/AcquirePositionAction_impl.cpp
+++ b/engine/src/Storyboard/GenericAction/AcquirePositionAction_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -20,39 +20,25 @@
 
 namespace OpenScenarioEngine::v1_3
 {
-namespace detail
-{
-mantle_api::RouteDefinition GenerateRouteDefinition(
-    const std::shared_ptr<mantle_api::IEnvironment>& environment,
-    std::string&& entity_name,
-    mantle_api::Vec3<units::length::meter_t>&& position)
-{
-  const auto& entity = EntityUtils::GetEntityByName(environment, entity_name);
-  const auto& current_pos = entity.GetPosition();
-
-  return {{{std::move(current_pos), mantle_api::RouteStrategy::kShortest},
-           {std::move(position), mantle_api::RouteStrategy::kShortest}}};
-}
-}  // namespace detail
-
 bool AcquirePositionAction::Step()
 {
   const auto position = values.GetPosition();
   if (!position)
   {
-    throw std::runtime_error("AcquirePositionAction: Target position has no value (potentially outside of world).");
+    throw std::runtime_error("AcquirePositionAction: Target position has no value (potentially outside of road).");
   }
 
   for (const auto& actor : values.entities)
   {
-    const auto& entity = EntityUtils::GetEntityByName(mantle.environment, actor);
-    const auto& current_pos = entity.GetPosition();
+    auto entity = EntityUtils::GetEntityByName(mantle.environment, actor);
+    const auto& current_pos = entity->GetPosition();
 
-    mantle_api::RouteDefinition route_definition{
-        {{std::move(current_pos), mantle_api::RouteStrategy::kShortest},
-         {std::move(position->position), mantle_api::RouteStrategy::kShortest}}};
+    mantle_api::RoutingDefinition routing_definition{
+        {{std::move(current_pos), mantle_api::RoutingStrategy::kShortest},
+         {std::move(position->position), mantle_api::RoutingStrategy::kShortest}}};
 
-    mantle.environment->AssignRoute(entity.GetUniqueId(), route_definition);
+    auto route = mantle.environment->GetRouteRepository().Create(entity->GetName(), routing_definition);
+    entity->SetRoute(route);
   }
   return true;
 }
diff --git a/engine/src/Storyboard/GenericAction/ActivateControllerAction_impl.cpp b/engine/src/Storyboard/GenericAction/ActivateControllerAction_impl.cpp
index 92d6399a9f5f17f99a4141f4230f75d68fea1c25..909ef1370f9b6c48968d1ce251cb9902c7a485a9 100644
--- a/engine/src/Storyboard/GenericAction/ActivateControllerAction_impl.cpp
+++ b/engine/src/Storyboard/GenericAction/ActivateControllerAction_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -24,9 +24,9 @@ bool ActivateControllerAction::Step()
   {
     // entities might have been despawned, leading to a dangling reference to the controllers
     // so we check if the entity is still part of the simulation, before we access the controllers
-    if (auto entity_ref = entity_repository.Get(entity_name))
+    if (auto entity = entity_repository.Get(entity_name).lock())
     {
-      const auto entity_id = entity_ref->get().GetUniqueId();
+      const auto entity_id = entity->GetUniqueId();
       if (const auto& entity_controllers = ose_services.controllerService->GetControllers(entity_id))
       {
         auto controller_id = ose_services.controllerService->GetControllerId(
diff --git a/engine/src/Storyboard/GenericAction/AssignControllerAction_impl.cpp b/engine/src/Storyboard/GenericAction/AssignControllerAction_impl.cpp
index 8b43a9bedc14a91020824b48c23e2a4931df6ed0..a151ce84c2fb0dfa68220598a8f1d79a32729dc6 100644
--- a/engine/src/Storyboard/GenericAction/AssignControllerAction_impl.cpp
+++ b/engine/src/Storyboard/GenericAction/AssignControllerAction_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -19,12 +19,12 @@ bool AssignControllerAction::Step()
   for (const auto& entity_name : values.entities)
   {
     // TODO: How do we incorporate Longitudinal and Lateral here?
-    auto& entity = EntityUtils::GetEntityByName(mantle.environment, entity_name);
-    auto& controller = mantle.environment->GetControllerRepository().Create(
+    auto entity = EntityUtils::GetEntityByName(mantle.environment, entity_name);
+    auto controller = mantle.environment->GetControllerRepository().Create(
         std::make_unique<mantle_api::ExternalControllerConfig>(values.controller));
-    mantle.environment->AddEntityToController(entity, controller.GetUniqueId());
+    mantle.environment->AddEntityToController(*entity, controller.lock()->GetUniqueId());
   }
   return true;
 }
 
-}  // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace OpenScenarioEngine::v1_3
diff --git a/engine/src/Storyboard/GenericAction/AssignRouteAction_impl.cpp b/engine/src/Storyboard/GenericAction/AssignRouteAction_impl.cpp
index 083c3716a62f308c6df8429aedbc6605f1efe3a9..4cbd93f39288c694e1e47e9e0464e502338bb096 100644
--- a/engine/src/Storyboard/GenericAction/AssignRouteAction_impl.cpp
+++ b/engine/src/Storyboard/GenericAction/AssignRouteAction_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -19,15 +19,11 @@ namespace OpenScenarioEngine::v1_3
 {
 bool AssignRouteAction::Step()
 {
-  if (values.route.closed)
-  {
-    Logger::Error("AssignRouteAction: Closed routes not supported yet");
-  }
-
   for (const auto& actor : values.entities)
   {
-    const auto& entity = EntityUtils::GetEntityByName(mantle.environment, actor);
-    mantle.environment->AssignRoute(entity.GetUniqueId(), {values.route.waypoints});
+    auto entity = EntityUtils::GetEntityByName(mantle.environment, actor);
+    auto route = mantle.environment->GetRouteRepository().Create(values.route.name, {values.route.waypoints, values.route.closed});
+    entity->SetRoute(route);
   }
   return true;
 }
diff --git a/engine/src/Storyboard/GenericAction/LightStateAction_impl.cpp b/engine/src/Storyboard/GenericAction/LightStateAction_impl.cpp
index e993a670c377e3961a1b5fe6266f3baf529650b1..5b50aa1e02235c6358dafc7b6f3c1edd14483efd 100644
--- a/engine/src/Storyboard/GenericAction/LightStateAction_impl.cpp
+++ b/engine/src/Storyboard/GenericAction/LightStateAction_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -28,9 +28,9 @@ void LightStateAction::SetControlStrategy()
   control_strategy_->light_state = values.lightState;
   for (const auto& actor : values.entities)
   {
-    auto& entity = EntityUtils::GetEntityByName(mantle.environment, actor);
+    auto entity = EntityUtils::GetEntityByName(mantle.environment, actor);
     mantle.environment->UpdateControlStrategies(
-        entity.GetUniqueId(),
+        entity->GetUniqueId(),
         {control_strategy_});
   }
 }
diff --git a/engine/src/Storyboard/GenericAction/TeleportAction_impl.cpp b/engine/src/Storyboard/GenericAction/TeleportAction_impl.cpp
index 9fd0d6255dcfc8f52f32a0c61f0a5ed08ffbf0c0..3787cbc27d6f1ade08a860ba95890d69ea812f68 100644
--- a/engine/src/Storyboard/GenericAction/TeleportAction_impl.cpp
+++ b/engine/src/Storyboard/GenericAction/TeleportAction_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2022 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -11,6 +11,7 @@
 
 #include "Storyboard/GenericAction/TeleportAction_impl.h"
 
+#include "Utils/EntityUtils.h"
 #include "Utils/Logger.h"
 
 namespace OpenScenarioEngine::v1_3
@@ -26,19 +27,13 @@ bool TeleportAction::Step()
 
   for (auto actor : values.entities)
   {
-    auto entity_tmp = mantle.environment->GetEntityRepository().Get(actor);
+    auto entity = EntityUtils::GetEntityByName(mantle.environment, actor);
 
-    if (!entity_tmp.has_value())
-    {
-      throw std::runtime_error("Actor '" + actor + "' in TeleportAction does not exist. Please adjust scenario.");
-    }
-
-    mantle_api::IEntity &entity = mantle.environment->GetEntityRepository().Get(actor).value().get();
     auto position = mantle.environment->GetGeometryHelper()->TranslateGlobalPositionLocally(
         global_position->position,
         global_position->orientation,
-        entity.GetProperties()->bounding_box.geometric_center);
-    if (const auto properties = dynamic_cast<mantle_api::StaticObjectProperties *>(entity.GetProperties()))
+        entity->GetProperties()->bounding_box.geometric_center);
+    if (const auto properties = dynamic_cast<mantle_api::StaticObjectProperties*>(entity->GetProperties()))
     {
       position =
           mantle.environment->GetQueryService().GetUpwardsShiftedLanePosition(position, properties->vertical_offset(), true);
@@ -49,8 +44,8 @@ bool TeleportAction::Step()
     // This method calculates the position of supplementary signs based on the main sign's orientation.
     // Therefore, the main sign's orientation must be set first to ensure correct supplementary sign positioning.
     // Refer to issue https://gitlab.eclipse.org/eclipse/openpass/gt-gen-core/-/issues/21 for more details.
-    entity.SetOrientation(global_position->orientation);
-    entity.SetPosition(position);
+    entity->SetOrientation(global_position->orientation);
+    entity->SetPosition(position);
   }
   return true;
 }
diff --git a/engine/src/Storyboard/GenericAction/TrafficSinkAction_impl.cpp b/engine/src/Storyboard/GenericAction/TrafficSinkAction_impl.cpp
index 3a9f6799b3ac4b6e017396e01a2575872224de8d..2c914f6b48964dc72619a43e282b634775835774 100644
--- a/engine/src/Storyboard/GenericAction/TrafficSinkAction_impl.cpp
+++ b/engine/src/Storyboard/GenericAction/TrafficSinkAction_impl.cpp
@@ -36,7 +36,7 @@ static constexpr double EPSILON_RADIUS{1E-3};
   return (target_position - current_position).Length().value() <= radius + EPSILON_RADIUS;
 }
 
-[[nodiscard]] bool IsVehicleOrPedestrian(const std::unique_ptr<mantle_api::IEntity>& entity)
+[[nodiscard]] bool IsVehicleOrPedestrian(const std::shared_ptr<mantle_api::IEntity>& entity)
 {
   return dynamic_cast<mantle_api::IVehicle*>(entity.get()) ||
          dynamic_cast<mantle_api::IPedestrian*>(entity.get());
@@ -133,8 +133,9 @@ bool TrafficSinkAction::Step()
   std::vector<mantle_api::UniqueId> affected_entity_ids;
 
   auto& entity_repository = mantle_.environment->GetEntityRepository();
-  for (const auto& entity : entity_repository.GetEntities())
+  for (const auto& entity_wp : entity_repository.GetEntities())
   {
+    auto entity = entity_wp.lock();
     if (detail::IsVehicleOrPedestrian(entity) &&
         detail::WithinRadius(entity->GetPosition(), position.value(), values_.radius))
     {
diff --git a/engine/src/Storyboard/GenericAction/TrafficSwarmAction_impl.cpp b/engine/src/Storyboard/GenericAction/TrafficSwarmAction_impl.cpp
index 16deb16a337f49cc38b86a9824d2d0ffee0ee849..56b7eece1e7336efc473fad849eb80f7fc6e2c42 100644
--- a/engine/src/Storyboard/GenericAction/TrafficSwarmAction_impl.cpp
+++ b/engine/src/Storyboard/GenericAction/TrafficSwarmAction_impl.cpp
@@ -148,8 +148,8 @@ bool TrafficSwarmAction::Step()
 mantle_api::Pose TrafficSwarmAction::GetSpawningAreaPose() const
 {
   mantle_api::Pose spawning_area_pose;
-  spawning_area_pose.position = central_entity_.GetPosition();
-  spawning_area_pose.orientation = central_entity_.GetOrientation();
+  spawning_area_pose.position = central_entity_->GetPosition();
+  spawning_area_pose.orientation = central_entity_->GetOrientation();
 
   if (values_.offset > 0.0 || values_.offset < 0.0)
   {
@@ -184,7 +184,7 @@ void TrafficSwarmAction::DespawnEntities()
   for (size_t i{0}; i < entity_and_controller_id_list_.size(); ++i)
   {
     const auto entity_iterator{std::find_if(entities.cbegin(), entities.cend(), [this, &i](auto& entity)
-                                            { return entity_and_controller_id_list_.at(i).first == entity->GetUniqueId(); })};
+                                            { return entity_and_controller_id_list_.at(i).first == entity.lock()->GetUniqueId(); })};
 
     if (entity_iterator == std::end(entities))
     {
@@ -192,7 +192,7 @@ void TrafficSwarmAction::DespawnEntities()
       continue;
     }
 
-    const bool entity_is_outside_spawning_area{IsPointOutsideOfEllipse(entity_iterator.base()->get()->GetPosition(),
+    const bool entity_is_outside_spawning_area{IsPointOutsideOfEllipse(entity_iterator.base()->lock()->GetPosition(),
                                                                        spawning_area_pose.position,
                                                                        units::length::meter_t(values_.semiMajorAxis),
                                                                        units::length::meter_t(values_.semiMinorAxis),
@@ -226,7 +226,7 @@ units::velocity::meters_per_second_t TrafficSwarmAction::GetSpawnedVehicleSpeed(
 void TrafficSwarmAction::SpawnEntities()
 {
   const auto speed_range{values_.initialSpeedRange.value()};
-  const auto central_entity_speed{central_entity_.GetVelocity().Length().value()};
+  const auto central_entity_speed{central_entity_->GetVelocity().Length().value()};
   const auto spawning_positions{mantle_.environment->GetTrafficSwarmService().GetAvailableSpawningPoses()};
 
   for (const auto& [spawning_pose, relative_position] : spawning_positions)
@@ -235,20 +235,20 @@ void TrafficSwarmAction::SpawnEntities()
     const auto vehicle_properties{mantle_.environment->GetTrafficSwarmService().GetVehicleProperties(vehicle_classification)};
     const auto vehicle_speed{GetSpawnedVehicleSpeed(relative_position, central_entity_speed, speed_range.lowerLimit, speed_range.upperLimit)};
 
-    auto& entity{mantle_.environment->GetEntityRepository().Create("traffic-swarm-entity-" + std::to_string(spawned_entities_count_ + 1), vehicle_properties)};
-    entity.SetPosition(spawning_pose.position);
-    entity.SetOrientation(spawning_pose.orientation);
-    entity.SetVelocity(detail::GetVelocityVector(vehicle_speed, spawning_pose.orientation));
+    auto entity{mantle_.environment->GetEntityRepository().Create("traffic-swarm-entity-" + std::to_string(spawned_entities_count_ + 1), vehicle_properties).lock()};
+    entity->SetPosition(spawning_pose.position);
+    entity->SetOrientation(spawning_pose.orientation);
+    entity->SetVelocity(detail::GetVelocityVector(vehicle_speed, spawning_pose.orientation));
 
     const auto controller_configuration{GetControllerConfiguration()};
     auto external_controller_config{std::make_unique<mantle_api::ExternalControllerConfig>(controller_configuration)};
     mantle_.environment->GetTrafficSwarmService().UpdateControllerConfig(external_controller_config, vehicle_speed);
-    auto& controller{mantle_.environment->GetControllerRepository().Create(std::move(external_controller_config))};
-    controller.ChangeState(mantle_api::IController::LateralState::kActivate, mantle_api::IController::LongitudinalState::kActivate);
+    auto controller{mantle_.environment->GetControllerRepository().Create(std::move(external_controller_config)).lock()};
+    controller->ChangeState(mantle_api::IController::LateralState::kActivate, mantle_api::IController::LongitudinalState::kActivate);
 
-    mantle_.environment->AddEntityToController(entity, controller.GetUniqueId());
+    mantle_.environment->AddEntityToController(*entity, controller->GetUniqueId());
 
-    entity_and_controller_id_list_.push_back({entity.GetUniqueId(), controller.GetUniqueId()});
+    entity_and_controller_id_list_.push_back({entity->GetUniqueId(), controller->GetUniqueId()});
 
     spawned_entities_count_++;
   }
diff --git a/engine/src/Storyboard/GenericAction/TrafficSwarmAction_impl.h b/engine/src/Storyboard/GenericAction/TrafficSwarmAction_impl.h
index f57a15592eeb956b0034abda5225fc4e816aca20..3e8bbb89b4fce310460b1208bdad29df0e8a7c50 100644
--- a/engine/src/Storyboard/GenericAction/TrafficSwarmAction_impl.h
+++ b/engine/src/Storyboard/GenericAction/TrafficSwarmAction_impl.h
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -37,9 +37,9 @@ private:
   double vehicle_category_distribution_weights_sum_{0.0};
   double controller_distribution_weights_sum_{0.0};
 
-  mantle_api::IEntity& central_entity_;
+  std::shared_ptr<mantle_api::IEntity> central_entity_;
   size_t spawned_entities_count_{0};
   std::vector<std::pair<mantle_api::UniqueId, mantle_api::UniqueId>> entity_and_controller_id_list_;
 };
 
-}  // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace OpenScenarioEngine::v1_3
diff --git a/engine/src/Storyboard/GenericAction/VisibilityAction_impl.cpp b/engine/src/Storyboard/GenericAction/VisibilityAction_impl.cpp
index 1e97c5eda96875d24bba6abda17394101cf2ad75..bcf067bdddeb761b8aab1580cce62c22d2c6333e 100644
--- a/engine/src/Storyboard/GenericAction/VisibilityAction_impl.cpp
+++ b/engine/src/Storyboard/GenericAction/VisibilityAction_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -18,9 +18,9 @@ bool VisibilityAction::Step()
 {
   for (const auto& entity : values.entities)
   {
-    auto& entityRef = EntityUtils::GetEntityByName(mantle.environment, entity);
+    auto entityRef = EntityUtils::GetEntityByName(mantle.environment, entity);
     mantle_api::EntityVisibilityConfig vis_config{values.graphics, values.traffic, values.sensors, values.sensorReferenceSet};
-    entityRef.SetVisibility(vis_config);
+    entityRef->SetVisibility(vis_config);
   }
   return true;
 }
diff --git a/engine/src/Storyboard/MotionControlAction/FollowTrajectoryAction_impl.cpp b/engine/src/Storyboard/MotionControlAction/FollowTrajectoryAction_impl.cpp
index 97f3bb412fe6bb1a47e48a2761783fe79843b03a..0f030206d2a5b70af912de36febcc5e0201a1f6c 100644
--- a/engine/src/Storyboard/MotionControlAction/FollowTrajectoryAction_impl.cpp
+++ b/engine/src/Storyboard/MotionControlAction/FollowTrajectoryAction_impl.cpp
@@ -31,8 +31,8 @@ mantle_api::Trajectory ConvertPolyLine(
     const std::string& entity,
     TrajectoryRef trajectoryRef)
 {
-  const auto& refEntity = EntityUtils::GetEntityByName(environment, entity);
-  const auto geometric_center = refEntity.GetProperties()->bounding_box.geometric_center;
+  const auto refEntity = EntityUtils::GetEntityByName(environment, entity);
+  const auto geometric_center = refEntity->GetProperties()->bounding_box.geometric_center;
 
   // modifies the copy of the trajectory ref!
   for (auto& polyLinePoint : std::get<mantle_api::PolyLine>(trajectoryRef->type))
@@ -50,8 +50,8 @@ mantle_api::Trajectory ConvertClothoidSpline(
     const std::string& entity,
     TrajectoryRef trajectoryRef)
 {
-  const auto& refEntity = EntityUtils::GetEntityByName(environment, entity);
-  const auto geometric_center = refEntity.GetProperties()->bounding_box.geometric_center;
+  const auto refEntity = EntityUtils::GetEntityByName(environment, entity);
+  const auto geometric_center = refEntity->GetProperties()->bounding_box.geometric_center;
 
   auto& clothoid_spline = std::get<mantle_api::ClothoidSpline>(trajectoryRef->type);
 
@@ -120,17 +120,17 @@ void FollowTrajectoryAction::SetControlStrategy()
       return;
     }
     control_strategy->trajectory = *trajectory;
-    const auto entity_id = mantle.environment->GetEntityRepository().Get(entity)->get().GetUniqueId();
+    const auto entity_id = EntityUtils::GetEntityByName(mantle.environment, entity)->GetUniqueId();
     mantle.environment->UpdateControlStrategies(entity_id, {control_strategy});
   }
 }
 
 bool FollowTrajectoryAction::HasControlStrategyGoalBeenReached(const std::string& actor)
 {
-  if (auto entity = mantle.environment->GetEntityRepository().Get(actor))
+  if (auto entity = mantle.environment->GetEntityRepository().Get(actor).lock())
   {
     return mantle.environment->HasControlStrategyGoalBeenReached(
-        entity.value().get().GetUniqueId(),
+        entity->GetUniqueId(),
         mantle_api::ControlStrategyType::kFollowTrajectory);
   }
   return false;
diff --git a/engine/src/Storyboard/MotionControlAction/LaneChangeAction_impl.cpp b/engine/src/Storyboard/MotionControlAction/LaneChangeAction_impl.cpp
index b1a0399da28ca822930c9a4bc209a183f33c7712..0fc1f0856db8f70187b66712af45984291944fba 100644
--- a/engine/src/Storyboard/MotionControlAction/LaneChangeAction_impl.cpp
+++ b/engine/src/Storyboard/MotionControlAction/LaneChangeAction_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -24,10 +24,10 @@ void LaneChangeAction::SetControlStrategy()
   SetupControlStrategy();
   for (const auto& actor : values.entities)
   {
-    if (auto entity = mantle.environment->GetEntityRepository().Get(actor))
+    if (auto entity = mantle.environment->GetEntityRepository().Get(actor).lock())
     {
       mantle.environment->UpdateControlStrategies(
-          entity.value().get().GetUniqueId(),
+          entity->GetUniqueId(),
           {control_strategy_});
     }
     else
@@ -40,10 +40,10 @@ void LaneChangeAction::SetControlStrategy()
 
 bool LaneChangeAction::HasControlStrategyGoalBeenReached(const std::string& actor)
 {
-  if (auto entity = mantle.environment->GetEntityRepository().Get(actor))
+  if (auto entity = mantle.environment->GetEntityRepository().Get(actor).lock())
   {
     return mantle.environment->HasControlStrategyGoalBeenReached(
-        entity.value().get().GetUniqueId(),
+        entity->GetUniqueId(),
         control_strategy_->type);
   }
 
diff --git a/engine/src/Storyboard/MotionControlAction/LaneOffsetAction_impl.cpp b/engine/src/Storyboard/MotionControlAction/LaneOffsetAction_impl.cpp
index c3d894024b91e815e8cdb756df9b3aa87489d2f1..319b70af048e0acfa2c2b11ac00c68e6ec894f31 100644
--- a/engine/src/Storyboard/MotionControlAction/LaneOffsetAction_impl.cpp
+++ b/engine/src/Storyboard/MotionControlAction/LaneOffsetAction_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2025, Ansys, Inc.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -26,18 +26,18 @@ void LaneOffsetAction::SetControlStrategy()
   for (const auto& actor : values.entities)
   {
     control_strategy_->offset = values.GetLaneOffsetTarget(actor);
-    auto& entity = EntityUtils::GetEntityByName(mantle.environment, actor);
+    auto entity = EntityUtils::GetEntityByName(mantle.environment, actor);
     mantle.environment->UpdateControlStrategies(
-        entity.GetUniqueId(),
+        entity->GetUniqueId(),
         {control_strategy_});
   }
 }
 
 bool LaneOffsetAction::HasControlStrategyGoalBeenReached(const std::string& actor)
 {
-  auto& entity = EntityUtils::GetEntityByName(mantle.environment, actor);
+  auto entity = EntityUtils::GetEntityByName(mantle.environment, actor);
   return mantle.environment->HasControlStrategyGoalBeenReached(
-      entity.GetUniqueId(),
+      entity->GetUniqueId(),
       control_strategy_->type);
 }
 
diff --git a/engine/src/Storyboard/MotionControlAction/LateralDistanceAction_impl.cpp b/engine/src/Storyboard/MotionControlAction/LateralDistanceAction_impl.cpp
index e2d5c0e2e47e86fcd70066d7b39e32209c68c401..837b6ef43fb9bbbf4fd7752237c785697015550a 100644
--- a/engine/src/Storyboard/MotionControlAction/LateralDistanceAction_impl.cpp
+++ b/engine/src/Storyboard/MotionControlAction/LateralDistanceAction_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -297,8 +297,8 @@ void LateralDistanceAction::SetControlStrategy()
         " Please adjust the scenario.");
   }
 
-  const auto& ref_entity = EntityUtils::GetEntityByName(mantle_.environment, values_.entityRef);
-  auto ref_entity_lane_ids = mantle_.environment->GetQueryService().GetLaneIdsAtPosition(ref_entity.GetPosition());
+  const auto ref_entity = EntityUtils::GetEntityByName(mantle_.environment, values_.entityRef);
+  auto ref_entity_lane_ids = mantle_.environment->GetQueryService().GetLaneIdsAtPosition(ref_entity->GetPosition());
   if (ref_entity_lane_ids.empty())
   {
     Logger::Warning(
@@ -306,9 +306,9 @@ void LateralDistanceAction::SetControlStrategy()
         "Given entities have not been updated for LateralDistanceAction.");
     return;
   }
-  ref_entity_lane_id_ = static_cast<mantle_api::LaneId>(ref_entity_lane_ids.front());
+  ref_entity_lane_id_ = ref_entity_lane_ids.front();
 
-  auto desired_distance = GetDesiredDistance(ref_entity);
+  auto desired_distance = GetDesiredDistance(*ref_entity);
   if (!desired_distance)
   {
     Logger::Warning(
@@ -320,22 +320,22 @@ void LateralDistanceAction::SetControlStrategy()
 
   for (const auto& entity : values_.entities)
   {
-    auto& actor_entity = EntityUtils::GetEntityByName(mantle_.environment, entity);
-    const auto& ref_entity_lane_orientation = mantle_.environment->GetQueryService().GetLaneOrientation(ref_entity.GetPosition());
-    auto target_position = GetTargetPosition(actor_entity, ref_entity_lane_orientation);
+    auto actor_entity = EntityUtils::GetEntityByName(mantle_.environment, entity);
+    const auto& ref_entity_lane_orientation = mantle_.environment->GetQueryService().GetLaneOrientation(ref_entity->GetPosition());
+    auto target_position = GetTargetPosition(*actor_entity, ref_entity_lane_orientation);
     if (!target_position)
     {
       Logger::Warning("LateralDistanceAction: The pose for the entity with name \"" + entity +
                       "\" could not be resolved. It has not been updated for LateralDistanceAction.");
       return;
     }
-    actor_entity.SetPosition(target_position.value());
+    actor_entity->SetPosition(target_position.value());
   }
 }
 
 bool LateralDistanceAction::HasControlStrategyGoalBeenReached(const std::string& actor)
 {
-  if (auto entity = mantle_.environment->GetEntityRepository().Get(actor))
+  if (!mantle_.environment->GetEntityRepository().Get(actor).expired())
   {
     return (!values_.dynamicConstraints.has_value() && !values_.continuous);
   }
diff --git a/engine/src/Storyboard/MotionControlAction/LateralDistanceAction_impl.h b/engine/src/Storyboard/MotionControlAction/LateralDistanceAction_impl.h
index 0d3c2db9a5f0c30264da4c8d98473535551bff59..6dfba8e3d7755f12514b6f4ad61c94ee70c59906 100644
--- a/engine/src/Storyboard/MotionControlAction/LateralDistanceAction_impl.h
+++ b/engine/src/Storyboard/MotionControlAction/LateralDistanceAction_impl.h
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -149,7 +149,7 @@ private:
       const mantle_api::Orientation3<units::angle::radian_t>& ref_entity_lane_orientation) const;
 
   units::length::meter_t desired_distance_{};
-  mantle_api::LaneId ref_entity_lane_id_{};
+  mantle_api::UniqueId ref_entity_lane_id_{};
   mantle_api::LateralDisplacementDirection direction_from_centerline_{};
 
 public:
diff --git a/engine/src/Storyboard/MotionControlAction/LongitudinalDistanceAction_impl.cpp b/engine/src/Storyboard/MotionControlAction/LongitudinalDistanceAction_impl.cpp
index 7deaf674b82416dab64ee4caccf1d7e552932721..b8f54cfbb4bef0c8c2281a6a2b9f5dddb0133745 100644
--- a/engine/src/Storyboard/MotionControlAction/LongitudinalDistanceAction_impl.cpp
+++ b/engine/src/Storyboard/MotionControlAction/LongitudinalDistanceAction_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -21,8 +21,8 @@ void LongitudinalDistanceAction::SetControlStrategy()
 {
   for (const auto& entity : values_.entities)
   {
-    const auto& refEntity = EntityUtils::GetEntityByName(mantle_.environment, values_.entityRef);
-    auto& actorEntity = EntityUtils::GetEntityByName(mantle_.environment, entity);
+    const auto refEntity = EntityUtils::GetEntityByName(mantle_.environment, values_.entityRef);
+    auto actorEntity = EntityUtils::GetEntityByName(mantle_.environment, entity);
     auto requested_distance = values_.GetLongitudinalDistance();
 
     if (values_.freespace)
@@ -32,25 +32,25 @@ void LongitudinalDistanceAction::SetControlStrategy()
           "only for a straight road in the lane coordinate system and when the orientation of both "
           "entities is aligned with the lane centerline.");
 
-      const auto refLength = refEntity.GetProperties()->bounding_box.dimension.length;
-      const auto actorLength = actorEntity.GetProperties()->bounding_box.dimension.length;
+      const auto refLength = refEntity->GetProperties()->bounding_box.dimension.length;
+      const auto actorLength = actorEntity->GetProperties()->bounding_box.dimension.length;
       requested_distance += refLength.value() / 2 + actorLength.value() / 2;
     }
 
-    const mantle_api::Pose poseRef{refEntity.GetPosition(), refEntity.GetOrientation()};
+    const mantle_api::Pose poseRef{refEntity->GetPosition(), refEntity->GetOrientation()};
     if (const auto lanePose = mantle_.environment->GetQueryService().FindLanePoseAtDistanceFrom(
             poseRef, units::length::meter_t(requested_distance), values_.longitudinalDisplacement))
     {
       // longitudinal distance and lateral shift is calculated using entity ref as object reference.
       // actor pose is currently discarded in the calculations.
 
-      const auto verticalOffset = actorEntity.GetProperties()->bounding_box.dimension.height / 2.0;
+      const auto verticalOffset = actorEntity->GetProperties()->bounding_box.dimension.height / 2.0;
       const auto positionOnRoad = mantle_.environment->GetQueryService().GetUpwardsShiftedLanePosition(
           lanePose.value().position, verticalOffset.value(), true);
-      actorEntity.SetPosition(positionOnRoad);
-      actorEntity.SetOrientation(lanePose.value().orientation);
-      auto refEntitySpeed = refEntity.GetVelocity().Length();
-      mantle_api::SetSpeed(&actorEntity, refEntitySpeed);
+      actorEntity->SetPosition(positionOnRoad);
+      actorEntity->SetOrientation(lanePose.value().orientation);
+      auto refEntitySpeed = refEntity->GetVelocity().Length();
+      mantle_api::SetSpeed(actorEntity.get(), refEntitySpeed);
     }
     else
     {
@@ -59,7 +59,7 @@ void LongitudinalDistanceAction::SetControlStrategy()
     }
 
     auto control_strategy = std::make_shared<mantle_api::KeepVelocityControlStrategy>();
-    const auto entity_id = mantle_.environment->GetEntityRepository().Get(entity)->get().GetUniqueId();
+    const auto entity_id = actorEntity->GetUniqueId();
 
     mantle_.environment->UpdateControlStrategies(entity_id, {control_strategy});
   }
@@ -67,7 +67,7 @@ void LongitudinalDistanceAction::SetControlStrategy()
 
 bool LongitudinalDistanceAction::HasControlStrategyGoalBeenReached(const std::string& actor)
 {
-  if (auto entity = mantle_.environment->GetEntityRepository().Get(actor))
+  if (!mantle_.environment->GetEntityRepository().Get(actor).expired())
   {
     return (!values_.dynamicConstraints.has_value() && !values_.continuous);
   }
diff --git a/engine/src/Storyboard/MotionControlAction/MotionControlAction.h b/engine/src/Storyboard/MotionControlAction/MotionControlAction.h
index b23550a834d73f1b70f34aff441d857bd26a9d97..0d13723b459d7fdba17de1ec102a3c709519a281 100644
--- a/engine/src/Storyboard/MotionControlAction/MotionControlAction.h
+++ b/engine/src/Storyboard/MotionControlAction/MotionControlAction.h
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024, Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025, Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -45,19 +45,20 @@ public:
     {
       if (action_.HasControlStrategyGoalBeenReached(actor))
       {
-        if (const auto &entity = environment->GetEntityRepository().Get(actor); entity)
+        auto entity_ref = environment->GetEntityRepository().Get(actor);
+        if (auto entity = entity_ref.lock())
         {
           const auto movement_domain = action_.GetMovementDomain();
           if (movement_domain == mantle_api::MovementDomain::kLongitudinal || movement_domain == mantle_api::MovementDomain::kBoth)
           {
             environment->UpdateControlStrategies(
-                entity.value().get().GetUniqueId(),
+                entity->GetUniqueId(),
                 {std::make_shared<mantle_api::KeepVelocityControlStrategy>()});
           }
           if (movement_domain == mantle_api::MovementDomain::kLateral || movement_domain == mantle_api::MovementDomain::kBoth)
           {
             environment->UpdateControlStrategies(
-                entity.value().get().GetUniqueId(),
+                entity->GetUniqueId(),
                 {std::make_shared<mantle_api::KeepLaneOffsetControlStrategy>()});
           }
         }
diff --git a/engine/src/Storyboard/MotionControlAction/SpeedAction_impl.cpp b/engine/src/Storyboard/MotionControlAction/SpeedAction_impl.cpp
index 044cee98781f6e6de39a31c69045ca173ec1abc8..517187284e16afcf8c428e79e6756f71b3775640 100644
--- a/engine/src/Storyboard/MotionControlAction/SpeedAction_impl.cpp
+++ b/engine/src/Storyboard/MotionControlAction/SpeedAction_impl.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2022 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -32,10 +32,7 @@ namespace detail
 {
 Velocity GetYOfVelocityPolynomial(
     units::time::second_t x,
-    const std::tuple<units::unit_t<units::compound_unit<units::velocity::meters_per_second, units::inverse<units::cubed<units::time::second>>>>,
-                     units::unit_t<units::compound_unit<units::velocity::meters_per_second, units::inverse<units::squared<units::time::second>>>>,
-                     units::unit_t<units::compound_unit<units::velocity::meters_per_second, units::inverse<units::time::second>>>,
-                     units::unit_t<units::velocity::meters_per_second>>& polynomial)
+    const mantle_api::SplineSection<units::velocity::meters_per_second>::Polynomial& polynomial)
 {
   const auto& [a, b, c, d] = polynomial;
   return x * (x * (a * x + b) + c) + d;
@@ -93,7 +90,7 @@ void AddFinalSquaredAccelerationSplineSection(std::vector<mantle_api::SplineSect
 
   const auto is_second_section{spline_sections.size() == 1};
   const auto time_offset{is_second_section ? 0.0_ms : spline_sections.back().start_time};
-  const auto speed_offset{is_second_section ? start_speed : std::get<3>(spline_sections.back().polynomial)};
+  const auto speed_offset{is_second_section ? start_speed : spline_sections.back().polynomial.a0};
 
   squared_acceleration_section.start_time = time_offset + (units::math::abs(squared_acceleration_section_start_speed - speed_offset) / target_acceleration);
   squared_acceleration_section.end_time = squared_acceleration_section.start_time + squared_acceleration_section_duration;
@@ -119,7 +116,7 @@ void AddFinalSquaredDecelerationSplineSection(std::vector<mantle_api::SplineSect
 
   const auto is_second_section{spline_sections.size() == 1};
   const auto time_offset{is_second_section ? 0.0_ms : spline_sections.back().start_time};
-  const auto speed_offset{is_second_section ? start_speed : std::get<3>(spline_sections.back().polynomial)};
+  const auto speed_offset{is_second_section ? start_speed : spline_sections.back().polynomial.a0};
 
   squared_deceleration_section.start_time = time_offset + ((squared_deceleration_section_start_speed - speed_offset) / target_acceleration);
   squared_deceleration_section.end_time = squared_deceleration_section.start_time + squared_deceleration_section_duration;
@@ -219,8 +216,8 @@ void SpeedAction::SetControlStrategy()
     case mantle_api::Shape::kStep:
       for (const auto& entityRef : values.entities)
       {
-        auto& entity = EntityUtils::GetEntityByName(mantle.environment, entityRef);
-        mantle_api::SetSpeed(&entity, values.GetSpeedActionTarget());
+        auto entity = EntityUtils::GetEntityByName(mantle.environment, entityRef);
+        mantle_api::SetSpeed(entity.get(), values.GetSpeedActionTarget());
       }
       break;
     case mantle_api::Shape::kCubic:
@@ -247,8 +244,8 @@ void SpeedAction::SetControlStrategy()
 
 bool SpeedAction::HasControlStrategyGoalBeenReached(const std::string& actor)
 {
-  auto entity = mantle.environment->GetEntityRepository().Get(actor);
-  if (!entity.has_value())
+  auto entity = mantle.environment->GetEntityRepository().Get(actor).lock();
+  if (!entity)
   {
     return false;
   }
@@ -256,7 +253,7 @@ bool SpeedAction::HasControlStrategyGoalBeenReached(const std::string& actor)
   const auto& shape = values.speedActionDynamics.transitionDynamics.shape;
   return (shape == mantle_api::Shape::kStep) ||
          (shape == mantle_api::Shape::kLinear && mantle.environment->HasControlStrategyGoalBeenReached(
-                                                     entity.value().get().GetUniqueId(),
+                                                     entity->GetUniqueId(),
                                                      mantle_api::ControlStrategyType::kFollowVelocitySpline));
 }
 
@@ -277,8 +274,8 @@ void SpeedAction::SetSpline(mantle_api::UniqueId entity_id,
 
 void SpeedAction::SetLinearVelocitySplineControlStrategy(const std::string& actor)
 {
-  auto& entity = EntityUtils::GetEntityByName(mantle.environment, actor);
-  const auto start_speed{entity.GetVelocity().Length()};
+  auto entity = EntityUtils::GetEntityByName(mantle.environment, actor);
+  const auto start_speed{entity->GetVelocity().Length()};
   const auto target_speed = values.GetSpeedActionTarget();
 
   mantle_api::SplineSection<units::velocity::meters_per_second> spline_section;
@@ -287,8 +284,8 @@ void SpeedAction::SetLinearVelocitySplineControlStrategy(const std::string& acto
   if (mantle_api::AlmostEqual(start_speed, target_speed))
   {
     spline_section.end_time = 0.0_ms;
-    std::get<3>(spline_section.polynomial) = start_speed;
-    SetSpline(entity.GetUniqueId(), target_speed, {spline_section});
+    spline_section.polynomial.a0 = start_speed;
+    SetSpline(entity->GetUniqueId(), target_speed, {spline_section});
     return;
   }
   if (values.speedActionDynamics.transitionDynamics.dimension == mantle_api::Dimension::kTime)
@@ -297,14 +294,14 @@ void SpeedAction::SetLinearVelocitySplineControlStrategy(const std::string& acto
     auto target_acceleration{(target_speed - start_speed) / duration};
 
     spline_section.end_time = duration;
-    std::get<2>(spline_section.polynomial) = target_acceleration;
-    std::get<3>(spline_section.polynomial) = start_speed;
-    SetSpline(entity.GetUniqueId(), target_speed, {spline_section});
+    spline_section.polynomial.a1 = target_acceleration;
+    spline_section.polynomial.a0 = start_speed;
+    SetSpline(entity->GetUniqueId(), target_speed, {spline_section});
     return;
   }
   if (values.speedActionDynamics.transitionDynamics.dimension == mantle_api::Dimension::kRate)
   {
-    const auto performance{detail::GetVehiclePerformance(entity)};
+    const auto performance{detail::GetVehiclePerformance(*entity)};
     const Acceleration target_acceleration{std::abs(values.speedActionDynamics.transitionDynamics.value)};
 
     if (values.speedActionDynamics.followingMode.has_value() && (values.speedActionDynamics.followingMode.value() == FollowingMode::kFollow))
@@ -314,14 +311,14 @@ void SpeedAction::SetLinearVelocitySplineControlStrategy(const std::string& acto
                                                                                         target_speed,
                                                                                         target_acceleration)};
 
-      SetSpline(entity.GetUniqueId(), target_speed, spline_sections);
+      SetSpline(entity->GetUniqueId(), target_speed, spline_sections);
     }
     else
     {
       spline_section.end_time = units::math::abs(target_speed - start_speed) / target_acceleration;
-      std::get<2>(spline_section.polynomial) = units::math::copysign(target_acceleration, target_speed - start_speed);
-      std::get<3>(spline_section.polynomial) = start_speed;
-      SetSpline(entity.GetUniqueId(), target_speed, {spline_section});
+      spline_section.polynomial.a1 = units::math::copysign(target_acceleration, target_speed - start_speed);
+      spline_section.polynomial.a0 = start_speed;
+      SetSpline(entity->GetUniqueId(), target_speed, {spline_section});
     }
 
     return;
@@ -338,9 +335,9 @@ void SpeedAction::SetLinearVelocitySplineControlStrategy(const std::string& acto
                                      (2 * values.speedActionDynamics.transitionDynamics.value)};
 
     spline_section.end_time = duration;
-    std::get<2>(spline_section.polynomial) = units::math::copysign(target_acceleration, target_speed - entity.GetVelocity().Length());
-    std::get<3>(spline_section.polynomial) = start_speed;
-    SetSpline(entity.GetUniqueId(), target_speed, {spline_section});
+    spline_section.polynomial.a1 = units::math::copysign(target_acceleration, target_speed - entity->GetVelocity().Length());
+    spline_section.polynomial.a0 = start_speed;
+    SetSpline(entity->GetUniqueId(), target_speed, {spline_section});
     return;
   }
   throw std::runtime_error("Dimension must be either kTime, kRate, or kDistance");
diff --git a/engine/src/Utils/ControllerCreator.cpp b/engine/src/Utils/ControllerCreator.cpp
index 669a8875ef48bd39ca7c89fc0204f4021326f8f7..a7b1ca3bc4a6a8c4dff33fca36fa0228fcea195f 100644
--- a/engine/src/Utils/ControllerCreator.cpp
+++ b/engine/src/Utils/ControllerCreator.cpp
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License 2.0
@@ -139,8 +139,8 @@ void ControllerCreator::CreateControllers(const std::vector<std::shared_ptr<NET_
       continue;
     }
 
-    const auto entity = environment_.GetEntityRepository().Get(entity_name);
-    if (!entity.has_value())
+    const auto entity = environment_.GetEntityRepository().Get(entity_name).lock();
+    if (!entity)
     {
       throw std::runtime_error("ControllerCreator: Trying to create controller for unavailable entity \"" + entity_name + "\"");
     }
@@ -183,9 +183,9 @@ void ControllerRegistrar::CreateDefaultController()
   default_config->control_strategies.push_back(std::make_unique<mantle_api::KeepVelocityControlStrategy>());
   default_config->control_strategies.push_back(std::make_unique<mantle_api::KeepLaneOffsetControlStrategy>());
   default_config->name = CONTROLLER_NAME_DEFAULT;
-  auto& controller = controller_repository_.Create(std::move(default_config));
-  controller.ChangeState(mantle_api::IController::LateralState::kActivate, mantle_api::IController::LongitudinalState::kActivate);
-  RegisterDefaultController(controller);
+  auto controller = controller_repository_.Create(std::move(default_config)).lock();
+  controller->ChangeState(mantle_api::IController::LateralState::kActivate, mantle_api::IController::LongitudinalState::kActivate);
+  RegisterDefaultController(*controller);
 }
 
 void ControllerRegistrar::CreateUserDefinedControllers(bool control_override)
@@ -198,9 +198,9 @@ void ControllerRegistrar::CreateUserDefinedControllers(bool control_override)
       external_config->name = CONTROLLER_NAME_OVERRIDE;
 
       Logger::Info("ControllerRegistrar: Setting up external controller \"" + external_config->name + "\" for entity \"" + entity_name_ + "\"");
-      auto& controller = controller_repository_.Create(std::move(external_config));
-      RegisterUserDefinedController(controller);
-      controller_service_->ChangeState(entity_.GetUniqueId(), controller.GetUniqueId(), mantle_api::IController::LateralState::kActivate, mantle_api::IController::LongitudinalState::kActivate);
+      auto controller = controller_repository_.Create(std::move(external_config)).lock();
+      RegisterUserDefinedController(*controller);
+      controller_service_->ChangeState(entity_.GetUniqueId(), controller->GetUniqueId(), mantle_api::IController::LateralState::kActivate, mantle_api::IController::LongitudinalState::kActivate);
     }
   }
   else
@@ -211,8 +211,8 @@ void ControllerRegistrar::CreateUserDefinedControllers(bool control_override)
       auto external_config = detail::CreateExternalControllerConfig(controller_name, object_controller);
 
       Logger::Info("ControllerRegistrar: Setting up external controller \"" + external_config->name + "\" for entity \"" + entity_name_ + "\"");
-      auto& controller = controller_repository_.Create(std::move(external_config));
-      RegisterUserDefinedController(controller);
+      auto controller = controller_repository_.Create(std::move(external_config)).lock();
+      RegisterUserDefinedController(*controller);
     }
   }
 }
diff --git a/engine/src/Utils/ControllerService.cpp b/engine/src/Utils/ControllerService.cpp
index adafe058a3d75698ac18588c70d710fa38caade0..a4dc05da5fa26d140ea2baac5e60c2879c8c7b81 100644
--- a/engine/src/Utils/ControllerService.cpp
+++ b/engine/src/Utils/ControllerService.cpp
@@ -93,9 +93,9 @@ std::vector<mantle_api::UniqueId> ControllerService::GetControllerIds(mantle_api
     controller_ids.reserve(1 + controllers->user_defined.size());
 
     std::transform(
-      std::begin(controllers->user_defined), 
-      std::end(controllers->user_defined), 
-      std::back_inserter(controller_ids),
+        std::begin(controllers->user_defined),
+        std::end(controllers->user_defined),
+        std::back_inserter(controller_ids),
         [](const auto& user_defined_controller)
         {
           return user_defined_controller.first;
diff --git a/engine/src/Utils/EntityCreator.cpp b/engine/src/Utils/EntityCreator.cpp
index 0042a031930b199b38da083b660b1e576511ed42..12d30f9ebd6e390eb02b8cc5e229a4cdd7b6cdbb 100644
--- a/engine/src/Utils/EntityCreator.cpp
+++ b/engine/src/Utils/EntityCreator.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -24,14 +24,14 @@ std::map<NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VehicleCategoryEnum, mant
     {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::UNKNOWN, mantle_api::VehicleClass::kOther},
     {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::BICYCLE, mantle_api::VehicleClass::kBicycle},
     {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::BUS, mantle_api::VehicleClass::kBus},
-    {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::CAR, mantle_api::VehicleClass::kMedium_car},
-    {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::MOTORBIKE, mantle_api::VehicleClass::kMotorbike},
-    {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::SEMITRAILER, mantle_api::VehicleClass::kSemitrailer},
+    {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::CAR, mantle_api::VehicleClass::kMediumCar},
+    {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::MOTORBIKE, mantle_api::VehicleClass::kMotorcycle},
+    {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::SEMITRAILER, mantle_api::VehicleClass::kSemiTrailer},
     {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::TRAILER, mantle_api::VehicleClass::kTrailer},
     {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::TRAIN, mantle_api::VehicleClass::kTrain},
     {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::TRAM, mantle_api::VehicleClass::kTram},
-    {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::TRUCK, mantle_api::VehicleClass::kHeavy_truck},
-    {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VAN, mantle_api::VehicleClass::kDelivery_van}};
+    {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::TRUCK, mantle_api::VehicleClass::kHeavyTruck},
+    {NET_ASAM_OPENSCENARIO::v1_3::VehicleCategory::VAN, mantle_api::VehicleClass::kDeliveryVan}};
 
 std::map<NET_ASAM_OPENSCENARIO::v1_3::PedestrianCategory::PedestrianCategoryEnum, mantle_api::EntityType>
     map_entity_type{{NET_ASAM_OPENSCENARIO::v1_3::PedestrianCategory::UNKNOWN, mantle_api::EntityType::kOther},
diff --git a/engine/src/Utils/EntityUtils.cpp b/engine/src/Utils/EntityUtils.cpp
index 513600075541d4c81bdbd2a14dd3f77e63a70ec9..8d507b835293e7fcf78886e197a25456154391a3 100644
--- a/engine/src/Utils/EntityUtils.cpp
+++ b/engine/src/Utils/EntityUtils.cpp
@@ -190,12 +190,12 @@ units::length::meter_t EntityUtils::CalculateRelativeLongitudinalDistance(
   return units::math::abs(local_position.x);
 }
 
-mantle_api::IEntity& EntityUtils::GetEntityByName(const std::shared_ptr<mantle_api::IEnvironment>& environment,
-                                                  const std::string& entity_name)
+std::shared_ptr<mantle_api::IEntity> EntityUtils::GetEntityByName(const std::shared_ptr<mantle_api::IEnvironment>& environment,
+                                                                  const std::string& entity_name)
 {
-  if (auto entity = environment->GetEntityRepository().Get(entity_name); entity)
+  if (auto entity = environment->GetEntityRepository().Get(entity_name).lock())
   {
-    return entity.value().get();
+    return entity;
   }
   throw std::runtime_error("EntityUtils: Entity with name \"" + entity_name +
                            "\" does not exist. Please adjust the scenario.");
@@ -205,19 +205,16 @@ void EntityUtils::RemoveEntity(const std::shared_ptr<mantle_api::IEnvironment>&
                                const mantle_api::UniqueId& entity_id,
                                const std::vector<mantle_api::UniqueId>& controller_ids)
 {
-  for (const auto id : controller_ids)
+  for (const auto& id : controller_ids)
   {
     environment->RemoveEntityFromController(entity_id, id);
     environment->GetControllerRepository().Delete(id);
   }
 
-  const auto& ref_host_entity = environment->GetEntityRepository().GetHost();
-  if (ref_host_entity)
+  const auto host_entity = environment->GetEntityRepository().GetHost();
+  if (const auto valid_host_entity = host_entity.lock(); entity_id == valid_host_entity->GetUniqueId())
   {
-    if (entity_id == ref_host_entity.value().get().GetUniqueId())
-    {
-      throw std::runtime_error("EntityUtils::RemoveEntity: Removing Ego entity is considered invalid. Please adjust the scenario.");
-    }
+    throw std::runtime_error("EntityUtils::RemoveEntity: Removing Ego entity is considered invalid. Please adjust the scenario.");
   }
   environment->GetEntityRepository().Delete(entity_id);
 }
diff --git a/engine/src/Utils/EntityUtils.h b/engine/src/Utils/EntityUtils.h
index 828a08a2a20a252658455d32f7a8350f38c1c799..cc1d5187a089a3d47c1e4317267301cb7e4b2820 100644
--- a/engine/src/Utils/EntityUtils.h
+++ b/engine/src/Utils/EntityUtils.h
@@ -101,8 +101,9 @@ public:
   /// @brief Get entity object from a given name
   /// @param environment environment interface
   /// @param entity_name name of the entity
-  static mantle_api::IEntity& GetEntityByName(const std::shared_ptr<mantle_api::IEnvironment>& environment,
-                                              const std::string& entity_name);
+  /// @throw If an entity with entity_name doesn't exist
+  static std::shared_ptr<mantle_api::IEntity> GetEntityByName(const std::shared_ptr<mantle_api::IEnvironment>& environment,
+                                                              const std::string& entity_name);
 
   /// @brief Remove entity object
   /// @param environment environment interface
diff --git a/engine/tests/Conversion/OscToMantle/ConvertScenarioAbsoluteTargetLaneTest.cpp b/engine/tests/Conversion/OscToMantle/ConvertScenarioAbsoluteTargetLaneTest.cpp
index fd94349a094b1bc24e1a7f360c55bb38260b48c8..2e47f1d2f91f375a63ccc82185ec3ca6f79d64bb 100644
--- a/engine/tests/Conversion/OscToMantle/ConvertScenarioAbsoluteTargetLaneTest.cpp
+++ b/engine/tests/Conversion/OscToMantle/ConvertScenarioAbsoluteTargetLaneTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,7 +8,6 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 #include <openScenarioLib/generated/v1_3/impl/ApiClassImplV1_3.h>
 
@@ -21,5 +20,5 @@ TEST(ConvertScenarioAbsoluteTargetLaneTest, GivenNumberOfTheTargetLaneAsString_T
 
   const auto id = OpenScenarioEngine::v1_3::ConvertScenarioAbsoluteTargetLane(absolute_target_lane_);
 
-  ASSERT_EQ(mantle_api::UniqueId(10), id);
-}
\ No newline at end of file
+  ASSERT_EQ(mantle_api::LaneId(10), id);
+}
diff --git a/engine/tests/Conversion/OscToMantle/ConvertScenarioLaneOffsetTargetTest.cpp b/engine/tests/Conversion/OscToMantle/ConvertScenarioLaneOffsetTargetTest.cpp
index 539d0ae309b81b00d1246979d6791c8fdf2d18c2..ba078330e05cad6d79413834498b0f3a043debab 100644
--- a/engine/tests/Conversion/OscToMantle/ConvertScenarioLaneOffsetTargetTest.cpp
+++ b/engine/tests/Conversion/OscToMantle/ConvertScenarioLaneOffsetTargetTest.cpp
@@ -8,7 +8,6 @@
  ********************************************************************************/
 #include <MantleAPI/Common/orientation.h>
 #include <MantleAPI/Common/vector.h>
-#include <MantleAPI/Test/test_utils.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 #include <openScenarioLib/generated/v1_3/api/ApiClassInterfacesV1_3.h>
@@ -17,6 +16,7 @@
 #include <stdexcept>
 
 #include "Conversion/OscToMantle/ConvertScenarioLaneOffsetTarget.h"
+#include "TestUtils.h"
 #include "gmock/gmock.h"
 
 using OpenScenarioEngine::v1_3::ConvertScenarioLaneOffsetTarget;
@@ -61,17 +61,17 @@ class LaneOffsetTargetTest : public ::testing::Test
 {
 protected:
   std::shared_ptr<NiceMock<MockLaneOffsetTarget>> mock_lane_offset_target_{nullptr};
-  std::shared_ptr<NiceMock<mantle_api::MockEnvironment>> mock_environment_{nullptr};
+  std::shared_ptr<NiceMock<testing::OpenScenarioEngine::v1_3::FakeEnvironment>> fake_environment_{nullptr};
   void SetUp() override
   {
     mock_lane_offset_target_ = std::make_shared<NiceMock<MockLaneOffsetTarget>>();
-    mock_environment_ = std::make_shared<NiceMock<mantle_api::MockEnvironment>>();
+    fake_environment_ = std::make_shared<NiceMock<testing::OpenScenarioEngine::v1_3::FakeEnvironment>>();
   }
 };
 
 TEST_F(LaneOffsetTargetTest, GivenOscNoTargetOffsets_WhenConvert_ThenThrowError)
 {
-  EXPECT_THROW(ConvertScenarioLaneOffsetTarget(mock_environment_, mock_lane_offset_target_, "vehicle1"), std::runtime_error);
+  EXPECT_THROW(ConvertScenarioLaneOffsetTarget(fake_environment_, mock_lane_offset_target_, "vehicle1"), std::runtime_error);
 }
 
 TEST_F(LaneOffsetTargetTest, GivenOscAbsoluteLaneOffsetTarget_WhenConvert_ThenConvertedToAbsoluteLaneOffset)
@@ -83,7 +83,7 @@ TEST_F(LaneOffsetTargetTest, GivenOscAbsoluteLaneOffsetTarget_WhenConvert_ThenCo
   ON_CALL(*absolute_target_offset, IsSetValue()).WillByDefault(Return(true));
   ON_CALL(*absolute_target_offset, GetValue()).WillByDefault(Return(expected_offset.value()));
 
-  EXPECT_THAT(ConvertScenarioLaneOffsetTarget(mock_environment_, mock_lane_offset_target_, "vehicle1"), Eq(expected_offset));
+  EXPECT_THAT(ConvertScenarioLaneOffsetTarget(fake_environment_, mock_lane_offset_target_, "vehicle1"), Eq(expected_offset));
 }
 
 TEST_F(LaneOffsetTargetTest, GivenOscAbsoluteLaneOffsetTargetButNoValue_WhenConvert_ThenThrowError)
@@ -91,7 +91,7 @@ TEST_F(LaneOffsetTargetTest, GivenOscAbsoluteLaneOffsetTargetButNoValue_WhenConv
   auto absolute_target_offset_with_no_value = std::make_shared<NiceMock<MockAbsoluteTargetLaneOffset>>();
   ON_CALL(*mock_lane_offset_target_, IsSetAbsoluteTargetLaneOffset()).WillByDefault(Return(true));
   ON_CALL(*mock_lane_offset_target_, GetAbsoluteTargetLaneOffset()).WillByDefault(Return(absolute_target_offset_with_no_value));
-  EXPECT_THROW(ConvertScenarioLaneOffsetTarget(mock_environment_, mock_lane_offset_target_, "vehicle1"), std::runtime_error);
+  EXPECT_THROW(ConvertScenarioLaneOffsetTarget(fake_environment_, mock_lane_offset_target_, "vehicle1"), std::runtime_error);
 }
 
 TEST_F(LaneOffsetTargetTest, GivenOscRelativeLaneOffsetTarget_WhenConvert_ThenThrowError)
@@ -101,5 +101,5 @@ TEST_F(LaneOffsetTargetTest, GivenOscRelativeLaneOffsetTarget_WhenConvert_ThenTh
   ON_CALL(*mock_lane_offset_target_, IsSetRelativeTargetLaneOffset()).WillByDefault(Return(true));
   ON_CALL(*mock_lane_offset_target_, GetRelativeTargetLaneOffset()).WillByDefault(Return(relative_target_offset));
 
-  EXPECT_THAT(ConvertScenarioLaneOffsetTarget(mock_environment_, mock_lane_offset_target_, "vehicle1"), Eq(0.0_m));
+  EXPECT_THAT(ConvertScenarioLaneOffsetTarget(fake_environment_, mock_lane_offset_target_, "vehicle1"), Eq(0.0_m));
 }
diff --git a/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp b/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp
index 1629ea0cbc895489fd0e0cbab89d92c4cb0d6b52..355bbbb8be0764a1b01b8f0db8fa943929673579 100644
--- a/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp
+++ b/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,11 +8,23 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
+#include <openScenarioLib/generated/v1_3/api/EnumerationsV1_3.h>
 #include <openScenarioLib/generated/v1_3/impl/ApiClassImplV1_3.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioPosition.h"
+#include "TestUtils.h"
+
+// Fix Windows build because ABSOLUTE and RELATIVE are defined as macros in windows.h
+#ifdef ABSOLUTE
+#define ABSOLUTE_WAS_SET ABSOLUTE
+#undef ABSOLUTE
+#endif
+
+#ifdef RELATIVE
+#define RELATIVE_WAS_SET RELATIVE
+#undef RELATIVE
+#endif
 
 using namespace units::literals;
 
@@ -45,7 +57,7 @@ protected:
     {
       geo_pos->SetLatitudeDeg(42.123);
       geo_pos->SetLongitudeDeg(11.65874);
-      EXPECT_CALL(dynamic_cast<mantle_api::MockConverter&>(*(mockEnvironment->GetConverter())),
+      EXPECT_CALL(dynamic_cast<mantle_api::MockCoordConverter&>(*(fakeEnvironment->GetConverter())),
                   Convert(mantle_api::Position{lat_lon_position_deg}))
           .Times(1)
           .WillRepeatedly(testing::Return(expected_position_));
@@ -56,7 +68,7 @@ protected:
       geo_pos->SetLongitude(0.5);
       if (!set_degree)
       {
-        EXPECT_CALL(dynamic_cast<mantle_api::MockConverter&>(*(mockEnvironment->GetConverter())),
+        EXPECT_CALL(dynamic_cast<mantle_api::MockCoordConverter&>(*(fakeEnvironment->GetConverter())),
                     Convert(mantle_api::Position{lat_lon_position_}))
             .Times(1)
             .WillRepeatedly(testing::Return(expected_position_));
@@ -80,7 +92,7 @@ protected:
       NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext type =
           NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::ABSOLUTE) const
   {
-    EXPECT_CALL(dynamic_cast<mantle_api::MockConverter&>(*(mockEnvironment->GetConverter())),
+    EXPECT_CALL(dynamic_cast<mantle_api::MockCoordConverter&>(*(fakeEnvironment->GetConverter())),
                 Convert(testing::_))
         .Times(1)
         .WillRepeatedly(testing::Return(expected_position_));
@@ -107,7 +119,7 @@ protected:
       NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext type =
           NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::ABSOLUTE) const
   {
-    EXPECT_CALL(dynamic_cast<mantle_api::MockConverter&>(*(mockEnvironment->GetConverter())),
+    EXPECT_CALL(dynamic_cast<mantle_api::MockCoordConverter&>(*(fakeEnvironment->GetConverter())),
                 Convert(testing::_))
         .Times(1)
         .WillRepeatedly(testing::Return(expected_position_));
@@ -167,7 +179,7 @@ protected:
   double distance_{10.0};
   double offset_{0.0};
 
-  std::shared_ptr<mantle_api::MockEnvironment> mockEnvironment{std::make_shared<mantle_api::MockEnvironment>()};
+  std::shared_ptr<testing::OpenScenarioEngine::v1_3::FakeEnvironment> fakeEnvironment{std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>()};
 
 private:
   std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::IOrientationWriter> GetOrientationWriter(
@@ -188,27 +200,27 @@ TEST_F(ConvertScenarioPositionTest,
        GivenWorldPositionWithOrientation_WhenConverting_ThenPositionConvertedAndOrientationSet)
 {
   auto pos = GetWorldPosition();
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_position_, pose->position);
-  ASSERT_EQ(mantle_api::Orientation3<units::angle::radian_t>(4_rad, 5_rad, 6_rad), pose->orientation);
+  ASSERT_EQ((mantle_api::Orientation3<units::angle::radian_t>{4_rad, 5_rad, 6_rad}), pose->orientation);
 }
 
 TEST_F(ConvertScenarioPositionTest,
        GivenGeoPositionInRadWithNoOrientation_WhenConverting_ThenPositionConvertedAndOrientationZero)
 {
   auto pos = GetGeoPosition();
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_position_, pose->position);
-  ASSERT_EQ(mantle_api::Orientation3<units::angle::radian_t>(0_rad, 0_rad, 0_rad), pose->orientation);
+  ASSERT_EQ((mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}), pose->orientation);
 }
 
 TEST_F(ConvertScenarioPositionTest,
        GivenGeoPositionInDegree_WhenConverting_ThenPositionConverted)
 {
   auto pos = GetGeoPosition(std::nullopt, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::ABSOLUTE, true, false);
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_position_, pose->position);
 }
@@ -217,7 +229,7 @@ TEST_F(ConvertScenarioPositionTest,
        GivenGeoPositionInRadAndDegree_WhenConverting_ThenDegreePositionConverted)
 {
   auto pos = GetGeoPosition(std::nullopt, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::ABSOLUTE, true, true);
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_position_, pose->position);
 }
@@ -226,7 +238,7 @@ TEST_F(ConvertScenarioPositionTest,
        GivenGeoPositionWithoutLatLon_WhenConverting_ThenThrow)
 {
   auto pos = GetGeoPosition(std::nullopt, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::ABSOLUTE, false, false);
-  EXPECT_ANY_THROW(OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos));
+  EXPECT_ANY_THROW(OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos));
 }
 
 TEST_F(ConvertScenarioPositionTest,
@@ -235,7 +247,7 @@ TEST_F(ConvertScenarioPositionTest,
   mantle_api::Orientation3<units::angle::radian_t> expected_orientation{1.2_rad, 2.3_rad, 5.0_rad};
 
   auto pos = GetGeoPosition(expected_orientation, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::ABSOLUTE);
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_orientation, pose->orientation);
 }
@@ -245,13 +257,13 @@ TEST_F(ConvertScenarioPositionTest,
 {
   mantle_api::Orientation3<units::angle::radian_t> lane_orientation{10_rad, 11_rad, 12_rad};
   mantle_api::Orientation3<units::angle::radian_t> expected_orientation{1.2_rad, 2.3_rad, 5.0_rad};
-  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()),
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fakeEnvironment->GetQueryService()),
               GetLaneOrientation(expected_position_))
       .Times(1)
       .WillRepeatedly(testing::Return(lane_orientation));
 
   auto pos = GetGeoPosition(expected_orientation, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::RELATIVE);
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_orientation + lane_orientation, pose->orientation);
 }
@@ -260,33 +272,33 @@ TEST_F(ConvertScenarioPositionTest,
        GivenGeoPositionOnRoad_WhenConverting_ThenAltitudeOnRoadSurface)
 {
   auto pos = GetGeoPosition();
-  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()),
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fakeEnvironment->GetQueryService()),
               IsPositionOnLane(expected_position_))
       .Times(1)
       .WillRepeatedly(testing::Return(true));
-  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()),
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fakeEnvironment->GetQueryService()),
               GetLaneHeightAtPosition(expected_position_))
       .Times(1)
       .WillRepeatedly(testing::Return(5_m));
 
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
-  EXPECT_EQ(mantle_api::Vec3<units::length::meter_t>(1_m, 2_m, 5_m), pose->position);
+  EXPECT_EQ((mantle_api::Vec3<units::length::meter_t>{1_m, 2_m, 5_m}), pose->position);
 }
 
 TEST_F(ConvertScenarioPositionTest,
        GivenGeoPositionNotOnRoad_WhenConverting_ThenDefaultAltitude)
 {
   auto pos = GetGeoPosition();
-  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()),
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fakeEnvironment->GetQueryService()),
               IsPositionOnLane(expected_position_))
       .Times(1)
       .WillRepeatedly(testing::Return(false));
-  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()),
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fakeEnvironment->GetQueryService()),
               GetLaneHeightAtPosition(expected_position_))
       .Times(0);
 
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   EXPECT_EQ(expected_position_, pose->position);
 }
@@ -295,23 +307,23 @@ TEST_F(ConvertScenarioPositionTest,
        GivenRelativeLanePositionWithNoOrientation_WhenConverting_ThenPositionConvertedAndOrientationZero)
 {
   auto pos = GetRelativeLanePosition();
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
-  ASSERT_EQ(mantle_api::Vec3<units::length::meter_t>(0_m, 0_m, 0_m), pose->position);
-  ASSERT_EQ(mantle_api::Orientation3<units::angle::radian_t>(0_rad, 0_rad, 0_rad), pose->orientation);
+  ASSERT_EQ((mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m}), pose->position);
+  ASSERT_EQ((mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}), pose->orientation);
 }
 
 TEST_F(ConvertScenarioPositionTest,
        GivenRelativeLanePositionWithAbsoluteOrientation_WhenConverting_ThenOrientationIsReturnedUnchanged)
 {
   mantle_api::Orientation3<units::angle::radian_t> expected_orientation{1.2_rad, 2.3_rad, 5.0_rad};
-  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()),
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fakeEnvironment->GetQueryService()),
               GetLaneOrientation(testing::_))
       .Times(0);
 
   auto pos =
       GetRelativeLanePosition(0, expected_orientation, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::ABSOLUTE);
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_orientation, pose->orientation);
 }
@@ -320,16 +332,16 @@ TEST_F(ConvertScenarioPositionTest,
        GivenRelativeLanePositionWithDSValueAndAbsoluteOrientation_WhenConverting_ThenReturnEmptyPose)
 {
   mantle_api::Orientation3<units::angle::radian_t> expected_orientation{0_rad, 0_rad, 0_rad};
-  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()),
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fakeEnvironment->GetQueryService()),
               GetLaneOrientation(testing::_))
       .Times(0);
 
   auto pos =
       GetRelativeLanePosition(10, expected_orientation, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::ABSOLUTE);
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_orientation, pose->orientation);
-  ASSERT_EQ(mantle_api::Vec3<units::length::meter_t>(0_m, 0_m, 0_m), pose->position);
+  ASSERT_EQ((mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m}), pose->position);
 }
 
 TEST_F(ConvertScenarioPositionTest,
@@ -337,14 +349,14 @@ TEST_F(ConvertScenarioPositionTest,
 {
   mantle_api::Orientation3<units::angle::radian_t> lane_orientation{10_rad, 11_rad, 12_rad};
   mantle_api::Orientation3<units::angle::radian_t> expected_orientation{1.2_rad, 2.3_rad, 5.0_rad};
-  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()),
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fakeEnvironment->GetQueryService()),
               GetLaneOrientation(testing::_))
       .Times(1)
       .WillRepeatedly(testing::Return(lane_orientation));
 
   auto pos =
       GetRelativeLanePosition(0, expected_orientation, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::RELATIVE);
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(lane_orientation + expected_orientation, pose->orientation);
 }
@@ -352,28 +364,27 @@ TEST_F(ConvertScenarioPositionTest,
 TEST_F(ConvertScenarioPositionTest,
        GivenRelativeLanePositionWithDSValueAndRelativeOrientation_WhenConverting_ThenReturnEmptyPose)
 {
-  mantle_api::Orientation3<units::angle::radian_t> lane_orientation{10_rad, 11_rad, 12_rad};
   mantle_api::Orientation3<units::angle::radian_t> expected_orientation{0_rad, 0_rad, 0_rad};
-  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()),
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fakeEnvironment->GetQueryService()),
               GetLaneOrientation(testing::_))
       .Times(0);
 
   auto pos =
       GetRelativeLanePosition(10, expected_orientation, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::RELATIVE);
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_orientation, pose->orientation);
-  ASSERT_EQ(mantle_api::Vec3<units::length::meter_t>(0_m, 0_m, 0_m), pose->position);
+  ASSERT_EQ((mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m}), pose->position);
 }
 
 TEST_F(ConvertScenarioPositionTest,
        GivenLanePositionWithNoOrientation_WhenConverting_ThenPositionConvertedAndOrientationZero)
 {
   auto pos = GetLanePosition();
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_position_, pose->position);
-  ASSERT_EQ(mantle_api::Orientation3<units::angle::radian_t>(0_rad, 0_rad, 0_rad), pose->orientation);
+  ASSERT_EQ((mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}), pose->orientation);
 }
 
 TEST_F(ConvertScenarioPositionTest,
@@ -382,7 +393,7 @@ TEST_F(ConvertScenarioPositionTest,
   mantle_api::Orientation3<units::angle::radian_t> expected_orientation{1.2_rad, 2.3_rad, 5.0_rad};
 
   auto pos = GetLanePosition(expected_orientation, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::ABSOLUTE);
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_orientation, pose->orientation);
 }
@@ -392,13 +403,13 @@ TEST_F(ConvertScenarioPositionTest,
 {
   mantle_api::Orientation3<units::angle::radian_t> lane_orientation{10_rad, 11_rad, 12_rad};
   mantle_api::Orientation3<units::angle::radian_t> expected_orientation{1.2_rad, 2.3_rad, 5.0_rad};
-  EXPECT_CALL(dynamic_cast<mantle_api::MockConverter&>(*(mockEnvironment->GetConverter())),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockCoordConverter&>(*(fakeEnvironment->GetConverter())),
               GetLaneOrientation(testing::_))
       .Times(1)
       .WillRepeatedly(testing::Return(lane_orientation));
 
   auto pos = GetLanePosition(expected_orientation, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::RELATIVE);
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_orientation + lane_orientation, pose->orientation);
 }
@@ -409,7 +420,7 @@ TEST_F(ConvertScenarioPositionTest,
   mantle_api::Orientation3<units::angle::radian_t> expected_orientation{1.2_rad, 2.3_rad, 5.0_rad};
 
   auto pos = GetRoadPosition(expected_orientation, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::ABSOLUTE);
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_orientation, pose->orientation);
 }
@@ -419,13 +430,23 @@ TEST_F(ConvertScenarioPositionTest,
 {
   mantle_api::Orientation3<units::angle::radian_t> road_orientation{10_rad, 11_rad, 12_rad};
   mantle_api::Orientation3<units::angle::radian_t> expected_orientation{1.2_rad, 2.3_rad, 5.0_rad};
-  EXPECT_CALL(dynamic_cast<mantle_api::MockConverter&>(*(mockEnvironment->GetConverter())),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockCoordConverter&>(*(fakeEnvironment->GetConverter())),
               GetRoadOrientation(testing::_))
       .Times(1)
       .WillRepeatedly(testing::Return(road_orientation));
 
   auto pos = GetRoadPosition(expected_orientation, NET_ASAM_OPENSCENARIO::v1_3::ReferenceContext::RELATIVE);
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fakeEnvironment, pos);
 
   ASSERT_EQ(expected_orientation + road_orientation, pose->orientation);
 }
+
+#ifdef ABSOLUTE_WAS_SET
+#define ABSOLUTE ABSOLUTE_WAS_SET
+#undef ABSOLUTE_WAS_SET
+#endif
+
+#ifdef RELATIVE_WAS_SET
+#define RELATIVE RELATIVE_WAS_SET
+#undef RELATIVE_WAS_SET
+#endif
diff --git a/engine/tests/Conversion/OscToMantle/ConvertScenarioRelativeTargetLaneTest.cpp b/engine/tests/Conversion/OscToMantle/ConvertScenarioRelativeTargetLaneTest.cpp
index d0a841955d889208f6c8adbf9cab51cc5bd6ab26..0bd011ef3a0bf3fbbc25ddf025c386536d2acd08 100644
--- a/engine/tests/Conversion/OscToMantle/ConvertScenarioRelativeTargetLaneTest.cpp
+++ b/engine/tests/Conversion/OscToMantle/ConvertScenarioRelativeTargetLaneTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,11 +8,11 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 #include <openScenarioLib/generated/v1_3/impl/ApiClassImplV1_3.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioRelativeTargetLane.h"
+#include "TestUtils.h"
 
 using namespace units::literals;
 using namespace mantle_api;
@@ -22,7 +22,7 @@ TEST(ConvertScenarioRelativeTargetLaneTest, GivenNoRelativeEntity_ThenThrowError
   auto namedRef = std::make_shared<NET_ASAM_OPENSCENARIO::INamedReference<NET_ASAM_OPENSCENARIO::v1_3::IEntity>>();
   auto relativeTargetLane = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::RelativeTargetLaneImpl>();
   relativeTargetLane->SetEntityRef(namedRef);
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
-  auto uniqueId = OpenScenarioEngine::v1_3::ConvertScenarioRelativeTargetLane(mockEnvironment, relativeTargetLane);
+  auto fakeEnvironment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
+  auto uniqueId = OpenScenarioEngine::v1_3::ConvertScenarioRelativeTargetLane(fakeEnvironment, relativeTargetLane);
   EXPECT_EQ(mantle_api::UniqueId(0), uniqueId);
 }
diff --git a/engine/tests/Conversion/OscToMantle/ConvertScenarioSpeedActionTargetTest.cpp b/engine/tests/Conversion/OscToMantle/ConvertScenarioSpeedActionTargetTest.cpp
index 0ee431c3b5f326dd72d85ce3b0aed670932e5a26..79f44dc5a6729fd3a52cd5531b8cc21f7049fd8e 100644
--- a/engine/tests/Conversion/OscToMantle/ConvertScenarioSpeedActionTargetTest.cpp
+++ b/engine/tests/Conversion/OscToMantle/ConvertScenarioSpeedActionTargetTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,12 +8,13 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
+#include <MantleAPI/Execution/mock_environment.h>
 #include <gtest/gtest.h>
 #include <openScenarioLib/generated/v1_3/api/ApiClassInterfacesV1_3.h>
 #include <openScenarioLib/generated/v1_3/impl/ApiClassImplV1_3.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioSpeedActionTarget.h"
+#include "TestUtils.h"
 
 using namespace units::literals;
 
@@ -42,7 +43,7 @@ TEST(ConvertScenarioSpeedActionTargetTest, GivenAbsoluteTargetSpeed_ThenConvertT
 
 TEST(ConvertScenarioSpeedActionTargetTest, GivenRelativeTargetSpeedAndDeltaValueType_ThenConvertToSpeedActionTarget)
 {
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fakeEnvironment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
   auto namedRef = std::make_shared<NET_ASAM_OPENSCENARIO::INamedReference<NET_ASAM_OPENSCENARIO::v1_3::IEntity>>();
   auto relativeTargetSpeed = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::RelativeTargetSpeedImpl>();
   relativeTargetSpeed->SetEntityRef(namedRef);
@@ -52,13 +53,13 @@ TEST(ConvertScenarioSpeedActionTargetTest, GivenRelativeTargetSpeedAndDeltaValue
   auto speed_action_target = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::SpeedActionTargetImpl>();
   speed_action_target->SetRelativeTargetSpeed(relativeTargetSpeed);
 
-  auto trajectoryTimeReference = OpenScenarioEngine::v1_3::ConvertScenarioSpeedActionTarget(mockEnvironment, speed_action_target);
+  auto trajectoryTimeReference = OpenScenarioEngine::v1_3::ConvertScenarioSpeedActionTarget(fakeEnvironment, speed_action_target);
   EXPECT_EQ(trajectoryTimeReference, 1.0_mps);
 }
 
 TEST(ConvertScenarioSpeedActionTargetTest, GivenRelativeTargetSpeedAndFactorValueType_ThenConvertToSpeedActionTarget)
 {
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fakeEnvironment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
 
   auto namedRef = std::make_shared<NET_ASAM_OPENSCENARIO::INamedReference<NET_ASAM_OPENSCENARIO::v1_3::IEntity>>();
 
@@ -70,6 +71,6 @@ TEST(ConvertScenarioSpeedActionTargetTest, GivenRelativeTargetSpeedAndFactorValu
   auto speed_action_target = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::SpeedActionTargetImpl>();
   speed_action_target->SetRelativeTargetSpeed(relativeTargetSpeed);
 
-  auto trajectoryTimeReference = OpenScenarioEngine::v1_3::ConvertScenarioSpeedActionTarget(mockEnvironment, speed_action_target);
+  auto trajectoryTimeReference = OpenScenarioEngine::v1_3::ConvertScenarioSpeedActionTarget(fakeEnvironment, speed_action_target);
   EXPECT_EQ(trajectoryTimeReference, 0.0_mps);
-}
\ No newline at end of file
+}
diff --git a/engine/tests/Conversion/OscToMantle/ConvertScenarioTimeReferenceTest.cpp b/engine/tests/Conversion/OscToMantle/ConvertScenarioTimeReferenceTest.cpp
index a6d820c76ad52100ed2fa70cad536e75928b6881..29d277c684ad2e77a0cd8b3b80f1f662c6e7682d 100644
--- a/engine/tests/Conversion/OscToMantle/ConvertScenarioTimeReferenceTest.cpp
+++ b/engine/tests/Conversion/OscToMantle/ConvertScenarioTimeReferenceTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,7 +8,6 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 #include <openScenarioLib/generated/v1_3/impl/ApiClassImplV1_3.h>
 
@@ -36,4 +35,4 @@ TEST(ConvertScenarioTimeReferenceTest, GetTimingFromTimeReference_ThenConvertToM
 
   ASSERT_EQ(1.0, timeReference->scale);
   ASSERT_EQ(units::time::second_t(2.0), timeReference->offset);
-}
\ No newline at end of file
+}
diff --git a/engine/tests/Conversion/OscToMantle/ConvertScenarioTimeToCollisionConditionTargetTest.cpp b/engine/tests/Conversion/OscToMantle/ConvertScenarioTimeToCollisionConditionTargetTest.cpp
index d9df35caa69fd370b6ad1ee2bf3727d18a132d7e..90f6aefeac8d2dd7957fd064409c2e0757ec65cd 100644
--- a/engine/tests/Conversion/OscToMantle/ConvertScenarioTimeToCollisionConditionTargetTest.cpp
+++ b/engine/tests/Conversion/OscToMantle/ConvertScenarioTimeToCollisionConditionTargetTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,7 +8,6 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 #include <openScenarioLib/generated/v1_3/impl/ApiClassImplV1_3.h>
 
@@ -42,4 +41,4 @@ TEST_F(ConvertScenarioTimeToCollisionConditionTargetTest, GetThePosition_ThenCon
   auto absolute_target_lane_ = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::TimeToCollisionConditionTargetImpl>();
   //  TODO: Implement once TTC issue is resolved.
 }
-}  // namespace testing::OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace testing::OpenScenarioEngine::v1_3
diff --git a/engine/tests/Conversion/OscToMantle/ConvertScenarioTrafficDefinitionTest.cpp b/engine/tests/Conversion/OscToMantle/ConvertScenarioTrafficDefinitionTest.cpp
index c0667efc832dab9209f55365eeef1f47cd014813..9736ab5bf977c98b27e3c5173f4b5501a38ee167 100644
--- a/engine/tests/Conversion/OscToMantle/ConvertScenarioTrafficDefinitionTest.cpp
+++ b/engine/tests/Conversion/OscToMantle/ConvertScenarioTrafficDefinitionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2023-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -175,17 +175,17 @@ TEST(ConvertScenarioTrafficDefinition, GivenTrafficDefinitionImplementation_When
 
   ASSERT_EQ(detail::kTrafficDefinitionName, converted.name);
 
-  ASSERT_EQ(converted.vehicle_category_distribution_entries.at(0).category, mantle_api::VehicleClass::kInvalid);
+  ASSERT_EQ(converted.vehicle_category_distribution_entries.at(0).category, mantle_api::VehicleClass::kUnknown);
   ASSERT_EQ(converted.vehicle_category_distribution_entries.at(1).category, mantle_api::VehicleClass::kBicycle);
   ASSERT_EQ(converted.vehicle_category_distribution_entries.at(2).category, mantle_api::VehicleClass::kBus);
-  ASSERT_EQ(converted.vehicle_category_distribution_entries.at(3).category, mantle_api::VehicleClass::kMedium_car);
-  ASSERT_EQ(converted.vehicle_category_distribution_entries.at(4).category, mantle_api::VehicleClass::kMotorbike);
-  ASSERT_EQ(converted.vehicle_category_distribution_entries.at(5).category, mantle_api::VehicleClass::kSemitrailer);
+  ASSERT_EQ(converted.vehicle_category_distribution_entries.at(3).category, mantle_api::VehicleClass::kMediumCar);
+  ASSERT_EQ(converted.vehicle_category_distribution_entries.at(4).category, mantle_api::VehicleClass::kMotorcycle);
+  ASSERT_EQ(converted.vehicle_category_distribution_entries.at(5).category, mantle_api::VehicleClass::kSemiTrailer);
   ASSERT_EQ(converted.vehicle_category_distribution_entries.at(6).category, mantle_api::VehicleClass::kTrailer);
   ASSERT_EQ(converted.vehicle_category_distribution_entries.at(7).category, mantle_api::VehicleClass::kTrain);
   ASSERT_EQ(converted.vehicle_category_distribution_entries.at(8).category, mantle_api::VehicleClass::kTram);
-  ASSERT_EQ(converted.vehicle_category_distribution_entries.at(9).category, mantle_api::VehicleClass::kHeavy_truck);
-  ASSERT_EQ(converted.vehicle_category_distribution_entries.at(10).category, mantle_api::VehicleClass::kDelivery_van);
+  ASSERT_EQ(converted.vehicle_category_distribution_entries.at(9).category, mantle_api::VehicleClass::kHeavyTruck);
+  ASSERT_EQ(converted.vehicle_category_distribution_entries.at(10).category, mantle_api::VehicleClass::kDeliveryVan);
 
   for (size_t i{0}; i < converted.vehicle_category_distribution_entries.size(); ++i)
   {
diff --git a/engine/tests/Conversion/OscToMantle/ConvertScenarioTrajectoryRefTest.cpp b/engine/tests/Conversion/OscToMantle/ConvertScenarioTrajectoryRefTest.cpp
index 6a223eef6016c734b1041fd1731c9a6bed591af2..dac046f5a8cbd9d69d42568d2020448ee969d6dc 100644
--- a/engine/tests/Conversion/OscToMantle/ConvertScenarioTrajectoryRefTest.cpp
+++ b/engine/tests/Conversion/OscToMantle/ConvertScenarioTrajectoryRefTest.cpp
@@ -8,7 +8,7 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
+#include <MantleAPI/Execution/mock_environment.h>
 #include <gtest/gtest.h>
 #include <openScenarioLib/generated/v1_3/api/ApiClassInterfacesV1_3.h>
 #include <openScenarioLib/generated/v1_3/impl/ApiClassImplV1_3.h>
@@ -205,10 +205,12 @@ class ConvertScenarioTrajectoryRefTestShapeParam : public ConvertScenarioTraject
 };
 
 INSTANTIATE_TEST_CASE_P(
-  ConvertScenarioTrajectoryRefTestShapeInstParam,
-  ConvertScenarioTrajectoryRefTestShapeParam,
-  ::testing::Values([](std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::ShapeImpl> shape){shape->SetClothoid(std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::ClothoidImpl>());}, 
-                    [](std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::ShapeImpl> shape){shape->SetNurbs(std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::NurbsImpl>());}));
+    ConvertScenarioTrajectoryRefTestShapeInstParam,
+    ConvertScenarioTrajectoryRefTestShapeParam,
+    ::testing::Values([](std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::ShapeImpl> shape)
+                      { shape->SetClothoid(std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::ClothoidImpl>()); },
+                      [](std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::ShapeImpl> shape)
+                      { shape->SetNurbs(std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::NurbsImpl>()); }));
 
 TEST_P(ConvertScenarioTrajectoryRefTestShapeParam, GivenUnsupportedShape_ThenException)
 {
diff --git a/engine/tests/Node/ByEntityConditionNodeTest.cpp b/engine/tests/Node/ByEntityConditionNodeTest.cpp
index 1c5a5b618ff08711e61631ef7e22333198931747..4601422dec6d67c1a0ff6cd93004198d1be6796b 100644
--- a/engine/tests/Node/ByEntityConditionNodeTest.cpp
+++ b/engine/tests/Node/ByEntityConditionNodeTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2023-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -65,7 +65,7 @@ TEST_F(OpenScenarioEngineLibraryTestBase, GivenTriggeringEntitiesRuleAll_WhenCon
 
 TEST_F(OpenScenarioEngineLibraryTestBase, GivenByEntityConditionNode_WhenTick_ThenReturnAlwaysChildStatus)
 {
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(env_->GetEntityRepository().Get("Ego").value().get()), GetVelocity())
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(*env_->GetEntityRepository().Get("Ego").lock()), GetVelocity())
       .WillOnce(::testing::Return(mantle_api::Vec3<units::velocity::meters_per_second_t>{0.0_mps, 0_mps, 0_mps}))
       .WillOnce(::testing::Return(mantle_api::Vec3<units::velocity::meters_per_second_t>{10.0_mps, 0_mps, 0_mps}))
       .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::velocity::meters_per_second_t>{0.0_mps, 0_mps, 0_mps}));
diff --git a/engine/tests/Node/ConditionNodeTest.cpp b/engine/tests/Node/ConditionNodeTest.cpp
index 0f4b4e5cb5e55f68ff145739ac42a4f25076c853..81f639a21f1f7ad47d20bf81607083b7422e946f 100644
--- a/engine/tests/Node/ConditionNodeTest.cpp
+++ b/engine/tests/Node/ConditionNodeTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2023-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,7 +8,7 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
+#include <MantleAPI/Execution/mock_environment.h>
 #include <agnostic_behavior_tree/decorator/data_declaration_node.h>
 #include <gtest/gtest.h>
 
@@ -20,8 +20,8 @@
 using namespace mantle_api;
 using namespace units::literals;
 
-using testing::OpenScenarioEngine::v1_3::FakeActionNode;
 using testing::Return;
+using testing::OpenScenarioEngine::v1_3::FakeActionNode;
 
 using namespace NET_ASAM_OPENSCENARIO::v1_3;
 
@@ -366,4 +366,4 @@ TEST(ConditionNode, GivenNoEdge_WhenChildConditionIsFullfilled_Succeeds)
   ASSERT_THAT(root.executeTick(), yase::NodeStatus::kSuccess);
   ASSERT_THAT(root.executeTick(), yase::NodeStatus::kRunning);
   ASSERT_THAT(root.executeTick(), yase::NodeStatus::kSuccess);
-}
\ No newline at end of file
+}
diff --git a/engine/tests/Node/EntityConditionNodeTest.cpp b/engine/tests/Node/EntityConditionNodeTest.cpp
index 69a934f0df3c45f3ec26fcaf6fdc86df3c789ead..0ecca6e08650f171ba38f03d8fdbce87f089197c 100644
--- a/engine/tests/Node/EntityConditionNodeTest.cpp
+++ b/engine/tests/Node/EntityConditionNodeTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2023-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -35,7 +35,7 @@ std::shared_ptr<OpenScenarioEngine::v1_3::Node::EntityConditionNode> CreateEntit
 
 TEST_F(OpenScenarioEngineLibraryTestBase, GivenEntityConditionNode_WhenTick_ThenReturnAlwaysChildStatus)
 {
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(env_->GetEntityRepository().Get("Ego").value().get()), GetVelocity())
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(*env_->GetEntityRepository().Get("Ego").lock()), GetVelocity())
       .WillOnce(::testing::Return(mantle_api::Vec3<units::velocity::meters_per_second_t>{0.0_mps, 0_mps, 0_mps}))
       .WillOnce(::testing::Return(mantle_api::Vec3<units::velocity::meters_per_second_t>{10.0_mps, 0_mps, 0_mps}))
       .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::velocity::meters_per_second_t>{0.0_mps, 0_mps, 0_mps}));
diff --git a/engine/tests/OpenScenarioEngineTest.cpp b/engine/tests/OpenScenarioEngineTest.cpp
index 0735928cd878208366b8851806a58f48671b6b40..b5e79d95b45b3d4317c61ae62b0439dd3a35bcd0 100644
--- a/engine/tests/OpenScenarioEngineTest.cpp
+++ b/engine/tests/OpenScenarioEngineTest.cpp
@@ -9,7 +9,6 @@
  * SPDX-License-Identifier: EPL-2.0
  *******************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 #include <openScenarioLib/generated/v1_3/catalog/CatalogHelperV1_3.h>
@@ -40,8 +39,8 @@ protected:
   void SetUp() override
   {
     OpenScenarioEngineTestBase::SetUp();
-    ON_CALL(controller_, GetName()).WillByDefault(ReturnRef(controller_name));
-    ON_CALL(controller_, GetUniqueId()).WillByDefault(Return(1234));
+    ON_CALL(*controller_, GetName()).WillByDefault(ReturnRef(controller_name));
+    ON_CALL(*controller_, GetUniqueId()).WillByDefault(Return(mantle_api::UniqueId(1234)));
   }
 
   std::string controller_name{"TestController"s};
@@ -251,16 +250,27 @@ TEST_F(OpenScenarioEngineTest, GivenScenarioWithUsedArea_WhenCallInit_ThenMapDet
   EXPECT_TRUE(IsMapDetailsWithLatLon(*scenario_info.map_details));
 }
 
+TEST_F(OpenScenarioEngineTest, GivenEngine_WhenSetupDynamicContent_ThenRouteRepositoryIsReset)
+{
+  std::string xosc_file_path{GetScenariosPath(test_info_->file()) + default_xosc_scenario_};
+  OpenScenarioEngine::v1_3::OpenScenarioEngine engine(xosc_file_path, env_);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockRouteRepository&>(env_->GetRouteRepository()), Reset()).Times(1);
+
+  engine.Init();
+  engine.SetupDynamicContent();
+}
+
 TEST_F(OpenScenarioEngineTest, GivenScenarioWithEntities_WhenInitScenario_ThenCreateIsCalledInEnvironmentForEveryEntity)
 {
   std::string xosc_file_path{GetScenariosPath(test_info_->file()) + default_xosc_scenario_};
   OpenScenarioEngine::v1_3::OpenScenarioEngine engine(xosc_file_path, env_);
 
-  mantle_api::MockVehicle mock_vehicle{};
+  auto mock_vehicle = std::make_shared<mantle_api::MockVehicle>();
 
   mantle_api::VehicleProperties ego_properties{};
   ego_properties.type = mantle_api::EntityType::kVehicle;
-  ego_properties.classification = mantle_api::VehicleClass::kMedium_car;
+  ego_properties.classification = mantle_api::VehicleClass::kMediumCar;
   ego_properties.model = "medium_car";
   ego_properties.bounding_box.dimension.length = 5.0_m;
   ego_properties.bounding_box.dimension.width = 2.0_m;
@@ -279,12 +289,13 @@ TEST_F(OpenScenarioEngineTest, GivenScenarioWithEntities_WhenInitScenario_ThenCr
   ego_properties.rear_axle.max_steering = 0_rad;
   ego_properties.rear_axle.track_width = 1.68_m;
   ego_properties.rear_axle.wheel_diameter = 0.8_m;
+  ego_properties.properties["custom_property"] = "5";
   ego_properties.is_host = true;
 
   EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
               Create(std::string("Ego"), ego_properties))
       .Times(1)
-      .WillRepeatedly(ReturnRef(mock_vehicle));
+      .WillRepeatedly(Return(mock_vehicle));
 
   EXPECT_NO_THROW(engine.Init());
   engine.SetupDynamicContent();
@@ -296,22 +307,22 @@ TEST_F(OpenScenarioEngineTest,
   std::string xosc_file_path{GetScenariosPath(test_info_->file()) + default_xosc_scenario_};
   OpenScenarioEngine::v1_3::OpenScenarioEngine engine(xosc_file_path, env_);
 
-  mantle_api::MockController mock_default_controller;
+  auto mock_default_controller = std::make_shared<mantle_api::MockController>();
   const mantle_api::UniqueId DEFAULT_CONTROLLER_ID{1234};
   const std::string DEFAULT_CONTROLLER_NAME{"TestDefaultController"};
-  ON_CALL(mock_default_controller, GetUniqueId()).WillByDefault(Return(DEFAULT_CONTROLLER_ID));
-  ON_CALL(mock_default_controller, GetName()).WillByDefault(ReturnRef(DEFAULT_CONTROLLER_NAME));
+  ON_CALL(*mock_default_controller, GetUniqueId()).WillByDefault(Return(DEFAULT_CONTROLLER_ID));
+  ON_CALL(*mock_default_controller, GetName()).WillByDefault(ReturnRef(DEFAULT_CONTROLLER_NAME));
 
-  mantle_api::MockController mock_user_defined_controller;
+  auto mock_user_defined_controller = std::make_shared<mantle_api::MockController>();
   const mantle_api::UniqueId USER_DEFINED_CONTROLLER_ID{5678};
   const std::string USER_DEFINED_CONTROLLER_NAME{"TestUserDefinedController"};
-  ON_CALL(mock_user_defined_controller, GetUniqueId()).WillByDefault(Return(USER_DEFINED_CONTROLLER_ID));
-  ON_CALL(mock_user_defined_controller, GetName()).WillByDefault(ReturnRef(USER_DEFINED_CONTROLLER_NAME));
+  ON_CALL(*mock_user_defined_controller, GetUniqueId()).WillByDefault(Return(USER_DEFINED_CONTROLLER_ID));
+  ON_CALL(*mock_user_defined_controller, GetName()).WillByDefault(ReturnRef(USER_DEFINED_CONTROLLER_NAME));
 
   mantle_api::InternalControllerConfig internal_config_actual;
   mantle_api::ExternalControllerConfig external_config_actual;
   ON_CALL(env_->GetControllerRepository(), Create(_))
-      .WillByDefault(::testing::Invoke([&](std::unique_ptr<mantle_api::IControllerConfig> received_controller) -> mantle_api::IController&
+      .WillByDefault(::testing::Invoke([&](std::unique_ptr<mantle_api::IControllerConfig> received_controller) -> std::weak_ptr<mantle_api::IController>
                                        {
         if (auto internal = dynamic_cast<mantle_api::InternalControllerConfig*>(received_controller.get()))
         {
@@ -352,7 +363,7 @@ TEST_F(OpenScenarioEngineTest, GivenScenarioWithInitTeleportAction_WhenInitAndSt
   std::string xosc_file_path{GetScenariosPath(test_info_->file()) + default_xosc_scenario_};
   OpenScenarioEngine::v1_3::OpenScenarioEngine engine(xosc_file_path, env_);
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
               SetPosition(_))
       .Times(1);
 
diff --git a/engine/tests/Storyboard/ByEntityCondition/DistanceConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/DistanceConditionTest.cpp
index f89602ac75637736181a94e513e7ea32666a20b4..1ce9a5b12e9153294f8317b744b4f46e408caafd 100644
--- a/engine/tests/Storyboard/ByEntityCondition/DistanceConditionTest.cpp
+++ b/engine/tests/Storyboard/ByEntityCondition/DistanceConditionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2023-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,11 +8,11 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioRule.h"
 #include "Storyboard/ByEntityCondition/DistanceCondition_impl.h"
+#include "TestUtils.h"
 #include "TestUtils/TestLogger.h"
 
 using namespace mantle_api;
@@ -28,16 +28,17 @@ protected:
   void SetUp() override
   {
     LOGGER = std::make_unique<testing::OpenScenarioEngine::v1_3::TestLogger>();
-    mock_environment_ = std::make_shared<MockEnvironment>();
+    fake_environment_ = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
     reference_pose_ = {{10.0_m, 20.0_m, 30.0_m}, {}};
   }
 
-  std::shared_ptr<MockEnvironment> mock_environment_;
+  std::shared_ptr<testing::OpenScenarioEngine::v1_3::FakeEnvironment> fake_environment_;
   Pose reference_pose_;
   OpenScenarioEngine::v1_3::DistanceCondition::Values condition_values_{.triggeringEntity = "vehicle",
                                                                         .alongRoute = false,
                                                                         .freespace = false,
-                                                                        .GetPosition = [&]() { return reference_pose_; },
+                                                                        .GetPosition = [&]()
+                                                                        { return reference_pose_; },
                                                                         .coordinateSystem = OpenScenarioEngine::v1_3::CoordinateSystem::kEntity,
                                                                         .relativeDistanceType = OpenScenarioEngine::v1_3::RelativeDistanceType::kLongitudinal,
                                                                         .rule = OpenScenarioEngine::v1_3::Rule(NET_ASAM_OPENSCENARIO::v1_3::Rule::RuleEnum::LESS_OR_EQUAL, 10.0)};
@@ -50,7 +51,7 @@ TEST_F(DistanceConditionTestFixture, GivenUnsupportedCoordinateSystem_WhenDistan
   condition_values_.coordinateSystem = OpenScenarioEngine::v1_3::CoordinateSystem::kUnknown;
 
   OpenScenarioEngine::v1_3::DistanceCondition distance_condition(condition_values_,
-                                                                 {mock_environment_});
+                                                                 {fake_environment_});
 
   distance_condition.IsSatisfied();
 
@@ -63,7 +64,7 @@ TEST_F(DistanceConditionTestFixture, GivenUnsupportedRelativeDistanceType_WhenDi
   condition_values_.relativeDistanceType = OpenScenarioEngine::v1_3::RelativeDistanceType::kLateral;
 
   OpenScenarioEngine::v1_3::DistanceCondition distance_condition(condition_values_,
-                                                                 {mock_environment_});
+                                                                 {fake_environment_});
 
   distance_condition.IsSatisfied();
 
@@ -83,7 +84,7 @@ TEST_F(
   condition_values_.rule = rule;
 
   OpenScenarioEngine::v1_3::DistanceCondition distance_condition(condition_values_,
-                                                                 {mock_environment_});
+                                                                 {fake_environment_});
   ASSERT_TRUE(distance_condition.IsSatisfied());
 }
 
@@ -94,7 +95,7 @@ TEST_F(
   condition_values_.freespace = true;
 
   OpenScenarioEngine::v1_3::DistanceCondition distance_condition(condition_values_,
-                                                                 {mock_environment_});
+                                                                 {fake_environment_});
   ASSERT_TRUE(distance_condition.IsSatisfied());
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kError);
@@ -109,6 +110,6 @@ TEST_F(
   condition_values_.rule = rule;
 
   OpenScenarioEngine::v1_3::DistanceCondition distance_condition(condition_values_,
-                                                                 {mock_environment_});
+                                                                 {fake_environment_});
   ASSERT_FALSE(distance_condition.IsSatisfied());
 }
diff --git a/engine/tests/Storyboard/ByEntityCondition/ReachPositionConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/ReachPositionConditionTest.cpp
index 00237a12f8588e961f756382fbaee365eba713a5..074889829d64cabba6488ebebac897dd03a7e34d 100644
--- a/engine/tests/Storyboard/ByEntityCondition/ReachPositionConditionTest.cpp
+++ b/engine/tests/Storyboard/ByEntityCondition/ReachPositionConditionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,10 +8,10 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
 #include "Storyboard/ByEntityCondition/ReachPositionCondition_impl.h"
+#include "TestUtils.h"
 
 using namespace mantle_api;
 using namespace units::literals;
@@ -21,8 +21,9 @@ TEST(ReachPositionCondition_UnitTest, GivenPositionWithinTolerance_ReturnsTrue)
   OpenScenarioEngine::v1_3::ReachPositionCondition
       reachPositionCondition({{""},
                               4,
-                              []() { return std::make_optional<Pose>({{1.0_m, 2.0_m, 3.0_m}, {}}); }},
-                             {std::make_shared<MockEnvironment>()});
+                              []()
+                              { return std::make_optional<Pose>({{1.0_m, 2.0_m, 3.0_m}, {}}); }},
+                             {std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>()});
 
   ASSERT_TRUE(reachPositionCondition.IsSatisfied());
 }
@@ -32,8 +33,9 @@ TEST(ReachPositionCondition_UnitTest, GivenPositionOutsideTolerance_ReturnFalse)
   OpenScenarioEngine::v1_3::ReachPositionCondition
       reachPositionCondition({{""},
                               1.2,
-                              []() { return std::make_optional<Pose>({{1.0_m, 2.0_m, 3.0_m}, {}}); }},
-                             {std::make_shared<MockEnvironment>()});
+                              []()
+                              { return std::make_optional<Pose>({{1.0_m, 2.0_m, 3.0_m}, {}}); }},
+                             {std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>()});
 
   ASSERT_FALSE(reachPositionCondition.IsSatisfied());
-}
\ No newline at end of file
+}
diff --git a/engine/tests/Storyboard/ByEntityCondition/RelativeDistanceConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/RelativeDistanceConditionTest.cpp
index a51170060fd7dfd1a48fb34ebbbb170b4a8214f2..307b92e86d937015c0e563d475d9875581aa692f 100644
--- a/engine/tests/Storyboard/ByEntityCondition/RelativeDistanceConditionTest.cpp
+++ b/engine/tests/Storyboard/ByEntityCondition/RelativeDistanceConditionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -9,11 +9,11 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioRule.h"
 #include "Storyboard/ByEntityCondition/RelativeDistanceCondition_impl.h"
+#include "TestUtils.h"
 #include "TestUtils/TestLogger.h"
 
 using namespace mantle_api;
@@ -29,15 +29,15 @@ class RelativeDistanceConditionTestFixture : public ::testing::Test
 protected:
   void SetUp() override
   {
-    mock_environment_ = std::make_shared<MockEnvironment>();
+    fake_environment_ = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
   }
 
   mantle_api::MockVehicle& GET_VEHICLE_MOCK_WITH_NAME(const std::string& name)
   {
-    return dynamic_cast<mantle_api::MockVehicle&>(mock_environment_->GetEntityRepository().Get(name).value().get());
+    return dynamic_cast<mantle_api::MockVehicle&>(*fake_environment_->GetEntityRepository().Get(name).lock());
   }
 
-  std::shared_ptr<MockEnvironment> mock_environment_;
+  std::shared_ptr<testing::OpenScenarioEngine::v1_3::FakeEnvironment> fake_environment_;
   OpenScenarioEngine::v1_3::RelativeDistanceCondition::Values condition_values_{.triggeringEntity = "vehicle1",
                                                                                 .freespace = true,
                                                                                 .entityRef = "Ego",
@@ -60,7 +60,7 @@ TEST_F(RelativeDistanceConditionTestFixture, GivenConditionWithLateralDistanceWi
       .WillRepeatedly(Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
 
   OpenScenarioEngine::v1_3::RelativeDistanceCondition relative_distance_condition(condition_values_,
-                                                                                  {mock_environment_});
+                                                                                  {fake_environment_});
   // Note: The actual return value of the condition is not being checked,
   // as the MockEnvironment cannot calculate relative distances correctly.
   [[maybe_unused]] auto _ = relative_distance_condition.IsSatisfied();
@@ -82,7 +82,7 @@ TEST_F(
       .WillRepeatedly(Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
 
   OpenScenarioEngine::v1_3::RelativeDistanceCondition relative_distance_condition(condition_values_,
-                                                                                  {mock_environment_});
+                                                                                  {fake_environment_});
   // Note: The actual return value of the condition is not being checked,
   // as the MockEnvironment cannot calculate relative distances correctly.
   [[maybe_unused]] auto _ = relative_distance_condition.IsSatisfied();
@@ -102,7 +102,7 @@ TEST_F(
       .WillRepeatedly(Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
 
   OpenScenarioEngine::v1_3::RelativeDistanceCondition relative_distance_condition(condition_values_,
-                                                                                  {mock_environment_});
+                                                                                  {fake_environment_});
   // Note: The actual return value of the condition is not being checked,
   // as the MockEnvironment cannot calculate relative distances correctly.
   [[maybe_unused]] auto _ = relative_distance_condition.IsSatisfied();
@@ -114,10 +114,10 @@ protected:
   void SetUp() override
   {
     LOGGER = std::make_unique<testing::OpenScenarioEngine::v1_3::TestLogger>();
-    mock_environment_ = std::make_shared<MockEnvironment>();
+    fake_environment_ = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
   }
 
-  std::shared_ptr<MockEnvironment> mock_environment_;
+  std::shared_ptr<testing::OpenScenarioEngine::v1_3::FakeEnvironment> fake_environment_;
   OpenScenarioEngine::v1_3::RelativeDistanceCondition::Values condition_values_{.triggeringEntity = "vehicle1",
                                                                                 .freespace = true,
                                                                                 .entityRef = "Ego",
@@ -138,7 +138,7 @@ TEST_P(
   std::tie(condition_values_.coordinateSystem, condition_values_.freespace, condition_values_.relativeDistanceType) = GetParam();
 
   OpenScenarioEngine::v1_3::RelativeDistanceCondition relative_distance_condition(condition_values_,
-                                                                                  {mock_environment_});
+                                                                                  {fake_environment_});
   EXPECT_FALSE(relative_distance_condition.IsSatisfied());
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kError);
diff --git a/engine/tests/Storyboard/ByEntityCondition/RelativeSpeedConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/RelativeSpeedConditionTest.cpp
index 7ef1585a160769917007da6109937f5234ef2ba0..14b85fe5fabe8567695f621dee08bdda206db374 100644
--- a/engine/tests/Storyboard/ByEntityCondition/RelativeSpeedConditionTest.cpp
+++ b/engine/tests/Storyboard/ByEntityCondition/RelativeSpeedConditionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -9,13 +9,13 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioRule.h"
 #include "Storyboard/ByEntityCondition/RelativeSpeedCondition_impl.h"
+#include "TestUtils.h"
 
-using namespace mantle_api;
+using namespace testing::OpenScenarioEngine::v1_3;
 using units::literals::operator""_mps;
 
 class RelativeSpeedConditionTestFixture : public ::testing::Test
@@ -23,10 +23,10 @@ class RelativeSpeedConditionTestFixture : public ::testing::Test
 protected:
   void SetUp() override
   {
-    mock_environment_ = std::make_shared<MockEnvironment>();
+    fake_environment_ = std::make_shared<FakeEnvironment>();
   }
 
-  std::shared_ptr<MockEnvironment> mock_environment_;
+  std::shared_ptr<FakeEnvironment> fake_environment_;
   OpenScenarioEngine::v1_3::RelativeSpeedCondition::Values condition_values_{.triggeringEntity = "vehicle1",
                                                                              .entityRef = "Ego",
                                                                              .rule = OpenScenarioEngine::v1_3::Rule(NET_ASAM_OPENSCENARIO::v1_3::Rule::RuleEnum::EQUAL_TO, 10.0)};
@@ -35,7 +35,7 @@ protected:
 TEST_F(RelativeSpeedConditionTestFixture, GivenMockedEntities_WhenCheckingCondition_ThenDoesNotThrow)
 {
   OpenScenarioEngine::v1_3::RelativeSpeedCondition relativeSpeedCondition(condition_values_,
-                                                                          {mock_environment_});
+                                                                          {fake_environment_});
 
   EXPECT_NO_THROW([[maybe_unused]] auto _ = relativeSpeedCondition.IsSatisfied());
 }
@@ -43,14 +43,14 @@ TEST_F(RelativeSpeedConditionTestFixture, GivenMockedEntities_WhenCheckingCondit
 TEST_F(RelativeSpeedConditionTestFixture, GivenSatisfcatoryVelocities_WhenCheckingCondition_ThenReturnsTrue)
 {
   OpenScenarioEngine::v1_3::RelativeSpeedCondition relativeSpeedCondition(condition_values_,
-                                                                          {mock_environment_});
+                                                                          {fake_environment_});
 
   // Note: It would be better to have to two distinct ON_CALL statements, one for each entity/MockVehicle to define their respective velocities.
   // However, this is currently not possible, as the MockEntityRepository always returns an empty entity on Get().
   // This could be circumvented by returning a proper entity via the mocked GetImpl() function, but it is not straightforward to create such an entity,
   // as it would have to implement the complete IVehicle interface.
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(mock_environment_->GetEntityRepository().Get(condition_values_.entityRef).value().get()),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*fake_environment_->GetEntityRepository().Get(condition_values_.entityRef).lock()),
               GetVelocity())
       .WillOnce(::testing::Return(mantle_api::Vec3<units::velocity::meters_per_second_t>{20.0_mps, 0_mps, 0_mps}))
       .WillOnce(::testing::Return(mantle_api::Vec3<units::velocity::meters_per_second_t>{10.0_mps, 0_mps, 0_mps}));
@@ -61,17 +61,17 @@ TEST_F(RelativeSpeedConditionTestFixture, GivenSatisfcatoryVelocities_WhenChecki
 TEST_F(RelativeSpeedConditionTestFixture, GivenUnsatisfcatoryVelocities_WhenCheckingCondition_ThenReturnsFalse)
 {
   OpenScenarioEngine::v1_3::RelativeSpeedCondition relativeSpeedCondition(condition_values_,
-                                                                          {mock_environment_});
+                                                                          {fake_environment_});
 
   // Note: It would be better to have to two distinct ON_CALL statements, one for each entity/MockVehicle to define their respective velocities.
   // However, this is currently not possible, as the MockEntityRepository always returns an empty entity on Get().
   // This could be circumvented by returning a proper entity via the mocked GetImpl() function, but it is not straightforward to create such an entity,
   // as it would have to implement the complete IVehicle interface.
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(mock_environment_->GetEntityRepository().Get(condition_values_.entityRef).value().get()),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*fake_environment_->GetEntityRepository().Get(condition_values_.entityRef).lock()),
               GetVelocity())
       .WillOnce(::testing::Return(mantle_api::Vec3<units::velocity::meters_per_second_t>{15.0_mps, 0_mps, 0_mps}))
       .WillOnce(::testing::Return(mantle_api::Vec3<units::velocity::meters_per_second_t>{10.0_mps, 0_mps, 0_mps}));
 
   EXPECT_THAT(relativeSpeedCondition.IsSatisfied(), false);
-}
\ No newline at end of file
+}
diff --git a/engine/tests/Storyboard/ByEntityCondition/SpeedConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/SpeedConditionTest.cpp
index 205820fda0e04cae2458b1b0718adc506ca592db..db058103198ea09468f34cfe5be0059672fb9cc9 100644
--- a/engine/tests/Storyboard/ByEntityCondition/SpeedConditionTest.cpp
+++ b/engine/tests/Storyboard/ByEntityCondition/SpeedConditionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2023-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,12 +8,12 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 #include <openScenarioLib/generated/v1_3/impl/ApiClassImplV1_3.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioRule.h"
 #include "Storyboard/ByEntityCondition/SpeedCondition.h"
+#include "TestUtils.h"
 #include "TestUtils/FakeCompositeNode.h"
 
 using namespace mantle_api;
@@ -24,13 +24,13 @@ class SpeedConditionTestFixture : public ::testing::Test
 protected:
   void SetUp() override
   {
-    mock_environment_ = std::make_shared<MockEnvironment>();
+    fake_environment_ = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
     osc_api_speed_condition_ = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::SpeedConditionImpl>();
     osc_api_speed_condition_->SetRule(NET_ASAM_OPENSCENARIO::v1_3::Rule::RuleEnum::LESS_THAN);
     osc_api_speed_condition_->SetValue(1.0);
   }
 
-  std::shared_ptr<MockEnvironment> mock_environment_;
+  std::shared_ptr<testing::OpenScenarioEngine::v1_3::FakeEnvironment> fake_environment_;
   OpenScenarioEngine::v1_3::SpeedCondition::Values condition_values_{.triggeringEntity = "vehicle1",
                                                                      .rule = OpenScenarioEngine::v1_3::Rule(NET_ASAM_OPENSCENARIO::v1_3::Rule::RuleEnum::LESS_THAN, 1.0)};
   std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::SpeedConditionImpl> osc_api_speed_condition_{nullptr};
@@ -38,7 +38,7 @@ protected:
 
 TEST_F(SpeedConditionTestFixture, GivenSpeedConditionNodeWithoutEntityBrokerInParentBlackboard_WhenCheckingCondition_ThenDoesNotThrow)
 {
-  auto fake_composite_node = testing::OpenScenarioEngine::v1_3::FakeCompositeNode(mock_environment_);
+  auto fake_composite_node = testing::OpenScenarioEngine::v1_3::FakeCompositeNode(fake_environment_);
   auto speed_condition = std::make_shared<OpenScenarioEngine::v1_3::Node::SpeedCondition>(osc_api_speed_condition_);
   fake_composite_node.addChild(speed_condition);
   fake_composite_node.distributeData();
@@ -49,7 +49,7 @@ TEST_F(SpeedConditionTestFixture, GivenSpeedConditionNodeWithoutEntityBrokerInPa
 
 TEST_F(SpeedConditionTestFixture, GivenSpeedConditionNodeWithEntityBrokerInParentBlackboard_WhenCheckingCondition_ThenEntityBrokerContainsTriggeringEntity)
 {
-  auto fake_composite_node = testing::OpenScenarioEngine::v1_3::FakeCompositeNode(mock_environment_, true);
+  auto fake_composite_node = testing::OpenScenarioEngine::v1_3::FakeCompositeNode(fake_environment_, true);
   auto speed_condition = std::make_shared<OpenScenarioEngine::v1_3::Node::SpeedCondition>(osc_api_speed_condition_);
   fake_composite_node.addChild(speed_condition);
   fake_composite_node.distributeData();
@@ -62,7 +62,7 @@ TEST_F(SpeedConditionTestFixture, GivenSpeedConditionNodeWithEntityBrokerInParen
 TEST_F(SpeedConditionTestFixture, GivenSpeedConditionImplWithMockedEntities_WhenCheckingCondition_ThenDoesNotThrow)
 {
   OpenScenarioEngine::v1_3::SpeedCondition speedCondition(condition_values_,
-                                                          {mock_environment_});
+                                                          {fake_environment_});
 
   EXPECT_NO_THROW([[maybe_unused]] auto _ = speedCondition.IsSatisfied());
 }
@@ -70,9 +70,9 @@ TEST_F(SpeedConditionTestFixture, GivenSpeedConditionImplWithMockedEntities_When
 TEST_F(SpeedConditionTestFixture, GivenSpeedConditionImplWithSatisfcatoryVelocity_WhenCheckingCondition_ThenReturnsTrue)
 {
   OpenScenarioEngine::v1_3::SpeedCondition speedCondition(condition_values_,
-                                                          {mock_environment_});
+                                                          {fake_environment_});
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(mock_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity).value().get()),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(*fake_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity).lock()),
               GetVelocity())
       .WillOnce(::testing::Return(mantle_api::Vec3<units::velocity::meters_per_second_t>{0.0_mps, 0_mps, 0_mps}));
 
@@ -82,9 +82,9 @@ TEST_F(SpeedConditionTestFixture, GivenSpeedConditionImplWithSatisfcatoryVelocit
 TEST_F(SpeedConditionTestFixture, GivenSpeedConditionImplWithUnsatisfcatoryVelocity_WhenCheckingCondition_ThenReturnsFalse)
 {
   OpenScenarioEngine::v1_3::SpeedCondition speedCondition(condition_values_,
-                                                          {mock_environment_});
+                                                          {fake_environment_});
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(mock_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity).value().get()),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle &>(*fake_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity).lock()),
               GetVelocity())
       .WillOnce(::testing::Return(mantle_api::Vec3<units::velocity::meters_per_second_t>{10.0_mps, 0_mps, 0_mps}));
 
diff --git a/engine/tests/Storyboard/ByEntityCondition/TimeHeadwayConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/TimeHeadwayConditionTest.cpp
index 89ee7348ae99dd8733060e80c08ae41ed62b6aae..e325b35b9b0c36a2e8378320c1504423b532fa42 100644
--- a/engine/tests/Storyboard/ByEntityCondition/TimeHeadwayConditionTest.cpp
+++ b/engine/tests/Storyboard/ByEntityCondition/TimeHeadwayConditionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -9,11 +9,11 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioRule.h"
 #include "Storyboard/ByEntityCondition/TimeHeadwayCondition_impl.h"
+#include "TestUtils.h"
 #include "TestUtils/TestLogger.h"
 #include "Utils/Constants.h"
 
@@ -32,10 +32,10 @@ protected:
   void SetUp() override
   {
     LOGGER = std::make_unique<testing::OpenScenarioEngine::v1_3::TestLogger>();
-    mock_environment_ = std::make_shared<MockEnvironment>();
+    fake_environment_ = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
   }
 
-  std::shared_ptr<MockEnvironment> mock_environment_;
+  std::shared_ptr<testing::OpenScenarioEngine::v1_3::FakeEnvironment> fake_environment_;
   OpenScenarioEngine::v1_3::TimeHeadwayCondition::Values condition_values_{.triggeringEntity = "Vehicle1",
                                                                            .alongRoute = false,
                                                                            .freespace = false,
@@ -52,7 +52,7 @@ TEST_F(TimeHeadwayConditionTestFixture,
   condition_values_.relativeDistanceType = OpenScenarioEngine::v1_3::RelativeDistanceType::kLateral;
 
   auto time_headway_condition = OpenScenarioEngine::v1_3::TimeHeadwayCondition(condition_values_,
-                                                                               {mock_environment_});
+                                                                               {fake_environment_});
   EXPECT_FALSE(time_headway_condition.IsSatisfied());
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kError);
@@ -65,7 +65,7 @@ TEST_F(TimeHeadwayConditionTestFixture,
   condition_values_.relativeDistanceType = OpenScenarioEngine::v1_3::RelativeDistanceType::kEuclidian_distance;
 
   auto time_headway_condition = OpenScenarioEngine::v1_3::TimeHeadwayCondition(condition_values_,
-                                                                               {mock_environment_});
+                                                                               {fake_environment_});
   EXPECT_FALSE(time_headway_condition.IsSatisfied());
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kError);
@@ -78,7 +78,7 @@ TEST_F(TimeHeadwayConditionTestFixture,
   condition_values_.coordinateSystem = OpenScenarioEngine::v1_3::CoordinateSystem::kTrajectory;
 
   auto time_headway_condition = OpenScenarioEngine::v1_3::TimeHeadwayCondition(condition_values_,
-                                                                               {mock_environment_});
+                                                                               {fake_environment_});
   EXPECT_FALSE(time_headway_condition.IsSatisfied());
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kError);
@@ -91,7 +91,7 @@ TEST_F(TimeHeadwayConditionTestFixture,
   condition_values_.coordinateSystem = OpenScenarioEngine::v1_3::CoordinateSystem::kRoad;
 
   auto time_headway_condition = OpenScenarioEngine::v1_3::TimeHeadwayCondition(condition_values_,
-                                                                               {mock_environment_});
+                                                                               {fake_environment_});
   EXPECT_FALSE(time_headway_condition.IsSatisfied());
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kError);
@@ -103,14 +103,14 @@ TEST_F(TimeHeadwayConditionTestFixture,
 {
   condition_values_.coordinateSystem = OpenScenarioEngine::v1_3::CoordinateSystem::kLane;
 
-  auto& mocked_query_service = dynamic_cast<const mantle_api::MockQueryService&>(mock_environment_->GetQueryService());
+  auto& mocked_query_service = dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_environment_->GetQueryService());
 
   EXPECT_CALL(mocked_query_service, GetLongitudinalLaneDistanceBetweenPositions(_, _))
       .Times(1)
       .WillRepeatedly(Return(std::nullopt));
 
   auto time_headway_condition = OpenScenarioEngine::v1_3::TimeHeadwayCondition(condition_values_,
-                                                                               {mock_environment_});
+                                                                               {fake_environment_});
 
   EXPECT_THROW(time_headway_condition.IsSatisfied(), std::runtime_error);
 }
@@ -125,15 +125,15 @@ TEST_F(
   condition_values_.rule = rule;
   condition_values_.coordinateSystem = OpenScenarioEngine::v1_3::CoordinateSystem::kEntity;
 
-  auto& mocked_geo_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*(mock_environment_->GetGeometryHelper()));
-  auto& mocked_entity = dynamic_cast<mantle_api::MockVehicle&>(mock_environment_->GetEntityRepository().Get("").value().get());
+  auto& mocked_geo_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*(fake_environment_->GetGeometryHelper()));
+  auto& mocked_entity = dynamic_cast<mantle_api::MockVehicle&>(*fake_environment_->GetEntityRepository().Get("").lock());
   EXPECT_CALL(mocked_geo_helper, TranslateGlobalPositionLocally(_, _, _))
       .WillRepeatedly(Return(mantle_api::Vec3<units::length::meter_t>{10.0_m, 0_m, 0_m}));
   EXPECT_CALL(mocked_entity, GetVelocity())
       .WillOnce(Return(TriggeringEntityVelocity{0.0_mps, 0.0_mps, 0.0_mps}));
 
   auto time_headway_condition = OpenScenarioEngine::v1_3::TimeHeadwayCondition(condition_values_,
-                                                                               {mock_environment_});
+                                                                               {fake_environment_});
 
   EXPECT_EQ(time_headway_condition.IsSatisfied(), true);
 }
@@ -208,8 +208,8 @@ TEST_P(TimeHeadwayConditionTestForCoordinateSystem,
   condition_values_.rule = rule;
   condition_values_.coordinateSystem = OpenScenarioEngine::v1_3::CoordinateSystem::kEntity;
 
-  auto& mocked_geo_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*(mock_environment_->GetGeometryHelper()));
-  auto& mocked_entity = dynamic_cast<mantle_api::MockVehicle&>(mock_environment_->GetEntityRepository().Get("").value().get());
+  auto& mocked_geo_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*(fake_environment_->GetGeometryHelper()));
+  auto& mocked_entity = dynamic_cast<mantle_api::MockVehicle&>(*fake_environment_->GetEntityRepository().Get("").lock());
 
   // Test though stubbed function TranslateGlobalPositionLocally that is used by both
   // CalculateLongitudinalFreeSpaceDistance and CalculateRelativeLongitudinalDistance
@@ -218,7 +218,7 @@ TEST_P(TimeHeadwayConditionTestForCoordinateSystem,
   EXPECT_CALL(mocked_entity, GetVelocity()).WillOnce(Return(triggering_entity_velocity_));
 
   auto time_headway_condition = OpenScenarioEngine::v1_3::TimeHeadwayCondition(condition_values_,
-                                                                               {mock_environment_});
+                                                                               {fake_environment_});
 
   EXPECT_EQ(time_headway_condition.IsSatisfied(), expected_satisfied_status_);
 }
@@ -230,9 +230,9 @@ TEST_P(TimeHeadwayConditionTestForCoordinateSystemWithFreespaceTrue,
   condition_values_.rule = rule;
   condition_values_.coordinateSystem = OpenScenarioEngine::v1_3::CoordinateSystem::kLane;
 
-  auto& mocked_query_service = dynamic_cast<const mantle_api::MockQueryService&>(mock_environment_->GetQueryService());
-  auto& mocked_entity = dynamic_cast<mantle_api::MockVehicle&>(mock_environment_->GetEntityRepository().Get("").value().get());
-  auto& mocked_geo_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*(mock_environment_->GetGeometryHelper()));
+  auto& mocked_query_service = dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_environment_->GetQueryService());
+  auto& mocked_entity = dynamic_cast<mantle_api::MockVehicle&>(*fake_environment_->GetEntityRepository().Get("").lock());
+  auto& mocked_geo_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*(fake_environment_->GetGeometryHelper()));
 
   EXPECT_CALL(mocked_entity, GetVelocity()).WillOnce(Return(triggering_entity_velocity_));
 
@@ -261,7 +261,7 @@ TEST_P(TimeHeadwayConditionTestForCoordinateSystemWithFreespaceTrue,
       .WillRepeatedly(Return(other_corner));
 
   auto time_headway_condition = OpenScenarioEngine::v1_3::TimeHeadwayCondition(condition_values_,
-                                                                               {mock_environment_});
+                                                                               {fake_environment_});
 
   EXPECT_EQ(time_headway_condition.IsSatisfied(), expected_satisfied_status_);
 }
@@ -273,8 +273,8 @@ TEST_P(TimeHeadwayConditionTestForCoordinateSystemWithFreespaceFalse,
   condition_values_.rule = rule;
   condition_values_.coordinateSystem = OpenScenarioEngine::v1_3::CoordinateSystem::kLane;
 
-  auto& mocked_query_service = dynamic_cast<const mantle_api::MockQueryService&>(mock_environment_->GetQueryService());
-  auto& mocked_entity = dynamic_cast<mantle_api::MockVehicle&>(mock_environment_->GetEntityRepository().Get("").value().get());
+  auto& mocked_query_service = dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_environment_->GetQueryService());
+  auto& mocked_entity = dynamic_cast<mantle_api::MockVehicle&>(*fake_environment_->GetEntityRepository().Get("").lock());
 
   EXPECT_CALL(mocked_entity, GetVelocity()).WillOnce(Return(triggering_entity_velocity_));
 
@@ -282,7 +282,7 @@ TEST_P(TimeHeadwayConditionTestForCoordinateSystemWithFreespaceFalse,
       .WillOnce(Return(relative_distance_));
 
   auto time_headway_condition = OpenScenarioEngine::v1_3::TimeHeadwayCondition(condition_values_,
-                                                                               {mock_environment_});
+                                                                               {fake_environment_});
 
   EXPECT_EQ(time_headway_condition.IsSatisfied(), expected_satisfied_status_);
 }
diff --git a/engine/tests/Storyboard/ByEntityCondition/TimeToCollisionConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/TimeToCollisionConditionTest.cpp
index 59d662a67b957cad904c72c3b3286a5a1bd4121d..a7e51cac47cc71c179decc380ac556e106b29d96 100644
--- a/engine/tests/Storyboard/ByEntityCondition/TimeToCollisionConditionTest.cpp
+++ b/engine/tests/Storyboard/ByEntityCondition/TimeToCollisionConditionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -9,11 +9,11 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioRule.h"
 #include "Storyboard/ByEntityCondition/TimeToCollisionCondition_impl.h"
+#include "TestUtils.h"
 #include "TestUtils/TestLogger.h"
 
 using namespace mantle_api;
@@ -28,10 +28,10 @@ protected:
   void SetUp() override
   {
     LOGGER = std::make_unique<testing::OpenScenarioEngine::v1_3::TestLogger>();
-    mock_environment_ = std::make_shared<MockEnvironment>();
+    fake_environment_ = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
   }
 
-  std::shared_ptr<MockEnvironment> mock_environment_;
+  std::shared_ptr<testing::OpenScenarioEngine::v1_3::FakeEnvironment> fake_environment_;
 
   OpenScenarioEngine::v1_3::TimeToCollisionCondition::Values condition_values_{
       .triggeringEntity = "vehicle1",
@@ -48,7 +48,7 @@ protected:
 TEST_F(TimeToCollisionConditionTestFixture, GivenEmptyTtcTarget_WhenCheckingCondition_ThenThrows)
 {
   OpenScenarioEngine::v1_3::TimeToCollisionCondition timeToCollisionCondition(condition_values_,
-                                                                              {mock_environment_});
+                                                                              {fake_environment_});
 
   EXPECT_THROW(std::ignore = timeToCollisionCondition.IsSatisfied(), std::runtime_error);
 }
@@ -60,7 +60,7 @@ TEST_F(TimeToCollisionConditionTestFixture, GivenPoseWithTtcTarget_WhenCheckingC
   condition_values_.timeToCollisionConditionTarget = OpenScenarioEngine::v1_3::TimeToCollisionConditionTarget{pose};
 
   OpenScenarioEngine::v1_3::TimeToCollisionCondition timeToCollisionCondition(condition_values_,
-                                                                              {mock_environment_});
+                                                                              {fake_environment_});
 
   EXPECT_TRUE(timeToCollisionCondition.IsSatisfied());
 
@@ -73,7 +73,7 @@ TEST_F(TimeToCollisionConditionTestFixture, GivenInvalidPoseWithTtcTarget_WhenCh
   condition_values_.timeToCollisionConditionTarget = OpenScenarioEngine::v1_3::TimeToCollisionConditionTarget{std::nullopt};
 
   OpenScenarioEngine::v1_3::TimeToCollisionCondition timeToCollisionCondition(condition_values_,
-                                                                              {mock_environment_});
+                                                                              {fake_environment_});
 
   EXPECT_THROW(std::ignore = timeToCollisionCondition.IsSatisfied(), std::runtime_error);
 }
@@ -84,7 +84,7 @@ TEST_F(TimeToCollisionConditionTestFixture, GivenEntityWithTtcTarget_WhenCheckin
   condition_values_.timeToCollisionConditionTarget = OpenScenarioEngine::v1_3::TimeToCollisionConditionTarget{"ego"};
 
   OpenScenarioEngine::v1_3::TimeToCollisionCondition timeToCollisionCondition(condition_values_,
-                                                                              {mock_environment_});
+                                                                              {fake_environment_});
 
   EXPECT_TRUE(timeToCollisionCondition.IsSatisfied());
 
diff --git a/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp
index 07417f459115d64f525f2eff18ed7ecd47ce2ac1..e30de93d01b325110cf75fa25242606216ee284d 100644
--- a/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp
+++ b/engine/tests/Storyboard/ByEntityCondition/TraveledDistanceConditionTest.cpp
@@ -1,5 +1,6 @@
 /********************************************************************************
  * Copyright (c) 2025 Ansys, Inc.
+ * Copyright (c) 2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,10 +9,10 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
 #include "Storyboard/ByEntityCondition/TraveledDistanceCondition_impl.h"
+#include "TestUtils.h"
 #include "TestUtils/TestLogger.h"
 
 using namespace mantle_api;
@@ -25,12 +26,12 @@ class TraveledDistanceConditionTestFixture : public ::testing::Test
 protected:
   void SetUp() override
   {
-    mock_environment_ = std::make_shared<MockEnvironment>();
-    auto &entity_ref = mock_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity)->get();
-    entity_under_test_ = dynamic_cast<MockVehicle *>(&entity_ref);
+    fake_environment_ = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
+    auto entity_ref = fake_environment_->GetEntityRepository().Get(condition_values_.triggeringEntity).lock();
+    entity_under_test_ = dynamic_cast<MockVehicle *>(entity_ref.get());
   }
 
-  std::shared_ptr<MockEnvironment> mock_environment_;
+  std::shared_ptr<MockEnvironment> fake_environment_;
   MockVehicle *entity_under_test_;
   OpenScenarioEngine::v1_3::TraveledDistanceCondition::Values condition_values_{.triggeringEntity = "vehicle1",
                                                                                 .value = 5.0};
@@ -39,7 +40,7 @@ protected:
 TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithMockedEntities_WhenCheckingCondition_ThenDoesNotThrow)
 {
   OpenScenarioEngine::v1_3::TraveledDistanceCondition traveled_distance_condition(condition_values_,
-                                                                                  {mock_environment_});
+                                                                                  {fake_environment_});
 
   EXPECT_NO_THROW([[maybe_unused]] auto _ = traveled_distance_condition.IsSatisfied());
 }
@@ -47,7 +48,7 @@ TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithMockedEntities_Wh
 TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithNoMovement_WhenCheckingCondition_ThenReturnsFalse)
 {
   OpenScenarioEngine::v1_3::TraveledDistanceCondition traveled_distance_condition(condition_values_,
-                                                                                  {mock_environment_});
+                                                                                  {fake_environment_});
 
   EXPECT_CALL(*entity_under_test_, GetPosition())
       .WillOnce(Return(TestPosition{0_m, 0_m, 0_m}));
@@ -58,7 +59,7 @@ TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithNoMovement_WhenCh
 TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithSatisfcatoryTraveledDistance_WhenCheckingCondition_ThenReturnsTrue)
 {
   OpenScenarioEngine::v1_3::TraveledDistanceCondition traveled_distance_condition(condition_values_,
-                                                                                  {mock_environment_});
+                                                                                  {fake_environment_});
 
   EXPECT_CALL(*entity_under_test_, GetPosition())
       .WillOnce(Return(TestPosition{1_m, 1_m, 1_m}))
@@ -72,7 +73,7 @@ TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithSatisfcatoryTrave
 TEST_F(TraveledDistanceConditionTestFixture, GivenConditionWithUnsatisfcatoryTraveledDistance_WhenCheckingCondition_ThenReturnsFalse)
 {
   OpenScenarioEngine::v1_3::TraveledDistanceCondition traveled_distance_condition(condition_values_,
-                                                                                  {mock_environment_});
+                                                                                  {fake_environment_});
 
   EXPECT_CALL(*entity_under_test_, GetPosition())
       .WillOnce(Return(TestPosition{1_m, 1_m, 1_m}))
diff --git a/engine/tests/Storyboard/ByValueCondition/SimulationTimeConditionTest.cpp b/engine/tests/Storyboard/ByValueCondition/SimulationTimeConditionTest.cpp
index 093020209808e8eed0398ba9fb9aec7453317678..f4157770e31ee0d733d90bee81b68ea2197cbb04 100644
--- a/engine/tests/Storyboard/ByValueCondition/SimulationTimeConditionTest.cpp
+++ b/engine/tests/Storyboard/ByValueCondition/SimulationTimeConditionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -9,7 +9,7 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
+#include <MantleAPI/Execution/mock_environment.h>
 #include <gtest/gtest.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioRule.h"
@@ -61,4 +61,4 @@ TEST_F(SimulationTimeConditionTestFixture, GivenUnsatisfactorySimulationTime_Whe
                                                                             {mock_environment_});
 
   EXPECT_FALSE(simulationTimeCondition.IsSatisfied());
-}
\ No newline at end of file
+}
diff --git a/engine/tests/Storyboard/ByValueCondition/UserDefinedValueConditionTest.cpp b/engine/tests/Storyboard/ByValueCondition/UserDefinedValueConditionTest.cpp
index 36d2eec96668de8a5b48d91a47944c30543672e9..c1022857661feae0eafb422c8691b4ef9e7e6e76 100644
--- a/engine/tests/Storyboard/ByValueCondition/UserDefinedValueConditionTest.cpp
+++ b/engine/tests/Storyboard/ByValueCondition/UserDefinedValueConditionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -9,15 +9,15 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
+#include <MantleAPI/Execution/mock_environment.h>
 #include <gtest/gtest.h>
 
 #include "Storyboard/ByValueCondition/UserDefinedValueCondition_impl.h"
 
 using namespace mantle_api;
 using namespace units::literals;
-using testing::Return;
 using testing::_;
+using testing::Return;
 
 class UserDefinedValueConditionTestFixture : public ::testing::Test
 {
diff --git a/engine/tests/Storyboard/GenericAction/AcquirePositionActionTest.cpp b/engine/tests/Storyboard/GenericAction/AcquirePositionActionTest.cpp
index fca08970b1259ed9bef691ec52f070392a0a2658..1a67001153cf1ff1f18eae14f8ec4524879fcd2f 100644
--- a/engine/tests/Storyboard/GenericAction/AcquirePositionActionTest.cpp
+++ b/engine/tests/Storyboard/GenericAction/AcquirePositionActionTest.cpp
@@ -9,7 +9,7 @@
  ********************************************************************************/
 
 #include <MantleAPI/Common/position.h>
-#include <MantleAPI/Test/test_utils.h>
+#include <MantleAPI/Map/mock_route.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
@@ -17,6 +17,7 @@
 #include <stdexcept>
 
 #include "Storyboard/GenericAction/AcquirePositionAction_impl.h"
+#include "TestUtils.h"
 
 using testing::_;
 using testing::Return;
@@ -27,46 +28,48 @@ using testing::SizeIs;
 using namespace mantle_api;
 using namespace units::literals;
 using namespace OpenScenarioEngine::v1_3;
+using namespace testing::OpenScenarioEngine::v1_3;
 
 TEST(AcquirePositionAction, Stepping_FinishesImmediately)
 {
   AcquirePositionAction acquirePositionAction(
-      {std::vector<std::string>{}, []() -> mantle_api::Pose { return {}; }},
+      {std::vector<std::string>{}, []() -> mantle_api::Pose
+       { return {}; }},
       {std::make_shared<MockEnvironment>()});
   ASSERT_TRUE(acquirePositionAction.Step());
 }
 
 TEST(AcquirePositionAction, GivenValidTargetPosition_SetsRouteDefinitionFromCurrentToTargetPosition)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  auto& mockEntityRepository = static_cast<MockEntityRepository&>(mockEnvironment->GetEntityRepository());
-  const auto& host_optional = mockEntityRepository.GetHost();
-  ASSERT_TRUE(host_optional.has_value());
-  MockVehicle* mockHostVehiclePtr{dynamic_cast<MockVehicle*>(&host_optional.value().get())};
-  ASSERT_NE(mockHostVehiclePtr, nullptr) << "Failed to cast host to MockVehicle.";
-  MockVehicle& mockHostVehicle = *mockHostVehiclePtr;
-
-  RouteDefinition route_definition{};
-  EXPECT_CALL(*mockEnvironment, AssignRoute(_, _)).WillOnce(SaveArg<1>(&route_definition));
+  auto fakeEnvironment = std::make_shared<FakeEnvironment>();
+  auto& mockEntityRepository = static_cast<MockEntityRepository&>(fakeEnvironment->GetEntityRepository());
+  auto& mockHostVehicle = static_cast<MockVehicle&>(*mockEntityRepository.GetHost().lock());
 
   Vec3<units::length::meter_t> current_position{1.2_m, 2.3_m, 4.5_m};
   ON_CALL(mockHostVehicle, GetPosition()).WillByDefault(Return(current_position));
 
   Pose target_pose{{5.6_m, 6.7_m, 7.8_m}, {}};
   AcquirePositionAction acquirePositionAction(
-      {std::vector<std::string>{"Vehicle1"}, [&] { return target_pose; }},
-      {mockEnvironment});
+      {std::vector<std::string>{"Vehicle1"}, [&]
+       { return target_pose; }},
+      {fakeEnvironment});
+
+  RoutingDefinition expected_routing_definition;
+  expected_routing_definition.routing_waypoints.push_back({current_position, RoutingStrategy::kShortest});
+  expected_routing_definition.routing_waypoints.push_back({target_pose.position, RoutingStrategy::kShortest});
+  std::shared_ptr<mantle_api::MockRoute> mock_route{std::make_shared<mantle_api::MockRoute>()};
+  EXPECT_CALL(dynamic_cast<mantle_api::MockRouteRepository&>(fakeEnvironment->GetRouteRepository()), Create(_, expected_routing_definition)).WillOnce([mock_route](testing::Unused, testing::Unused)
+                                                                                                                                                      { return mock_route; });
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*fakeEnvironment->GetEntityRepository().Get("Vehicle1").lock()), SetRoute(_));
 
   acquirePositionAction.Step();
-  ASSERT_THAT(route_definition.waypoints, SizeIs(2));
-  EXPECT_THAT(route_definition.waypoints[0].waypoint, current_position);
-  EXPECT_THAT(route_definition.waypoints[1].waypoint, target_pose.position);
 }
 
 TEST(AcquirePositionAction, GivenInvalidTargetPosition_Throws)
 {
   AcquirePositionAction acquirePositionAction(
-      {{{}, [] { return std::nullopt; }},
+      {{{}, []
+        { return std::nullopt; }},
        {std::make_shared<MockEnvironment>()}});
 
   ASSERT_THROW(acquirePositionAction.Step(), std::runtime_error);
diff --git a/engine/tests/Storyboard/GenericAction/ActivateControllerActionTest.cpp b/engine/tests/Storyboard/GenericAction/ActivateControllerActionTest.cpp
index d8f36438c199f7772857bd0cb570b74e42b30714..c68c4e9419c2249a061fbcfe027c966b1b27d0b3 100644
--- a/engine/tests/Storyboard/GenericAction/ActivateControllerActionTest.cpp
+++ b/engine/tests/Storyboard/GenericAction/ActivateControllerActionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2022-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2022-2025< Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,13 +8,11 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
-#include <MantleAPI/Traffic/i_controller.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
-#include "MantleAPI/Common/i_identifiable.h"
 #include "Storyboard/GenericAction/ActivateControllerAction_impl.h"
+#include "TestUtils.h"
 #include "TestUtils/MockControllerService.h"
 #include "gmock/gmock.h"
 
@@ -45,25 +43,25 @@ constexpr mantle_api::UniqueId TEST_CONTROLLER_ID{5678};
 const std::optional<std::string> TEST_CONTROLLER_REF{"TEST_CONTROLLER"};
 constexpr std::optional<bool> DONT_CARE{std::nullopt};
 
-class ActivateControllerAction : public testing::TestWithParam<ActivateControllerTestInputType>
+class ActivateControllerActionTest : public testing::TestWithParam<ActivateControllerTestInputType>
 {
 protected:
   /// The mantle mock returns a MockVehicle, regardless of the queried name!
   /// Get the entity, cast it and set the ID
   void SET_ENTITY_ID(mantle_api::UniqueId id)
   {
-    auto& entity = mock_environment_->GetEntityRepository().Get("DOES_NOT_MATTER").value().get();
+    auto& entity = *fake_environment_->GetEntityRepository().Get("DOES_NOT_MATTER").lock();
     auto& vehicle = dynamic_cast<mantle_api::MockVehicle&>(entity);
     ON_CALL(vehicle, GetUniqueId()).WillByDefault(Return(id));
   }
 
-  std::shared_ptr<mantle_api::MockEnvironment> mock_environment_{
-      std::make_shared<mantle_api::MockEnvironment>()};
+  std::shared_ptr<testing::OpenScenarioEngine::v1_3::FakeEnvironment> fake_environment_{
+      std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>()};
   std::shared_ptr<testing::OpenScenarioEngine::v1_3::MockControllerService> mock_controller_service_{
       std::make_shared<testing::OpenScenarioEngine::v1_3::MockControllerService>()};
 };
 
-TEST_P(ActivateControllerAction,
+TEST_P(ActivateControllerActionTest,
        GivenLongitudinalAndLateralControllerFlags_WhenActionIsStepped_ThenLongitudinalAndLateralControllersAreSetOnlyIfNecessaryAndActionFinishes)
 {
   auto [desired_lateral_state, desired_longitudinal_state] = GetParam();
@@ -75,7 +73,7 @@ TEST_P(ActivateControllerAction,
        .lateral_state = desired_lateral_state,
        .lighting = DONT_CARE,
        .longitudinal_state = desired_longitudinal_state},
-      {.environment = mock_environment_},
+      {.environment = fake_environment_},
       {.controllerService = mock_controller_service_}};
 
   mantle_api::MockController mockController;
@@ -103,5 +101,5 @@ TEST_P(ActivateControllerAction,
 }
 
 INSTANTIATE_TEST_SUITE_P(ActivateControllerActionCombinations,
-                         ActivateControllerAction,
+                         ActivateControllerActionTest,
                          kActivateControllerTestInputs);
diff --git a/engine/tests/Storyboard/GenericAction/AssignControllerActionTest.cpp b/engine/tests/Storyboard/GenericAction/AssignControllerActionTest.cpp
index a44aecf47ef57ead80bc812eaf6ca6cd58d6e29f..91625396b414d347c28da02bba3c7e1b63c78591 100644
--- a/engine/tests/Storyboard/GenericAction/AssignControllerActionTest.cpp
+++ b/engine/tests/Storyboard/GenericAction/AssignControllerActionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2022-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2022-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,11 +8,11 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <MantleAPI/Traffic/i_controller_config.h>
 #include <gtest/gtest.h>
 
 #include "Storyboard/GenericAction/AssignControllerAction_impl.h"
+#include "TestUtils.h"
 
 using testing::_;
 using testing::Return;
@@ -22,56 +22,56 @@ static constexpr bool DONT_CARE{};
 
 TEST(AssignControllerAction, AssignesControllerToEntity)
 {
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fakeEnvironment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
   mantle_api::ExternalControllerConfig controller;
 
-  mantle_api::MockController mockController;
-  ON_CALL(mockController, GetUniqueId()).WillByDefault(Return(1234));
+  auto mockController = std::make_shared<mantle_api::MockController>();
+  ON_CALL(*mockController, GetUniqueId()).WillByDefault(Return(mantle_api::UniqueId(1234)));
 
-  auto& mockControllerRepository = mockEnvironment->GetControllerRepository();
-  ON_CALL(mockControllerRepository, Create(_)).WillByDefault(ReturnRef(mockController));
+  auto& mockControllerRepository = fakeEnvironment->GetControllerRepository();
+  ON_CALL(mockControllerRepository, Create(_)).WillByDefault(Return(mockController));
 
-  EXPECT_CALL(*mockEnvironment, AddEntityToController(_, 1234));
+  EXPECT_CALL(*fakeEnvironment, AddEntityToController(_, mantle_api::UniqueId(1234)));
 
   OpenScenarioEngine::v1_3::AssignControllerAction assignControllerAction(
-      {{"Vehicle1"}, DONT_CARE, DONT_CARE, DONT_CARE, DONT_CARE, controller}, {mockEnvironment});
+      {{"Vehicle1"}, DONT_CARE, DONT_CARE, DONT_CARE, DONT_CARE, controller}, {fakeEnvironment});
   assignControllerAction.Step();
 }
 
 /// Test Stub. Activate once we know, how to apply lateral and longitudinal
 TEST(DISABLED_AssignControllerAction, GivenLateral_NotImplementedYet)
 {
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fakeEnvironment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
   mantle_api::ExternalControllerConfig controller;
 
-  mantle_api::MockController mockController;
-  ON_CALL(mockController, GetUniqueId()).WillByDefault(Return(1234));
+  auto mockController = std::make_shared<mantle_api::MockController>();
+  ON_CALL(*mockController, GetUniqueId()).WillByDefault(Return(mantle_api::UniqueId(1234)));
 
-  auto& mockControllerRepository = mockEnvironment->GetControllerRepository();
-  ON_CALL(mockControllerRepository, Create(_)).WillByDefault(ReturnRef(mockController));
+  auto& mockControllerRepository = fakeEnvironment->GetControllerRepository();
+  ON_CALL(mockControllerRepository, Create(_)).WillByDefault(Return(mockController));
 
-  EXPECT_CALL(*mockEnvironment, AddEntityToController(_, 1234));
+  EXPECT_CALL(*fakeEnvironment, AddEntityToController(_, mantle_api::UniqueId(1234)));
 
   OpenScenarioEngine::v1_3::AssignControllerAction assignControllerAction(
-      {{"Vehicle1"}, DONT_CARE, true, DONT_CARE, false, controller}, {mockEnvironment});
+      {{"Vehicle1"}, DONT_CARE, true, DONT_CARE, false, controller}, {fakeEnvironment});
   assignControllerAction.Step();
 }
 
 /// Test Stub. Activate once we know, how to apply lateral and longitudinal
 TEST(DISABLED_AssignControllerAction, GivenLongitudinal_NotImplementedYet)
 {
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fakeEnvironment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
   mantle_api::ExternalControllerConfig controller;
 
-  mantle_api::MockController mockController;
-  ON_CALL(mockController, GetUniqueId()).WillByDefault(Return(1234));
+  auto mockController = std::make_shared<mantle_api::MockController>();
+  ON_CALL(*mockController, GetUniqueId()).WillByDefault(Return(mantle_api::UniqueId(1234)));
 
-  auto& mockControllerRepository = mockEnvironment->GetControllerRepository();
-  ON_CALL(mockControllerRepository, Create(_)).WillByDefault(ReturnRef(mockController));
+  auto& mockControllerRepository = fakeEnvironment->GetControllerRepository();
+  ON_CALL(mockControllerRepository, Create(_)).WillByDefault(Return(mockController));
 
-  EXPECT_CALL(*mockEnvironment, AddEntityToController(_, 1234));
+  EXPECT_CALL(*fakeEnvironment, AddEntityToController(_, mantle_api::UniqueId(1234)));
 
   OpenScenarioEngine::v1_3::AssignControllerAction assignControllerAction(
-      {{"Vehicle1"}, DONT_CARE, false, DONT_CARE, true, controller}, {mockEnvironment});
+      {{"Vehicle1"}, DONT_CARE, false, DONT_CARE, true, controller}, {fakeEnvironment});
   assignControllerAction.Step();
 }
diff --git a/engine/tests/Storyboard/GenericAction/AssignRouteActionTest.cpp b/engine/tests/Storyboard/GenericAction/AssignRouteActionTest.cpp
index 48a1776ba9569727492617d36abcbbfe778a80d2..da33f15a0248ed28adf3879532694d467c223b76 100644
--- a/engine/tests/Storyboard/GenericAction/AssignRouteActionTest.cpp
+++ b/engine/tests/Storyboard/GenericAction/AssignRouteActionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -9,16 +9,16 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
+#include <MantleAPI/Map/mock_route.h>
 #include <gmock/gmock-matchers.h>
 #include <gtest/gtest.h>
 
-#include "builders/ActionBuilder.h"
-#include "builders/PositionBuilder.h"
 #include "Conversion/OscToMantle/ConvertScenarioRoute.h"
 #include "Storyboard/GenericAction/AssignRouteAction.h"
 #include "Storyboard/GenericAction/AssignRouteAction_impl.h"
 #include "TestUtils.h"
+#include "builders/ActionBuilder.h"
+#include "builders/PositionBuilder.h"
 #include "gmock/gmock.h"
 
 using namespace mantle_api;
@@ -27,137 +27,100 @@ using testing::NotNull;
 using testing::Return;
 using testing::SizeIs;
 using namespace units::literals;
-using testing::OpenScenarioEngine::v1_3::OpenScenarioEngineLibraryTestBase;
 using testing::OpenScenarioEngine::v1_3::FakeRootNode;
+using testing::OpenScenarioEngine::v1_3::OpenScenarioEngineLibraryTestBase;
 
 class AssignRouteActionTestFixture : public OpenScenarioEngineLibraryTestBase
 {
-  protected:
-    void SetUp() override { OpenScenarioEngineLibraryTestBase::SetUp(); }
 };
 
-MATCHER_P(IsRouteDefinitionSame, route_definition, "Waypoints or route strategy do not match")
-{
-    bool are_waypoints_equal = false;
-    bool are_route_strategies_equal = false;
-
-    for (size_t j = 0; j < route_definition.waypoints.
-
-                           size();
-
-         ++j)
-    {
-        are_waypoints_equal = (arg.waypoints.at(j).waypoint.x == route_definition.waypoints.at(j).waypoint.x &&
-                               arg.waypoints.at(j).waypoint.y == route_definition.waypoints.at(j).waypoint.y &&
-                               arg.waypoints.at(j).waypoint.z == route_definition.waypoints.at(j).waypoint.z);
-        are_route_strategies_equal =
-            (arg.waypoints.at(j).route_strategy == route_definition.waypoints.at(j).route_strategy);
-        if (are_waypoints_equal == true && are_route_strategies_equal == true)
-        {
-            continue;
-        }
-        else
-        {
-            return false;
-        }
-    }
-    return true;
-}
-
 TEST_F(AssignRouteActionTestFixture, GivenAssignRouteAction_WhenStartAction_ThenRouteAssignedAndNoExceptionInStep)
 {
-    using namespace testing::OpenScenarioEngine::v1_3;
+  using namespace testing::OpenScenarioEngine::v1_3;
 
-    auto fake_assign_route_action = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::AssignRouteActionImpl>();
+  auto fake_assign_route_action = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::AssignRouteActionImpl>();
 
-    auto route = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::RouteImpl>();
+  auto route = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::RouteImpl>();
+  std::string expected_name = "MyRoute";
+  route->SetName(expected_name);
+  route->SetClosed(true);
 
-    auto way_point_one = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::WaypointImpl>();
-    auto way_point_two = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::WaypointImpl>();
+  auto way_point_one = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::WaypointImpl>();
+  auto way_point_two = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::WaypointImpl>();
 
-    auto position_one = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::PositionImpl>();
-    auto position_two = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::PositionImpl>();
+  auto position_one = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::PositionImpl>();
+  auto position_two = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::PositionImpl>();
 
-    auto world_position_one = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::WorldPositionImpl>();
-    auto world_position_two = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::WorldPositionImpl>();
+  auto world_position_one = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::WorldPositionImpl>();
+  auto world_position_two = std::make_shared<NET_ASAM_OPENSCENARIO::v1_3::WorldPositionImpl>();
 
-    world_position_one->SetX(1.0);
-    world_position_one->SetY(0.0);
-    world_position_one->SetZ(0.0);
+  world_position_one->SetX(1.0);
+  world_position_one->SetY(0.0);
+  world_position_one->SetZ(0.0);
 
-    world_position_two->SetX(42.0);
-    world_position_two->SetY(0.0);
-    world_position_two->SetZ(10.0);
+  world_position_two->SetX(42.0);
+  world_position_two->SetY(0.0);
+  world_position_two->SetZ(10.0);
 
-    position_one->SetWorldPosition(world_position_one);
-    position_two->SetWorldPosition(world_position_two);
+  position_one->SetWorldPosition(world_position_one);
+  position_two->SetWorldPosition(world_position_two);
 
-    way_point_one->SetPosition(position_one);
-    way_point_one->SetRouteStrategy(NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum::FASTEST);
-    way_point_two->SetPosition(position_two);
-    way_point_two->SetRouteStrategy(NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum::SHORTEST);
+  way_point_one->SetPosition(position_one);
+  way_point_one->SetRouteStrategy(NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum::FASTEST);
+  way_point_two->SetPosition(position_two);
+  way_point_two->SetRouteStrategy(NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum::SHORTEST);
 
-    std::vector<std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::IWaypointWriter>> route_way_points = {way_point_one,
-                                                                                                   way_point_two};
-    route->SetWaypoints(route_way_points);
-    fake_assign_route_action->SetRoute(route);
+  std::vector<std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::IWaypointWriter>> route_way_points = {way_point_one,
+                                                                                                 way_point_two};
+  route->SetWaypoints(route_way_points);
+  fake_assign_route_action->SetRoute(route);
 
-    auto assign_route_action = std::make_shared<OpenScenarioEngine::v1_3::Node::AssignRouteAction>(fake_assign_route_action);
+  auto assign_route_action = std::make_shared<OpenScenarioEngine::v1_3::Node::AssignRouteAction>(fake_assign_route_action);
 
-    mantle_api::RouteDefinition expected_route_definition{};
-    expected_route_definition.waypoints.push_back(mantle_api::RouteWaypoint{
-        mantle_api::Vec3<units::length::meter_t>{1_m, 0_m, 0_m}, mantle_api::RouteStrategy::kFastest});
-    expected_route_definition.waypoints.push_back(mantle_api::RouteWaypoint{
-        mantle_api::Vec3<units::length::meter_t>{42_m, 0_m, 10_m}, mantle_api::RouteStrategy::kShortest});
+  mantle_api::RoutingDefinition expected_routing_definition{};
+  expected_routing_definition.is_looped = true;
+  expected_routing_definition.routing_waypoints.push_back(mantle_api::RoutingWaypoint{
+      mantle_api::Vec3<units::length::meter_t>{1_m, 0_m, 0_m}, mantle_api::RoutingStrategy::kFastest});
+  expected_routing_definition.routing_waypoints.push_back(mantle_api::RoutingWaypoint{
+      mantle_api::Vec3<units::length::meter_t>{42_m, 0_m, 10_m}, mantle_api::RoutingStrategy::kShortest});
 
-    EXPECT_CALL(*env_, AssignRoute(testing::_, IsRouteDefinitionSame(expected_route_definition)))
-        .WillOnce(testing::SaveArg<1>(&expected_route_definition));
+  EXPECT_CALL(dynamic_cast<mantle_api::MockRouteRepository&>(env_->GetRouteRepository()), Create(expected_name, expected_routing_definition));
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("Ego").lock()), SetRoute(_));
 
-    auto engine_abort_flags = std::make_shared<OpenScenarioEngine::v1_3::EngineAbortFlags>(OpenScenarioEngine::v1_3::EngineAbortFlags::kNoAbort);
-    auto entity_broker = std::make_shared<OpenScenarioEngine::v1_3::EntityBroker>(false);
-    entity_broker->add("Ego");
-    auto root_node = std::make_shared<FakeRootNode>(env_, engine_abort_flags, entity_broker);
-    root_node->setChild(assign_route_action);
-    root_node->distributeData();
-    EXPECT_NO_THROW(root_node->onInit());
-    EXPECT_NO_THROW(root_node->executeTick());
+  auto engine_abort_flags = std::make_shared<OpenScenarioEngine::v1_3::EngineAbortFlags>(OpenScenarioEngine::v1_3::EngineAbortFlags::kNoAbort);
+  auto entity_broker = std::make_shared<OpenScenarioEngine::v1_3::EntityBroker>(false);
+  entity_broker->add("Ego");
+  auto root_node = std::make_shared<FakeRootNode>(env_, engine_abort_flags, entity_broker);
+  root_node->setChild(assign_route_action);
+  root_node->distributeData();
+  EXPECT_NO_THROW(root_node->onInit());
+  EXPECT_NO_THROW(root_node->executeTick());
 }
 
-TEST(AssignRouteAction, IsStepped_ReturnsTrue)
+TEST(AssignRouteActionTest, IsStepped_ReturnsTrue)
 {
   OpenScenarioEngine::v1_3::AssignRouteAction assignRouteAction({std::vector<std::string>{"Vehicle1"},
                                                                  OpenScenarioEngine::v1_3::Route{}},
-                                                                {std::make_shared<MockEnvironment>()});
+                                                                {std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>()});
   ASSERT_TRUE(assignRouteAction.Step());
 }
 
-TEST(DISABLED_AssignRouteAction, GivenClosedRoute_NotImplementedYet)
-{
-  OpenScenarioEngine::v1_3::Route route{};
-  route.closed = true;
-  OpenScenarioEngine::v1_3::AssignRouteAction assignRouteAction({std::vector<std::string>{"Vehicle1"},
-                                                                 route},
-                                                                {std::make_shared<MockEnvironment>()});
-}
-
 TEST(AssignRouteAction, IsStepped_PropagatesWaypoints)
 {
   Vec3<units::length::meter_t> expected_position{1.2_m, 3.4_m, 5.6_m};
 
   OpenScenarioEngine::v1_3::Route route{};
-  route.waypoints.push_back(RouteWaypoint{expected_position, RouteStrategy::kUndefined});
+  route.waypoints.push_back(RoutingWaypoint{expected_position, RoutingStrategy::kUndefined});
 
-  mantle_api::RouteDefinition route_definition{};
-
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  EXPECT_CALL(*mockEnvironment, AssignRoute(_, _))
-      .WillOnce(testing::SaveArg<1>(&route_definition));
+  mantle_api::RoutingDefinition expected_routing_definition{};
+  expected_routing_definition.routing_waypoints.push_back({expected_position, RoutingStrategy::kUndefined});
+  auto fake_environment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
+  std::shared_ptr<mantle_api::MockRoute> mock_route{std::make_shared<mantle_api::MockRoute>()};
+  EXPECT_CALL(dynamic_cast<mantle_api::MockRouteRepository&>(fake_environment->GetRouteRepository()), Create(_, expected_routing_definition)).WillOnce([mock_route](testing::Unused, testing::Unused)
+                                                                                                                                                       { return mock_route; });
 
   OpenScenarioEngine::v1_3::AssignRouteAction assignRouteAction({{"Vehicle1"}, route},
-                                                                {mockEnvironment});
+                                                                {fake_environment});
 
   assignRouteAction.Step();
-
-  ASSERT_THAT(route_definition.waypoints, SizeIs(1));
-  EXPECT_THAT(route_definition.waypoints[0].waypoint, expected_position);
 }
diff --git a/engine/tests/Storyboard/GenericAction/EnvironmentActionTest.cpp b/engine/tests/Storyboard/GenericAction/EnvironmentActionTest.cpp
index 61dda5247a24aa91f4f3d3a047c20e1ee381e4f3..3ee68f6938c978fec7c3b17837176ccfda15495d 100644
--- a/engine/tests/Storyboard/GenericAction/EnvironmentActionTest.cpp
+++ b/engine/tests/Storyboard/GenericAction/EnvironmentActionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2024-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,7 +8,7 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
+#include <MantleAPI/Execution/mock_environment.h>
 #include <gmock/gmock-matchers.h>
 #include <gtest/gtest.h>
 
@@ -21,10 +21,12 @@ TEST(EnvironmentActionTest, GivenEnvironment_WhenSteppingEnvironmentAction_ThenE
   auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
 
   EXPECT_CALL(*mockEnvironment,
-              SetDateTime(testing::_)).Times(1);
+              SetDateTime(testing::_))
+      .Times(1);
 
   EXPECT_CALL(*mockEnvironment,
-              SetWeather(testing::_)).Times(1);
+              SetWeather(testing::_))
+      .Times(1);
 
   OpenScenarioEngine::v1_3::EnvironmentAction environment_action{{environment},
                                                                  {mockEnvironment}};
@@ -36,13 +38,14 @@ TEST(EnvironmentActionTest, GivenNullEnvironment_WhenSteppingEnvironmentAction_T
   auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
 
   EXPECT_CALL(*mockEnvironment,
-              SetDateTime(testing::_)).Times(0);
+              SetDateTime(testing::_))
+      .Times(0);
 
   EXPECT_CALL(*mockEnvironment,
-              SetWeather(testing::_)).Times(0);
+              SetWeather(testing::_))
+      .Times(0);
 
   OpenScenarioEngine::v1_3::EnvironmentAction environment_action{{},
                                                                  {mockEnvironment}};
   environment_action.Step();
 }
-
diff --git a/engine/tests/Storyboard/GenericAction/LightStateActionTests.cpp b/engine/tests/Storyboard/GenericAction/LightStateActionTests.cpp
index 2384fc47943c8932ee8a36025a5a4b5de90caf8a..c3361cfbe9db3d8701ef4dbe457131bd5dc2a3ff 100644
--- a/engine/tests/Storyboard/GenericAction/LightStateActionTests.cpp
+++ b/engine/tests/Storyboard/GenericAction/LightStateActionTests.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2024-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,12 +8,11 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
-#include "builders/ActionBuilder.h"
 #include "Storyboard/GenericAction/LightStateAction.h"
 #include "TestUtils.h"
+#include "builders/ActionBuilder.h"
 
 using namespace OpenScenarioEngine::v1_3;
 using namespace testing::OpenScenarioEngine::v1_3;
@@ -60,13 +59,13 @@ TEST_F(LightStateActionTestFixture,
   mantle_api::LightType expected_light_type = mantle_api::VehicleLightType::kIndicatorLeft;
   mantle_api::LightState expected_light_state = {mantle_api::LightMode::kFlashing};
 
-  EXPECT_CALL(*env_, UpdateControlStrategies(0, testing::_))
+  EXPECT_CALL(*env_, UpdateControlStrategies(mantle_api::UniqueId(0), testing::_))
       .Times(1)
       .WillRepeatedly([expected_light_type, expected_light_state](
-                          std::uint64_t controller_id,
+                          mantle_api::UniqueId entity_id,
                           std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies)
                       {
-                std::ignore = controller_id;
+                std::ignore = entity_id;
                 ASSERT_THAT(control_strategies, testing::SizeIs(1));
                 ASSERT_EQ(control_strategies.front()->type, mantle_api::ControlStrategyType::kUpdateVehicleLightStates);
                 auto control_strategy = dynamic_cast<mantle_api::VehicleLightStatesControlStrategy*>(control_strategies[0].get());
diff --git a/engine/tests/Storyboard/GenericAction/TeleportActionTest.cpp b/engine/tests/Storyboard/GenericAction/TeleportActionTest.cpp
index 4ce155f4eab4433103babed018d01a595a7cefca..8ad10da9f7f0a7307a066bea7276829e716d270e 100644
--- a/engine/tests/Storyboard/GenericAction/TeleportActionTest.cpp
+++ b/engine/tests/Storyboard/GenericAction/TeleportActionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2022-2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -9,12 +9,12 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 #include <openScenarioLib/generated/v1_3/impl/ApiClassImplV1_3.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioPosition.h"
 #include "Storyboard/GenericAction/TeleportAction_impl.h"
+#include "TestUtils.h"
 #include "builders/ActionBuilder.h"
 #include "builders/PositionBuilder.h"
 
@@ -29,15 +29,16 @@ TEST(TeleportActionTest, GivenTeleportActionWithPosition_WhenStepAction_ThenConv
   Pose pose{};
   pose.position = position;
 
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
+  auto fake_environment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
 
-  ON_CALL(dynamic_cast<MockVehicle&>(mockEnvironment->GetEntityRepository().Get("Entity1")->get()),
+  ON_CALL(dynamic_cast<MockVehicle&>(*fake_environment->GetEntityRepository().Get("Entity1").lock()),
           SetPosition(position))
       .WillByDefault(Return());
 
   OpenScenarioEngine::v1_3::TeleportAction teleportAction({{"Entity1"},
-                                                           [p = pose]() -> std::optional<Pose> { return p; }},
-                                                          {mockEnvironment});
+                                                           [p = pose]() -> std::optional<Pose>
+                                                           { return p; }},
+                                                          {fake_environment});
 
   ASSERT_TRUE(teleportAction.Step());
 }
@@ -48,14 +49,15 @@ TEST(TeleportActionTest, GivenTeleportActionWithOrientation_WhenStepAction_ThenC
   Pose pose{};
   pose.orientation = orientation;
 
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  ON_CALL(dynamic_cast<MockVehicle&>(mockEnvironment->GetEntityRepository().Get("Entity1")->get()),
+  auto fake_environment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
+  ON_CALL(dynamic_cast<MockVehicle&>(*fake_environment->GetEntityRepository().Get("Entity1").lock()),
           SetOrientation(orientation))
       .WillByDefault(Return());
 
   OpenScenarioEngine::v1_3::TeleportAction teleportAction({{"Entity1"},
-                                                           [p = pose]() -> std::optional<Pose> { return p; }},
-                                                          {mockEnvironment});
+                                                           [p = pose]() -> std::optional<Pose>
+                                                           { return p; }},
+                                                          {fake_environment});
 
   ASSERT_TRUE(teleportAction.Step());
 }
@@ -63,7 +65,6 @@ TEST(TeleportActionTest, GivenTeleportActionWithOrientation_WhenStepAction_ThenC
 TEST(TeleportActionTest, GivenTeleportActionWithLanePosition_WhenStepAction_ThenConvertAndCallSetPosition)
 {
   mantle_api::OpenDriveLanePosition open_drive_position{"1", 2, 3.0_m, 4.0_m};
-  mantle_api::Position expected_position = open_drive_position;
 
   using namespace testing::OpenScenarioEngine::v1_3;
   auto position =
@@ -75,14 +76,15 @@ TEST(TeleportActionTest, GivenTeleportActionWithLanePosition_WhenStepAction_Then
                                 .Build())
           .Build();
 
-  auto mock_environment = std::make_shared<MockEnvironment>();
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mock_environment, position);
+  auto fake_Environment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fake_Environment, position);
 
   OpenScenarioEngine::v1_3::TeleportAction teleport_action({{"Ego"},
-                                                            [p = pose]() -> std::optional<Pose> { return p; }},
-                                                           {mock_environment});
+                                                            [p = pose]() -> std::optional<Pose>
+                                                            { return p; }},
+                                                           {fake_Environment});
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(mock_environment->GetEntityRepository().Get("")->get()),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*fake_Environment->GetEntityRepository().Get("").lock()),
               SetPosition(testing::_))
       .Times(1);
 
@@ -111,23 +113,24 @@ TEST(TeleportActionTest, GivenTeleportActionWithLanePositionAndVerticalOffset_Wh
                                 .Build())
           .Build();
 
-  auto mock_environment = std::make_shared<MockEnvironment>();
+  auto fake_Environment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
 
-  auto static_object = std::make_unique<mantle_api::MockStaticObject>();
+  auto static_object = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeStaticObject>();
   auto static_object_properties = std::make_unique<mantle_api::StaticObjectProperties>(traffic_sign_properties);
 
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mock_environment, position);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fake_Environment, position);
 
   OpenScenarioEngine::v1_3::TeleportAction teleport_action({{"traffic_sign"},
-                                                            [p = pose]() -> std::optional<Pose> { return p; }},
-                                                           {mock_environment});
+                                                            [p = pose]() -> std::optional<Pose>
+                                                            { return p; }},
+                                                           {fake_Environment});
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(mock_environment->GetEntityRepository()), GetImpl(testing::_))
-      .WillRepeatedly(testing::Return(static_object.get()));
+  EXPECT_CALL(dynamic_cast<testing::OpenScenarioEngine::v1_3::FakeEntityRepository&>(fake_Environment->GetEntityRepository()), GetImpl(testing::_))
+      .WillRepeatedly(testing::Return(static_object));
 
   EXPECT_CALL(*static_object, GetPropertiesImpl()).WillRepeatedly(testing::Return(static_object_properties.get()));
 
-  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mock_environment->GetQueryService()),
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_Environment->GetQueryService()),
               GetUpwardsShiftedLanePosition(testing::_, traffic_sign_properties.vertical_offset.value(), testing::_))
       .Times(1);
 
@@ -139,7 +142,6 @@ TEST(TeleportActionTest, GivenTeleportActionWithLanePositionAndVerticalOffset_Wh
 TEST(TeleportActionTest, GivenTeleportActionWithGeoPosition_WhenStepAction_ThenConvertAndCallSetPosition)
 {
   mantle_api::LatLonPosition lat_lon_position{42.123_deg, 11.65874_deg};
-  mantle_api::Position expected_position = lat_lon_position;
 
   using namespace testing::OpenScenarioEngine::v1_3;
   auto geo_position =
@@ -148,15 +150,16 @@ TEST(TeleportActionTest, GivenTeleportActionWithGeoPosition_WhenStepAction_ThenC
               FakeGeoPositionBuilder(lat_lon_position.latitude(), lat_lon_position.longitude()).Build())
           .Build();
 
-  auto mock_environment = std::make_shared<MockEnvironment>();
+  auto fake_Environment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
 
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mock_environment, geo_position);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fake_Environment, geo_position);
 
   OpenScenarioEngine::v1_3::TeleportAction teleport_action({{"Ego"},
-                                                            [p = pose]() -> std::optional<Pose> { return p; }},
-                                                           {mock_environment});
+                                                            [p = pose]() -> std::optional<Pose>
+                                                            { return p; }},
+                                                           {fake_Environment});
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(mock_environment->GetEntityRepository().Get("").value().get()),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*fake_Environment->GetEntityRepository().Get("").lock()),
               SetPosition(testing::_))
       .Times(1);
 
@@ -184,14 +187,15 @@ TEST(TeleportActionTest,
                                .Build())
           .Build();
 
-  auto mock_environment = std::make_shared<MockEnvironment>();
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mock_environment, geo_position);
+  auto fake_Environment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fake_Environment, geo_position);
 
   OpenScenarioEngine::v1_3::TeleportAction teleport_action({{"Ego"},
-                                                            [p = pose]() -> std::optional<Pose> { return p; }},
-                                                           {mock_environment});
+                                                            [p = pose]() -> std::optional<Pose>
+                                                            { return p; }},
+                                                           {fake_Environment});
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(mock_environment->GetEntityRepository().Get("").value().get()),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*fake_Environment->GetEntityRepository().Get("").lock()),
               SetOrientation(expected_orientation))
       .Times(1);
 
@@ -221,19 +225,20 @@ TEST(TeleportActionTest,
                                 .Build())
           .Build();
 
-  auto mock_environment = std::make_shared<MockEnvironment>();
+  auto fake_Environment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
 
-  auto static_object = std::make_unique<mantle_api::MockStaticObject>();
+  auto static_object = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeStaticObject>();
   auto static_object_properties = std::make_unique<mantle_api::StaticObjectProperties>(traffic_sign_properties);
 
-  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mock_environment, position);
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(fake_Environment, position);
 
   OpenScenarioEngine::v1_3::TeleportAction teleport_action({{"traffic_sign"},
-                                                            [p = pose]() -> std::optional<Pose> { return p; }},
-                                                           {mock_environment});
+                                                            [p = pose]() -> std::optional<Pose>
+                                                            { return p; }},
+                                                           {fake_Environment});
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(mock_environment->GetEntityRepository()), GetImpl(testing::_))
-      .WillRepeatedly(testing::Return(static_object.get()));
+  EXPECT_CALL(dynamic_cast<testing::OpenScenarioEngine::v1_3::FakeEntityRepository&>(fake_Environment->GetEntityRepository()), GetImpl(testing::_))
+      .WillRepeatedly(testing::Return(static_object));
   EXPECT_CALL(*static_object, GetPropertiesImpl()).WillRepeatedly(testing::Return(static_object_properties.get()));
 
   // Ensure SetOrientation() is called before SetPosition().
diff --git a/engine/tests/Storyboard/GenericAction/TrafficSignalStateActionTest.cpp b/engine/tests/Storyboard/GenericAction/TrafficSignalStateActionTest.cpp
index 3149a97ada43a9485e5ecb0011dac00465598955..ed8b52576fa9aabbe187a2b89a3ad2590d784991 100644
--- a/engine/tests/Storyboard/GenericAction/TrafficSignalStateActionTest.cpp
+++ b/engine/tests/Storyboard/GenericAction/TrafficSignalStateActionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -9,8 +9,8 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
-#include <gtest/gtest.h>
+#include <MantleAPI/Execution/mock_environment.h>
+#include <gmock/gmock.h>
 
 #include "Storyboard/GenericAction/TrafficSignalStateAction_impl.h"
 
@@ -33,4 +33,4 @@ TEST(TrafficSignalStateActionTest, GivenTrafficStateAndName_SetTrafficSignal)
                                                                               {mockEnvironment});
 
   ASSERT_TRUE(trafficSignalStateAction.Step());
-}
\ No newline at end of file
+}
diff --git a/engine/tests/Storyboard/GenericAction/TrafficSinkActionTest.cpp b/engine/tests/Storyboard/GenericAction/TrafficSinkActionTest.cpp
index e8d22e8dbdda673dd2133f9cfbb8f8f04bd0224b..062a6e01120f82f7db07ef1680e1798847721239 100644
--- a/engine/tests/Storyboard/GenericAction/TrafficSinkActionTest.cpp
+++ b/engine/tests/Storyboard/GenericAction/TrafficSinkActionTest.cpp
@@ -8,7 +8,6 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
 #include <limits>
@@ -17,34 +16,36 @@
 #include "MantleAPI/Common/i_identifiable.h"
 #include "Storyboard/GenericAction/TrafficSinkAction.h"
 #include "TestUtils/MockControllerService.h"
+#include "TestUtils.h"
 
 using namespace mantle_api;
+using namespace testing::OpenScenarioEngine::v1_3;
 using namespace units::literals;
 
 TEST(TrafficSinkAction, GivenEntityWithinRadius_WhenActionIsStepped_ThenEntityIsDeletedAndActionContinues)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  auto& mockEntityRepository = static_cast<MockEntityRepository&>(mockEnvironment->GetEntityRepository());
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  auto& fakeEntityRepository = static_cast<FakeEntityRepository&>(fake_environment->GetEntityRepository());
   auto mockControllerService = std::make_shared<testing::OpenScenarioEngine::v1_3::MockControllerService>();
-  auto& mockControllerRepository = static_cast<MockControllerRepository&>(mockEnvironment->GetControllerRepository());
+  auto& mockControllerRepository = static_cast<MockControllerRepository&>(fake_environment->GetControllerRepository());
 
   Vec3<units::length::meter_t> vehicle_position{10.1_m, 20.2_m, 30.3_m};
-  std::vector<std::unique_ptr<mantle_api::IEntity>> vehicle_vec;
-
-  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault(
-    [&vehicle_vec, &vehicle_position]() -> std::vector<std::unique_ptr<mantle_api::IEntity>>&
-    {
-      auto vehicle{std::make_unique<mantle_api::MockVehicle>()};
-      vehicle_vec.emplace_back(std::move(vehicle));
-      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetUniqueId).WillByDefault(testing::Return(1234));
+  std::vector<std::shared_ptr<mantle_api::IEntity>> vehicle_vec;
+  std::vector<std::weak_ptr<mantle_api::IEntity>> weak_vehicle_vec;
+
+  ON_CALL(fakeEntityRepository, GetEntities()).WillByDefault([&vehicle_vec, &vehicle_position, &weak_vehicle_vec]() -> std::vector<std::weak_ptr<mantle_api::IEntity>>&
+                                                             {
+      auto vehicle{std::make_shared<mantle_api::MockVehicle>()};
+      vehicle_vec.emplace_back(vehicle);
+      weak_vehicle_vec.push_back(std::weak_ptr<mantle_api::IEntity>(vehicle));
+      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetUniqueId).WillByDefault(testing::Return(UniqueId(1234)));
       ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetPosition).WillByDefault(testing::Return(vehicle_position));
 
-      return vehicle_vec;
-    });
+      return weak_vehicle_vec; });
 
   Pose target_pose{{10.0_m, 20.0_m, 30.0_m}, {}};  // not at 0, as other mocked entities are per default at 0
 
-  ON_CALL(*mockControllerService, GetControllerIds(1234)).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{1001,1002}));
+  ON_CALL(*mockControllerService, GetControllerIds(UniqueId(1234))).WillByDefault(testing::Return(std::vector<UniqueId>{UniqueId(1001), UniqueId(1002)}));
 
   OpenScenarioEngine::v1_3::TrafficSinkAction action_under_test(
       {.radius = 10.0,
@@ -52,40 +53,41 @@ TEST(TrafficSinkAction, GivenEntityWithinRadius_WhenActionIsStepped_ThenEntityIs
        .GetPosition = [&]()
        { return target_pose; },
        .trafficDefinition = std::nullopt},
-      {.environment = mockEnvironment},
+      {.environment = fake_environment},
       {.controllerService = mockControllerService});
 
-  EXPECT_CALL(*mockControllerService, GetControllerIds(1234));
-  EXPECT_CALL(mockControllerRepository, Delete(1002));
-  EXPECT_CALL(mockControllerRepository, Delete(1001));
-  EXPECT_CALL(mockEntityRepository, Delete(testing::Matcher<UniqueId>(testing::_))).Times(0);
-  EXPECT_CALL(mockEntityRepository, Delete(1234)).Times(1);
+  EXPECT_CALL(*mockControllerService, GetControllerIds(UniqueId(1234)));
+  EXPECT_CALL(mockControllerRepository, Delete(UniqueId(1002)));
+  EXPECT_CALL(mockControllerRepository, Delete(UniqueId(1001)));
+  EXPECT_CALL(fakeEntityRepository, Delete(testing::Matcher<UniqueId>(testing::_))).Times(0);
+  EXPECT_CALL(fakeEntityRepository, Delete(UniqueId(1234))).Times(1);
   ASSERT_FALSE(action_under_test.Step());
 }
 
 TEST(TrafficSinkAction, GivenEntityLessOrEqual1mmToPosition_WhenActionIsStepped_ThenEntityIsDeletedAndActionContinues)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  auto& mockEntityRepository = static_cast<MockEntityRepository&>(mockEnvironment->GetEntityRepository());
-  auto& mockControllerRepository = static_cast<MockControllerRepository&>(mockEnvironment->GetControllerRepository());
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  auto& fake_entity_repository = static_cast<FakeEntityRepository&>(fake_environment->GetEntityRepository());
+  auto& mockControllerRepository = static_cast<MockControllerRepository&>(fake_environment->GetControllerRepository());
   auto mockControllerService = std::make_shared<testing::OpenScenarioEngine::v1_3::MockControllerService>();
 
   Vec3<units::length::meter_t> vehicle_position{1_mm,  // = EPSILON FOR DETECTION
                                                 10_m,
                                                 10_m};
-  std::vector<std::unique_ptr<mantle_api::IEntity>> vehicle_vec;
-
-  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault(
-    [&vehicle_vec, &vehicle_position]() -> std::vector<std::unique_ptr<mantle_api::IEntity>>&
-    {
-      auto vehicle{std::make_unique<mantle_api::MockVehicle>()};
-      vehicle_vec.emplace_back(std::move(vehicle));
-      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetUniqueId).WillByDefault(testing::Return(1234));
+  std::vector<std::shared_ptr<mantle_api::IEntity>> vehicle_vec;
+  std::vector<std::weak_ptr<mantle_api::IEntity>> weak_vehicle_vec;
+
+  ON_CALL(fake_entity_repository, GetEntities()).WillByDefault([&vehicle_vec, &vehicle_position, &weak_vehicle_vec]() -> std::vector<std::weak_ptr<mantle_api::IEntity>>&
+                                                               {
+      auto vehicle{std::make_shared<mantle_api::MockVehicle>()};
+      vehicle_vec.emplace_back(vehicle);
+      weak_vehicle_vec.push_back(std::weak_ptr<mantle_api::IEntity>(vehicle));
+      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetUniqueId).WillByDefault(testing::Return(UniqueId(1234)));
       ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetPosition).WillByDefault(testing::Return(vehicle_position));
-      return vehicle_vec;
-    });
 
-  ON_CALL(*mockControllerService, GetControllerIds(1234)).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{1001,1002}));
+      return weak_vehicle_vec; });
+
+  ON_CALL(*mockControllerService, GetControllerIds(UniqueId(1234))).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{UniqueId(1001), UniqueId(1002)}));
 
   Pose target_pose{{0_m, 10_m, 10_m}, {}};  // not at 0, as other mocked entities are per default at 0
   OpenScenarioEngine::v1_3::TrafficSinkAction action_under_test(
@@ -94,38 +96,40 @@ TEST(TrafficSinkAction, GivenEntityLessOrEqual1mmToPosition_WhenActionIsStepped_
        .GetPosition = [&]
        { return target_pose; },
        .trafficDefinition = std::nullopt},
-      {.environment = mockEnvironment},
+      {.environment = fake_environment},
       {.controllerService = mockControllerService});
 
-  EXPECT_CALL(*mockControllerService, GetControllerIds(1234));
-  EXPECT_CALL(mockControllerRepository, Delete(1002));
-  EXPECT_CALL(mockControllerRepository, Delete(1001));
-  EXPECT_CALL(mockEntityRepository, Delete(testing::Matcher<UniqueId>(testing::_))).Times(0);
-  EXPECT_CALL(mockEntityRepository, Delete(1234)).Times(1);
+  EXPECT_CALL(*mockControllerService, GetControllerIds(UniqueId(1234)));
+  EXPECT_CALL(mockControllerRepository, Delete(UniqueId(1002)));
+  EXPECT_CALL(mockControllerRepository, Delete(UniqueId(1001)));
+  EXPECT_CALL(fake_entity_repository, Delete(testing::Matcher<UniqueId>(testing::_))).Times(0);
+  EXPECT_CALL(fake_entity_repository, Delete(UniqueId(1234))).Times(1);
   ASSERT_FALSE(action_under_test.Step());
 }
 
 TEST(TrafficSinkAction, GivenEntityMoreThan1mmApartToPosition_WhenActionIsStepped_ThenEntityIsNotDeletedAndActionContinues)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  auto& mockEntityRepository = static_cast<MockEntityRepository&>(mockEnvironment->GetEntityRepository());
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  auto& mockEntityRepository = static_cast<MockEntityRepository&>(fake_environment->GetEntityRepository());
   auto mockControllerService = std::make_shared<testing::OpenScenarioEngine::v1_3::MockControllerService>();
-  auto& mockControllerRepository = static_cast<MockControllerRepository&>(mockEnvironment->GetControllerRepository());
+  auto& mockControllerRepository = static_cast<MockControllerRepository&>(fake_environment->GetControllerRepository());
 
   Vec3<units::length::meter_t> vehicle_position{1.001_mm,  // BEYOND EPSILON FOR DETECTIN
                                                 10_m,
                                                 10_m};
-  std::vector<std::unique_ptr<mantle_api::IEntity>> vehicle_vec;
+  std::vector<std::shared_ptr<mantle_api::IEntity>> vehicle_vec;
+  std::vector<std::weak_ptr<mantle_api::IEntity>> weak_vehicle_vec;
 
-  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault([&vehicle_vec, &vehicle_position]() -> std::vector<std::unique_ptr<mantle_api::IEntity>>&
+  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault([&vehicle_vec, &vehicle_position, &weak_vehicle_vec]() -> std::vector<std::weak_ptr<mantle_api::IEntity>>&
                                                              {
-      auto vehicle{std::make_unique<mantle_api::MockVehicle>()};
-      vehicle_vec.emplace_back(std::move(vehicle));
-      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetUniqueId).WillByDefault(testing::Return(1234));
+      auto vehicle{std::make_shared<mantle_api::MockVehicle>()};
+      vehicle_vec.emplace_back(vehicle);
+      weak_vehicle_vec.push_back(std::weak_ptr<mantle_api::IEntity>(vehicle));
+      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetUniqueId).WillByDefault(testing::Return(UniqueId(1234)));
       ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetPosition).WillByDefault(testing::Return(vehicle_position));
 
-      return vehicle_vec; });
-  ON_CALL(*mockControllerService, GetControllerIds(1234)).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{1001,1002}));
+      return weak_vehicle_vec; });
+  ON_CALL(*mockControllerService, GetControllerIds(UniqueId(1234))).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{UniqueId(1001), UniqueId(1002)}));
 
   Pose target_pose{{0_m, 10_m, 10_m}, {}};  // not at 0, as other mocked entities are per default at 0
   OpenScenarioEngine::v1_3::TrafficSinkAction action_under_test(
@@ -134,36 +138,36 @@ TEST(TrafficSinkAction, GivenEntityMoreThan1mmApartToPosition_WhenActionIsSteppe
        .GetPosition = [&]
        { return target_pose; },
        .trafficDefinition = std::nullopt},
-      {.environment = mockEnvironment},
+      {.environment = fake_environment},
       {.controllerService = mockControllerService});
 
-  EXPECT_CALL(*mockControllerService, GetControllerIds(1234)).Times(0);
-  EXPECT_CALL(mockControllerRepository, Delete(1002)).Times(0);
-  EXPECT_CALL(mockControllerRepository, Delete(1001)).Times(0);
+  EXPECT_CALL(*mockControllerService, GetControllerIds(UniqueId(1234))).Times(0);
+  EXPECT_CALL(mockControllerRepository, Delete(UniqueId(1002))).Times(0);
+  EXPECT_CALL(mockControllerRepository, Delete(UniqueId(1001))).Times(0);
   EXPECT_CALL(mockEntityRepository, Delete(testing::Matcher<UniqueId>(testing::_))).Times(0);
   ASSERT_FALSE(action_under_test.Step());
 }
 
 TEST(TrafficSinkAction, GivenOneEntityWithinRadius_WhenEntityIsAStaticObject_ThenStaticObjectIsNotDeleted)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
+  auto fake_environment = std::make_shared<FakeEnvironment>();
   auto mockControllerService = std::make_shared<testing::OpenScenarioEngine::v1_3::MockControllerService>();
-  auto& mockControllerRepository = static_cast<MockControllerRepository&>(mockEnvironment->GetControllerRepository());
+  auto& mockControllerRepository = static_cast<MockControllerRepository&>(fake_environment->GetControllerRepository());
 
   // the entity repository returns 1 vehicle, 1 pedestrian and 1 stationary object
-  auto& mockEntityRepository = static_cast<MockEntityRepository&>(mockEnvironment->GetEntityRepository());
+  auto& mockEntityRepository = static_cast<MockEntityRepository&>(fake_environment->GetEntityRepository());
 
   Vec3<units::length::meter_t> entity_position{0.0_m, 0.0_m, 0.0_m};
-  std::vector<std::unique_ptr<IEntity>> vehicle_vec;
+  std::vector<std::shared_ptr<IEntity>> vehicle_vec;
+  std::vector<std::weak_ptr<mantle_api::IEntity>> weak_vehicle_vec;
 
-  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault(
-    [&vehicle_vec, &entity_position]() -> std::vector<std::unique_ptr<IEntity>>&
-    {
-      auto object{std::make_unique<MockStaticObject>()};
-      vehicle_vec.emplace_back(std::move(object));
-      return vehicle_vec;
-    });
-  ON_CALL(*mockControllerService, GetControllerIds(1234)).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{1001,1002}));
+  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault([&vehicle_vec, &entity_position, &weak_vehicle_vec]() -> std::vector<std::weak_ptr<IEntity>>&
+                                                             {
+      auto object{std::make_shared<MockStaticObject>()};
+      vehicle_vec.emplace_back(object);
+      weak_vehicle_vec.push_back(std::weak_ptr<mantle_api::IEntity>(object));
+      return weak_vehicle_vec; });
+  ON_CALL(*mockControllerService, GetControllerIds(UniqueId(1234))).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{UniqueId(1001), UniqueId(1002)}));
 
   Pose target_pose{{0.0_m, 0.0_m, 0.0_m}, {}};  // all mocked entities are at 0 per default!
   OpenScenarioEngine::v1_3::TrafficSinkAction action_under_test(
@@ -172,37 +176,37 @@ TEST(TrafficSinkAction, GivenOneEntityWithinRadius_WhenEntityIsAStaticObject_The
        .GetPosition = [&]
        { return target_pose; },
        .trafficDefinition = std::nullopt},
-      {.environment = mockEnvironment},
+      {.environment = fake_environment},
       {.controllerService = mockControllerService});
 
-  EXPECT_CALL(*mockControllerService, GetControllerIds(1234)).Times(0);
-  EXPECT_CALL(mockControllerRepository, Delete(1002)).Times(0);
-  EXPECT_CALL(mockControllerRepository, Delete(1001)).Times(0);
+  EXPECT_CALL(*mockControllerService, GetControllerIds(UniqueId(1234))).Times(0);
+  EXPECT_CALL(mockControllerRepository, Delete(UniqueId(1002))).Times(0);
+  EXPECT_CALL(mockControllerRepository, Delete(UniqueId(1001))).Times(0);
   EXPECT_CALL(mockEntityRepository, Delete(testing::Matcher<UniqueId>(testing::_))).Times(0);
   ASSERT_FALSE(action_under_test.Step());
 }
 
 TEST(TrafficSinkAction, GivenEntityOutsideOfRadius_WhenActionIsStepped_EntityIsNotDeletedAndActionContinues)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  auto& mockEntityRepository = static_cast<MockEntityRepository&>(mockEnvironment->GetEntityRepository());
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  auto& mockEntityRepository = static_cast<MockEntityRepository&>(fake_environment->GetEntityRepository());
   auto mockControllerService = std::make_shared<testing::OpenScenarioEngine::v1_3::MockControllerService>();
-  auto& mockControllerRepository = static_cast<MockControllerRepository&>(mockEnvironment->GetControllerRepository());
+  auto& mockControllerRepository = static_cast<MockControllerRepository&>(fake_environment->GetControllerRepository());
 
   Vec3<units::length::meter_t> vehicle_position{10.0_m, 20.0_m, 30.0_m};
-  std::vector<std::unique_ptr<mantle_api::IEntity>> vehicle_vec;
-
-  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault(
-    [&vehicle_vec, &vehicle_position]() -> std::vector<std::unique_ptr<mantle_api::IEntity>>&
-    {
-      auto vehicle{std::make_unique<mantle_api::MockVehicle>()};
-      vehicle_vec.emplace_back(std::move(vehicle));
-      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetUniqueId).WillByDefault(testing::Return(1234));
+  std::vector<std::shared_ptr<mantle_api::IEntity>> vehicle_vec;
+  std::vector<std::weak_ptr<mantle_api::IEntity>> weak_vehicle_vec;
+
+  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault([&vehicle_vec, &vehicle_position, &weak_vehicle_vec]() -> std::vector<std::weak_ptr<mantle_api::IEntity>>&
+                                                             {
+      auto vehicle{std::make_shared<mantle_api::MockVehicle>()};
+      vehicle_vec.emplace_back(vehicle);
+      weak_vehicle_vec.push_back(std::weak_ptr<mantle_api::IEntity>(vehicle));
+      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetUniqueId).WillByDefault(testing::Return(UniqueId(1234)));
       ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetPosition).WillByDefault(testing::Return(vehicle_position));
 
-      return vehicle_vec;
-    });
-  ON_CALL(*mockControllerService, GetControllerIds(1234)).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{1001,1002}));
+      return weak_vehicle_vec; });
+  ON_CALL(*mockControllerService, GetControllerIds(UniqueId(1234))).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{UniqueId(1001), UniqueId(1002)}));
 
   Pose target_pose{{1.0_m, 2.0_m, 3.0_m}, {}};
   OpenScenarioEngine::v1_3::TrafficSinkAction action_under_test(
@@ -211,37 +215,37 @@ TEST(TrafficSinkAction, GivenEntityOutsideOfRadius_WhenActionIsStepped_EntityIsN
        .GetPosition = [&]
        { return target_pose; },
        .trafficDefinition = std::nullopt},
-      {.environment = mockEnvironment},
+      {.environment = fake_environment},
       {.controllerService = mockControllerService});
 
-  EXPECT_CALL(*mockControllerService, GetControllerIds(1234)).Times(0);
-  EXPECT_CALL(mockControllerRepository, Delete(1002)).Times(0);
-  EXPECT_CALL(mockControllerRepository, Delete(1001)).Times(0);
+  EXPECT_CALL(*mockControllerService, GetControllerIds(UniqueId(1234))).Times(0);
+  EXPECT_CALL(mockControllerRepository, Delete(UniqueId(1002))).Times(0);
+  EXPECT_CALL(mockControllerRepository, Delete(UniqueId(1001))).Times(0);
   EXPECT_CALL(mockEntityRepository, Delete(testing::Matcher<UniqueId>(testing::_))).Times(0);
   ASSERT_FALSE(action_under_test.Step());
 }
 
 TEST(TrafficSinkAction, GivenEntityAtPositionOfAction_WhenRadiusOfActionZero_ThenEntityIsDeleted)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  auto& mockEntityRepository = static_cast<MockEntityRepository&>(mockEnvironment->GetEntityRepository());
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  auto& mockEntityRepository = static_cast<MockEntityRepository&>(fake_environment->GetEntityRepository());
   auto mockControllerService = std::make_shared<testing::OpenScenarioEngine::v1_3::MockControllerService>();
-  auto& mockControllerRepository = static_cast<MockControllerRepository&>(mockEnvironment->GetControllerRepository());
+  auto& mockControllerRepository = static_cast<MockControllerRepository&>(fake_environment->GetControllerRepository());
 
   Vec3<units::length::meter_t> vehicle_position{1.0_m, 2.0_m, 3.0_m};
-  std::vector<std::unique_ptr<mantle_api::IEntity>> vehicle_vec;
-
-  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault(
-    [&vehicle_vec, &vehicle_position]() -> std::vector<std::unique_ptr<mantle_api::IEntity>>&
-    {
-      auto vehicle{std::make_unique<mantle_api::MockVehicle>()};
-      vehicle_vec.emplace_back(std::move(vehicle));
-      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetUniqueId).WillByDefault(testing::Return(1234));
+  std::vector<std::shared_ptr<mantle_api::IEntity>> vehicle_vec;
+  std::vector<std::weak_ptr<mantle_api::IEntity>> weak_vehicle_vec;
+
+  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault([&vehicle_vec, &vehicle_position, &weak_vehicle_vec]() -> std::vector<std::weak_ptr<mantle_api::IEntity>>&
+                                                             {
+      auto vehicle{std::make_shared<mantle_api::MockVehicle>()};
+      vehicle_vec.emplace_back(vehicle);
+      weak_vehicle_vec.push_back(std::weak_ptr<mantle_api::IEntity>(vehicle));
+      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetUniqueId).WillByDefault(testing::Return(UniqueId(1234)));
       ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetPosition).WillByDefault(testing::Return(vehicle_position));
 
-      return vehicle_vec;
-    });
-  ON_CALL(*mockControllerService, GetControllerIds(1234)).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{1001,1002}));
+      return weak_vehicle_vec; });
+  ON_CALL(*mockControllerService, GetControllerIds(UniqueId(1234))).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{UniqueId(1001), UniqueId(1002)}));
 
   Pose target_pose{vehicle_position, {}};
   OpenScenarioEngine::v1_3::TrafficSinkAction action_under_test(
@@ -250,13 +254,13 @@ TEST(TrafficSinkAction, GivenEntityAtPositionOfAction_WhenRadiusOfActionZero_The
        .GetPosition = [&]
        { return target_pose; },
        .trafficDefinition = std::nullopt},
-      {.environment = mockEnvironment},
+      {.environment = fake_environment},
       {.controllerService = mockControllerService});
 
-  EXPECT_CALL(*mockControllerService, GetControllerIds(1234));
-  EXPECT_CALL(mockControllerRepository, Delete(1002));
-  EXPECT_CALL(mockControllerRepository, Delete(1001));
+  EXPECT_CALL(*mockControllerService, GetControllerIds(UniqueId(1234)));
+  EXPECT_CALL(mockControllerRepository, Delete(UniqueId(1002)));
+  EXPECT_CALL(mockControllerRepository, Delete(UniqueId(1001)));
   EXPECT_CALL(mockEntityRepository, Delete(testing::Matcher<UniqueId>(testing::_))).Times(0);
-  EXPECT_CALL(mockEntityRepository, Delete(1234)).Times(1);
+  EXPECT_CALL(mockEntityRepository, Delete(UniqueId(1234))).Times(1);
   ASSERT_FALSE(action_under_test.Step());
 }
diff --git a/engine/tests/Storyboard/GenericAction/TrafficSwarmActionTest.cpp b/engine/tests/Storyboard/GenericAction/TrafficSwarmActionTest.cpp
index be6efd02ea7a676dd1dcb5dee1c05339a94ee057..83238b255ad1ae4c9ae54df7b285781a95f3fa2c 100644
--- a/engine/tests/Storyboard/GenericAction/TrafficSwarmActionTest.cpp
+++ b/engine/tests/Storyboard/GenericAction/TrafficSwarmActionTest.cpp
@@ -8,7 +8,6 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
 #include <cstring>
@@ -18,6 +17,7 @@
 #include "Storyboard/GenericAction/TrafficSwarmAction_impl.h"
 #include "TestUtils/MockStochastics.h"
 #include "Utils/Ellipse.h"
+#include "TestUtils.h"
 
 using namespace testing;
 using namespace units::literals;
@@ -41,13 +41,13 @@ protected:
   {
     vehicles_.clear();
 
-    auto& mock_entity_repository{dynamic_cast<mantle_api::MockEntityRepository&>(mock_environment_->GetEntityRepository())};
-    auto& mock_controller_repository{dynamic_cast<mantle_api::MockControllerRepository&>(mock_environment_->GetControllerRepository())};
+    auto& fake_entity_repository{dynamic_cast<testing::OpenScenarioEngine::v1_3::FakeEntityRepository&>(fake_environment_->GetEntityRepository())};
+    auto& mock_controller_repository{dynamic_cast<mantle_api::MockControllerRepository&>(fake_environment_->GetControllerRepository())};
 
-    ON_CALL(mock_entity_repository, Create(_, Matcher<const mantle_api::VehicleProperties&>(_))).WillByDefault([this](const std::string& name, const mantle_api::VehicleProperties& properties) -> mantle_api::MockVehicle&
+    ON_CALL(fake_entity_repository, Create(_, Matcher<const mantle_api::VehicleProperties&>(_))).WillByDefault([this](const std::string& name, const mantle_api::VehicleProperties& properties) -> std::weak_ptr<mantle_api::MockVehicle>
                                                                                                                { return CREATE_MOCK_VEHICLE_WITH_PARAMETERIZED_POSITION(name, properties); });
 
-    ON_CALL(mock_entity_repository, Delete(Matcher<mantle_api::UniqueId>(_))).WillByDefault([this](mantle_api::UniqueId id)
+    ON_CALL(fake_entity_repository, Delete(Matcher<mantle_api::UniqueId>(_))).WillByDefault([this](mantle_api::UniqueId id)
                                                                                             {
       const auto& it{vehicles_.find(id)};
 
@@ -57,9 +57,9 @@ protected:
         id_list_.erase(std::remove(id_list_.begin(), id_list_.end(), id), id_list_.end());
       } });
 
-    ON_CALL(mock_controller_, GetUniqueId()).WillByDefault(Return(1234));
+    ON_CALL(*mock_controller_, GetUniqueId()).WillByDefault(Return(mantle_api::UniqueId(1234)));
 
-    ON_CALL(mock_controller_repository, Create(_)).WillByDefault([this](std::unique_ptr<mantle_api::IControllerConfig> config) -> mantle_api::MockController&
+    ON_CALL(mock_controller_repository, Create(_)).WillByDefault([this](std::unique_ptr<mantle_api::IControllerConfig> config) -> std::weak_ptr<mantle_api::MockController>
                                                                  {
       controller_count_++;
       last_controller_config_ = dynamic_cast<mantle_api::ExternalControllerConfig&>(*config);
@@ -70,21 +70,17 @@ protected:
 
     ON_CALL(*mock_stochastics_, GetUniformDistributed(_, _)).WillByDefault(Return(mocked_random_value));
 
-    const auto& host_optional = mock_entity_repository.GetHost();
-    ASSERT_TRUE(host_optional.has_value());
-    mantle_api::MockVehicle* host_ptr{dynamic_cast<mantle_api::MockVehicle*>(&host_optional.value().get())};
-    ASSERT_NE(host_ptr, nullptr) << "Failed to cast host to MockVehicle.";
-    mantle_api::MockVehicle& host = *host_ptr;
+    auto& host{static_cast<mantle_api::MockVehicle&>(*fake_entity_repository.GetHost().lock())};
 
     ON_CALL(host, GetPosition()).WillByDefault(Return(host_position));
     ON_CALL(host, GetOrientation()).WillByDefault(Return(host_orientation));
 
-    OpenScenarioEngine::v1_3::TrafficDefinition traffic_definition;
+    ::OpenScenarioEngine::v1_3::TrafficDefinition traffic_definition;
     traffic_definition.name = "tf";
-    traffic_definition.vehicle_category_distribution_entries = {{0.25, mantle_api::VehicleClass::kSmall_car},
-                                                                {0.25, mantle_api::VehicleClass::kMedium_car},
-                                                                {0.25, mantle_api::VehicleClass::kMotorbike},
-                                                                {0.25, mantle_api::VehicleClass::kSemitrailer}};
+    traffic_definition.vehicle_category_distribution_entries = {{0.25, mantle_api::VehicleClass::kSmallCar},
+                                                                {0.25, mantle_api::VehicleClass::kMediumCar},
+                                                                {0.25, mantle_api::VehicleClass::kMotorcycle},
+                                                                {0.25, mantle_api::VehicleClass::kSemiTrailer}};
 
     mantle_api::ExternalControllerConfig config_1;
     config_1.name = "1";
@@ -100,16 +96,16 @@ protected:
                                                           {0.25, config_3},
                                                           {0.25, config_4}};
 
-    parameters_ = OpenScenarioEngine::v1_3::TrafficSwarmActionBase::Values{.innerRadius = 10.0,
-                                                                           .numberOfVehicles = 0,
-                                                                           .offset = 0.0,
-                                                                           .semiMajorAxis = 100.0,
-                                                                           .semiMinorAxis = 10.0,
-                                                                           .velocity = std::nullopt,
-                                                                           .centralObject = {host_name},
-                                                                           .trafficDefinition = traffic_definition,
-                                                                           .initialSpeedRange = OpenScenarioEngine::v1_3::Range{0.0, 10.0},
-                                                                           .directionOfTravelDistribution = std::nullopt};
+    parameters_ = ::OpenScenarioEngine::v1_3::TrafficSwarmActionBase::Values{.innerRadius = 10.0,
+                                                                             .numberOfVehicles = 0,
+                                                                             .offset = 0.0,
+                                                                             .semiMajorAxis = 100.0,
+                                                                             .semiMinorAxis = 10.0,
+                                                                             .velocity = std::nullopt,
+                                                                             .centralObject = {host_name},
+                                                                             .trafficDefinition = traffic_definition,
+                                                                             .initialSpeedRange = ::OpenScenarioEngine::v1_3::Range{0.0, 10.0},
+                                                                             .directionOfTravelDistribution = std::nullopt};
   }
 
   void RunActionAndSaveDistributions(std::vector<mantle_api::VehicleClass>& vehicle_classes,
@@ -121,7 +117,7 @@ protected:
     vehicle_classes.reserve(step_count);
     controller_configs.reserve(step_count);
 
-    OpenScenarioEngine::v1_3::TrafficSwarmAction action_under_test_1{parameters_, {mock_environment_}, {mock_stochastics_}};
+    ::OpenScenarioEngine::v1_3::TrafficSwarmAction action_under_test_1{parameters_, {fake_environment_}, {mock_stochastics_}};
 
     for (size_t i{0}; i < step_count; ++i)
     {
@@ -144,14 +140,14 @@ protected:
   const mantle_api::Vec3<units::velocity::meters_per_second_t> host_velocity{5_mps, 0_mps, 0_mps};
   const mantle_api::Orientation3<units::angle::radian_t> host_orientation{10_rad, 0_rad, 0_rad};
 
-  std::shared_ptr<mantle_api::MockEnvironment> mock_environment_{std::make_shared<mantle_api::MockEnvironment>()};
-  mantle_api::MockController mock_controller_;
-  std::shared_ptr<OpenScenarioEngine::v1_3::MockStochastics> mock_stochastics_{std::make_shared<OpenScenarioEngine::v1_3::MockStochastics>()};
+  std::shared_ptr<testing::OpenScenarioEngine::v1_3::FakeEnvironment> fake_environment_{std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>()};
+  std::shared_ptr<mantle_api::MockController> mock_controller_{std::make_shared<mantle_api::MockController>()};
+  std::shared_ptr<testing::OpenScenarioEngine::v1_3::MockStochastics> mock_stochastics_{std::make_shared<testing::OpenScenarioEngine::v1_3::MockStochastics>()};
 
-  OpenScenarioEngine::v1_3::TrafficSwarmActionBase::Values parameters_;
+  ::OpenScenarioEngine::v1_3::TrafficSwarmActionBase::Values parameters_;
 
   std::vector<mantle_api::UniqueId> id_list_;
-  std::unordered_map<mantle_api::UniqueId, std::pair<std::unique_ptr<mantle_api::MockVehicle>, VehicleParameters>> vehicles_;
+  std::unordered_map<mantle_api::UniqueId, std::pair<std::shared_ptr<mantle_api::MockVehicle>, VehicleParameters>> vehicles_;
   size_t controller_count_{0};
   mantle_api::ExternalControllerConfig last_controller_config_;
 
@@ -166,7 +162,7 @@ private:
   /// @param properties The vehicle properties, stored in the vehicle_ map
   /// @return A reference to the created vehicle stored in the vehicle_ map
   ///
-  mantle_api::MockVehicle& CREATE_MOCK_VEHICLE_WITH_PARAMETERIZED_POSITION(
+  std::weak_ptr<mantle_api::MockVehicle> CREATE_MOCK_VEHICLE_WITH_PARAMETERIZED_POSITION(
       const std::string& name,
       const mantle_api::VehicleProperties& properties)
   {
@@ -174,20 +170,20 @@ private:
     id_list_.emplace_back(stoul(num_name));
     auto& id{id_list_.back()};
 
-    vehicles_.insert({id, std::make_pair(std::make_unique<mantle_api::MockVehicle>(), VehicleParameters{})});
-    auto& mock_vehicle{*(vehicles_.at(id).first)};
+    vehicles_.insert({id, std::make_pair(std::make_shared<mantle_api::MockVehicle>(), VehicleParameters{})});
+    auto mock_vehicle{(vehicles_.at(id).first)};
     auto& vehicle_parameters{vehicles_.at(id).second};
 
     vehicle_parameters.vehicle_class = properties.classification;
 
-    ON_CALL(mock_vehicle, GetUniqueId).WillByDefault(Return(id));
-    ON_CALL(mock_vehicle, GetPosition).WillByDefault(Return(vehicle_parameters.position));
+    ON_CALL(*mock_vehicle, GetUniqueId).WillByDefault(Return(id));
+    ON_CALL(*mock_vehicle, GetPosition).WillByDefault(Return(vehicle_parameters.position));
 
-    ON_CALL(mock_vehicle, SetPosition).WillByDefault([&vehicle_parameters](const mantle_api::Vec3<units::length::meter_t>& position)
-                                                     { vehicle_parameters.position = position; });
+    ON_CALL(*mock_vehicle, SetPosition).WillByDefault([&vehicle_parameters](const mantle_api::Vec3<units::length::meter_t>& position)
+                                                      { vehicle_parameters.position = position; });
 
-    ON_CALL(mock_vehicle, SetVelocity).WillByDefault([&vehicle_parameters](const mantle_api::Vec3<units::velocity::meters_per_second_t>& velocity)
-                                                     { vehicle_parameters.speed = velocity.Length()(); });
+    ON_CALL(*mock_vehicle, SetVelocity).WillByDefault([&vehicle_parameters](const mantle_api::Vec3<units::velocity::meters_per_second_t>& velocity)
+                                                      { vehicle_parameters.speed = velocity.Length()(); });
 
     return mock_vehicle;
   }
@@ -197,13 +193,13 @@ TEST_F(TrafficSwarmActionTestFixture, GivenDeprecatedVelocityParameter_WhenActio
 {
   parameters_.velocity = std::optional<double>(10.0);
 
-  EXPECT_THROW((OpenScenarioEngine::v1_3::TrafficSwarmAction{parameters_, {mock_environment_}, {mock_stochastics_}}), std::runtime_error);
+  EXPECT_THROW((::OpenScenarioEngine::v1_3::TrafficSwarmAction{parameters_, {fake_environment_}, {mock_stochastics_}}), std::runtime_error);
 }
 
 TEST_F(TrafficSwarmActionTestFixture, GivenNoRequestedVehicle_WhenActionIsStepped_ThenNoVehicleAreSpawned)
 {
   parameters_.numberOfVehicles = 0;
-  OpenScenarioEngine::v1_3::TrafficSwarmAction action_under_test{parameters_, {mock_environment_}, {mock_stochastics_}};
+  ::OpenScenarioEngine::v1_3::TrafficSwarmAction action_under_test{parameters_, {fake_environment_}, {mock_stochastics_}};
 
   action_under_test.Step();
 
@@ -215,8 +211,8 @@ TEST_F(TrafficSwarmActionTestFixture, GivenFiveRequestedVehiclesInFrontOfCentral
 {
   const double lower_speed_range_limit{1.0};
   parameters_.numberOfVehicles = 5;
-  parameters_.initialSpeedRange = OpenScenarioEngine::v1_3::Range{lower_speed_range_limit, 10.0};
-  OpenScenarioEngine::v1_3::TrafficSwarmAction action_under_test{parameters_, {mock_environment_}, {mock_stochastics_}};
+  parameters_.initialSpeedRange = ::OpenScenarioEngine::v1_3::Range{lower_speed_range_limit, 10.0};
+  ::OpenScenarioEngine::v1_3::TrafficSwarmAction action_under_test{parameters_, {fake_environment_}, {mock_stochastics_}};
 
   const auto longitudinal_distance_between_vehicles{(parameters_.semiMajorAxis - parameters_.innerRadius) / parameters_.numberOfVehicles};
 
@@ -234,8 +230,8 @@ TEST_F(TrafficSwarmActionTestFixture, GivenFiveRequestedVehiclesInFrontOfCentral
     spawning_positions.push_back(spawning_position);
   }
 
-  EXPECT_CALL(mock_environment_->GetTrafficSwarmService(), GetAvailableSpawningPoses()).Times(1).WillOnce(Return(spawning_positions));
-  EXPECT_CALL(mock_controller_, ChangeState(mantle_api::IController::LateralState::kActivate, mantle_api::IController::LongitudinalState::kActivate))
+  EXPECT_CALL(fake_environment_->GetTrafficSwarmService(), GetAvailableSpawningPoses()).Times(1).WillOnce(Return(spawning_positions));
+  EXPECT_CALL(*mock_controller_, ChangeState(mantle_api::IController::LateralState::kActivate, mantle_api::IController::LongitudinalState::kActivate))
       .Times(static_cast<int>(parameters_.numberOfVehicles));
 
   action_under_test.Step();
@@ -256,7 +252,7 @@ TEST_F(TrafficSwarmActionTestFixture, GivenFiveRequestedVehiclesInFrontOfCentral
 TEST_F(TrafficSwarmActionTestFixture, GivenOneRequestedVehiclesOutsideOfSpawningArea_WhenActionIsStepped_ThenVehiclesIsDespawned)
 {
   parameters_.numberOfVehicles = 1;
-  OpenScenarioEngine::v1_3::TrafficSwarmAction action_under_test{parameters_, {mock_environment_}, {mock_stochastics_}};
+  ::OpenScenarioEngine::v1_3::TrafficSwarmAction action_under_test{parameters_, {fake_environment_}, {mock_stochastics_}};
 
   const auto longitudinal_distance_between_vehicles{(parameters_.semiMajorAxis - parameters_.innerRadius) / parameters_.numberOfVehicles};
 
@@ -274,7 +270,7 @@ TEST_F(TrafficSwarmActionTestFixture, GivenOneRequestedVehiclesOutsideOfSpawning
     spawning_positions.push_back(spawning_position);
   }
 
-  EXPECT_CALL(mock_environment_->GetTrafficSwarmService(), GetAvailableSpawningPoses()).Times(2).WillOnce(Return(spawning_positions)).WillOnce(Return(std::vector<mantle_api::ITrafficSwarmService::SpawningPosition>{}));
+  EXPECT_CALL(fake_environment_->GetTrafficSwarmService(), GetAvailableSpawningPoses()).Times(2).WillOnce(Return(spawning_positions)).WillOnce(Return(std::vector<mantle_api::ITrafficSwarmService::SpawningPosition>{}));
 
   action_under_test.Step();
 
@@ -282,19 +278,21 @@ TEST_F(TrafficSwarmActionTestFixture, GivenOneRequestedVehiclesOutsideOfSpawning
   EXPECT_EQ(parameters_.numberOfVehicles, id_list_.size());
   EXPECT_EQ(parameters_.numberOfVehicles, controller_count_);
 
-  std::vector<std::unique_ptr<mantle_api::IEntity>> vehicle_vec;
+  std::vector<std::shared_ptr<mantle_api::IEntity>> vehicle_vec;
+  std::vector<std::weak_ptr<mantle_api::IEntity>> weak_vehicle_vec;
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(mock_environment_.get()->GetEntityRepository()), GetEntities).Times(1).WillOnce([this, &vehicle_vec]() -> std::vector<std::unique_ptr<mantle_api::IEntity>>&
+  EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(fake_environment_.get()->GetEntityRepository()), GetEntities).Times(1).WillOnce([this, &vehicle_vec, &weak_vehicle_vec]() -> std::vector<std::weak_ptr<mantle_api::IEntity>>&
                                                                                                                                               {
     for (const auto& id : id_list_)
     {
-      auto vehicle{std::make_unique<mantle_api::MockVehicle>()};
-      vehicle_vec.push_back(std::move(vehicle));
+      auto vehicle{std::make_shared<mantle_api::MockVehicle>()};
+      vehicle_vec.push_back(vehicle);
+      weak_vehicle_vec.push_back(std::weak_ptr<mantle_api::IEntity>(vehicle));
       ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetUniqueId).WillByDefault(Return(id));
       ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetPosition).WillByDefault(Return(vehicles_.at(id).second.position));
     }
 
-    return vehicle_vec; });
+    return weak_vehicle_vec; });
 
   vehicles_.at(id_list_.back()).second.position.x += units::length::meter_t{parameters_.semiMajorAxis};
 
@@ -307,31 +305,33 @@ TEST_F(TrafficSwarmActionTestFixture, GivenOneRequestedVehiclesOutsideOfSpawning
 TEST_F(TrafficSwarmActionTestFixture, GivenInnerRadiusBiggerThanSpawningArea_WhenActionIsStepped_ThenExpectThrow)
 {
   parameters_.innerRadius = 150.0;
-  EXPECT_THROW(OpenScenarioEngine::v1_3::TrafficSwarmAction(parameters_, {mock_environment_}, {mock_stochastics_}), std::runtime_error);
+  EXPECT_THROW(::OpenScenarioEngine::v1_3::TrafficSwarmAction(parameters_, {fake_environment_}, {mock_stochastics_}), std::runtime_error);
 }
 
 TEST_F(TrafficSwarmActionTestFixture, DISABLED_GivenTwoActionsWithIdenticalParameters_WhenActionsAreSteppedMultipleTimes_ThenVehicleClassesAndControllerCategoriesAreIdentical)
 {
   parameters_.numberOfVehicles = 1;
 
-  std::vector<std::unique_ptr<mantle_api::IEntity>> vehicle_vec;
+  std::vector<std::shared_ptr<mantle_api::IEntity>> vehicle_vec;
+  std::vector<std::weak_ptr<mantle_api::IEntity>> weak_vehicle_vec;
 
-  ON_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(mock_environment_->GetEntityRepository()), GetEntities).WillByDefault([this, &vehicle_vec]() -> std::vector<std::unique_ptr<mantle_api::IEntity>>&
+  ON_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(fake_environment_->GetEntityRepository()), GetEntities).WillByDefault([this, &vehicle_vec, &weak_vehicle_vec]() -> std::vector<std::weak_ptr<mantle_api::IEntity>>&
                                                                                                                                 {
     for (const auto& id : id_list_)
     {
-      auto vehicle{std::make_unique<mantle_api::MockVehicle>()};
-      vehicle_vec.push_back(std::move(vehicle));
+      auto vehicle{std::make_shared<mantle_api::MockVehicle>()};
+      vehicle_vec.push_back(vehicle);
+      weak_vehicle_vec.push_back(std::weak_ptr<mantle_api::IEntity>(vehicle));
       ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetUniqueId).WillByDefault(Return(id));
       ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicle_vec.back()), GetPosition).WillByDefault(Return(vehicles_.at(id).second.position));
     }
 
-    return vehicle_vec; });
+    return weak_vehicle_vec; });
 
   const std::vector<mantle_api::ITrafficSwarmService::SpawningPosition> spawning_positions{{mantle_api::Pose{host_position, host_orientation}, mantle_api::ITrafficSwarmService::RelativePosition::kInFront}};
-  ON_CALL(mock_environment_->GetTrafficSwarmService(), GetAvailableSpawningPoses()).WillByDefault(Return(spawning_positions));
+  ON_CALL(fake_environment_->GetTrafficSwarmService(), GetAvailableSpawningPoses()).WillByDefault(Return(spawning_positions));
 
-  ON_CALL(mock_environment_->GetTrafficSwarmService(), GetVehicleProperties(_)).WillByDefault([](mantle_api::VehicleClass vehicle_class) -> mantle_api::VehicleProperties
+  ON_CALL(fake_environment_->GetTrafficSwarmService(), GetVehicleProperties(_)).WillByDefault([](mantle_api::VehicleClass vehicle_class) -> mantle_api::VehicleProperties
                                                                                               {
     mantle_api::VehicleProperties properties;
     properties.classification = vehicle_class;
diff --git a/engine/tests/Storyboard/GenericAction/VisibilityActionTest.cpp b/engine/tests/Storyboard/GenericAction/VisibilityActionTest.cpp
index f5cddaafc48e11e6a19536f521961ee2f8fcecd6..f59a35e18354dc4d1c5758fc1b9a3c9d637d0324 100644
--- a/engine/tests/Storyboard/GenericAction/VisibilityActionTest.cpp
+++ b/engine/tests/Storyboard/GenericAction/VisibilityActionTest.cpp
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2023-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made
@@ -53,7 +53,7 @@ TEST_F(VisibilityActionTestFixture, GivenVisibilityActionWithOneActor_WhenStepAc
   const mantle_api::EntityVisibilityConfig expected_vis_config{
       expected_graphic_value, expected_traffic_value, expected_sensors_value, {}};
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("")->get()),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
               SetVisibility(VisConfigEqualTo(expected_vis_config)))
       .Times(1);
 
@@ -77,7 +77,7 @@ TEST_F(VisibilityActionTestFixture, GivenVisibilityActionWithTwoActor_WhenStepAc
   const mantle_api::EntityVisibilityConfig expected_vis_config{
       expected_default_value, expected_default_value, expected_default_value, {}};
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("")->get()),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
               SetVisibility(VisConfigEqualTo(expected_vis_config)))
       .Times(2);
 
@@ -122,7 +122,7 @@ TEST_F(VisibilityActionTestFixture, GivenVisibilityActionWithMultipleSensors_Whe
   const mantle_api::EntityVisibilityConfig expected_vis_config{
       expected_default_value, expected_default_value, expected_default_value, {expected_sensor_name_1, expected_sensor_name_2, expected_sensor_name_3}};
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("")->get()),
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
               SetVisibility(VisConfigEqualTo(expected_vis_config)))
       .Times(1);
 
diff --git a/engine/tests/Storyboard/MotionControlAction/FollowTrajectoryActionTest.cpp b/engine/tests/Storyboard/MotionControlAction/FollowTrajectoryActionTest.cpp
index 8536a2f735faaadf9841c7126489ccf513d62e07..b6203eb7177138283d4eabbacb6bd4b77d19e2df 100644
--- a/engine/tests/Storyboard/MotionControlAction/FollowTrajectoryActionTest.cpp
+++ b/engine/tests/Storyboard/MotionControlAction/FollowTrajectoryActionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -11,7 +11,6 @@
 
 #include <MantleAPI/Common/clothoid_spline.h>
 #include <MantleAPI/Common/pose.h>
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioTimeReference.h"
@@ -236,7 +235,7 @@ TEST_F(FollowTrajectoryActionTestFixture,
   EXPECT_CALL(*env_, UpdateControlStrategies(testing::_, testing::_))
       .WillOnce(testing::SaveArg<1>(&control_strategies));
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockConverter&>(*(env_->GetConverter())), Convert(testing::_))
+  EXPECT_CALL(dynamic_cast<mantle_api::MockCoordConverter&>(*(env_->GetConverter())), Convert(testing::_))
       .WillOnce(testing::Return(expected_position1))
       .WillOnce(testing::Return(expected_position2));
 
@@ -287,7 +286,7 @@ TEST_F(FollowTrajectoryActionTestFixture,
       .WillOnce(testing::Return(expected_position1))
       .WillOnce(testing::Return(expected_position2));
 
-  EXPECT_CALL(dynamic_cast<mantle_api::MockConverter&>(*(env_->GetConverter())), Convert(testing::_))
+  EXPECT_CALL(dynamic_cast<mantle_api::MockCoordConverter&>(*(env_->GetConverter())), Convert(testing::_))
       .WillOnce(testing::Return(expected_position1))
       .WillOnce(testing::Return(expected_position2));
 
@@ -370,11 +369,11 @@ TEST_F(FollowTrajectoryActionTestFixture,
 
   auto follow_trajectory_action = std::make_shared<Node::FollowTrajectoryAction>(fake_follow_trajectory_action);
 
-  EXPECT_CALL(*env_, HasControlStrategyGoalBeenReached(0, mantle_api::ControlStrategyType::kFollowTrajectory))
+  EXPECT_CALL(*env_, HasControlStrategyGoalBeenReached(UniqueId(0), mantle_api::ControlStrategyType::kFollowTrajectory))
       .Times(2)
       .WillOnce(::testing::Return(false))
       .WillRepeatedly(::testing::Return(true));
-  EXPECT_CALL(*env_, UpdateControlStrategies(0, testing::_)).Times(3);
+  EXPECT_CALL(*env_, UpdateControlStrategies(UniqueId(0), testing::_)).Times(3);
 
   root_node_->setChild(follow_trajectory_action);
   root_node_->distributeData();
@@ -388,8 +387,8 @@ TEST_F(FollowTrajectoryActionTestFixture,
 
 TEST(FollowTrajectoryAction, GivenMatchingControlStrategyGoalIsReached_ReturnsTrue)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  ON_CALL(*mockEnvironment,
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  ON_CALL(*fake_environment,
           HasControlStrategyGoalBeenReached(_, ControlStrategyType::kFollowTrajectory))
       .WillByDefault(Return(true));
 
@@ -399,15 +398,15 @@ TEST(FollowTrajectoryAction, GivenMatchingControlStrategyGoalIsReached_ReturnsTr
                                                                            OpenScenarioEngine::v1_3::TimeReference{},
                                                                            OpenScenarioEngine::v1_3::TrajectoryFollowingMode{},
                                                                            OpenScenarioEngine::v1_3::TrajectoryRef{}},
-                                                                          {mockEnvironment});
+                                                                          {fake_environment});
 
   ASSERT_TRUE(followTrajectoryAction.HasControlStrategyGoalBeenReached("Vehicle1"));
 }
 
 TEST(FollowTrajectoryAction, GivenUnmatchingControlStrategyGoalIsReached_ReturnsFalse)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  ON_CALL(*mockEnvironment,
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  ON_CALL(*fake_environment,
           HasControlStrategyGoalBeenReached(_, ControlStrategyType::kUndefined))
       .WillByDefault(Return(false));
 
@@ -417,7 +416,7 @@ TEST(FollowTrajectoryAction, GivenUnmatchingControlStrategyGoalIsReached_Returns
                                                                            OpenScenarioEngine::v1_3::TimeReference{},
                                                                            OpenScenarioEngine::v1_3::TrajectoryFollowingMode{},
                                                                            OpenScenarioEngine::v1_3::TrajectoryRef{}},
-                                                                          {mockEnvironment});
+                                                                          {fake_environment});
 
   ASSERT_FALSE(followTrajectoryAction.HasControlStrategyGoalBeenReached("Vehicle1"));
 }
@@ -425,7 +424,7 @@ TEST(FollowTrajectoryAction, GivenUnmatchingControlStrategyGoalIsReached_Returns
 TEST(FollowTrajectoryAction, GivenFollowTrajectoryAction_WhenNoTrajectoryRef_ThenNoUpdateControlStrategyAndLogError)
 {
   testing::OpenScenarioEngine::v1_3::TestLogger logger;
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
+  auto fake_environment = std::make_shared<FakeEnvironment>();
 
   OpenScenarioEngine::v1_3::FollowTrajectoryAction followTrajectoryAction({std::vector<std::string>{"Vehicle1"},
                                                                            0.0,
@@ -433,9 +432,9 @@ TEST(FollowTrajectoryAction, GivenFollowTrajectoryAction_WhenNoTrajectoryRef_The
                                                                            OpenScenarioEngine::v1_3::TimeReference{},
                                                                            OpenScenarioEngine::v1_3::TrajectoryFollowingMode{},
                                                                            OpenScenarioEngine::v1_3::TrajectoryRef{}},
-                                                                          {mockEnvironment});
+                                                                          {fake_environment});
 
-  EXPECT_CALL(*mockEnvironment, UpdateControlStrategies(_, _)).Times(::testing::AtMost(0));
+  EXPECT_CALL(*fake_environment, UpdateControlStrategies(_, _)).Times(::testing::AtMost(0));
   EXPECT_NO_THROW(followTrajectoryAction.SetControlStrategy());
   EXPECT_THAT(logger.LastLogLevel(), mantle_api::LogLevel::kError);
   EXPECT_THAT(logger.LastLogMessage(), testing::HasSubstr("FollowTrajectoryAction does not contain TrajectoryRef."));
@@ -455,15 +454,15 @@ TEST(FollowTrajectoryAction, GivenFollowTrajectoryActionAndTrajectoryRef_WhenPol
   mantle_api::Trajectory setTrajectory{};
   setTrajectory.type = polyLine;
 
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  auto mockGeometryHelper = static_cast<const MockGeometryHelper*>(mockEnvironment->GetGeometryHelper());
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  auto mockGeometryHelper = static_cast<const MockGeometryHelper*>(fake_environment->GetGeometryHelper());
 
   ON_CALL(*mockGeometryHelper, TranslateGlobalPositionLocally(pose1.position, _, _)).WillByDefault(Return(pose1.position));
   ON_CALL(*mockGeometryHelper, TranslateGlobalPositionLocally(pose2.position, _, _)).WillByDefault(Return(pose2.position));
   ON_CALL(*mockGeometryHelper, TranslateGlobalPositionLocally(pose3.position, _, _)).WillByDefault(Return(pose3.position));
 
   std::vector<std::shared_ptr<ControlStrategy>> control_strategies{};
-  EXPECT_CALL(*mockEnvironment, UpdateControlStrategies(_, _)).WillOnce(SaveArg<1>(&control_strategies));
+  EXPECT_CALL(*fake_environment, UpdateControlStrategies(_, _)).WillOnce(SaveArg<1>(&control_strategies));
 
   OpenScenarioEngine::v1_3::FollowTrajectoryAction followTrajectoryAction({std::vector<std::string>{"Vehicle1"},
                                                                            0.0,
@@ -471,7 +470,7 @@ TEST(FollowTrajectoryAction, GivenFollowTrajectoryActionAndTrajectoryRef_WhenPol
                                                                            OpenScenarioEngine::v1_3::TimeReference{},
                                                                            OpenScenarioEngine::v1_3::TrajectoryFollowingMode{},
                                                                            setTrajectory},
-                                                                          {mockEnvironment});
+                                                                          {fake_environment});
 
   EXPECT_NO_THROW(followTrajectoryAction.SetControlStrategy());
 
@@ -503,13 +502,13 @@ TEST(FollowTrajectoryAction, GivenFollowTrajectoryActionAndTrajectoryRef_WhenClo
   mantle_api::Trajectory expected_trajectory{};
   expected_trajectory.type = expected_clothoid_spline;
 
-  auto mock_environment = std::make_shared<MockEnvironment>();
-  auto mockGeometryHelper = static_cast<const MockGeometryHelper*>(mock_environment->GetGeometryHelper());
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  auto mockGeometryHelper = static_cast<const MockGeometryHelper*>(fake_environment->GetGeometryHelper());
 
   ON_CALL(*mockGeometryHelper, TranslateGlobalPositionLocally(expected_clothoid_spline.segments.front().position_start.value().position, _, _)).WillByDefault(Return(expected_clothoid_spline.segments.front().position_start.value().position));
 
   std::vector<std::shared_ptr<ControlStrategy>> control_strategies{};
-  EXPECT_CALL(*mock_environment, UpdateControlStrategies(_, _)).WillOnce(SaveArg<1>(&control_strategies));
+  EXPECT_CALL(*fake_environment, UpdateControlStrategies(_, _)).WillOnce(SaveArg<1>(&control_strategies));
 
   OpenScenarioEngine::v1_3::FollowTrajectoryAction follow_trajectory_action({std::vector<std::string>{"Vehicle1"},
                                                                              0.0,
@@ -517,7 +516,7 @@ TEST(FollowTrajectoryAction, GivenFollowTrajectoryActionAndTrajectoryRef_WhenClo
                                                                              OpenScenarioEngine::v1_3::TimeReference{},
                                                                              OpenScenarioEngine::v1_3::TrajectoryFollowingMode{},
                                                                              expected_trajectory},
-                                                                            {mock_environment});
+                                                                            {fake_environment});
 
   EXPECT_NO_THROW(follow_trajectory_action.SetControlStrategy());
 
@@ -534,9 +533,9 @@ TEST(FollowTrajectoryAction, GivenFollowTrajectoryActionAndTrajectoryRef_WhenClo
 TEST(FollowTrajectoryAction,
      GivenFollowTrajectoryActionWithTimeReference_WhenStartAction_ThenControlStrategyHasMovementDomainBoth)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
+  auto fake_environment = std::make_shared<FakeEnvironment>();
   std::vector<std::shared_ptr<ControlStrategy>> control_strategies{};
-  EXPECT_CALL(*mockEnvironment, UpdateControlStrategies(_, _)).WillOnce(SaveArg<1>(&control_strategies));
+  EXPECT_CALL(*fake_environment, UpdateControlStrategies(_, _)).WillOnce(SaveArg<1>(&control_strategies));
 
   OpenScenarioEngine::v1_3::FollowTrajectoryAction followTrajectoryAction({std::vector<std::string>{"Vehicle1"},
                                                                            0.0,
@@ -544,7 +543,7 @@ TEST(FollowTrajectoryAction,
                                                                            {mantle_api::FollowTrajectoryControlStrategy::TrajectoryTimeReference{}},
                                                                            OpenScenarioEngine::v1_3::TrajectoryFollowingMode{},
                                                                            mantle_api::Trajectory{}},
-                                                                          {mockEnvironment});
+                                                                          {fake_environment});
 
   followTrajectoryAction.SetControlStrategy();
   ASSERT_THAT(control_strategies, testing::SizeIs(1));
@@ -557,9 +556,9 @@ TEST(FollowTrajectoryAction,
 TEST(FollowTrajectoryAction,
      GivenFollowTrajectoryActionWithoutTimeReference_WhenStartAction_ThenControlStrategyHasMovementDomainLateral)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
+  auto fake_environment = std::make_shared<FakeEnvironment>();
   std::vector<std::shared_ptr<ControlStrategy>> control_strategies{};
-  EXPECT_CALL(*mockEnvironment, UpdateControlStrategies(_, _)).WillOnce(SaveArg<1>(&control_strategies));
+  EXPECT_CALL(*fake_environment, UpdateControlStrategies(_, _)).WillOnce(SaveArg<1>(&control_strategies));
 
   OpenScenarioEngine::v1_3::FollowTrajectoryAction followTrajectoryAction({std::vector<std::string>{"Vehicle1"},
                                                                            0.0,
@@ -567,7 +566,7 @@ TEST(FollowTrajectoryAction,
                                                                            std::nullopt,
                                                                            OpenScenarioEngine::v1_3::TrajectoryFollowingMode{},
                                                                            mantle_api::Trajectory{}},
-                                                                          {mockEnvironment});
+                                                                          {fake_environment});
 
   followTrajectoryAction.SetControlStrategy();
   ASSERT_THAT(control_strategies, testing::SizeIs(1));
diff --git a/engine/tests/Storyboard/MotionControlAction/LaneChangeActionTest.cpp b/engine/tests/Storyboard/MotionControlAction/LaneChangeActionTest.cpp
index 839895b0fe97ba4d9ebc881595dcf09c2e766b93..d2e462fc502a723bfda6a2691ef6395494bfb707 100644
--- a/engine/tests/Storyboard/MotionControlAction/LaneChangeActionTest.cpp
+++ b/engine/tests/Storyboard/MotionControlAction/LaneChangeActionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -9,13 +9,12 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
-#include "builders/ActionBuilder.h"
 #include "Storyboard/MotionControlAction/LaneChangeAction.h"
 #include "Storyboard/MotionControlAction/LaneChangeAction_impl.h"
 #include "TestUtils.h"
+#include "builders/ActionBuilder.h"
 #include "gmock/gmock.h"
 
 using namespace mantle_api;
@@ -24,168 +23,173 @@ using testing::Return;
 using namespace OpenScenarioEngine::v1_3;
 using namespace testing::OpenScenarioEngine::v1_3;
 
-class LaneChangeActionTestFixture : public OpenScenarioEngineLibraryTestBase {
+class LaneChangeActionTestFixture : public OpenScenarioEngineLibraryTestBase
+{
 protected:
-    void SetUp() override
-    {
-        OpenScenarioEngineLibraryTestBase::SetUp();
-        auto engine_abort_flags = std::make_shared<EngineAbortFlags>(EngineAbortFlags::kNoAbort);
-        auto entity_broker = std::make_shared<EntityBroker>(false);
-        entity_broker->add("Ego");
-        root_node_ = std::make_shared<FakeRootNode>(env_, engine_abort_flags, entity_broker);
-    }
-
-    std::shared_ptr<FakeRootNode> root_node_{nullptr};
+  void SetUp() override
+  {
+    OpenScenarioEngineLibraryTestBase::SetUp();
+    auto engine_abort_flags = std::make_shared<EngineAbortFlags>(EngineAbortFlags::kNoAbort);
+    auto entity_broker = std::make_shared<EntityBroker>(false);
+    entity_broker->add("Ego");
+    root_node_ = std::make_shared<FakeRootNode>(env_, engine_abort_flags, entity_broker);
+  }
+
+  std::shared_ptr<FakeRootNode> root_node_{nullptr};
 };
 
-#if !defined (WIN32) && !defined (WIN64)
+#if !defined(WIN32) && !defined(WIN64)
 TEST_F(LaneChangeActionTestFixture, GivenLaneChangeActionWithoutDynamics_WhenDistributeData_SegmentationFault)
 {
-    auto lane_change_action_data =
-            FakeLaneChangeActionBuilder{}
-                    .WithLaneChangeTarget(
-                            FakeLaneChangeTargetBuilder{}.WithAbsoluteTargetLane(
-                                            FakeAbsoluteTargetLaneBuilder{}.WithValue("1").Build())
-                                    .Build())
-                    .Build();
-    auto lane_change_action = std::make_shared<Node::LaneChangeAction>(lane_change_action_data);
-
-    root_node_->setChild(lane_change_action);
-    ASSERT_EXIT(root_node_->distributeData(), ::testing::KilledBySignal(SIGSEGV),".*");
+  auto lane_change_action_data =
+      FakeLaneChangeActionBuilder{}
+          .WithLaneChangeTarget(
+              FakeLaneChangeTargetBuilder{}.WithAbsoluteTargetLane(
+                                               FakeAbsoluteTargetLaneBuilder{}.WithValue("1").Build())
+                  .Build())
+          .Build();
+  auto lane_change_action = std::make_shared<Node::LaneChangeAction>(lane_change_action_data);
+
+  root_node_->setChild(lane_change_action);
+  ASSERT_EXIT(root_node_->distributeData(), ::testing::KilledBySignal(SIGSEGV), ".*");
 }
 #endif
 
 TEST_F(LaneChangeActionTestFixture, GivenLaneChangeActionWithoutLaneChangeTarget_WhenExecuteTick_ExceptionRaised)
 {
-    auto lane_change_action_data =
-            FakeLaneChangeActionBuilder{}
-                    .WithDynamics(FakeTransitionDynamicsBuilder{}.Build())
-                    .WithLaneChangeTarget(FakeLaneChangeTargetBuilder{}.Build())
-                    .Build();
-    auto lane_change_action = std::make_shared<Node::LaneChangeAction>(lane_change_action_data);
-
-    root_node_->setChild(lane_change_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_ANY_THROW(root_node_->executeTick());
+  auto lane_change_action_data =
+      FakeLaneChangeActionBuilder{}
+          .WithDynamics(FakeTransitionDynamicsBuilder{}.Build())
+          .WithLaneChangeTarget(FakeLaneChangeTargetBuilder{}.Build())
+          .Build();
+  auto lane_change_action = std::make_shared<Node::LaneChangeAction>(lane_change_action_data);
+
+  root_node_->setChild(lane_change_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_ANY_THROW(root_node_->executeTick());
 }
 
 TEST_F(LaneChangeActionTestFixture,
        GivenLaneChangeActionWithAbsoluteTargetLane_WhenControlStrategyGoalReached_ThenExpectCorrectStrategy)
 {
-    std::string shape_name("step");
-    NET_ASAM_OPENSCENARIO::v1_3::DynamicsShape dynamics_shape(shape_name);
-    auto lane_change_action_data =
-            FakeLaneChangeActionBuilder{}
-            .WithDynamics(FakeTransitionDynamicsBuilder{}.Build())
-            .WithLaneChangeTarget(
-                    FakeLaneChangeTargetBuilder{}.WithAbsoluteTargetLane(
-                            FakeAbsoluteTargetLaneBuilder{}.WithValue("1").Build())
-                                .Build())
-            .Build();
-    auto lane_change_action = std::make_shared<Node::LaneChangeAction>(lane_change_action_data);
-
-    auto expected_control_strategy = mantle_api::PerformLaneChangeControlStrategy();
-
-    EXPECT_CALL(*env_, UpdateControlStrategies(0, testing::_))
-            .Times(1)
-            .WillRepeatedly([expected_control_strategy](
-                    std::uint64_t controller_id,
-                    std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies) {
+  std::string shape_name("step");
+  NET_ASAM_OPENSCENARIO::v1_3::DynamicsShape dynamics_shape(shape_name);
+  auto lane_change_action_data =
+      FakeLaneChangeActionBuilder{}
+          .WithDynamics(FakeTransitionDynamicsBuilder{}.Build())
+          .WithLaneChangeTarget(
+              FakeLaneChangeTargetBuilder{}.WithAbsoluteTargetLane(
+                                               FakeAbsoluteTargetLaneBuilder{}.WithValue("1").Build())
+                  .Build())
+          .Build();
+  auto lane_change_action = std::make_shared<Node::LaneChangeAction>(lane_change_action_data);
+
+  auto expected_control_strategy = mantle_api::PerformLaneChangeControlStrategy();
+
+  EXPECT_CALL(*env_, UpdateControlStrategies(UniqueId(0), testing::_))
+      .Times(1)
+      .WillRepeatedly([expected_control_strategy](
+                          mantle_api::UniqueId controller_id,
+                          std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies)
+                      {
                 std::ignore = controller_id;
                 EXPECT_EQ(1, control_strategies.size());
                 auto control_strategy = dynamic_cast<mantle_api::PerformLaneChangeControlStrategy*>(control_strategies[0].get());
                 EXPECT_NE(nullptr, control_strategy);
-                EXPECT_EQ(*control_strategy, expected_control_strategy);
-            });
+                EXPECT_EQ(*control_strategy, expected_control_strategy); });
 
-    root_node_->setChild(lane_change_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
+  root_node_->setChild(lane_change_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
 }
 
 TEST_F(LaneChangeActionTestFixture,
        GivenLaneChangeActionWithRelativeLaneTarget_WhenControlStrategyGoalReached_ThenExpectCorrectStrategy)
 {
-    std::string shape_name("step");
-    NET_ASAM_OPENSCENARIO::v1_3::DynamicsShape dynamics_shape(shape_name);
-    auto lane_change_action_data =
-            FakeLaneChangeActionBuilder{}
-            .WithDynamics(FakeTransitionDynamicsBuilder{}.Build())
-            .WithLaneChangeTarget(
-                    FakeLaneChangeTargetBuilder{}.WithRelativeTargetLane(
-                            FakeRelativeTargetLaneBuilder{}.WithValue(1).WithEntityRef("Ego").Build())
-                                .Build())
-            .Build();
-    auto lane_change_action = std::make_shared<Node::LaneChangeAction>(lane_change_action_data);
-
-    auto expected_control_strategy = mantle_api::PerformLaneChangeControlStrategy();
-
-    EXPECT_CALL(*env_, UpdateControlStrategies(0, testing::_))
-            .Times(1)
-            .WillRepeatedly([expected_control_strategy](
-                    std::uint64_t controller_id,
-                    std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies) {
+  std::string shape_name("step");
+  NET_ASAM_OPENSCENARIO::v1_3::DynamicsShape dynamics_shape(shape_name);
+  auto lane_change_action_data =
+      FakeLaneChangeActionBuilder{}
+          .WithDynamics(FakeTransitionDynamicsBuilder{}.Build())
+          .WithLaneChangeTarget(
+              FakeLaneChangeTargetBuilder{}.WithRelativeTargetLane(
+                                               FakeRelativeTargetLaneBuilder{}.WithValue(1).WithEntityRef("Ego").Build())
+                  .Build())
+          .Build();
+  auto lane_change_action = std::make_shared<Node::LaneChangeAction>(lane_change_action_data);
+
+  auto expected_control_strategy = mantle_api::PerformLaneChangeControlStrategy();
+
+  EXPECT_CALL(*env_, UpdateControlStrategies(UniqueId(0), testing::_))
+      .Times(1)
+      .WillRepeatedly([expected_control_strategy](
+                          UniqueId controller_id,
+                          std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies)
+                      {
                 std::ignore = controller_id;
                 EXPECT_EQ(1, control_strategies.size());
                 auto control_strategy = dynamic_cast<mantle_api::PerformLaneChangeControlStrategy*>(control_strategies[0].get());
                 EXPECT_NE(nullptr, control_strategy);
-                EXPECT_EQ(*control_strategy, expected_control_strategy);
-            });
+                EXPECT_EQ(*control_strategy, expected_control_strategy); });
 
-    root_node_->setChild(lane_change_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
+  root_node_->setChild(lane_change_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
 }
 
 TEST(LaneChangeAction, GivenMatchingControlStrategyGoalIsReached_ReturnTrue)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  ON_CALL(*mockEnvironment,
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  ON_CALL(*fake_environment,
           HasControlStrategyGoalBeenReached(_, ControlStrategyType::kPerformLaneChange))
       .WillByDefault(Return(true));
 
   OpenScenarioEngine::v1_3::LaneChangeAction laneChangeAction({std::vector<std::string>{"Vehicle1"},
                                                                0.0,
                                                                OpenScenarioEngine::v1_3::TransitionDynamics{},
-                                                               []() -> UniqueId { return 0; }},
-                                                              {mockEnvironment});
+                                                               []() -> LaneId
+                                                               { return 0; }},
+                                                              {fake_environment});
 
   ASSERT_TRUE(laneChangeAction.HasControlStrategyGoalBeenReached("Vehicle1"));
 }
 
 TEST(LaneChangeAction, GivenUnmatchingControlStrategyGoalIsReached_ReturnsFalse)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
-  ON_CALL(*mockEnvironment,
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  ON_CALL(*fake_environment,
           HasControlStrategyGoalBeenReached(_, ControlStrategyType::kUndefined))
       .WillByDefault(Return(false));
 
   OpenScenarioEngine::v1_3::LaneChangeAction laneChangeAction({std::vector<std::string>{"Vehicle1"},
                                                                0.0,
                                                                OpenScenarioEngine::v1_3::TransitionDynamics{},
-                                                               []() -> UniqueId { return 0; }},
-                                                              {mockEnvironment});
+                                                               []() -> LaneId
+                                                               { return 0; }},
+                                                              {fake_environment});
 
   ASSERT_FALSE(laneChangeAction.HasControlStrategyGoalBeenReached("Vehicle1"));
 }
 
 TEST(LaneChangeAction, GivenControlStrategyElements_SetUpControlStrategy)
 {
-  auto mockEnvironment = std::make_shared<MockEnvironment>();
+  auto fake_environment = std::make_shared<FakeEnvironment>();
   std::vector<std::shared_ptr<ControlStrategy>> control_strategies{};
 
-  EXPECT_CALL(*mockEnvironment, UpdateControlStrategies(0, testing::_))
+  ON_CALL(dynamic_cast<MockVehicle&>(*fake_environment->GetEntityRepository().Get("Ego").lock()), GetUniqueId()).WillByDefault(testing::Return(UniqueId(0)));
+  EXPECT_CALL(*fake_environment, UpdateControlStrategies(UniqueId(0), testing::_))
       .Times(1)
       .WillOnce(testing::SaveArg<1>(&control_strategies));
 
   OpenScenarioEngine::v1_3::LaneChangeAction laneChangeAction({std::vector<std::string>{"Vehicle1"},
                                                                0.0,
                                                                OpenScenarioEngine::v1_3::TransitionDynamics{},
-                                                               []() -> UniqueId { return 0; }},
-                                                              {mockEnvironment});
+                                                               []() -> LaneId
+                                                               { return 0; }},
+                                                              {fake_environment});
 
   EXPECT_NO_THROW(laneChangeAction.SetControlStrategy());
   auto control_strategy = dynamic_cast<PerformLaneChangeControlStrategy*>(control_strategies[0].get());
diff --git a/engine/tests/Storyboard/MotionControlAction/LaneOffsetActionTest.cpp b/engine/tests/Storyboard/MotionControlAction/LaneOffsetActionTest.cpp
index 6c86ba28e3737c110428fc51e91984830cbaa0f3..685b86578f6a1710ca9702f8a10fb912184c7425 100644
--- a/engine/tests/Storyboard/MotionControlAction/LaneOffsetActionTest.cpp
+++ b/engine/tests/Storyboard/MotionControlAction/LaneOffsetActionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2023-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2025, Ansys, Inc.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,20 +8,19 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
+#include "Storyboard/MotionControlAction/LaneOffsetAction.h"
 #include "Storyboard/MotionControlAction/LaneOffsetAction_impl.h"
+#include "TestUtils.h"
+#include "builders/ActionBuilder.h"
 #include "gmock/gmock.h"
 
 using namespace mantle_api;
 using namespace units::literals;
 
-#include "Storyboard/MotionControlAction/LaneOffsetAction.h"
-#include "TestUtils.h"
-#include "builders/ActionBuilder.h"
-
 using namespace mantle_api;
+using testing::_;
 using testing::Eq;
 using testing::NiceMock;
 using testing::Return;
@@ -57,10 +56,10 @@ TEST_F(LaneOffsetActionTestFixture, GivenLaneOffsetActionControlStrategyElements
 
   OpenScenarioEngine::v1_3::LaneOffsetActionDynamics laneOffsetActionDynamics{.maxLateralAcc = max_lat_acc, .dynamicsShape = dynamics_shape};
   OpenScenarioEngine::v1_3::LaneOffsetTarget laneOffsetTarget = 1_m;
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fake_environment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
   std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies{};
-  EXPECT_CALL(*mockEnvironment,
-              UpdateControlStrategies(testing::_, testing::_))
+  EXPECT_CALL(*fake_environment,
+              UpdateControlStrategies(_, _))
       .WillOnce(testing::SaveArg<1>(&control_strategies));
 
   OpenScenarioEngine::v1_3::LaneOffsetAction laneOffsetAction({.entities = std::vector<std::string>{"Ego"},
@@ -68,7 +67,7 @@ TEST_F(LaneOffsetActionTestFixture, GivenLaneOffsetActionControlStrategyElements
                                                                .laneOffsetActionDynamics = laneOffsetActionDynamics,
                                                                .GetLaneOffsetTarget = [laneOffsetTarget](const Entity &actor) -> units::length::meter_t
                                                                { return laneOffsetTarget; }},
-                                                              {mockEnvironment});
+                                                              {fake_environment});
 
   EXPECT_NO_THROW(laneOffsetAction.SetControlStrategy());
   EXPECT_THAT(control_strategies, testing::SizeIs(1));
@@ -80,7 +79,7 @@ TEST_F(LaneOffsetActionTestFixture, GivenLaneOffsetActionControlStrategyElements
   EXPECT_THAT(control_strategy->continuous, Eq(continuous));
 
   EXPECT_THAT(laneOffsetAction.GetMovementDomain(), Eq(mantle_api::MovementDomain::kLateral));
-  EXPECT_CALL(*mockEnvironment,
+  EXPECT_CALL(*fake_environment,
               HasControlStrategyGoalBeenReached(testing::_, testing::_))
       .WillOnce(Return(false));
   EXPECT_FALSE(laneOffsetAction.HasControlStrategyGoalBeenReached("Ego"));
diff --git a/engine/tests/Storyboard/MotionControlAction/LateralDistanceActionTest.cpp b/engine/tests/Storyboard/MotionControlAction/LateralDistanceActionTest.cpp
index fbc93034c589453c68ad8103e03298d373e477ae..608850cda369f0b67bb6abc304b7ccb84037e09e 100644
--- a/engine/tests/Storyboard/MotionControlAction/LateralDistanceActionTest.cpp
+++ b/engine/tests/Storyboard/MotionControlAction/LateralDistanceActionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,13 +8,14 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
 #include "Storyboard/MotionControlAction/LateralDistanceAction_impl.h"
+#include "TestUtils.h"
 #include "TestUtils/TestLogger.h"
 
 using namespace mantle_api;
+using namespace testing::OpenScenarioEngine::v1_3;
 
 using units::literals::operator""_m;
 using units::literals::operator""_rad;
@@ -25,11 +26,11 @@ protected:
   void SetUp() override
   {
     LOGGER = std::make_unique<testing::OpenScenarioEngine::v1_3::TestLogger>();
-    mock_environment_ = std::make_shared<MockEnvironment>();
+    fake_environment_ = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
   }
 
   std::unique_ptr<testing::OpenScenarioEngine::v1_3::TestLogger> LOGGER;
-  std::shared_ptr<MockEnvironment> mock_environment_;
+  std::shared_ptr<testing::OpenScenarioEngine::v1_3::FakeEnvironment> fake_environment_;
   OpenScenarioEngine::v1_3::LateralDistanceAction::Values values_{.entities = {"Actor"},
                                                                   .continuous = false,
                                                                   .distance = 0.0,
@@ -42,7 +43,7 @@ protected:
 
 TEST_F(LateralDistanceActionTestFixture, GivenNoDynamicConstraintsAndContinuousFalse_WhenHasControlStrategyGoalBeenReached_ThenReturnsTrue)
 {
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateralDistanceAction(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateralDistanceAction(values_, {fake_environment_});
 
   ASSERT_TRUE(lateralDistanceAction.HasControlStrategyGoalBeenReached("actorEntity"));
 }
@@ -50,7 +51,7 @@ TEST_F(LateralDistanceActionTestFixture, GivenNoDynamicConstraintsAndContinuousF
 TEST_F(LateralDistanceActionTestFixture, GivenNoDynamicConstraintsAndContinuousTrue_WhenHasControlStrategyGoalBeenReached_ThenReturnsFalse)
 {
   values_.continuous = true;
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateralDistanceAction(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateralDistanceAction(values_, {fake_environment_});
 
   ASSERT_FALSE(lateralDistanceAction.HasControlStrategyGoalBeenReached("actorEntity"));
 }
@@ -58,7 +59,7 @@ TEST_F(LateralDistanceActionTestFixture, GivenNoDynamicConstraintsAndContinuousT
 TEST_F(LateralDistanceActionTestFixture, GivenDynamicConstraintsAndContinuousFalse_WhenHasControlStrategyGoalBeenReached_ThenReturnsFalse)
 {
   values_.dynamicConstraints = OpenScenarioEngine::v1_3::DynamicConstraintsStruct{};
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateralDistanceAction(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateralDistanceAction(values_, {fake_environment_});
 
   ASSERT_FALSE(lateralDistanceAction.HasControlStrategyGoalBeenReached("actorEntity"));
 }
@@ -66,7 +67,7 @@ TEST_F(LateralDistanceActionTestFixture, GivenDynamicConstraintsAndContinuousFal
 TEST_F(LateralDistanceActionTestFixture, GivenContinuousTrue_WhenSetControlStrategy_ThenReturnWithError)
 {
   values_.continuous = true;
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {fake_environment_});
   lateral_distance_action.SetControlStrategy();
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kError);
@@ -76,7 +77,7 @@ TEST_F(LateralDistanceActionTestFixture, GivenContinuousTrue_WhenSetControlStrat
 TEST_F(LateralDistanceActionTestFixture, GivenCoordinateSystemOtherThanLane_WhenSetControlStrategy_ThenReturnWithError)
 {
   values_.coordinateSystem = OpenScenarioEngine::v1_3::CoordinateSystem::kEntity;
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {fake_environment_});
   lateral_distance_action.SetControlStrategy();
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kError);
@@ -86,7 +87,7 @@ TEST_F(LateralDistanceActionTestFixture, GivenCoordinateSystemOtherThanLane_When
 TEST_F(LateralDistanceActionTestFixture, GivenDynamicConstraints_WhenSetControlStrategy_ThenReturnWithError)
 {
   values_.dynamicConstraints = OpenScenarioEngine::v1_3::DynamicConstraintsStruct{};
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {fake_environment_});
   lateral_distance_action.SetControlStrategy();
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kError);
@@ -96,18 +97,18 @@ TEST_F(LateralDistanceActionTestFixture, GivenDynamicConstraints_WhenSetControlS
 TEST_F(LateralDistanceActionTestFixture, GivenNegativeDistance_WhenSetControlStrategy_ThenExceptionThrown)
 {
   values_.distance = -2.0;
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {fake_environment_});
   EXPECT_THROW(lateral_distance_action.SetControlStrategy(), std::runtime_error);
 }
 
 TEST_F(LateralDistanceActionTestFixture, GivenRefEntityNotOnLane_WhenSetControlStrategy_ThenReturnWithWarning)
 {
   std::vector<mantle_api::UniqueId> empty_list{};
-  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mock_environment_->GetQueryService()),
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_environment_->GetQueryService()),
               GetLaneIdsAtPosition(testing::_))
       .WillRepeatedly(testing::Return(empty_list));
 
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {fake_environment_});
   lateral_distance_action.SetControlStrategy();
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kWarning);
@@ -123,9 +124,9 @@ TEST_F(LateralDistanceActionTestFixture, GivenDistanceWithinRoadNetworkFreespace
   mantle_api::Vec3<units::length::meter_t> actor_entity_laterally_shifted_position{2.0_m, 3.0_m, 0.0_m};
   std::vector<mantle_api::UniqueId> lane_ids{1};
 
-  auto& actor_entity = dynamic_cast<mantle_api::MockVehicle&>(mock_environment_->GetEntityRepository().Get("Actor").value().get());
-  auto& mock_geometry_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*mock_environment_->GetGeometryHelper());
-  auto& mock_query_service = dynamic_cast<const mantle_api::MockQueryService&>(mock_environment_->GetQueryService());
+  auto& actor_entity = dynamic_cast<mantle_api::MockVehicle&>(*fake_environment_->GetEntityRepository().Get("Actor").lock());
+  auto& mock_geometry_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*fake_environment_->GetGeometryHelper());
+  auto& mock_query_service = dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_environment_->GetQueryService());
 
   EXPECT_CALL(mock_geometry_helper,
               TranslateGlobalPositionLocally(testing::_, testing::_, testing::_))
@@ -156,15 +157,15 @@ TEST_F(LateralDistanceActionTestFixture, GivenDistanceWithinRoadNetworkFreespace
 
   EXPECT_CALL(actor_entity, SetPosition(actor_entity_laterally_shifted_position)).Times(1);
 
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {fake_environment_});
   lateral_distance_action.SetControlStrategy();
 }
 
 TEST_F(LateralDistanceActionTestFixture, GivenDistanceOutsideRoadNetwork_WhenSetControlStrategy_ThenActorPositionIsNotSet)
 {
   std::vector<mantle_api::UniqueId> lane_ids{1};
-  auto& actor_entity = dynamic_cast<mantle_api::MockVehicle&>(mock_environment_->GetEntityRepository().Get("Actor").value().get());
-  auto& mock_query_service = dynamic_cast<const mantle_api::MockQueryService&>(mock_environment_->GetQueryService());
+  auto& actor_entity = dynamic_cast<mantle_api::MockVehicle&>(*fake_environment_->GetEntityRepository().Get("Actor").lock());
+  auto& mock_query_service = dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_environment_->GetQueryService());
 
   EXPECT_CALL(mock_query_service, GetLaneIdsAtPosition(testing::_)).WillRepeatedly(testing::Return(lane_ids));
 
@@ -175,7 +176,7 @@ TEST_F(LateralDistanceActionTestFixture, GivenDistanceOutsideRoadNetwork_WhenSet
 
   EXPECT_CALL(actor_entity, SetPosition(testing::_)).Times(0);
 
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {fake_environment_});
   lateral_distance_action.SetControlStrategy();
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kWarning);
@@ -186,8 +187,8 @@ TEST_F(LateralDistanceActionTestFixture, GivenRefEntityPositionWhichCannotBeProj
 {
   mantle_api::Vec3<units::length::meter_t> ref_entity_position{1.0_m, 0.0_m, 0.0_m};
   std::vector<mantle_api::UniqueId> lane_ids{1};
-  auto& actor_entity = dynamic_cast<mantle_api::MockVehicle&>(mock_environment_->GetEntityRepository().Get("Actor").value().get());
-  auto& mock_query_service = dynamic_cast<const mantle_api::MockQueryService&>(mock_environment_->GetQueryService());
+  auto& actor_entity = dynamic_cast<mantle_api::MockVehicle&>(*fake_environment_->GetEntityRepository().Get("Actor").lock());
+  auto& mock_query_service = dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_environment_->GetQueryService());
 
   EXPECT_CALL(mock_query_service, GetLaneIdsAtPosition(testing::_)).WillRepeatedly(testing::Return(lane_ids));
 
@@ -203,7 +204,7 @@ TEST_F(LateralDistanceActionTestFixture, GivenRefEntityPositionWhichCannotBeProj
 
   EXPECT_CALL(actor_entity, SetPosition(testing::_)).Times(0);
 
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {fake_environment_});
   lateral_distance_action.SetControlStrategy();
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kWarning);
@@ -214,8 +215,8 @@ TEST_F(LateralDistanceActionTestFixture, GivenActorEntityPositionWhichCannotBePr
 {
   mantle_api::Vec3<units::length::meter_t> ref_entity_position{1.0_m, 0.0_m, 0.0_m};
   std::vector<mantle_api::UniqueId> lane_ids{1};
-  auto& actor_entity = dynamic_cast<mantle_api::MockVehicle&>(mock_environment_->GetEntityRepository().Get("Actor").value().get());
-  auto& mock_query_service = dynamic_cast<const mantle_api::MockQueryService&>(mock_environment_->GetQueryService());
+  auto& actor_entity = dynamic_cast<mantle_api::MockVehicle&>(*fake_environment_->GetEntityRepository().Get("Actor").lock());
+  auto& mock_query_service = dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_environment_->GetQueryService());
 
   EXPECT_CALL(mock_query_service, GetLaneIdsAtPosition(testing::_)).WillRepeatedly(testing::Return(lane_ids));
 
@@ -236,7 +237,7 @@ TEST_F(LateralDistanceActionTestFixture, GivenActorEntityPositionWhichCannotBePr
 
   EXPECT_CALL(actor_entity, SetPosition(testing::_)).Times(0);
 
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {fake_environment_});
   lateral_distance_action.SetControlStrategy();
 
   EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kWarning);
@@ -262,16 +263,16 @@ TEST_F(LateralDistanceActionTestFixture, GivenFreespaceTrueVehiclesOrientedSimil
   mantle_api::Orientation3<units::angle::radian_t> lane_orientation{0.0_rad, 0.0_rad, 0.0_rad};
   std::vector<mantle_api::UniqueId> lane_ids{1};
 
-  MockVehicle ref_entity{};
-  MockVehicle actor_entity{};
-  auto& mock_geometry_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*mock_environment_->GetGeometryHelper());
-  auto& mock_query_service = dynamic_cast<const mantle_api::MockQueryService&>(mock_environment_->GetQueryService());
-  auto& mock_entity_repository = dynamic_cast<mantle_api::MockEntityRepository&>(mock_environment_->GetEntityRepository());
+  std::shared_ptr<FakeVehicle> ref_entity{std::make_shared<FakeVehicle>()};
+  std::shared_ptr<FakeVehicle> actor_entity{std::make_shared<FakeVehicle>()};
+  auto& mock_geometry_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*fake_environment_->GetGeometryHelper());
+  auto& mock_query_service = dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_environment_->GetQueryService());
+  auto& fake_entity_repository = dynamic_cast<testing::OpenScenarioEngine::v1_3::FakeEntityRepository&>(fake_environment_->GetEntityRepository());
 
-  EXPECT_CALL(mock_entity_repository, GetImpl("Ego")).WillRepeatedly(testing::Return(&ref_entity));
-  EXPECT_CALL(mock_entity_repository, GetImpl("Actor")).WillRepeatedly(testing::Return(&actor_entity));
-  EXPECT_CALL(ref_entity, GetPosition()).WillRepeatedly(testing::Return(ref_entity_position));
-  EXPECT_CALL(actor_entity, GetPosition()).WillRepeatedly(testing::Return(actor_entity_position));
+  EXPECT_CALL(fake_entity_repository, GetImpl("Ego")).WillRepeatedly(testing::Return(ref_entity));
+  EXPECT_CALL(fake_entity_repository, GetImpl("Actor")).WillRepeatedly(testing::Return(actor_entity));
+  EXPECT_CALL(*ref_entity, GetPosition()).WillRepeatedly(testing::Return(ref_entity_position));
+  EXPECT_CALL(*actor_entity, GetPosition()).WillRepeatedly(testing::Return(actor_entity_position));
   EXPECT_CALL(mock_query_service, GetLaneIdsAtPosition(testing::_)).WillRepeatedly(testing::Return(lane_ids));
   EXPECT_CALL(mock_geometry_helper, AreOrientedSimilarly(testing::_, lane_orientation)).WillRepeatedly(testing::Return(true));
 
@@ -308,11 +309,11 @@ TEST_F(LateralDistanceActionTestFixture, GivenFreespaceTrueVehiclesOrientedSimil
       .WillOnce(testing::Return(ref_entity_frontleft_corner_position_laterally_shifted))
       .WillOnce(testing::Return(actor_entity_frontright_corner_position_laterally_shifted));
 
-  EXPECT_CALL(actor_entity, SetPosition(actor_entity_target_position)).Times(1);
+  EXPECT_CALL(*actor_entity, SetPosition(actor_entity_target_position)).Times(1);
 
   values_.lateralDisplacement = mantle_api::LateralDisplacementDirection::kLeft;
   values_.freespace = true;
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {fake_environment_});
   lateral_distance_action.SetControlStrategy();
 }
 
@@ -334,16 +335,16 @@ TEST_F(LateralDistanceActionTestFixture, GivenFreespaceTrueVehiclesOrientedOppos
   mantle_api::Orientation3<units::angle::radian_t> lane_orientation{0.0_rad, 0.0_rad, 0.0_rad};
   std::vector<mantle_api::UniqueId> lane_ids{1};
 
-  MockVehicle ref_entity{};
-  MockVehicle actor_entity{};
-  auto& mock_geometry_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*mock_environment_->GetGeometryHelper());
-  auto& mock_query_service = dynamic_cast<const mantle_api::MockQueryService&>(mock_environment_->GetQueryService());
-  auto& mock_entity_repository = dynamic_cast<mantle_api::MockEntityRepository&>(mock_environment_->GetEntityRepository());
+  std::shared_ptr<FakeVehicle> ref_entity{std::make_shared<FakeVehicle>()};
+  std::shared_ptr<FakeVehicle> actor_entity{std::make_shared<FakeVehicle>()};
+  auto& mock_geometry_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*fake_environment_->GetGeometryHelper());
+  auto& mock_query_service = dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_environment_->GetQueryService());
+  auto& fake_entity_repository = dynamic_cast<testing::OpenScenarioEngine::v1_3::FakeEntityRepository&>(fake_environment_->GetEntityRepository());
 
-  EXPECT_CALL(mock_entity_repository, GetImpl("Ego")).WillRepeatedly(testing::Return(&ref_entity));
-  EXPECT_CALL(mock_entity_repository, GetImpl("Actor")).WillRepeatedly(testing::Return(&actor_entity));
-  EXPECT_CALL(ref_entity, GetPosition()).WillRepeatedly(testing::Return(ref_entity_position));
-  EXPECT_CALL(actor_entity, GetPosition()).WillRepeatedly(testing::Return(actor_entity_position));
+  EXPECT_CALL(fake_entity_repository, GetImpl("Ego")).WillRepeatedly(testing::Return(ref_entity));
+  EXPECT_CALL(fake_entity_repository, GetImpl("Actor")).WillRepeatedly(testing::Return(actor_entity));
+  EXPECT_CALL(*ref_entity, GetPosition()).WillRepeatedly(testing::Return(ref_entity_position));
+  EXPECT_CALL(*actor_entity, GetPosition()).WillRepeatedly(testing::Return(actor_entity_position));
   EXPECT_CALL(mock_query_service, GetLaneIdsAtPosition(testing::_)).WillRepeatedly(testing::Return(lane_ids));
   EXPECT_CALL(mock_geometry_helper, AreOrientedSimilarly(testing::_, lane_orientation)).WillRepeatedly(testing::Return(false));
 
@@ -380,10 +381,10 @@ TEST_F(LateralDistanceActionTestFixture, GivenFreespaceTrueVehiclesOrientedOppos
       .WillOnce(testing::Return(ref_entity_frontleft_corner_position_laterally_shifted))
       .WillOnce(testing::Return(actor_entity_frontleft_corner_position_laterally_shifted));
 
-  EXPECT_CALL(actor_entity, SetPosition(actor_entity_target_position)).Times(1);
+  EXPECT_CALL(*actor_entity, SetPosition(actor_entity_target_position)).Times(1);
 
   values_.lateralDisplacement = mantle_api::LateralDisplacementDirection::kLeft;
   values_.freespace = true;
-  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {mock_environment_});
+  OpenScenarioEngine::v1_3::LateralDistanceAction lateral_distance_action(values_, {fake_environment_});
   lateral_distance_action.SetControlStrategy();
 }
diff --git a/engine/tests/Storyboard/MotionControlAction/LongitudinalDistanceActionTest.cpp b/engine/tests/Storyboard/MotionControlAction/LongitudinalDistanceActionTest.cpp
index 61d0fe2717112c6c01d9835e769a711190bc9f97..d678bad60c297518848649da61fc1408bc3c570b 100644
--- a/engine/tests/Storyboard/MotionControlAction/LongitudinalDistanceActionTest.cpp
+++ b/engine/tests/Storyboard/MotionControlAction/LongitudinalDistanceActionTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2023-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2022-2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made available under the
@@ -22,438 +22,439 @@ using namespace testing::OpenScenarioEngine::v1_3;
 
 class LongitudinalDistanceActionFixture : public OpenScenarioEngineLibraryTestBase
 {
-  protected:
-    void SetUp() override
-    {
-        OpenScenarioEngineLibraryTestBase::SetUp();
-        auto engine_abort_flags = std::make_shared<EngineAbortFlags>(EngineAbortFlags::kNoAbort);
-        auto entity_broker = std::make_shared<EntityBroker>(false);
-        entity_broker->add("TrafficVehicle");
-        root_node_ = std::make_shared<FakeRootNode>(env_, engine_abort_flags, entity_broker);
-    }
-
-    std::shared_ptr<FakeRootNode> root_node_{nullptr};
+protected:
+  void SetUp() override
+  {
+    OpenScenarioEngineLibraryTestBase::SetUp();
+    auto engine_abort_flags = std::make_shared<EngineAbortFlags>(EngineAbortFlags::kNoAbort);
+    auto entity_broker = std::make_shared<EntityBroker>(false);
+    entity_broker->add("TrafficVehicle");
+    root_node_ = std::make_shared<FakeRootNode>(env_, engine_abort_flags, entity_broker);
+  }
+
+  std::shared_ptr<FakeRootNode> root_node_{nullptr};
 };
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithNoDisplacementIsSet_WhenExecuteTick_ThenActorPoseIsNotUpdated)
 {
-    auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDistance(10.0)
-            .Build();
-
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetOrientation(testing::_))
-        .Times(0);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetPosition(testing::_))
-        .Times(0);
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
+  auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDistance(10.0)
+          .Build();
+
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetPosition(testing::_))
+      .Times(0);
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithAnyDisplacement_WhenExecuteTick_ThenActorPoseIsNotUpdated)
 {
-    auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::ANY)
-            .WithDistance(10.0)
-            .Build();
-
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetOrientation(testing::_))
-        .Times(0);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetPosition(testing::_))
-        .Times(0);
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
+  auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::ANY)
+          .WithDistance(10.0)
+          .Build();
+
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetPosition(testing::_))
+      .Times(0);
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithUnknownDisplacement_WhenExecuteTick_ThrowExeception)
 {
-    // Throwing from within distributeData ends early and the expectations on this object are not verified
-    testing::Mock::AllowLeak(&(env_->GetControllerRepository()));
+  // Throwing from within distributeData ends early and the expectations on this object are not verified
+  testing::Mock::AllowLeak(&(env_->GetControllerRepository()));
+  testing::Mock::AllowLeak(&(*env_->GetEntityRepository().Get("").lock()));
 
-    auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::UNKNOWN)
-            .WithDistance(10.0)
-            .Build();
+  auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::UNKNOWN)
+          .WithDistance(10.0)
+          .Build();
 
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
 
-    root_node_->setChild(longitudinal_distance_action);
-    EXPECT_ANY_THROW(root_node_->distributeData());
+  root_node_->setChild(longitudinal_distance_action);
+  EXPECT_ANY_THROW(root_node_->distributeData());
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithTrailingDisplacement_WhenExecuteTick_ThenActorPoseIsUpdated)
 {
-    auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::TRAILING_REFERENCED_ENTITY)
-            .WithContinuous(false)
-            .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
-            .WithFreeSpace(true)
-            .WithDistance(10.0)
-            .Build();
-
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(env_->GetQueryService()),
-                FindLanePoseAtDistanceFrom(testing::_, testing::_, testing::_))
-        .WillOnce(testing::Return(mantle_api::Pose{}));
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetOrientation(testing::_))
-        .Times(1);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetPosition(testing::_))
-        .Times(1);
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
+  auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::TRAILING_REFERENCED_ENTITY)
+          .WithContinuous(false)
+          .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
+          .WithFreeSpace(true)
+          .WithDistance(10.0)
+          .Build();
+
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(env_->GetQueryService()),
+              FindLanePoseAtDistanceFrom(testing::_, testing::_, testing::_))
+      .WillOnce(testing::Return(mantle_api::Pose{}));
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetOrientation(testing::_))
+      .Times(1);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetPosition(testing::_))
+      .Times(1);
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithContinuousSet_WhenExecuteTick_ThenActorPoseIsNotUpdated)
 {
-    auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
-            .WithDistance(10.0)
-            .WithContinuous(true)
-            .Build();
-
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetOrientation(testing::_))
-        .Times(0);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetPosition(testing::_))
-        .Times(0);
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
+  auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
+          .WithDistance(10.0)
+          .WithContinuous(true)
+          .Build();
+
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetPosition(testing::_))
+      .Times(0);
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithDistanceIsNotSet_WhenExecuteTick_ThenThrowException)
 {
-    auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
-            .WithContinuous(false)
-            .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
-            .Build();
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetOrientation(testing::_))
-        .Times(0);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetPosition(testing::_))
-        .Times(0);
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_ANY_THROW(root_node_->executeTick());
+  auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
+          .WithContinuous(false)
+          .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
+          .Build();
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetPosition(testing::_))
+      .Times(0);
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_ANY_THROW(root_node_->executeTick());
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithNegativeDistanceSet_WhenExecuteTick_ThenActorPoseIsNotUpdated)
 {
-    auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
-            .WithContinuous(false)
-            .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
-            .WithDistance(-10.0)
-            .Build();
-
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetOrientation(testing::_))
-        .Times(0);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetPosition(testing::_))
-        .Times(0);
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
+  auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
+          .WithContinuous(false)
+          .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
+          .WithDistance(-10.0)
+          .Build();
+
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetPosition(testing::_))
+      .Times(0);
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithTimeGapSet_WhenExecuteTick_ThenCorrectActorPoseIsUpdated)
 {
-    const auto time_gap = units::time::second_t{10.0};
-    const auto ref_velocity = mantle_api::Vec3<units::velocity::meters_per_second_t>{50.0_mps, 0.0_mps, 0.0_mps};
-    const auto ref_position = mantle_api::Vec3<units::length::meter_t>{5.0_m, 0.0_m, 0.0_m};
-    const auto ref_orientation = mantle_api::Orientation3<units::angle::radian_t>{0.0_deg, 0.0_deg, 0.0_deg};
-    const auto ref_pose = mantle_api::Pose{ref_position, ref_orientation};
-
-    const auto expected_position =
-        ref_position + mantle_api::Vec3<units::length::meter_t>{ref_velocity.x * time_gap, 0.0_m, 0.0_m};
-    const auto expected_orientation = mantle_api::Orientation3<units::angle::radian_t>{0.0_deg, 0.0_deg, 0.0_deg};
-    const auto expected_pose = mantle_api::Pose{expected_position, expected_orientation};
-
-    const auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
-            .WithContinuous(false)
-            .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
-            .WithTimeGap(time_gap.value())
-            .Build();
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    auto& ref_entity = dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("ego").value().get());
-    auto& actor_entity =
-        dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("TrafficVehicle").value().get());
-
-    // freespace not set
-    EXPECT_CALL(ref_entity, GetPropertiesImpl()).Times(0);
-    EXPECT_CALL(actor_entity, GetPropertiesImpl()).Times(1);
-
-    EXPECT_CALL(ref_entity, GetPosition()).WillOnce(testing::Return(ref_position));
-    EXPECT_CALL(ref_entity, GetOrientation()).WillOnce(testing::Return(ref_orientation));
-    EXPECT_CALL(ref_entity, GetVelocity()).WillRepeatedly(testing::Return(ref_velocity));
-    EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(env_->GetQueryService()),
-                FindLanePoseAtDistanceFrom(ref_pose, time_gap * ref_velocity.Length(), mantle_api::Direction::kForward))
-        .WillOnce(testing::Return(expected_pose));
-    EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(env_->GetQueryService()),
-                GetUpwardsShiftedLanePosition(testing::_, testing::_, true))
-        .WillOnce(testing::Return(expected_position));
-    EXPECT_CALL(actor_entity, SetPosition(expected_position));
-    EXPECT_CALL(actor_entity, SetOrientation(expected_orientation));
-    EXPECT_CALL(actor_entity, SetVelocity(ref_velocity));
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
-    EXPECT_EQ(longitudinal_distance_action->status(), yase::NodeStatus::kSuccess);
+  const auto time_gap = units::time::second_t{10.0};
+  const auto ref_velocity = mantle_api::Vec3<units::velocity::meters_per_second_t>{50.0_mps, 0.0_mps, 0.0_mps};
+  const auto ref_position = mantle_api::Vec3<units::length::meter_t>{5.0_m, 0.0_m, 0.0_m};
+  const auto ref_orientation = mantle_api::Orientation3<units::angle::radian_t>{0.0_deg, 0.0_deg, 0.0_deg};
+  const auto ref_pose = mantle_api::Pose{ref_position, ref_orientation};
+
+  const auto expected_position =
+      ref_position + mantle_api::Vec3<units::length::meter_t>{ref_velocity.x * time_gap, 0.0_m, 0.0_m};
+  const auto expected_orientation = mantle_api::Orientation3<units::angle::radian_t>{0.0_deg, 0.0_deg, 0.0_deg};
+  const auto expected_pose = mantle_api::Pose{expected_position, expected_orientation};
+
+  const auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
+          .WithContinuous(false)
+          .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
+          .WithTimeGap(time_gap.value())
+          .Build();
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  auto& ref_entity = dynamic_cast<testing::OpenScenarioEngine::v1_3::FakeVehicle&>(*env_->GetEntityRepository().Get("ego").lock());
+  auto& actor_entity =
+      dynamic_cast<testing::OpenScenarioEngine::v1_3::FakeVehicle&>(*env_->GetEntityRepository().Get("TrafficVehicle").lock());
+
+  // freespace not set
+  EXPECT_CALL(ref_entity, GetPropertiesImpl()).Times(0);
+  EXPECT_CALL(actor_entity, GetPropertiesImpl()).Times(1);
+
+  EXPECT_CALL(ref_entity, GetPosition()).WillOnce(testing::Return(ref_position));
+  EXPECT_CALL(ref_entity, GetOrientation()).WillOnce(testing::Return(ref_orientation));
+  EXPECT_CALL(ref_entity, GetVelocity()).WillRepeatedly(testing::Return(ref_velocity));
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(env_->GetQueryService()),
+              FindLanePoseAtDistanceFrom(ref_pose, time_gap * ref_velocity.Length(), mantle_api::Direction::kForward))
+      .WillOnce(testing::Return(expected_pose));
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(env_->GetQueryService()),
+              GetUpwardsShiftedLanePosition(testing::_, testing::_, true))
+      .WillOnce(testing::Return(expected_position));
+  EXPECT_CALL(actor_entity, SetPosition(expected_position));
+  EXPECT_CALL(actor_entity, SetOrientation(expected_orientation));
+  EXPECT_CALL(actor_entity, SetVelocity(ref_velocity));
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
+  EXPECT_EQ(longitudinal_distance_action->status(), yase::NodeStatus::kSuccess);
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithTimeGapSetAndFreespace_WhenExecuteTick_ThenEntitiesGetPropertiesAreCalled)
 {
-    const auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
-            .WithContinuous(false)
-            .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
-            .WithTimeGap(10.0)
-            .WithFreeSpace(true)
-            .Build();
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                GetPropertiesImpl())
-        .Times(2);
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
-    EXPECT_EQ(longitudinal_distance_action->status(), yase::NodeStatus::kSuccess);
+  const auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
+          .WithContinuous(false)
+          .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
+          .WithTimeGap(10.0)
+          .WithFreeSpace(true)
+          .Build();
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  EXPECT_CALL(dynamic_cast<testing::OpenScenarioEngine::v1_3::FakeVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              GetPropertiesImpl())
+      .Times(2);
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
+  EXPECT_EQ(longitudinal_distance_action->status(), yase::NodeStatus::kSuccess);
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithDynamicConstraintsSet_WhenExecuteTick_ThenActorPoseIsNotUpdated)
 {
-    NET_ASAM_OPENSCENARIO::v1_3::OpenScenarioWriterFactoryImpl open_scenario_writer_factory_impl;
-
-    auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
-            .WithDistance(10.0)
-            .WithContinuous(false)
-            .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
-            .WithDynamicConstraints(open_scenario_writer_factory_impl.CreateDynamicConstraintsWriter())
-            .Build();
-
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetOrientation(testing::_))
-        .Times(0);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetPosition(testing::_))
-        .Times(0);
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
+  NET_ASAM_OPENSCENARIO::v1_3::OpenScenarioWriterFactoryImpl open_scenario_writer_factory_impl;
+
+  auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
+          .WithDistance(10.0)
+          .WithContinuous(false)
+          .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
+          .WithDynamicConstraints(open_scenario_writer_factory_impl.CreateDynamicConstraintsWriter())
+          .Build();
+
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetPosition(testing::_))
+      .Times(0);
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithCoordinateSystemIsNotLane_WhenExecuteTick_ThenActorPoseIsNotUpdated)
 {
-    auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
-            .WithDistance(10.0)
-            .WithContinuous(false)
-            .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::ROAD)
-            .Build();
-
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetOrientation(testing::_))
-        .Times(0);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetPosition(testing::_))
-        .Times(0);
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
+  auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
+          .WithDistance(10.0)
+          .WithContinuous(false)
+          .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::ROAD)
+          .Build();
+
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetPosition(testing::_))
+      .Times(0);
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithFreeSpaceSet_WhenExecuteTick_ThenActorPoseIsUpdated)
 {
-    auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
-            .WithContinuous(false)
-            .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
-            .WithFreeSpace(true)
-            .WithDistance(10.0)
-            .Build();
-
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(env_->GetQueryService()),
-                FindLanePoseAtDistanceFrom(testing::_, testing::_, testing::_))
-        .WillOnce(testing::Return(mantle_api::Pose{}));
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetOrientation(testing::_))
-        .Times(1);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetPosition(testing::_))
-        .Times(1);
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
+  auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
+          .WithContinuous(false)
+          .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
+          .WithFreeSpace(true)
+          .WithDistance(10.0)
+          .Build();
+
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(env_->GetQueryService()),
+              FindLanePoseAtDistanceFrom(testing::_, testing::_, testing::_))
+      .WillOnce(testing::Return(mantle_api::Pose{}));
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetOrientation(testing::_))
+      .Times(1);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetPosition(testing::_))
+      .Times(1);
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceActionWithAllParametersSet_WhenStepAction_ThenActorPoseIsUpdated)
 {
-    auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
-            .WithContinuous(false)
-            .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
-            .WithDistance(10.0)
-            .Build();
-
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(env_->GetQueryService()),
-                FindLanePoseAtDistanceFrom(testing::_, testing::_, testing::_))
-        .WillOnce(testing::Return(mantle_api::Pose{}));
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetOrientation(testing::_))
-        .Times(1);
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get()),
-                SetPosition(testing::_))
-        .Times(1);
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
+  auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
+          .WithContinuous(false)
+          .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
+          .WithDistance(10.0)
+          .Build();
+
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(env_->GetQueryService()),
+              FindLanePoseAtDistanceFrom(testing::_, testing::_, testing::_))
+      .WillOnce(testing::Return(mantle_api::Pose{}));
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetOrientation(testing::_))
+      .Times(1);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()),
+              SetPosition(testing::_))
+      .Times(1);
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
 }
 
 TEST_F(LongitudinalDistanceActionFixture,
        GivenLongitudinalDistanceAction_WhenStepAction_ThenActorSetCorrectVerticalPosition)
 {
-    using units::literals::operator""_m;
-
-    auto fake_longitudinal_distance_action =
-        FakeLongitudinalDistanceActionBuilder{}
-            .WithEntityRef("ego")
-            .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
-            .WithContinuous(false)
-            .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
-            .WithDistance(10.0)
-            .Build();
-    auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
-
-    const auto expected_vertical_shift = 2.0_m;
-
-    mantle_api::VehicleProperties actor_entity_properties{};
-    actor_entity_properties.bounding_box.dimension.height = expected_vertical_shift * 2;
-
-    EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(env_->GetQueryService()),
-                FindLanePoseAtDistanceFrom(testing::_, testing::_, testing::_))
-        .WillOnce(testing::Return(mantle_api::Pose{}));
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("TrafficVehicle").value().get()),
-                GetPropertiesImpl())
-        .WillOnce(testing::Return(&actor_entity_properties));
-
-    EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(env_->GetQueryService()),
-                GetUpwardsShiftedLanePosition(testing::_, expected_vertical_shift.value(), true))
-        .Times(1);
-
-    root_node_->setChild(longitudinal_distance_action);
-    root_node_->distributeData();
-    EXPECT_NO_THROW(root_node_->onInit());
-    EXPECT_NO_THROW(root_node_->executeTick());
+  using units::literals::operator""_m;
+
+  auto fake_longitudinal_distance_action =
+      FakeLongitudinalDistanceActionBuilder{}
+          .WithEntityRef("ego")
+          .WithDisplacement(NET_ASAM_OPENSCENARIO::v1_3::LongitudinalDisplacement::LEADING_REFERENCED_ENTITY)
+          .WithContinuous(false)
+          .WithCoordinateSystem(NET_ASAM_OPENSCENARIO::v1_3::CoordinateSystem::LANE)
+          .WithDistance(10.0)
+          .Build();
+  auto longitudinal_distance_action = std::make_shared<Node::LongitudinalDistanceAction>(fake_longitudinal_distance_action);
+
+  const auto expected_vertical_shift = 2.0_m;
+
+  mantle_api::VehicleProperties actor_entity_properties{};
+  actor_entity_properties.bounding_box.dimension.height = expected_vertical_shift * 2;
+
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(env_->GetQueryService()),
+              FindLanePoseAtDistanceFrom(testing::_, testing::_, testing::_))
+      .WillOnce(testing::Return(mantle_api::Pose{}));
+
+  EXPECT_CALL(dynamic_cast<testing::OpenScenarioEngine::v1_3::FakeVehicle&>(*env_->GetEntityRepository().Get("TrafficVehicle").lock()),
+              GetPropertiesImpl())
+      .WillOnce(testing::Return(&actor_entity_properties));
+
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(env_->GetQueryService()),
+              GetUpwardsShiftedLanePosition(testing::_, expected_vertical_shift.value(), true))
+      .Times(1);
+
+  root_node_->setChild(longitudinal_distance_action);
+  root_node_->distributeData();
+  EXPECT_NO_THROW(root_node_->onInit());
+  EXPECT_NO_THROW(root_node_->executeTick());
 }
diff --git a/engine/tests/Storyboard/MotionControlAction/MotionControlActionTest.cpp b/engine/tests/Storyboard/MotionControlAction/MotionControlActionTest.cpp
index e076e7cc5fc667bd0af1c147246f0adeb3cfba80..e2ef10892bfef48fdc66c69ae158bf5cd4abeb82 100644
--- a/engine/tests/Storyboard/MotionControlAction/MotionControlActionTest.cpp
+++ b/engine/tests/Storyboard/MotionControlAction/MotionControlActionTest.cpp
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2023-2024, Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025, Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2022-2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made
@@ -50,7 +50,8 @@ TEST_F(MotionControlActionTestFixture, GivenLongitudinalAction_WhenControlStrate
           {"Ego"},
           false,
           false,
-          [this]() {
+          [this]()
+          {
             return OpenScenarioEngine::v1_3::ConvertScenarioLongitudinalDistance(
                 env_,
                 true,
@@ -67,17 +68,17 @@ TEST_F(MotionControlActionTestFixture, GivenLongitudinalAction_WhenControlStrate
 
   auto expected_control_strategy = mantle_api::KeepVelocityControlStrategy();
 
-  EXPECT_CALL(*env_, UpdateControlStrategies(0, testing::_))
+  EXPECT_CALL(*env_, UpdateControlStrategies(mantle_api::UniqueId(0), testing::_))
       .Times(1)
       .WillRepeatedly([expected_control_strategy](
-                          std::uint64_t controller_id,
-                          std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies) {
+                          mantle_api::UniqueId controller_id,
+                          std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies)
+                      {
         std::ignore = controller_id;
         EXPECT_EQ(1, control_strategies.size());
         auto control_strategy = dynamic_cast<mantle_api::KeepVelocityControlStrategy*>(control_strategies[0].get());
         EXPECT_NE(nullptr, control_strategy);
-        EXPECT_EQ(*control_strategy, expected_control_strategy);
-      });
+        EXPECT_EQ(*control_strategy, expected_control_strategy); });
 
   mock_motion_control_action.Step();
 }
@@ -99,11 +100,12 @@ TEST_F(MotionControlActionTestFixture, GivenLateralAction_WhenControlStrategyGoa
 
   auto expected_control_strategy = mantle_api::KeepLaneOffsetControlStrategy();
 
-  EXPECT_CALL(*env_, UpdateControlStrategies(0, testing::_))
+  EXPECT_CALL(*env_, UpdateControlStrategies(mantle_api::UniqueId(0), testing::_))
       .Times(1)
       .WillRepeatedly(
-          [expected_control_strategy](std::uint64_t controller_id,
-                                      std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies) {
+          [expected_control_strategy](mantle_api::UniqueId controller_id,
+                                      std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies)
+          {
             std::ignore = controller_id;
             EXPECT_EQ(1, control_strategies.size());
             auto control_strategy =
diff --git a/engine/tests/Storyboard/MotionControlAction/SpeedActionTest.cpp b/engine/tests/Storyboard/MotionControlAction/SpeedActionTest.cpp
index 93e61d6c55f7c1f0fc075a19a3ccc0e665b27b43..c7c3be2bff350120af593ff3feba007052fda635 100644
--- a/engine/tests/Storyboard/MotionControlAction/SpeedActionTest.cpp
+++ b/engine/tests/Storyboard/MotionControlAction/SpeedActionTest.cpp
@@ -9,14 +9,15 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
 #include "Conversion/OscToMantle/ConvertScenarioSpeedActionTarget.h"
 #include "Storyboard/MotionControlAction/SpeedAction_impl.h"
+#include "TestUtils.h"
 #include "gmock/gmock.h"
 
 using namespace mantle_api;
+using namespace testing::OpenScenarioEngine::v1_3;
 using namespace units::literals;
 
 using testing::_;
@@ -34,18 +35,13 @@ protected:
             std::optional<units::jerk::meters_per_second_cubed_t> max_acceleration_rate = std::nullopt,
             std::optional<units::jerk::meters_per_second_cubed_t> max_deceleration_rate = std::nullopt)
   {
-    const auto& host_optional = mock_environment_->GetEntityRepository().GetHost();
-    ASSERT_TRUE(host_optional.has_value());
-    MockVehicle* mock_vehicle_ptr{dynamic_cast<MockVehicle*>(&host_optional.value().get())};
-    ASSERT_NE(mock_vehicle_ptr, nullptr) << "Failed to cast host to MockVehicle.";
-    MockVehicle& mock_vehicle = *mock_vehicle_ptr;
     vehicle_properties_.performance = {
         .max_acceleration_rate = max_acceleration_rate.value_or(units::jerk::meters_per_second_cubed_t(std::numeric_limits<double>::infinity())),
         .max_deceleration_rate = max_deceleration_rate.value_or(units::jerk::meters_per_second_cubed_t(std::numeric_limits<double>::infinity()))};
 
-    EXPECT_CALL(*mock_environment_, UpdateControlStrategies(_, _)).WillOnce(testing::SaveArg<1>(&control_strategies_));
-    EXPECT_CALL(mock_vehicle, GetPropertiesImpl()).WillOnce(Return(&vehicle_properties_));
-    EXPECT_CALL(mock_vehicle, GetVelocity()).WillOnce(Return(initial_velocity));
+    EXPECT_CALL(*fake_environment_, UpdateControlStrategies(_, _)).WillOnce(testing::SaveArg<1>(&control_strategies_));
+    EXPECT_CALL(fake_vehicle_, GetPropertiesImpl()).WillOnce(Return(&vehicle_properties_));
+    EXPECT_CALL(fake_vehicle_, GetVelocity()).WillOnce(Return(initial_velocity));
 
     const mantle_api::TransitionDynamics transition_dynamics{Dimension::kRate, Shape::kLinear, expected_acceleration()};
     const TransitionDynamics speed_action_dynamics{transition_dynamics, FollowingMode::kFollow};
@@ -54,7 +50,7 @@ protected:
                                          speed_action_dynamics,
                                          [target_speed]()
                                          { return target_speed; }};
-    const SpeedActionBase::Interfaces interfaces{mock_environment_};
+    const SpeedActionBase::Interfaces interfaces{fake_environment_};
 
     speed_action_ = std::make_unique<SpeedAction>(values, interfaces);
   }
@@ -67,15 +63,16 @@ protected:
   }
 
   std::unique_ptr<SpeedAction> speed_action_{nullptr};
-  std::shared_ptr<MockEnvironment> mock_environment_{std::make_shared<MockEnvironment>()};
+  std::shared_ptr<FakeEnvironment> fake_environment_{std::make_shared<FakeEnvironment>()};
+  FakeVehicle& fake_vehicle_{dynamic_cast<FakeVehicle&>(*(fake_environment_->GetEntityRepository().GetHost().lock()))};
   VehicleProperties vehicle_properties_{};
   std::vector<std::shared_ptr<ControlStrategy>> control_strategies_{};
 };
 
 TEST(SpeedAction, GivenMatchingControlStrategyGoalIsReached_ReturnTrue)
 {
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
-  ON_CALL(*mockEnvironment,
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  ON_CALL(*fake_environment,
           HasControlStrategyGoalBeenReached(_, mantle_api::ControlStrategyType::kFollowVelocitySpline))
       .WillByDefault(Return(true));
   TransitionDynamics speedActionDynamics;
@@ -85,15 +82,15 @@ TEST(SpeedAction, GivenMatchingControlStrategyGoalIsReached_ReturnTrue)
                            speedActionDynamics,
                            []() -> units::velocity::meters_per_second_t
                            { return 0_mps; }},
-                          {mockEnvironment});
+                          {fake_environment});
 
   ASSERT_TRUE(speedAction.HasControlStrategyGoalBeenReached("Vehicle1"));
 }
 
 TEST(SpeedAction, GivenUnmatchingControlStrategyGoalIsReached_ReturnsFalse)
 {
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
-  ON_CALL(*mockEnvironment,
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  ON_CALL(*fake_environment,
           HasControlStrategyGoalBeenReached(_, mantle_api::ControlStrategyType::kUndefined))
       .WillByDefault(Return(false));
 
@@ -104,15 +101,15 @@ TEST(SpeedAction, GivenUnmatchingControlStrategyGoalIsReached_ReturnsFalse)
                            speedActionDynamics,
                            []() -> units::velocity::meters_per_second_t
                            { return 0_mps; }},
-                          {mockEnvironment});
+                          {fake_environment});
 
   ASSERT_FALSE(speedAction.HasControlStrategyGoalBeenReached("Vehicle1"));
 }
 
 TEST(SpeedAction, GivenkStepShapeForSpeedActionDynamics_ReturnTrue)
 {
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
-  ON_CALL(*mockEnvironment,
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  ON_CALL(*fake_environment,
           HasControlStrategyGoalBeenReached(_, mantle_api::ControlStrategyType::kUndefined))
       .WillByDefault(Return(true));
   TransitionDynamics speedActionDynamics;
@@ -122,15 +119,15 @@ TEST(SpeedAction, GivenkStepShapeForSpeedActionDynamics_ReturnTrue)
                            speedActionDynamics,
                            []() -> units::velocity::meters_per_second_t
                            { return 0_mps; }},
-                          {mockEnvironment});
+                          {fake_environment});
 
   ASSERT_TRUE(speedAction.HasControlStrategyGoalBeenReached("Vehicle1"));
 }
 
 TEST(SpeedAction, GivenkUndefinedShapeForSpeedActionDynamics_ReturnFalse)
 {
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
-  ON_CALL(*mockEnvironment,
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  ON_CALL(*fake_environment,
           HasControlStrategyGoalBeenReached(_, mantle_api::ControlStrategyType::kUndefined))
       .WillByDefault(Return(false));
 
@@ -141,7 +138,7 @@ TEST(SpeedAction, GivenkUndefinedShapeForSpeedActionDynamics_ReturnFalse)
                            speedActionDynamics,
                            []() -> units::velocity::meters_per_second_t
                            { return 0_mps; }},
-                          {mockEnvironment});
+                          {fake_environment});
 
   ASSERT_FALSE(speedAction.HasControlStrategyGoalBeenReached("Vehicle1"));
 }
@@ -155,7 +152,7 @@ TEST(SpeedAction, GivenIsStepShapeForSpeedActionDynamics_SetControlStrategy)
                            speedActionDynamics,
                            []() -> units::velocity::meters_per_second_t
                            { return 0_mps; }},
-                          {std::make_shared<mantle_api::MockEnvironment>()});
+                          {std::make_shared<FakeEnvironment>()});
 
   EXPECT_NO_THROW(speedAction.SetControlStrategy());
 }
@@ -167,7 +164,7 @@ TEST(SpeedAction, GivenLinearShapeAndkUndefinedDimensionForSpeedActionDynamics_T
                            speedActionDynamics,
                            []() -> units::velocity::meters_per_second_t
                            { return 123_mps; }},
-                          {std::make_shared<mantle_api::MockEnvironment>()});
+                          {std::make_shared<FakeEnvironment>()});
 
   EXPECT_THROW(speedAction.SetControlStrategy(), std::runtime_error);
 }
@@ -177,9 +174,9 @@ TEST(SpeedAction, GivenLinearShapeAndkTimeDimensionForSpeedActionDynamics_SetCon
   TransitionDynamics speedActionDynamics{mantle_api::Dimension::kTime, mantle_api::Shape::kLinear, 3.6, std::nullopt};
   SpeedActionTarget speedActionTarget = 1.2_mps;
 
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fake_environment = std::make_shared<FakeEnvironment>();
   std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies{};
-  EXPECT_CALL(*mockEnvironment,
+  EXPECT_CALL(*fake_environment,
               UpdateControlStrategies(_, _))
       .WillOnce(testing::SaveArg<1>(&control_strategies));
 
@@ -187,7 +184,7 @@ TEST(SpeedAction, GivenLinearShapeAndkTimeDimensionForSpeedActionDynamics_SetCon
                            speedActionDynamics,
                            [t = speedActionTarget]() -> units::velocity::meters_per_second_t
                            { return t; }},
-                          {mockEnvironment});
+                          {fake_environment});
 
   EXPECT_NO_THROW(speedAction.SetControlStrategy());
   EXPECT_THAT(control_strategies, testing::SizeIs(1));
@@ -204,9 +201,9 @@ TEST(SpeedAction, GivenLinearShapeAndkRateDimensionForSpeedActionDynamics_SetCon
   TransitionDynamics speedActionDynamics{mantle_api::Dimension::kRate, mantle_api::Shape::kLinear, 1.2, std::nullopt};
   SpeedActionTarget speedActionTarget = 1.2_mps;
 
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fake_environment = std::make_shared<FakeEnvironment>();
   std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies{};
-  EXPECT_CALL(*mockEnvironment,
+  EXPECT_CALL(*fake_environment,
               UpdateControlStrategies(_, _))
       .WillOnce(testing::SaveArg<1>(&control_strategies));
 
@@ -214,7 +211,7 @@ TEST(SpeedAction, GivenLinearShapeAndkRateDimensionForSpeedActionDynamics_SetCon
                            speedActionDynamics,
                            [t = speedActionTarget]() -> units::velocity::meters_per_second_t
                            { return t; }},
-                          {mockEnvironment});
+                          {fake_environment});
 
   EXPECT_NO_THROW(speedAction.SetControlStrategy());
   EXPECT_THAT(control_strategies, testing::SizeIs(1));
@@ -231,9 +228,9 @@ TEST(SpeedAction, GivenLinearShapeAndkDistanceDimensionForSpeedActionDynamics_Se
   TransitionDynamics speedActionDynamics{mantle_api::Dimension::kDistance, mantle_api::Shape::kLinear, 0.6, std::nullopt};
   SpeedActionTarget speedActionTarget = 1.2_mps;
 
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fake_environment = std::make_shared<FakeEnvironment>();
   std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies{};
-  EXPECT_CALL(*mockEnvironment,
+  EXPECT_CALL(*fake_environment,
               UpdateControlStrategies(_, _))
       .WillOnce(testing::SaveArg<1>(&control_strategies));
 
@@ -241,7 +238,7 @@ TEST(SpeedAction, GivenLinearShapeAndkDistanceDimensionForSpeedActionDynamics_Se
                            speedActionDynamics,
                            [t = speedActionTarget]() -> units::velocity::meters_per_second_t
                            { return t; }},
-                          {mockEnvironment});
+                          {fake_environment});
 
   EXPECT_NO_THROW(speedAction.SetControlStrategy());
   EXPECT_THAT(control_strategies, testing::SizeIs(1));
@@ -258,16 +255,16 @@ TEST(SpeedAction, WithCubicShapeAndRate_SetsControlStrategy)
   TransitionDynamics speedActionDynamics{mantle_api::Dimension::kRate, mantle_api::Shape::kCubic, 1.2, std::nullopt};
   SpeedActionTarget speedActionTarget = 1.2_mps;
 
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fake_environment = std::make_shared<FakeEnvironment>();
   std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies{};
-  EXPECT_CALL(*mockEnvironment, UpdateControlStrategies(_, _))
+  EXPECT_CALL(*fake_environment, UpdateControlStrategies(_, _))
       .WillOnce(testing::SaveArg<1>(&control_strategies));
 
   SpeedAction speedAction({std::vector<std::string>{"Vehicle1"},
                            speedActionDynamics,
                            [t = speedActionTarget]() -> units::velocity::meters_per_second_t
                            { return t; }},
-                          {mockEnvironment});
+                          {fake_environment});
 
   EXPECT_NO_THROW(speedAction.SetControlStrategy());
   EXPECT_THAT(control_strategies, SizeIs(1));
@@ -284,16 +281,16 @@ TEST(SpeedAction, WithCubicShapeAndTime_SetsControlStrategy)
   TransitionDynamics speedActionDynamics{mantle_api::Dimension::kTime, mantle_api::Shape::kCubic, 1.2, std::nullopt};
   SpeedActionTarget speedActionTarget = 1.2_mps;
 
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fake_environment = std::make_shared<FakeEnvironment>();
   std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies{};
-  EXPECT_CALL(*mockEnvironment, UpdateControlStrategies(_, _))
+  EXPECT_CALL(*fake_environment, UpdateControlStrategies(_, _))
       .WillOnce(testing::SaveArg<1>(&control_strategies));
 
   SpeedAction speedAction({std::vector<std::string>{"Vehicle1"},
                            speedActionDynamics,
                            [t = speedActionTarget]() -> units::velocity::meters_per_second_t
                            { return t; }},
-                          {mockEnvironment});
+                          {fake_environment});
 
   EXPECT_NO_THROW(speedAction.SetControlStrategy());
   EXPECT_THAT(control_strategies, SizeIs(1));
@@ -310,9 +307,9 @@ TEST(SpeedAction, WithCubicShapeAndDistance_SetsControlStrategy)
   TransitionDynamics speedActionDynamics{mantle_api::Dimension::kDistance, mantle_api::Shape::kCubic, 0.6, std::nullopt};
   SpeedActionTarget speedActionTarget = 1.2_mps;
 
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fake_environment = std::make_shared<FakeEnvironment>();
   std::vector<std::shared_ptr<mantle_api::ControlStrategy>> control_strategies{};
-  EXPECT_CALL(*mockEnvironment,
+  EXPECT_CALL(*fake_environment,
               UpdateControlStrategies(_, _))
       .WillOnce(testing::SaveArg<1>(&control_strategies));
 
@@ -320,7 +317,7 @@ TEST(SpeedAction, WithCubicShapeAndDistance_SetsControlStrategy)
                            speedActionDynamics,
                            [t = speedActionTarget]() -> units::velocity::meters_per_second_t
                            { return t; }},
-                          {mockEnvironment});
+                          {fake_environment});
 
   EXPECT_NO_THROW(speedAction.SetControlStrategy());
   EXPECT_THAT(control_strategies, testing::SizeIs(1));
@@ -346,10 +343,10 @@ TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenDecreasingSpeedAndJerkLimits_W
   auto control_strategy{dynamic_cast<FollowVelocitySplineControlStrategy*>(control_strategies_.front().get())};
   EXPECT_EQ(control_strategy->default_value, target_speed);
   EXPECT_THAT(control_strategy->velocity_splines, testing::SizeIs(3));
-  EXPECT_EQ(std::get<1>(control_strategy->velocity_splines[0].polynomial), -0.5 * max_deceleration_rate);
-  EXPECT_EQ(std::get<3>(control_strategy->velocity_splines[0].polynomial), initial_velocity.Length());
-  EXPECT_EQ(std::get<2>(control_strategy->velocity_splines[1].polynomial), acceleration);
-  EXPECT_EQ(std::get<1>(control_strategy->velocity_splines[2].polynomial), 0.5 * max_acceleration_rate);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a2, -0.5 * max_deceleration_rate);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a0, initial_velocity.Length());
+  EXPECT_EQ(control_strategy->velocity_splines[1].polynomial.a1, acceleration);
+  EXPECT_EQ(control_strategy->velocity_splines[2].polynomial.a2, 0.5 * max_acceleration_rate);
 }
 
 TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenDecreasingSpeedAndJerkLimitsAndPositiveSpeedTarget_WhenExpectedRateAreTooHigh_ThenSplineHasAccelerationAndDecelerationJerkLimitsAndInitialSpeed)
@@ -366,10 +363,10 @@ TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenDecreasingSpeedAndJerkLimitsAn
   auto control_strategy{dynamic_cast<FollowVelocitySplineControlStrategy*>(control_strategies_.front().get())};
   EXPECT_EQ(control_strategy->default_value, target_speed);
   EXPECT_THAT(control_strategy->velocity_splines, testing::SizeIs(3));
-  EXPECT_EQ(std::get<1>(control_strategy->velocity_splines[0].polynomial), -0.5 * max_deceleration_rate);
-  EXPECT_EQ(std::get<3>(control_strategy->velocity_splines[0].polynomial), initial_velocity.Length());
-  EXPECT_EQ(std::get<2>(control_strategy->velocity_splines[1].polynomial), acceleration);
-  EXPECT_EQ(std::get<1>(control_strategy->velocity_splines[2].polynomial), 0.5 * max_acceleration_rate);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a2, -0.5 * max_deceleration_rate);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a0, initial_velocity.Length());
+  EXPECT_EQ(control_strategy->velocity_splines[1].polynomial.a1, acceleration);
+  EXPECT_EQ(control_strategy->velocity_splines[2].polynomial.a2, 0.5 * max_acceleration_rate);
 }
 
 TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenDecreasingSpeedAndAccelerationRateLimit_WhenExpectedAccelerationRateIsTooHigh_ThenSplineHasAccelerationRateLimit)
@@ -385,9 +382,9 @@ TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenDecreasingSpeedAndAcceleration
   auto control_strategy{dynamic_cast<FollowVelocitySplineControlStrategy*>(control_strategies_.front().get())};
   EXPECT_EQ(control_strategy->default_value, target_speed);
   EXPECT_THAT(control_strategy->velocity_splines, testing::SizeIs(2));
-  EXPECT_EQ(std::get<3>(control_strategy->velocity_splines[0].polynomial), initial_velocity.Length());
-  EXPECT_EQ(std::get<2>(control_strategy->velocity_splines[0].polynomial), acceleration);
-  EXPECT_EQ(std::get<1>(control_strategy->velocity_splines[1].polynomial), 0.5 * max_acceleration_rate);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a0, initial_velocity.Length());
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a1, acceleration);
+  EXPECT_EQ(control_strategy->velocity_splines[1].polynomial.a2, 0.5 * max_acceleration_rate);
 }
 
 TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenDecreasingSpeedAndDecelerationRateLimit_WhenExpectedDecelerationRateIsTooHigh_ThenSplineHasDecelerationRateLimit)
@@ -403,9 +400,9 @@ TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenDecreasingSpeedAndDeceleration
   auto control_strategy{dynamic_cast<FollowVelocitySplineControlStrategy*>(control_strategies_.front().get())};
   EXPECT_EQ(control_strategy->default_value, target_speed);
   EXPECT_THAT(control_strategy->velocity_splines, testing::SizeIs(2));
-  EXPECT_EQ(std::get<1>(control_strategy->velocity_splines[0].polynomial), -0.5 * max_deceleration_rate);
-  EXPECT_EQ(std::get<3>(control_strategy->velocity_splines[0].polynomial), initial_velocity.Length());
-  EXPECT_EQ(std::get<2>(control_strategy->velocity_splines[1].polynomial), acceleration);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a2, -0.5 * max_deceleration_rate);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a0, initial_velocity.Length());
+  EXPECT_EQ(control_strategy->velocity_splines[1].polynomial.a1, acceleration);
 }
 
 TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenDecreasingSpeedAndNoJerkLimits_WhenExpectedDecelerationRateIsTooHigh_ThenSplineHasNoJerkLimits)
@@ -420,8 +417,8 @@ TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenDecreasingSpeedAndNoJerkLimits
   auto control_strategy{dynamic_cast<FollowVelocitySplineControlStrategy*>(control_strategies_.front().get())};
   EXPECT_EQ(control_strategy->default_value, target_speed);
   EXPECT_THAT(control_strategy->velocity_splines, testing::SizeIs(1));
-  EXPECT_EQ(std::get<3>(control_strategy->velocity_splines[0].polynomial), initial_velocity.Length());
-  EXPECT_EQ(std::get<2>(control_strategy->velocity_splines[0].polynomial), acceleration);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a0, initial_velocity.Length());
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a1, acceleration);
 }
 
 TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenIncreasingSpeedAndJerkLimits_WhenExpectedRatesAreTooHigh_ThenSplineHasAccelerationAndDecelerationJerkLimits)
@@ -438,10 +435,10 @@ TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenIncreasingSpeedAndJerkLimits_W
   auto control_strategy{dynamic_cast<FollowVelocitySplineControlStrategy*>(control_strategies_.front().get())};
   EXPECT_EQ(control_strategy->default_value, target_speed);
   EXPECT_THAT(control_strategy->velocity_splines, testing::SizeIs(3));
-  EXPECT_EQ(std::get<1>(control_strategy->velocity_splines[0].polynomial), 0.5 * max_deceleration_rate);
-  EXPECT_EQ(std::get<3>(control_strategy->velocity_splines[0].polynomial), initial_velocity.Length());
-  EXPECT_EQ(std::get<2>(control_strategy->velocity_splines[1].polynomial), acceleration);
-  EXPECT_EQ(std::get<1>(control_strategy->velocity_splines[2].polynomial), -0.5 * max_acceleration_rate);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a2, 0.5 * max_deceleration_rate);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a0, initial_velocity.Length());
+  EXPECT_EQ(control_strategy->velocity_splines[1].polynomial.a1, acceleration);
+  EXPECT_EQ(control_strategy->velocity_splines[2].polynomial.a2, -0.5 * max_acceleration_rate);
 }
 
 TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenIncreasingSpeedAndJerkLimitsAndInitialSpeed_WhenExpectedRateAreTooHigh_ThenSplineHasAccelerationAndDecelerationJerkLimitsAndInitialSpeed)
@@ -458,10 +455,10 @@ TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenIncreasingSpeedAndJerkLimitsAn
   auto control_strategy{dynamic_cast<FollowVelocitySplineControlStrategy*>(control_strategies_.front().get())};
   EXPECT_EQ(control_strategy->default_value, target_speed);
   EXPECT_THAT(control_strategy->velocity_splines, testing::SizeIs(3));
-  EXPECT_EQ(std::get<1>(control_strategy->velocity_splines[0].polynomial), 0.5 * max_deceleration_rate);
-  EXPECT_EQ(std::get<3>(control_strategy->velocity_splines[0].polynomial), initial_velocity.Length());
-  EXPECT_EQ(std::get<2>(control_strategy->velocity_splines[1].polynomial), acceleration);
-  EXPECT_EQ(std::get<1>(control_strategy->velocity_splines[2].polynomial), -0.5 * max_acceleration_rate);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a2, 0.5 * max_deceleration_rate);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a0, initial_velocity.Length());
+  EXPECT_EQ(control_strategy->velocity_splines[1].polynomial.a1, acceleration);
+  EXPECT_EQ(control_strategy->velocity_splines[2].polynomial.a2, -0.5 * max_acceleration_rate);
 }
 
 TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenIncreasingSpeedAndAccelerationRateLimit_WhenExpectedAccelerationRateIsTooHigh_ThenSplineHasAccelerationRateLimit)
@@ -477,9 +474,9 @@ TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenIncreasingSpeedAndAcceleration
   auto control_strategy{dynamic_cast<FollowVelocitySplineControlStrategy*>(control_strategies_.front().get())};
   EXPECT_EQ(control_strategy->default_value, target_speed);
   EXPECT_THAT(control_strategy->velocity_splines, testing::SizeIs(2));
-  EXPECT_EQ(std::get<1>(control_strategy->velocity_splines[0].polynomial), 0.5 * max_acceleration_rate);
-  EXPECT_EQ(std::get<3>(control_strategy->velocity_splines[0].polynomial), initial_velocity.Length());
-  EXPECT_EQ(std::get<2>(control_strategy->velocity_splines[1].polynomial), acceleration);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a2, 0.5 * max_acceleration_rate);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a0, initial_velocity.Length());
+  EXPECT_EQ(control_strategy->velocity_splines[1].polynomial.a1, acceleration);
 }
 
 TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenIncreasingSpeedAndDecelerationRateLimit_WhenExpectedDecelerationRateIsTooHigh_ThenSplineHasDecelerationRateLimit)
@@ -495,9 +492,9 @@ TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenIncreasingSpeedAndDeceleration
   auto control_strategy{dynamic_cast<FollowVelocitySplineControlStrategy*>(control_strategies_.front().get())};
   EXPECT_EQ(control_strategy->default_value, target_speed);
   EXPECT_THAT(control_strategy->velocity_splines, testing::SizeIs(2));
-  EXPECT_EQ(std::get<3>(control_strategy->velocity_splines[0].polynomial), initial_velocity.Length());
-  EXPECT_EQ(std::get<2>(control_strategy->velocity_splines[0].polynomial), acceleration);
-  EXPECT_EQ(std::get<1>(control_strategy->velocity_splines[1].polynomial), -0.5 * max_deceleration_rate);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a0, initial_velocity.Length());
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a1, acceleration);
+  EXPECT_EQ(control_strategy->velocity_splines[1].polynomial.a2, -0.5 * max_deceleration_rate);
 }
 
 TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenIncreasingSpeedAndNoJerkLimits_WhenExpectedAccelerationRateIsTooHigh_ThenSplineHasNoJerkLimits)
@@ -512,8 +509,8 @@ TEST_F(SpeedActionWithJerkLimitsTestFixture, GivenIncreasingSpeedAndNoJerkLimits
   auto control_strategy{dynamic_cast<FollowVelocitySplineControlStrategy*>(control_strategies_.front().get())};
   EXPECT_EQ(control_strategy->default_value, target_speed);
   EXPECT_THAT(control_strategy->velocity_splines, testing::SizeIs(1));
-  EXPECT_EQ(std::get<3>(control_strategy->velocity_splines[0].polynomial), initial_velocity.Length());
-  EXPECT_EQ(std::get<2>(control_strategy->velocity_splines[0].polynomial), acceleration);
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a0, initial_velocity.Length());
+  EXPECT_EQ(control_strategy->velocity_splines[0].polynomial.a1, acceleration);
 }
 
 }  // namespace OpenScenarioEngine::v1_3
diff --git a/engine/tests/TestUtils.h b/engine/tests/TestUtils.h
index 7408a93901f80e061b9b836e83301df45aa70f45..b73883185f31703b7928f346bb211cc764c28301 100644
--- a/engine/tests/TestUtils.h
+++ b/engine/tests/TestUtils.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2021-2024, Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2021-2025, Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made
@@ -11,8 +11,18 @@
 
 #pragma once
 
+#include <MantleAPI/Common/mock_geometry_helper.h>
 #include <MantleAPI/Execution/i_environment.h>
-#include <MantleAPI/Test/test_utils.h>
+#include <MantleAPI/Execution/mock_environment.h>
+#include <MantleAPI/Map/mock_coord_converter.h>
+#include <MantleAPI/Map/mock_lane_location_query_service.h>
+#include <MantleAPI/Map/mock_route_repository.h>
+#include <MantleAPI/Traffic/mock_controller.h>
+#include <MantleAPI/Traffic/mock_controller_repository.h>
+#include <MantleAPI/Traffic/mock_entity.h>
+#include <MantleAPI/Traffic/mock_entity_repository.h>
+#include <MantleAPI/Traffic/mock_traffic_area_service.h>
+#include <MantleAPI/Traffic/mock_traffic_swarm_service.h>
 #include <agnostic_behavior_tree/decorator_node.h>
 #include <gtest/gtest.h>
 #include <openScenarioLib/src/common/SimpleMessageLogger.h>
@@ -32,121 +42,365 @@ using namespace units::literals;
 
 class FakeRootNode : public yase::DecoratorNode
 {
-  public:
-    FakeRootNode(std::shared_ptr<mantle_api::IEnvironment> environment,
-                 std::shared_ptr<::OpenScenarioEngine::v1_3::EngineAbortFlags> engine_abort_flags,
-                 std::shared_ptr<::OpenScenarioEngine::v1_3::EntityBroker> entity_broker)
-        : yase::DecoratorNode{"OpenScenarioEngine"},
-          environment_{environment},
-          engine_abort_flags_{engine_abort_flags},
-          entity_broker_{entity_broker}
-    {
-        distributeData();
-    }
+public:
+  FakeRootNode(std::shared_ptr<mantle_api::IEnvironment> environment,
+               std::shared_ptr<::OpenScenarioEngine::v1_3::EngineAbortFlags> engine_abort_flags,
+               std::shared_ptr<::OpenScenarioEngine::v1_3::EntityBroker> entity_broker)
+      : yase::DecoratorNode{"OpenScenarioEngine"},
+        environment_{environment},
+        engine_abort_flags_{engine_abort_flags},
+        entity_broker_{entity_broker}
+  {
+    distributeData();
+  }
 
-  private:
-    void lookupAndRegisterData(yase::Blackboard& blackboard) override
-    {
-        blackboard.set("Environment", environment_);
-        blackboard.set("EngineAbortFlags", engine_abort_flags_);
-        blackboard.set("EntityBroker", entity_broker_);
-    }
+private:
+  void lookupAndRegisterData(yase::Blackboard& blackboard) override
+  {
+    blackboard.set("Environment", environment_);
+    blackboard.set("EngineAbortFlags", engine_abort_flags_);
+    blackboard.set("EntityBroker", entity_broker_);
+  }
 
-    yase::NodeStatus tick() final
-    {
-      return child().executeTick();
-    }
+  yase::NodeStatus tick() final
+  {
+    return child().executeTick();
+  }
 
-    std::shared_ptr<mantle_api::IEnvironment> environment_;
-    std::shared_ptr<::OpenScenarioEngine::v1_3::EngineAbortFlags> engine_abort_flags_;
-    std::shared_ptr<::OpenScenarioEngine::v1_3::EntityBroker> entity_broker_;
+  std::shared_ptr<mantle_api::IEnvironment> environment_;
+  std::shared_ptr<::OpenScenarioEngine::v1_3::EngineAbortFlags> engine_abort_flags_;
+  std::shared_ptr<::OpenScenarioEngine::v1_3::EntityBroker> entity_broker_;
 };
 
 inline std::string GetScenariosPath(const std::string& test_file_path)
 {
-    std::filesystem::path file_path{test_file_path};
-    return {file_path.remove_filename().string() + "data/Scenarios/"};
+  std::filesystem::path file_path{test_file_path};
+  return {file_path.remove_filename().string() + "data/Scenarios/"};
 }
 
-class OpenScenarioEngineLibraryTestBase : public ::testing::Test
+class FakeGeometryHelper : public mantle_api::MockGeometryHelper
+{
+public:
+  std::vector<mantle_api::Vec3<units::length::meter_t>> TransformPolylinePointsFromWorldToLocal(
+      const std::vector<mantle_api::Vec3<units::length::meter_t>>& polyline_points,
+      const mantle_api::Vec3<units::length::meter_t>& position,
+      const mantle_api::Orientation3<units::angle::radian_t>& orientation) const override
+  {
+    // do not transform but return original points
+    std::ignore = position;
+    std::ignore = orientation;
+    return polyline_points;
+  }
+
+  mantle_api::Vec3<units::length::meter_t> TransformPositionFromWorldToLocal(
+      const mantle_api::Vec3<units::length::meter_t>& point_position,
+      const mantle_api::Vec3<units::length::meter_t>& position,
+      const mantle_api::Orientation3<units::angle::radian_t>& orientation) const override
+  {
+    // do not transform but return original points
+    std::ignore = position;
+    std::ignore = orientation;
+    return point_position;
+  }
+};
+
+class FakeVehicle : public mantle_api::MockVehicle
 {
-  protected:
-    void SetUp() override
+public:
+  void SetName(const std::string& name) override { name_ = name; }
+  const std::string& GetName() const override { return name_; }
+
+  void SetProperties(std::unique_ptr<mantle_api::EntityProperties> properties) override { properties_ = std::move(properties); }
+
+  MOCK_METHOD(mantle_api::VehicleProperties*, GetPropertiesImpl, (), (const));
+  mantle_api::VehicleProperties* GetProperties() const override
+  {
+    if (auto* properties = GetPropertiesImpl())
     {
-        env_ = std::make_shared<mantle_api::MockEnvironment>();
-        ON_CALL(env_->GetControllerRepository(), Create(testing::_)).WillByDefault(testing::ReturnRef(controller_));
+      return properties;
     }
+    return static_cast<mantle_api::VehicleProperties*>(properties_.get());
+  }
 
-    std::shared_ptr<mantle_api::MockEnvironment> env_;
-    mantle_api::MockController controller_;
-    std::string default_xosc_scenario_{
-        "AutomatedLaneKeepingSystemScenarios/ALKS_Scenario_4.1_1_FreeDriving_TEMPLATE.xosc"};
+private:
+  std::string name_{};
+  std::unique_ptr<mantle_api::EntityProperties> properties_{std::make_unique<mantle_api::VehicleProperties>()};
 };
 
-class EngineSubModuleTestBase : public OpenScenarioEngineLibraryTestBase
+class FakePedestrian : public mantle_api::MockPedestrian
+{
+public:
+  void SetName(const std::string& name) override { name_ = name; }
+  const std::string& GetName() const override { return name_; }
+  void SetProperties(std::unique_ptr<mantle_api::EntityProperties> properties) override { properties_ = std::move(properties); }
+  mantle_api::PedestrianProperties* GetProperties() const override
+  {
+    return static_cast<mantle_api::PedestrianProperties*>(properties_.get());
+  }
+
+private:
+  std::string name_{};
+  std::unique_ptr<mantle_api::EntityProperties> properties_{nullptr};
+};
+
+class FakeStaticObject : public mantle_api::MockStaticObject
 {
-  protected:
-    virtual void LoadScenario(const std::string& scenario_file_path)
+public:
+  void SetName(const std::string& name) override { name_ = name; }
+  const std::string& GetName() const override { return name_; }
+
+  void SetProperties(std::unique_ptr<mantle_api::EntityProperties> properties) override { properties_ = std::move(properties); }
+  MOCK_METHOD(mantle_api::StaticObjectProperties*, GetPropertiesImpl, (), (const));
+  mantle_api::StaticObjectProperties* GetProperties() const override
+  {
+    if (auto* properties = GetPropertiesImpl())
     {
-        auto message_logger =
-            std::make_shared<NET_ASAM_OPENSCENARIO::SimpleMessageLogger>(NET_ASAM_OPENSCENARIO::ErrorLevel::INFO);
-        auto catalog_message_logger =
-            std::make_shared<NET_ASAM_OPENSCENARIO::SimpleMessageLogger>(NET_ASAM_OPENSCENARIO::ErrorLevel::INFO);
-        auto loader_factory =
-            NET_ASAM_OPENSCENARIO::v1_3::XmlScenarioImportLoaderFactory(catalog_message_logger, scenario_file_path);
-        auto loader = loader_factory.CreateLoader(std::make_shared<NET_ASAM_OPENSCENARIO::FileResourceLocator>());
-
-        scenario_ptr_ = std::static_pointer_cast<NET_ASAM_OPENSCENARIO::v1_3::IOpenScenario>(
-            loader->Load(message_logger)->GetAdapter(typeid(NET_ASAM_OPENSCENARIO::v1_3::IOpenScenario).name()));
+      return properties;
     }
+    return static_cast<mantle_api::StaticObjectProperties*>(properties_.get());
+  }
+
+private:
+  std::string name_{};
+  std::unique_ptr<mantle_api::EntityProperties> properties_{nullptr};
+};
+
+class FakeQueryService : public mantle_api::MockLaneLocationQueryService
+{
+public:
+  std::optional<mantle_api::Pose> FindRelativeLanePoseAtDistanceFrom(const mantle_api::Pose& reference_pose_on_lane, int relative_target_lane, units::length::meter_t distance, units::length::meter_t lateral_offset) const override
+  {
+    std::ignore = reference_pose_on_lane;
+    std::ignore = relative_target_lane;
+    std::ignore = distance;
+    std::ignore = lateral_offset;
+    mantle_api::Pose pose{};
+    return pose;
+  }
+
+  std::optional<mantle_api::LaneId> GetRelativeLaneId(const mantle_api::Pose& reference_pose_on_lane, int relative_lane_target) const override
+  {
+    std::ignore = reference_pose_on_lane;
+    std::ignore = relative_lane_target;
+    return 0;
+  }
+};
+
+class FakeEntityRepository : public mantle_api::MockEntityRepository
+{
+public:
+  template <typename T>
+  std::shared_ptr<T> RegisterEntity()
+  {
+    auto entity = std::make_shared<T>();
+    entities_.emplace_back(entity);
+    return entity;
+  }
+
+  FakeEntityRepository()
+      : fake_vehicle_{RegisterEntity<FakeVehicle>()},
+        fake_pedestrian_{RegisterEntity<FakePedestrian>()},
+        fake_static_object_{RegisterEntity<FakeStaticObject>()}
+  {
+  }
+
+  std::weak_ptr<mantle_api::IVehicle> Create(mantle_api::UniqueId id,
+                                             const std::string& name,
+                                             const mantle_api::VehicleProperties& properties) override
+  {
+    std::ignore = id;
+    std::ignore = name;
+    std::ignore = properties;
+    return fake_vehicle_;
+  }
+
+  std::weak_ptr<mantle_api::IPedestrian> Create(mantle_api::UniqueId id,
+                                                const std::string& name,
+                                                const mantle_api::PedestrianProperties& properties) override
+  {
+    std::ignore = id;
+    std::ignore = name;
+    std::ignore = properties;
+    return fake_pedestrian_;
+  }
+
+  std::weak_ptr<mantle_api::IStaticObject> Create(mantle_api::UniqueId id,
+                                                  const std::string& name,
+                                                  const mantle_api::StaticObjectProperties& properties) override
+  {
+    std::ignore = id;
+    std::ignore = name;
+    std::ignore = properties;
+    return fake_static_object_;
+  }
 
-    std::string GetScenariosPath(const std::string& test_file_path) const
+  MOCK_METHOD(std::shared_ptr<mantle_api::IEntity>,
+              GetImpl,
+              (const std::string& name),
+              ());
+
+  MOCK_METHOD(std::shared_ptr<mantle_api::IEntity>,
+              GetImpl,
+              (const std::string& name),
+              (const));
+
+  std::weak_ptr<mantle_api::IEntity> Get(const std::string& name) override
+  {
+    if (auto entity = GetImpl(name))
     {
-        std::filesystem::path file_path{test_file_path};
-        // The first .parent_path() removes the filename, the second removes "/Utils"
-        return {file_path.parent_path().parent_path().string() + "/data/Scenarios/"};
+      return entity;
     }
+    return fake_vehicle_;
+  }
 
-    std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::IOpenScenario> scenario_ptr_;
+  std::weak_ptr<const mantle_api::IEntity> Get(const std::string& name) const override
+  {
+    if (auto entity = GetImpl(name))
+    {
+      return entity;
+    }
+    return fake_vehicle_;
+  }
+
+  std::weak_ptr<mantle_api::IEntity> Get(mantle_api::UniqueId id) override
+  {
+    std::ignore = id;
+    return fake_vehicle_;
+  }
+
+  std::weak_ptr<const mantle_api::IEntity> Get(mantle_api::UniqueId id) const override
+  {
+    std::ignore = id;
+    return fake_vehicle_;
+  }
+
+  std::weak_ptr<mantle_api::IVehicle> GetHost() override { return fake_vehicle_; }
+
+private:
+  std::vector<std::shared_ptr<mantle_api::IEntity>> entities_{};
+  std::shared_ptr<FakeVehicle> fake_vehicle_;
+  std::shared_ptr<FakePedestrian> fake_pedestrian_;
+  std::shared_ptr<FakeStaticObject> fake_static_object_;
+};
+
+class FakeEnvironment : public mantle_api::MockEnvironment
+{
+public:
+  const mantle_api::ILaneLocationQueryService& GetQueryService() const override { return query_service_; }
+
+  mantle_api::ICoordConverter* GetConverter() override { return &converter_; }
+
+  const mantle_api::IGeometryHelper* GetGeometryHelper() const override { return &geometry_helper_; }
+
+  mantle_api::IEntityRepository& GetEntityRepository() override { return entity_repository_; }
+
+  const mantle_api::IEntityRepository& GetEntityRepository() const override { return entity_repository_; }
+
+  mantle_api::MockControllerRepository& GetControllerRepository() override { return controller_repository_; }
+
+  mantle_api::IRouteRepository& GetRouteRepository() override { return route_repository_; }
+
+  const mantle_api::MockControllerRepository& GetControllerRepository() const override { return controller_repository_; }
+
+  mantle_api::MockTrafficSwarmService& GetTrafficSwarmService() override { return traffic_swarm_service_; }
+
+  mantle_api::MockTrafficAreaService& GetTrafficAreaService() override { return traffic_area_service_; }
+
+protected:
+  FakeQueryService query_service_{};
+  FakeEntityRepository entity_repository_{};
+  mantle_api::MockControllerRepository controller_repository_{};
+  mantle_api::MockCoordConverter converter_{};
+  FakeGeometryHelper geometry_helper_{};
+  mantle_api::MockRouteRepository route_repository_{};
+  mantle_api::MockTrafficSwarmService traffic_swarm_service_{};
+  mantle_api::MockTrafficAreaService traffic_area_service_{};
+};
+
+class OpenScenarioEngineLibraryTestBase : public ::testing::Test
+{
+protected:
+  void SetUp() override
+  {
+    env_ = std::make_shared<FakeEnvironment>();
+    controller_ = std::make_shared<mantle_api::MockController>();
+    ON_CALL(env_->GetControllerRepository(), Create(testing::_)).WillByDefault(testing::Return(controller_));
+    ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock()), GetUniqueId()).WillByDefault(testing::Return(mantle_api::UniqueId(0)));
+  }
+
+  std::shared_ptr<FakeEnvironment> env_;
+  std::shared_ptr<mantle_api::MockController> controller_;
+
+  std::string default_xosc_scenario_{
+      "AutomatedLaneKeepingSystemScenarios/ALKS_Scenario_4.1_1_FreeDriving_TEMPLATE.xosc"};
+};
+
+class EngineSubModuleTestBase : public OpenScenarioEngineLibraryTestBase
+{
+protected:
+  virtual void LoadScenario(const std::string& scenario_file_path)
+  {
+    auto message_logger =
+        std::make_shared<NET_ASAM_OPENSCENARIO::SimpleMessageLogger>(NET_ASAM_OPENSCENARIO::ErrorLevel::INFO);
+    auto catalog_message_logger =
+        std::make_shared<NET_ASAM_OPENSCENARIO::SimpleMessageLogger>(NET_ASAM_OPENSCENARIO::ErrorLevel::INFO);
+    auto loader_factory =
+        NET_ASAM_OPENSCENARIO::v1_3::XmlScenarioImportLoaderFactory(catalog_message_logger, scenario_file_path);
+    auto loader = loader_factory.CreateLoader(std::make_shared<NET_ASAM_OPENSCENARIO::FileResourceLocator>());
+
+    scenario_ptr_ = std::static_pointer_cast<NET_ASAM_OPENSCENARIO::v1_3::IOpenScenario>(
+        loader->Load(message_logger)->GetAdapter(typeid(NET_ASAM_OPENSCENARIO::v1_3::IOpenScenario).name()));
+  }
+
+  std::string GetScenariosPath(const std::string& test_file_path) const
+  {
+    std::filesystem::path file_path{test_file_path};
+    // The first .parent_path() removes the filename, the second removes "/Utils"
+    return {file_path.parent_path().parent_path().string() + "/data/Scenarios/"};
+  }
+
+  std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::IOpenScenario> scenario_ptr_;
 };
 
 class OpenScenarioEngineTestBase : public OpenScenarioEngineLibraryTestBase
 {
-  protected:
-    void SetUp() override
-    {
-        OpenScenarioEngineLibraryTestBase::SetUp();
-
-        mantle_api::VehicleProperties ego_properties{};
-        ego_properties.type = mantle_api::EntityType::kVehicle;
-        ego_properties.classification = mantle_api::VehicleClass::kMedium_car;
-        ego_properties.model = "medium_car";
-        ego_properties.bounding_box.dimension.length = 5.0_m;
-        ego_properties.bounding_box.dimension.width = 2.0_m;
-        ego_properties.bounding_box.dimension.height = 1.8_m;
-        ego_properties.bounding_box.geometric_center.x = 1.4_m;
-        ego_properties.bounding_box.geometric_center.y = 0.0_m;
-        ego_properties.bounding_box.geometric_center.z = 0.9_m;
-        ego_properties.performance.max_acceleration = 10_mps_sq;
-        ego_properties.performance.max_deceleration = 10_mps_sq;
-        ego_properties.performance.max_speed = 70_mps;
-        ego_properties.front_axle.bb_center_to_axle_center = {1.58_m, 0.0_m, -0.5_m};
-        ego_properties.front_axle.max_steering = 0.5_rad;
-        ego_properties.front_axle.track_width = 1.68_m;
-        ego_properties.front_axle.wheel_diameter = 0.8_m;
-        ego_properties.rear_axle.bb_center_to_axle_center = {-1.4_m, 0.0_m, -0.5_m};
-        ego_properties.rear_axle.max_steering = 0_rad;
-        ego_properties.rear_axle.track_width = 1.68_m;
-        ego_properties.rear_axle.wheel_diameter = 0.8_m;
-        ego_properties.is_host = true;
-        // Necessary because Create() is always called in engine init and will otherwise not return a MockVehicle ref
-        // which results in an exception
-        ON_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
-                Create(testing::_, ego_properties))
-            .WillByDefault(testing::ReturnRef(mock_vehicle_));
-    }
+protected:
+  void SetUp() override
+  {
+    OpenScenarioEngineLibraryTestBase::SetUp();
+    fake_vehicle_ = std::make_shared<FakeVehicle>();
+
+    mantle_api::VehicleProperties ego_properties{};
+    ego_properties.type = mantle_api::EntityType::kVehicle;
+    ego_properties.classification = mantle_api::VehicleClass::kMediumCar;
+    ego_properties.model = "medium_car";
+    ego_properties.bounding_box.dimension.length = 5.0_m;
+    ego_properties.bounding_box.dimension.width = 2.0_m;
+    ego_properties.bounding_box.dimension.height = 1.8_m;
+    ego_properties.bounding_box.geometric_center.x = 1.4_m;
+    ego_properties.bounding_box.geometric_center.y = 0.0_m;
+    ego_properties.bounding_box.geometric_center.z = 0.9_m;
+    ego_properties.performance.max_acceleration = 10_mps_sq;
+    ego_properties.performance.max_deceleration = 10_mps_sq;
+    ego_properties.performance.max_speed = 70_mps;
+    ego_properties.front_axle.bb_center_to_axle_center = {1.58_m, 0.0_m, -0.5_m};
+    ego_properties.front_axle.max_steering = 0.5_rad;
+    ego_properties.front_axle.track_width = 1.68_m;
+    ego_properties.front_axle.wheel_diameter = 0.8_m;
+    ego_properties.rear_axle.bb_center_to_axle_center = {-1.4_m, 0.0_m, -0.5_m};
+    ego_properties.rear_axle.max_steering = 0_rad;
+    ego_properties.rear_axle.track_width = 1.68_m;
+    ego_properties.rear_axle.wheel_diameter = 0.8_m;
+    ego_properties.is_host = true;
+
+    // Necessary because Create() is always called in engine init and will otherwise not return a MockVehicle ref
+    // which results in an exception
+    ON_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
+            Create(testing::_, ego_properties))
+        .WillByDefault(testing::Return(fake_vehicle_));
+  }
 
-    mantle_api::MockVehicle mock_vehicle_{};
+  std::shared_ptr<FakeVehicle> fake_vehicle_;
 };
 
 }  // namespace testing::OpenScenarioEngine::v1_3
diff --git a/engine/tests/TestUtils/MockLogger.h b/engine/tests/TestUtils/MockLogger.h
index e636b5e6991188483eb340187f34419be840e965..e3445edfa8bd17e8d8cff41af74488c3f7b8ada7 100644
--- a/engine/tests/TestUtils/MockLogger.h
+++ b/engine/tests/TestUtils/MockLogger.h
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2023-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License 2.0
@@ -11,17 +11,8 @@
 #pragma once
 
 #include <MantleAPI/Common/i_logger.h>
-#include <MantleAPI/Common/log_utils.h>
 #include <gmock/gmock.h>
 
-namespace mantle_api
-{
-inline void PrintTo(mantle_api::LogLevel log_level, ::std::ostream* os)
-{
-  *os << log_level;
-}
-}  // namespace mantle_api
-
 namespace testing::OpenScenarioEngine::v1_3
 {
 class MockLogger : public mantle_api::ILogger
@@ -31,4 +22,4 @@ public:
   MOCK_METHOD(void, Log, (mantle_api::LogLevel level, std::string_view message), (noexcept, override));
 };
 
-}  // namespace testing::OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace testing::OpenScenarioEngine::v1_3
diff --git a/engine/tests/TestUtils/MockStochastics.h b/engine/tests/TestUtils/MockStochastics.h
index 87a4a21e494180e6556e3d5a3fa243658d9fec7b..0c8003926930efa75bd78775bfb0fc2bceb98bcf 100644
--- a/engine/tests/TestUtils/MockStochastics.h
+++ b/engine/tests/TestUtils/MockStochastics.h
@@ -10,10 +10,10 @@
 
 #pragma once
 
-#include <gmock/gmock.h>
 #include <Stochastics/StochasticsInterface.h>
+#include <gmock/gmock.h>
 
-namespace OpenScenarioEngine::v1_3
+namespace testing::OpenScenarioEngine::v1_3
 {
 class MockStochastics : public StochasticsInterface
 {
@@ -42,4 +42,4 @@ public:
   }
 };
 
-}  // namespace testing::OpenScenarioEngine::v1_3
\ No newline at end of file
+}  // namespace testing::OpenScenarioEngine::v1_3
diff --git a/engine/tests/TrafficSignalParsing/TrafficPhaseNodeTest.cpp b/engine/tests/TrafficSignalParsing/TrafficPhaseNodeTest.cpp
index 8d577b1dd0a94f6937b4353be34d8be82ea67e4b..8b5de7ede375eb4fc2d57ccc06c6f385f6ce7ad2 100644
--- a/engine/tests/TrafficSignalParsing/TrafficPhaseNodeTest.cpp
+++ b/engine/tests/TrafficSignalParsing/TrafficPhaseNodeTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2022-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2022-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -8,7 +8,7 @@
  * SPDX-License-Identifier: EPL-2.0
  ********************************************************************************/
 
-#include <MantleAPI/Test/test_utils.h>
+#include <MantleAPI/Execution/mock_environment.h>
 #include <agnostic_behavior_tree/composite/parallel_node.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
diff --git a/engine/tests/TrafficSignalParsing/TreeGenerationTest.cpp b/engine/tests/TrafficSignalParsing/TreeGenerationTest.cpp
index a7285087da5dd9d4ff2424c7169b0dbe5c5a2d7f..fff7f032c7f47d818e6b408c3b5b3dd705a2d427 100644
--- a/engine/tests/TrafficSignalParsing/TreeGenerationTest.cpp
+++ b/engine/tests/TrafficSignalParsing/TreeGenerationTest.cpp
@@ -1,5 +1,5 @@
 /********************************************************************************
- * Copyright (c) 2022-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2022-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License 2.0 which is available at
@@ -11,7 +11,6 @@
 #include <ApiClassWriterInterfacesV1_3.h>
 #include <MantleAPI/Common/position.h>
 #include <MantleAPI/Common/time_utils.h>
-#include <MantleAPI/Test/test_utils.h>
 #include <agnostic_behavior_tree/composite/parallel_node.h>
 #include <agnostic_behavior_tree/decorator/stop_at_node.h>
 #include <agnostic_behavior_tree/utils/tree_print.h>
diff --git a/engine/tests/Utils/ControllerCreatorTest.cpp b/engine/tests/Utils/ControllerCreatorTest.cpp
index 2b5bc9ec6f0ec7580669809fff64dde05c4679d0..79dc1b9930e5da841a6d5681184d15b8ad648f1d 100644
--- a/engine/tests/Utils/ControllerCreatorTest.cpp
+++ b/engine/tests/Utils/ControllerCreatorTest.cpp
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2023-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made
@@ -10,7 +10,6 @@
  *******************************************************************************/
 
 #include <ApiClassWriterInterfacesV1_3.h>
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 #include <openScenarioLib/generated/v1_3/impl/ApiClassImplV1_3.h>
 #include <openScenarioLib/generated/v1_3/impl/OpenScenarioWriterFactoryImplV1_3.h>
@@ -28,30 +27,29 @@ using testing::Return;
 using testing::ReturnRef;
 using testing::SizeIs;
 
-class ControllerCreator : public ::testing::Test
+class ControllerCreatorTest : public ::testing::Test
 {
 public:
   inline static constexpr mantle_api::UniqueId TEST_CONTROLLER_ID{1234};
   inline static const std::string TEST_CONTROLLER_NAME{"TEST_CONTROLLER"};
 
-  ControllerCreator()
+  ControllerCreatorTest()
       : LOGGER{std::make_unique<testing::OpenScenarioEngine::v1_3::TestLogger>()},
-        mockEnvironment{},
-        mockEntityRepository{dynamic_cast<mantle_api::MockEntityRepository&>(mockEnvironment.GetEntityRepository())},
-        mockControllerRepository{mockEnvironment.GetControllerRepository()},
-        mockController{}
+        fake_environment_{},
+        mock_controller_repository_{fake_environment_.GetControllerRepository()}
   {
-    ON_CALL(mockController, GetName()).WillByDefault(ReturnRef(TEST_CONTROLLER_NAME));
-    ON_CALL(mockController, GetUniqueId()).WillByDefault(testing::Invoke([] {
+    ON_CALL(*mock_controller_, GetName()).WillByDefault(ReturnRef(TEST_CONTROLLER_NAME));
+    ON_CALL(*mock_controller_, GetUniqueId()).WillByDefault(testing::Invoke([]
+                                                                            {
       // id will be incremented at every call, starting with 1000
-      static mantle_api::UniqueId id{1000};
-      return id++;
-    }));
+      static mantle_api::UniqueId id{999};
+      id = id.Value() + 1;
+      return id; }));
   }
 
   void SET_VEHICLE_MOCK_NAME_AND_ID(const std::string& name, mantle_api::UniqueId id)
   {
-    auto& mockVehicle = dynamic_cast<mantle_api::MockVehicle&>(mockEnvironment.GetEntityRepository().Get(name).value().get());
+    auto& mockVehicle = dynamic_cast<mantle_api::MockVehicle&>(*fake_environment_.GetEntityRepository().Get(name).lock());
 
     mockVehicle.SetName(name);
     ON_CALL(mockVehicle, GetUniqueId()).WillByDefault(Return(id));
@@ -103,39 +101,38 @@ public:
 
   std::unique_ptr<testing::OpenScenarioEngine::v1_3::TestLogger> LOGGER;
 
-  mantle_api::MockEnvironment mockEnvironment;
-  mantle_api::MockEntityRepository& mockEntityRepository;
-  mantle_api::MockControllerRepository& mockControllerRepository;
-  mantle_api::MockController mockController;
+  testing::OpenScenarioEngine::v1_3::FakeEnvironment fake_environment_;
+  mantle_api::MockControllerRepository& mock_controller_repository_;
+  std::shared_ptr<mantle_api::MockController> mock_controller_{std::make_shared<mantle_api::MockController>()};
 
   std::vector<std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::IScenarioObject>> scenario_objects{};
   std::vector<std::unique_ptr<mantle_api::IEntity>> entities_{};
 };
 
-TEST_F(ControllerCreator, GivenNoScenarioObjects_WhenCreateIsCalled_ThenDoesNothing)
+TEST_F(ControllerCreatorTest, GivenNoScenarioObjects_WhenCreateIsCalled_ThenDoesNothing)
 {
-  EXPECT_CALL(mockControllerRepository, Create(_)).Times(0);
-  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(mockEnvironment);
+  EXPECT_CALL(mock_controller_repository_, Create(_)).Times(0);
+  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(fake_environment_);
 
   controller_creator.CreateControllers(scenario_objects);
 }
 
-TEST_F(ControllerCreator, GivenScenarioObjectWithoutController_WhenCreateIsCalled_ThenCreatesDefaultController)
+TEST_F(ControllerCreatorTest, GivenScenarioObjectWithoutController_WhenCreateIsCalled_ThenCreatesDefaultController)
 {
-  SETUP_ENTITY("test_entity", 1234, true, false);
+  SETUP_ENTITY("test_entity", mantle_api::UniqueId(1234), true, false);
 
-  EXPECT_CALL(mockControllerRepository, Create(_)).WillOnce(ReturnRef(mockController));
-  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(mockEnvironment);
+  EXPECT_CALL(mock_controller_repository_, Create(_)).WillOnce(Return(mock_controller_));
+  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(fake_environment_);
 
   controller_creator.CreateControllers(scenario_objects);
 }
 
-TEST_F(ControllerCreator, GivenUncontrollableScenarioObject_WhenCreateIsCalled_ThenDoesNothingAndLogsMessage)
+TEST_F(ControllerCreatorTest, GivenUncontrollableScenarioObject_WhenCreateIsCalled_ThenDoesNothingAndLogsMessage)
 {
-  SETUP_ENTITY("test_entity", 1234, false, false);
+  SETUP_ENTITY("test_entity", mantle_api::UniqueId(1234), false, false);
 
-  EXPECT_CALL(mockControllerRepository, Create(_)).Times(0);
-  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(mockEnvironment);
+  EXPECT_CALL(mock_controller_repository_, Create(_)).Times(0);
+  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(fake_environment_);
 
   controller_creator.CreateControllers(scenario_objects);
 
@@ -144,85 +141,85 @@ TEST_F(ControllerCreator, GivenUncontrollableScenarioObject_WhenCreateIsCalled_T
   EXPECT_THAT(LOGGER->LastLogMessage(), HasSubstr("test_entity"));
 }
 
-TEST_F(ControllerCreator, GivenUncontrollableAndControllableScenarioObject_WhenCreateIsCalled_ThenControllerOnlyForControllableObjectIsCreated)
+TEST_F(ControllerCreatorTest, GivenUncontrollableAndControllableScenarioObject_WhenCreateIsCalled_ThenControllerOnlyForControllableObjectIsCreated)
 {
-  SETUP_ENTITY("uncontrollable_entity", 1234, false, false);
-  SETUP_ENTITY("entity_2", 5678, true, false);
+  SETUP_ENTITY("uncontrollable_entity", mantle_api::UniqueId(1234), false, false);
+  SETUP_ENTITY("entity_2", mantle_api::UniqueId(5678), true, false);
 
-  EXPECT_CALL(mockControllerRepository, Create(_)).Times(1).WillOnce(ReturnRef(mockController));
-  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(mockEnvironment);
+  EXPECT_CALL(mock_controller_repository_, Create(_)).Times(1).WillOnce(Return(mock_controller_));
+  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(fake_environment_);
 
   controller_creator.CreateControllers(scenario_objects);
 }
 
-TEST_F(ControllerCreator, GivenScenarioObjectWithController_WhenCreateIsCalled_ThenCreatesDefaultAndUserDefinedController)
+TEST_F(ControllerCreatorTest, GivenScenarioObjectWithController_WhenCreateIsCalled_ThenCreatesDefaultAndUserDefinedController)
 {
-  SETUP_ENTITY("test_entity", 1234, true, true);
+  SETUP_ENTITY("test_entity", mantle_api::UniqueId(1234), true, true);
 
-  EXPECT_CALL(mockControllerRepository, Create(_))
-      .WillOnce(ReturnRef(mockController))
-      .WillOnce(ReturnRef(mockController));
+  EXPECT_CALL(mock_controller_repository_, Create(_))
+      .WillOnce(Return(mock_controller_))
+      .WillOnce(Return(mock_controller_));
 
-  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(mockEnvironment);
+  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(fake_environment_);
 
   controller_creator.CreateControllers(scenario_objects);
 }
 
-TEST_F(ControllerCreator, GivenScenarioObjectWithController_WhenCreateIsCalled_ThenControllerServiceContainsEntitiyControllers)
+TEST_F(ControllerCreatorTest, GivenScenarioObjectWithController_WhenCreateIsCalled_ThenControllerServiceContainsEntitiyControllers)
 {
-  constexpr mantle_api::UniqueId ENTITY_ID = 1234;
+  constexpr mantle_api::UniqueId ENTITY_ID{1234};
   SETUP_ENTITY("test_entity", ENTITY_ID, true, true);
 
-  ON_CALL(mockControllerRepository, Create(_)).WillByDefault(ReturnRef(mockController));
+  ON_CALL(mock_controller_repository_, Create(_)).WillByDefault(Return(mock_controller_));
 
-  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(mockEnvironment);
+  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(fake_environment_);
   controller_creator.CreateControllers(scenario_objects);
 
   auto controller_service = controller_creator.GetControllerService();
   auto controllers = controller_service->GetControllers(ENTITY_ID);
 
   auto internal_controller_id = controllers->internal.first;
-  EXPECT_THAT(internal_controller_id, Gt(0));
+  EXPECT_THAT(internal_controller_id, Gt(mantle_api::UniqueId(0)));
 
   ASSERT_THAT(controllers->user_defined, SizeIs(1));
   auto user_defined_controller_id = controllers->user_defined.begin()->first;
-  EXPECT_THAT(user_defined_controller_id, Gt(0));
+  EXPECT_THAT(user_defined_controller_id, Gt(mantle_api::UniqueId(0)));
 
   ASSERT_THAT(internal_controller_id, Ne(user_defined_controller_id));
 }
 
-TEST_F(ControllerCreator, GivenExternalControllerOverrideSet_WhenCreateControllerIsCalled_ThenHostGetsUserDefinedController)
+TEST_F(ControllerCreatorTest, GivenExternalControllerOverrideSet_WhenCreateControllerIsCalled_ThenHostGetsUserDefinedController)
 {
-  constexpr mantle_api::UniqueId ENTITY_ID = 1234;
+  constexpr mantle_api::UniqueId ENTITY_ID{1234};
   // "DSpace" host "M1:..." and no external controller
   SETUP_ENTITY("M1:test_entity", ENTITY_ID, true, false);
 
-  mantle_api::MockController default_controller{};
+  std::shared_ptr<mantle_api::MockController> default_controller{std::make_shared<mantle_api::MockController>()};
   constexpr mantle_api::UniqueId DEFAULT_CONTROLLER_ID{1000};
   std::string DEFAULT_CONTROLLER_NAME{"DEFAULT_CONTROLLER"};
-  ON_CALL(default_controller, GetUniqueId()).WillByDefault(Return(DEFAULT_CONTROLLER_ID));
-  ON_CALL(default_controller, GetName()).WillByDefault(ReturnRef(DEFAULT_CONTROLLER_NAME));
-  EXPECT_CALL(default_controller,
+  ON_CALL(*default_controller, GetUniqueId()).WillByDefault(Return(DEFAULT_CONTROLLER_ID));
+  ON_CALL(*default_controller, GetName()).WillByDefault(ReturnRef(DEFAULT_CONTROLLER_NAME));
+  EXPECT_CALL(*default_controller,
               ChangeState(mantle_api::IController::LateralState::kActivate, mantle_api::IController::LongitudinalState::kActivate))
       .Times(1);
-  EXPECT_CALL(default_controller,
+  EXPECT_CALL(*default_controller,
               ChangeState(mantle_api::IController::LateralState::kDeactivate, mantle_api::IController::LongitudinalState::kDeactivate))
       .Times(1);
 
-  mantle_api::MockController user_defined_controller{};
+  std::shared_ptr<mantle_api::MockController> user_defined_controller{std::make_shared<mantle_api::MockController>()};
   constexpr mantle_api::UniqueId USER_DEFINED_CONTROLLER_ID{1001};
   std::string USER_DEFINED_CONTROLLER_NAME{"USED_DEFINED_CONTROLLER"};
-  ON_CALL(user_defined_controller, GetUniqueId()).WillByDefault(Return(USER_DEFINED_CONTROLLER_ID));
-  ON_CALL(user_defined_controller, GetName()).WillByDefault(ReturnRef(USER_DEFINED_CONTROLLER_NAME));
-  EXPECT_CALL(user_defined_controller,
+  ON_CALL(*user_defined_controller, GetUniqueId()).WillByDefault(Return(USER_DEFINED_CONTROLLER_ID));
+  ON_CALL(*user_defined_controller, GetName()).WillByDefault(ReturnRef(USER_DEFINED_CONTROLLER_NAME));
+  EXPECT_CALL(*user_defined_controller,
               ChangeState(mantle_api::IController::LateralState::kActivate, mantle_api::IController::LongitudinalState::kActivate))
       .Times(1);
 
-  EXPECT_CALL(mockControllerRepository, Create(_))
-      .WillOnce(ReturnRef(default_controller))
-      .WillOnce(ReturnRef(user_defined_controller));
+  EXPECT_CALL(mock_controller_repository_, Create(_))
+      .WillOnce(Return(default_controller))
+      .WillOnce(Return(user_defined_controller));
 
-  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(mockEnvironment);
+  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(fake_environment_);
   controller_creator.EnableUserDefinedControllerOverride();
   controller_creator.CreateControllers(scenario_objects);
 
@@ -237,25 +234,25 @@ TEST_F(ControllerCreator, GivenExternalControllerOverrideSet_WhenCreateControlle
   EXPECT_EQ(actual_user_defined_controller_id, USER_DEFINED_CONTROLLER_ID);
 }
 
-TEST_F(ControllerCreator, GivenScenarioObjectWithoutController_WhenCreateControllersIsCalled_ThenDefaultControllerIsCreatedAndActivated)
+TEST_F(ControllerCreatorTest, GivenScenarioObjectWithoutController_WhenCreateControllersIsCalled_ThenDefaultControllerIsCreatedAndActivated)
 {
-  SETUP_ENTITY("test_entity", 1234, true, false);
+  SETUP_ENTITY("test_entity", mantle_api::UniqueId(1234), true, false);
 
-  EXPECT_CALL(mockControllerRepository, Create(_)).WillOnce(ReturnRef(mockController));
-  EXPECT_CALL(mockController, ChangeState(_, _)).Times(1);
-  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(mockEnvironment);
+  EXPECT_CALL(mock_controller_repository_, Create(_)).WillOnce(Return(mock_controller_));
+  EXPECT_CALL(*mock_controller_, ChangeState(_, _)).Times(1);
+  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(fake_environment_);
 
   controller_creator.CreateControllers(scenario_objects);
 }
 
-TEST_F(ControllerCreator, GivenScenarioObjectWithController_WhenResetControllerMappingsIsCalled_ThenControllerServiceInternalStateIsReset)
+TEST_F(ControllerCreatorTest, GivenScenarioObjectWithController_WhenResetControllerMappingsIsCalled_ThenControllerServiceInternalStateIsReset)
 {
-  constexpr mantle_api::UniqueId ENTITY_ID = 1234;
+  constexpr mantle_api::UniqueId ENTITY_ID{1234};
   SETUP_ENTITY("test_entity", ENTITY_ID, true, true);
 
-  ON_CALL(mockControllerRepository, Create(_)).WillByDefault(ReturnRef(mockController));
+  ON_CALL(mock_controller_repository_, Create(_)).WillByDefault(Return(mock_controller_));
 
-  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(mockEnvironment);
+  OpenScenarioEngine::v1_3::ControllerCreator controller_creator(fake_environment_);
   controller_creator.CreateControllers(scenario_objects);
 
   auto controller_service = controller_creator.GetControllerService();
diff --git a/engine/tests/Utils/EntityCreatorTest.cpp b/engine/tests/Utils/EntityCreatorTest.cpp
index d86ac535f253ed844476c89bf18676aaffc18b0e..edbae4bb5fa353252fb76e764a936e5e5ed3d083 100644
--- a/engine/tests/Utils/EntityCreatorTest.cpp
+++ b/engine/tests/Utils/EntityCreatorTest.cpp
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2023-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+ * Copyright (c) 2023-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
  * Copyright (c) 2022-2023 Ansys, Inc.
  *
  * This program and the accompanying materials are made
@@ -9,12 +9,11 @@
  * SPDX-License-Identifier: EPL-2.0
  *******************************************************************************/
 
-#include "Utils/EntityCreator.h"
-#include "TestUtils.h"
-
-#include <MantleAPI/Test/test_utils.h>
 #include <gtest/gtest.h>
 
+#include "TestUtils.h"
+#include "Utils/EntityCreator.h"
+
 using testing::OpenScenarioEngine::v1_3::EngineSubModuleTestBase;
 using namespace units::literals;
 
@@ -24,138 +23,140 @@ class EntityCreatorTest : public EngineSubModuleTestBase
 
 MATCHER_P(StaticObjectPropertiesEqualTo, expected_static_object_property, "")
 {
-    return arg.type == expected_static_object_property.type &&
-           arg.static_object_type == expected_static_object_property.static_object_type &&
-           arg.model == expected_static_object_property.model &&
-           arg.vertical_offset == expected_static_object_property.vertical_offset &&
-           arg.bounding_box.dimension.length == expected_static_object_property.bounding_box.dimension.length &&
-           arg.bounding_box.dimension.width == expected_static_object_property.bounding_box.dimension.width &&
-           arg.bounding_box.dimension.height == expected_static_object_property.bounding_box.dimension.height &&
-           arg.bounding_box.geometric_center.x == expected_static_object_property.bounding_box.geometric_center.x &&
-           arg.bounding_box.geometric_center.y == expected_static_object_property.bounding_box.geometric_center.y &&
-           arg.bounding_box.geometric_center.z == expected_static_object_property.bounding_box.geometric_center.z;
+  return arg.type == expected_static_object_property.type &&
+         arg.static_object_type == expected_static_object_property.static_object_type &&
+         arg.model == expected_static_object_property.model &&
+         arg.vertical_offset == expected_static_object_property.vertical_offset &&
+         arg.bounding_box.dimension.length == expected_static_object_property.bounding_box.dimension.length &&
+         arg.bounding_box.dimension.width == expected_static_object_property.bounding_box.dimension.width &&
+         arg.bounding_box.dimension.height == expected_static_object_property.bounding_box.dimension.height &&
+         arg.bounding_box.geometric_center.x == expected_static_object_property.bounding_box.geometric_center.x &&
+         arg.bounding_box.geometric_center.y == expected_static_object_property.bounding_box.geometric_center.y &&
+         arg.bounding_box.geometric_center.z == expected_static_object_property.bounding_box.geometric_center.z;
 }
 
 TEST_F(EntityCreatorTest, GivenScenarioWithEntities_WhenCreateEntityIsCalled_ThenCreateIsCalledInEnvironment)
 {
-    std::string xosc_file_path{GetScenariosPath(test_info_->file()) + "test_entities_valid.xosc"};
-    LoadScenario(xosc_file_path);
-    OpenScenarioEngine::v1_3::EntityCreator entity_creator(env_);
-
-    mantle_api::MockVehicle mock_vehicle{};
-    mantle_api::MockPedestrian mock_pedestrian{};
-    mantle_api::MockStaticObject mock_static_object{};
-
-    mantle_api::VehicleProperties vehicle_properties{};
-    vehicle_properties.type = mantle_api::EntityType::kVehicle;
-    vehicle_properties.classification = mantle_api::VehicleClass::kMotorbike;
-    vehicle_properties.model = "motorbike";
-    vehicle_properties.bounding_box.dimension.length = 5.0_m;
-    vehicle_properties.bounding_box.dimension.width = 2.0_m;
-    vehicle_properties.bounding_box.dimension.height = 1.8_m;
-    vehicle_properties.bounding_box.geometric_center.x = 1.4_m;
-    vehicle_properties.bounding_box.geometric_center.y = 0.0_m;
-    vehicle_properties.bounding_box.geometric_center.z = 0.9_m;
-    vehicle_properties.performance.max_acceleration = 10_mps_sq;
-    vehicle_properties.performance.max_deceleration = 10_mps_sq;
-    vehicle_properties.performance.max_speed = 70_mps;
-    vehicle_properties.front_axle.bb_center_to_axle_center = {1.58_m, 0.0_m, -0.5_m};
-    vehicle_properties.front_axle.max_steering = 0.5_rad;
-    vehicle_properties.front_axle.track_width = 1.68_m;
-    vehicle_properties.front_axle.wheel_diameter = 0.8_m;
-    vehicle_properties.rear_axle.bb_center_to_axle_center = {-1.40_m, 0.0_m, -0.5_m};
-    vehicle_properties.rear_axle.max_steering = 0_rad;
-    vehicle_properties.rear_axle.track_width = 1.68_m;
-    vehicle_properties.rear_axle.wheel_diameter = 0.8_m;
-
-    mantle_api::VehicleProperties ego_properties{vehicle_properties};
-    ego_properties.classification = mantle_api::VehicleClass::kMedium_car;
-    ego_properties.model = "medium_car";
-    ego_properties.is_host = true;
-    ego_properties.properties.emplace("custom_property", "5");
-
-    mantle_api::VehicleProperties wheelchair_properties{};
-    wheelchair_properties.type = mantle_api::EntityType::kVehicle;
-    wheelchair_properties.classification = mantle_api::VehicleClass::kWheelchair;
-    wheelchair_properties.bounding_box.dimension.length = 0.7_m;
-    wheelchair_properties.bounding_box.dimension.width = 0.7_m;
-    wheelchair_properties.bounding_box.dimension.height = 1.3_m;
-    wheelchair_properties.bounding_box.geometric_center.x = 0.35_m;
-    wheelchair_properties.bounding_box.geometric_center.y = 0.0_m;
-    wheelchair_properties.bounding_box.geometric_center.z = 0.65_m;
-
-    mantle_api::PedestrianProperties pedestrian_properties{};
-    pedestrian_properties.type = mantle_api::EntityType::kPedestrian;
-    pedestrian_properties.model = "male";
-    pedestrian_properties.bounding_box.dimension.length = 0.3_m;
-    pedestrian_properties.bounding_box.dimension.width = 0.5_m;
-    pedestrian_properties.bounding_box.dimension.height = 1.8_m;
-    pedestrian_properties.bounding_box.geometric_center.x = 0.15_m;
-    pedestrian_properties.bounding_box.geometric_center.y = 0.0_m;
-    pedestrian_properties.bounding_box.geometric_center.z = 0.9_m;
-
-    mantle_api::PedestrianProperties animal_properties{};
-    animal_properties.type = mantle_api::EntityType::kAnimal;
-    animal_properties.model = "Deer.gltf";
-    animal_properties.bounding_box.dimension.length = 1.5_m;
-    animal_properties.bounding_box.dimension.width = 0.5_m;
-    animal_properties.bounding_box.dimension.height = 1.1_m;
-    animal_properties.bounding_box.geometric_center.x = 0.75_m;
-    animal_properties.bounding_box.geometric_center.y = 0.0_m;
-    animal_properties.bounding_box.geometric_center.z = 0.55_m;
-
-    mantle_api::StaticObjectProperties static_object_properties{};
-    static_object_properties.type = mantle_api::EntityType::kStatic;
-    static_object_properties.static_object_type = mantle_api::StaticObjectType::kOther;
-    static_object_properties.model = "pylon";
-    static_object_properties.vertical_offset = 0.5_m;
-    static_object_properties.bounding_box.dimension.length = 1.0_m;
-    static_object_properties.bounding_box.dimension.width = 1.0_m;
-    static_object_properties.bounding_box.dimension.height = 1.0_m;
-    static_object_properties.bounding_box.geometric_center.x = 0.5_m;
-    static_object_properties.bounding_box.geometric_center.y = 0.0_m;
-    static_object_properties.bounding_box.geometric_center.z = 0.5_m;
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
-                Create(std::string("ScenarioObject6"), static_object_properties))
-        .Times(1)
-        .WillRepeatedly(testing::ReturnRef(mock_static_object));
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
-                Create(std::string("ScenarioObject5"), wheelchair_properties))
-        .Times(1)
-        .WillRepeatedly(testing::ReturnRef(mock_vehicle));
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
-                Create(std::string("ScenarioObject4"), animal_properties))
-        .Times(1)
-        .WillRepeatedly(testing::ReturnRef(mock_pedestrian));
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
-                Create(std::string("ScenarioObject3"), vehicle_properties))
-        .Times(1)
-        .WillRepeatedly(testing::ReturnRef(mock_vehicle));
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
-                Create(std::string("ScenarioObject2"),
-                       testing::Matcher<const mantle_api::StaticObjectProperties&>(
-                           StaticObjectPropertiesEqualTo(static_object_properties))))
-        .Times(1)
-        .WillRepeatedly(testing::ReturnRef(mock_static_object));
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
-                Create(std::string("ScenarioObject1"), pedestrian_properties))
-        .Times(1)
-        .WillRepeatedly(testing::ReturnRef(mock_pedestrian));
-
-    EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
-                Create(std::string("Ego"), ego_properties))
-        .Times(1)
-        .WillRepeatedly(testing::ReturnRef(mock_vehicle));
-
-    for (auto&& scenario_object :
-         scenario_ptr_->GetOpenScenarioCategory()->GetScenarioDefinition()->GetEntities()->GetScenarioObjects())
-    {
-        entity_creator.CreateEntity(scenario_object);
-    }
+  std::string xosc_file_path{GetScenariosPath(test_info_->file()) + "test_entities_valid.xosc"};
+  LoadScenario(xosc_file_path);
+  OpenScenarioEngine::v1_3::EntityCreator entity_creator(env_);
+
+  std::shared_ptr<mantle_api::MockVehicle> mock_vehicle{std::make_shared<mantle_api::MockVehicle>()};
+  std::shared_ptr<mantle_api::MockPedestrian> mock_pedestrian{std::make_shared<mantle_api::MockPedestrian>()};
+  std::shared_ptr<mantle_api::MockStaticObject> mock_static_object{std::make_shared<mantle_api::MockStaticObject>()};
+
+  mantle_api::VehicleProperties vehicle_properties{};
+  vehicle_properties.type = mantle_api::EntityType::kVehicle;
+  vehicle_properties.classification = mantle_api::VehicleClass::kMotorcycle;
+  vehicle_properties.model = "motorbike";
+  vehicle_properties.bounding_box.dimension.length = 5.0_m;
+  vehicle_properties.bounding_box.dimension.width = 2.0_m;
+  vehicle_properties.bounding_box.dimension.height = 1.8_m;
+  vehicle_properties.bounding_box.geometric_center.x = 1.4_m;
+  vehicle_properties.bounding_box.geometric_center.y = 0.0_m;
+  vehicle_properties.bounding_box.geometric_center.z = 0.9_m;
+  vehicle_properties.performance.max_acceleration = 10_mps_sq;
+  vehicle_properties.performance.max_deceleration = 10_mps_sq;
+  vehicle_properties.performance.max_speed = 70_mps;
+  vehicle_properties.front_axle.bb_center_to_axle_center = {1.58_m, 0.0_m, -0.5_m};
+  vehicle_properties.front_axle.max_steering = 0.5_rad;
+  vehicle_properties.front_axle.track_width = 1.68_m;
+  vehicle_properties.front_axle.wheel_diameter = 0.8_m;
+  vehicle_properties.rear_axle.bb_center_to_axle_center = {-1.40_m, 0.0_m, -0.5_m};
+  vehicle_properties.rear_axle.max_steering = 0_rad;
+  vehicle_properties.rear_axle.track_width = 1.68_m;
+  vehicle_properties.rear_axle.wheel_diameter = 0.8_m;
+
+  mantle_api::VehicleProperties ego_properties{vehicle_properties};
+  ego_properties.classification = mantle_api::VehicleClass::kMediumCar;
+  ego_properties.model = "medium_car";
+  ego_properties.is_host = true;
+  ego_properties.properties.emplace("custom_property", "5");
+
+  mantle_api::VehicleProperties wheelchair_properties{};
+  wheelchair_properties.type = mantle_api::EntityType::kVehicle;
+  wheelchair_properties.classification = mantle_api::VehicleClass::kWheelchair;
+  wheelchair_properties.bounding_box.dimension.length = 0.7_m;
+  wheelchair_properties.bounding_box.dimension.width = 0.7_m;
+  wheelchair_properties.bounding_box.dimension.height = 1.3_m;
+  wheelchair_properties.bounding_box.geometric_center.x = 0.35_m;
+  wheelchair_properties.bounding_box.geometric_center.y = 0.0_m;
+  wheelchair_properties.bounding_box.geometric_center.z = 0.65_m;
+
+  mantle_api::PedestrianProperties pedestrian_properties{};
+  pedestrian_properties.type = mantle_api::EntityType::kPedestrian;
+  pedestrian_properties.model = "male";
+  pedestrian_properties.bounding_box.dimension.length = 0.3_m;
+  pedestrian_properties.bounding_box.dimension.width = 0.5_m;
+  pedestrian_properties.bounding_box.dimension.height = 1.8_m;
+  pedestrian_properties.bounding_box.geometric_center.x = 0.15_m;
+  pedestrian_properties.bounding_box.geometric_center.y = 0.0_m;
+  pedestrian_properties.bounding_box.geometric_center.z = 0.9_m;
+
+  mantle_api::PedestrianProperties animal_properties{};
+  animal_properties.type = mantle_api::EntityType::kAnimal;
+  animal_properties.model = "Deer.gltf";
+  animal_properties.bounding_box.dimension.length = 1.5_m;
+  animal_properties.bounding_box.dimension.width = 0.5_m;
+  animal_properties.bounding_box.dimension.height = 1.1_m;
+  animal_properties.bounding_box.geometric_center.x = 0.75_m;
+  animal_properties.bounding_box.geometric_center.y = 0.0_m;
+  animal_properties.bounding_box.geometric_center.z = 0.55_m;
+
+  mantle_api::StaticObjectProperties static_object_properties{};
+  static_object_properties.type = mantle_api::EntityType::kStatic;
+  static_object_properties.static_object_type = mantle_api::StaticObjectType::kOther;
+  static_object_properties.model = "pylon";
+  static_object_properties.vertical_offset = 0.5_m;
+  static_object_properties.bounding_box.dimension.length = 1.0_m;
+  static_object_properties.bounding_box.dimension.width = 1.0_m;
+  static_object_properties.bounding_box.dimension.height = 1.0_m;
+  static_object_properties.bounding_box.geometric_center.x = 0.5_m;
+  static_object_properties.bounding_box.geometric_center.y = 0.0_m;
+  static_object_properties.bounding_box.geometric_center.z = 0.5_m;
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
+              Create(std::string("ScenarioObject6"),
+                     testing::Matcher<const mantle_api::StaticObjectProperties&>(
+                         StaticObjectPropertiesEqualTo(static_object_properties))))
+      .Times(1)
+      .WillRepeatedly(testing::Return(mock_static_object));
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
+              Create(std::string("ScenarioObject5"), wheelchair_properties))
+      .Times(1)
+      .WillRepeatedly(testing::Return(mock_vehicle));
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
+              Create(std::string("ScenarioObject4"), animal_properties))
+      .Times(1)
+      .WillRepeatedly(testing::Return(mock_pedestrian));
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
+              Create(std::string("ScenarioObject3"), vehicle_properties))
+      .Times(1)
+      .WillRepeatedly(testing::Return(mock_vehicle));
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
+              Create(std::string("ScenarioObject2"),
+                     testing::Matcher<const mantle_api::StaticObjectProperties&>(
+                         StaticObjectPropertiesEqualTo(static_object_properties))))
+      .Times(1)
+      .WillRepeatedly(testing::Return(mock_static_object));
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
+              Create(std::string("ScenarioObject1"), pedestrian_properties))
+      .Times(1)
+      .WillRepeatedly(testing::Return(mock_pedestrian));
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockEntityRepository&>(env_->GetEntityRepository()),
+              Create(std::string("Ego"), ego_properties))
+      .Times(1)
+      .WillRepeatedly(testing::Return(mock_vehicle));
+
+  for (auto&& scenario_object :
+       scenario_ptr_->GetOpenScenarioCategory()->GetScenarioDefinition()->GetEntities()->GetScenarioObjects())
+  {
+    entity_creator.CreateEntity(scenario_object);
+  }
 }
diff --git a/engine/tests/Utils/EntityUtilsTest.cpp b/engine/tests/Utils/EntityUtilsTest.cpp
index 9f0de49e4fd1cc384cced61d7c74c9d736b77bef..fc556de936b111c1bceee3d81d51b40f6d8a1927 100644
--- a/engine/tests/Utils/EntityUtilsTest.cpp
+++ b/engine/tests/Utils/EntityUtilsTest.cpp
@@ -17,339 +17,340 @@
 #include "Utils/EntityUtils.h"
 
 using namespace OpenScenarioEngine::v1_3;
+using namespace testing::OpenScenarioEngine::v1_3;
 using testing::OpenScenarioEngine::v1_3::OpenScenarioEngineLibraryTestBase;
 using namespace units::literals;
 
 class EntityUtilsTestFixture : public OpenScenarioEngineLibraryTestBase
 {
-  protected:
-    void SetUp() override
-    {
-        OpenScenarioEngineLibraryTestBase::SetUp();
-        LOGGER = std::make_unique<testing::OpenScenarioEngine::v1_3::TestLogger>();
-    }
-    std::unique_ptr<testing::OpenScenarioEngine::v1_3::TestLogger> LOGGER;
+protected:
+  void SetUp() override
+  {
+    OpenScenarioEngineLibraryTestBase::SetUp();
+    LOGGER = std::make_unique<testing::OpenScenarioEngine::v1_3::TestLogger>();
+  }
+  std::unique_ptr<testing::OpenScenarioEngine::v1_3::TestLogger> LOGGER;
 };
 
 TEST_F(EntityUtilsTestFixture,
        GivenTwoEntitiesAt7metersDistance_WhenCalculateLongitudinalFreeSpaceDistance_ThenDistanceBetweenIsCalculated)
 {
-    mantle_api::MockVehicle master_vehicle_mock{};
-    mantle_api::MockVehicle reference_vehicle_mock{};
+  FakeVehicle master_vehicle_mock{};
+  FakeVehicle reference_vehicle_mock{};
 
-    mantle_api::VehicleProperties properties{};
-    properties.bounding_box.dimension.length = 5.0_m;
-    properties.bounding_box.dimension.width = 2.0_m;
-    properties.bounding_box.dimension.height = 1.8_m;
-    properties.bounding_box.geometric_center.x = 1.4_m;
-    properties.bounding_box.geometric_center.y = 0.0_m;
-    properties.bounding_box.geometric_center.z = 0.9_m;
+  mantle_api::VehicleProperties properties{};
+  properties.bounding_box.dimension.length = 5.0_m;
+  properties.bounding_box.dimension.width = 2.0_m;
+  properties.bounding_box.dimension.height = 1.8_m;
+  properties.bounding_box.geometric_center.x = 1.4_m;
+  properties.bounding_box.geometric_center.y = 0.0_m;
+  properties.bounding_box.geometric_center.z = 0.9_m;
 
-    auto master_vehicle_properties = std::make_unique<mantle_api::EntityProperties>(properties);
-    auto reference_vehicle_properties = std::make_unique<mantle_api::EntityProperties>(properties);
+  auto master_vehicle_properties = std::make_unique<mantle_api::VehicleProperties>(properties);
+  auto reference_vehicle_properties = std::make_unique<mantle_api::VehicleProperties>(properties);
 
-    master_vehicle_mock.SetProperties(std::move(master_vehicle_properties));
-    reference_vehicle_mock.SetProperties(std::move(reference_vehicle_properties));
+  master_vehicle_mock.SetProperties(std::move(master_vehicle_properties));
+  reference_vehicle_mock.SetProperties(std::move(reference_vehicle_properties));
 
-    EXPECT_CALL(master_vehicle_mock, GetPosition())
-        .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m}));
+  EXPECT_CALL(master_vehicle_mock, GetPosition())
+      .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m}));
 
-    EXPECT_CALL(master_vehicle_mock, GetOrientation())
-        .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
+  EXPECT_CALL(master_vehicle_mock, GetOrientation())
+      .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
 
-    EXPECT_CALL(reference_vehicle_mock, GetPosition())
-        .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{10_m, 0_m, 0_m}));
+  EXPECT_CALL(reference_vehicle_mock, GetPosition())
+      .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{10_m, 0_m, 0_m}));
 
-    EXPECT_CALL(reference_vehicle_mock, GetOrientation())
-        .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
+  EXPECT_CALL(reference_vehicle_mock, GetOrientation())
+      .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
 
-    const mantle_api::Vec3<units::length::meter_t> mock_position_reference{10_m, 0_m, 0_m};
+  const mantle_api::Vec3<units::length::meter_t> mock_position_reference{10_m, 0_m, 0_m};
 
-    EXPECT_CALL(dynamic_cast<const mantle_api::MockGeometryHelper&>(*(env_->GetGeometryHelper())),
-                TranslateGlobalPositionLocally(
-                    reference_vehicle_mock.GetPosition(), reference_vehicle_mock.GetOrientation(), testing::_))
-        .WillRepeatedly(testing::Return(mock_position_reference));
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockGeometryHelper&>(*(env_->GetGeometryHelper())),
+              TranslateGlobalPositionLocally(
+                  reference_vehicle_mock.GetPosition(), reference_vehicle_mock.GetOrientation(), testing::_))
+      .WillRepeatedly(testing::Return(mock_position_reference));
 
-    auto expected_distance = 7.5_m;
-    auto actual_distance =
-        EntityUtils::CalculateLongitudinalFreeSpaceDistance(env_, master_vehicle_mock, reference_vehicle_mock);
+  auto expected_distance = 7.5_m;
+  auto actual_distance =
+      EntityUtils::CalculateLongitudinalFreeSpaceDistance(env_, master_vehicle_mock, reference_vehicle_mock);
 
-    EXPECT_EQ(expected_distance, actual_distance);
+  EXPECT_EQ(expected_distance, actual_distance);
 }
 
 TEST_F(EntityUtilsTestFixture,
        GivenTwoEntitiesAt5metersDistance_WhenCalculateLateralFreeSpaceDistance_ThenDistanceBetweenIsCalculated)
 {
-    mantle_api::MockVehicle master_vehicle_mock{};
-    mantle_api::MockVehicle reference_vehicle_mock{};
+  FakeVehicle master_vehicle_mock{};
+  FakeVehicle reference_vehicle_mock{};
 
-    mantle_api::VehicleProperties properties{};
-    properties.bounding_box.dimension.length = 5.0_m;
-    properties.bounding_box.dimension.width = 2.0_m;
-    properties.bounding_box.dimension.height = 1.8_m;
-    properties.bounding_box.geometric_center.x = 1.4_m;
-    properties.bounding_box.geometric_center.y = 0.0_m;
-    properties.bounding_box.geometric_center.z = 0.9_m;
+  mantle_api::VehicleProperties properties{};
+  properties.bounding_box.dimension.length = 5.0_m;
+  properties.bounding_box.dimension.width = 2.0_m;
+  properties.bounding_box.dimension.height = 1.8_m;
+  properties.bounding_box.geometric_center.x = 1.4_m;
+  properties.bounding_box.geometric_center.y = 0.0_m;
+  properties.bounding_box.geometric_center.z = 0.9_m;
 
-    auto master_vehicle_properties = std::make_unique<mantle_api::EntityProperties>(properties);
-    auto reference_vehicle_properties = std::make_unique<mantle_api::EntityProperties>(properties);
+  auto master_vehicle_properties = std::make_unique<mantle_api::VehicleProperties>(properties);
+  auto reference_vehicle_properties = std::make_unique<mantle_api::VehicleProperties>(properties);
 
-    master_vehicle_mock.SetProperties(std::move(master_vehicle_properties));
-    reference_vehicle_mock.SetProperties(std::move(reference_vehicle_properties));
+  master_vehicle_mock.SetProperties(std::move(master_vehicle_properties));
+  reference_vehicle_mock.SetProperties(std::move(reference_vehicle_properties));
 
-    EXPECT_CALL(master_vehicle_mock, GetPosition())
-        .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m}));
+  EXPECT_CALL(master_vehicle_mock, GetPosition())
+      .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m}));
 
-    EXPECT_CALL(master_vehicle_mock, GetOrientation())
-        .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
+  EXPECT_CALL(master_vehicle_mock, GetOrientation())
+      .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
 
-    EXPECT_CALL(reference_vehicle_mock, GetPosition())
-        .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{10_m, 5_m, 0_m}));
+  EXPECT_CALL(reference_vehicle_mock, GetPosition())
+      .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{10_m, 5_m, 0_m}));
 
-    EXPECT_CALL(reference_vehicle_mock, GetOrientation())
-        .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_deg, 0_deg, 90_deg}));
+  EXPECT_CALL(reference_vehicle_mock, GetOrientation())
+      .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_deg, 0_deg, 90_deg}));
 
-    const mantle_api::Vec3<units::length::meter_t> mock_position_reference{10_m, 5_m, 0_m};
+  const mantle_api::Vec3<units::length::meter_t> mock_position_reference{10_m, 5_m, 0_m};
 
-    EXPECT_CALL(dynamic_cast<const mantle_api::MockGeometryHelper&>(*(env_->GetGeometryHelper())),
-                TranslateGlobalPositionLocally(
-                    reference_vehicle_mock.GetPosition(), reference_vehicle_mock.GetOrientation(), testing::_))
-        .WillRepeatedly(testing::Return(mock_position_reference));
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockGeometryHelper&>(*(env_->GetGeometryHelper())),
+              TranslateGlobalPositionLocally(
+                  reference_vehicle_mock.GetPosition(), reference_vehicle_mock.GetOrientation(), testing::_))
+      .WillRepeatedly(testing::Return(mock_position_reference));
 
-    auto expected_distance = 4.0_m;
-    auto actual_distance =
-        EntityUtils::CalculateLateralFreeSpaceDistance(env_, master_vehicle_mock, reference_vehicle_mock);
+  auto expected_distance = 4.0_m;
+  auto actual_distance =
+      EntityUtils::CalculateLateralFreeSpaceDistance(env_, master_vehicle_mock, reference_vehicle_mock);
 
-    EXPECT_EQ(expected_distance, actual_distance);
+  EXPECT_EQ(expected_distance, actual_distance);
 }
 
 TEST_F(EntityUtilsTestFixture,
        GivenTwoEntitiesLaterallyOverlapping_WhenCalculateLateralFreeSpaceDistance_ThenDistanceIsZeroAndWarningIsLogged)
 {
-    mantle_api::MockVehicle master_vehicle_mock{};
-    mantle_api::MockVehicle reference_vehicle_mock{};
-
-    mantle_api::VehicleProperties properties{};
-    properties.bounding_box.dimension.length = 5.0_m;
-    properties.bounding_box.dimension.width = 2.0_m;
-    properties.bounding_box.dimension.height = 1.8_m;
-    properties.bounding_box.geometric_center.x = 1.4_m;
-    properties.bounding_box.geometric_center.y = 0.0_m;
-    properties.bounding_box.geometric_center.z = 0.9_m;
-
-    auto master_vehicle_properties = std::make_unique<mantle_api::EntityProperties>(properties);
-    auto reference_vehicle_properties = std::make_unique<mantle_api::EntityProperties>(properties);
-
-    master_vehicle_mock.SetProperties(std::move(master_vehicle_properties));
-    reference_vehicle_mock.SetProperties(std::move(reference_vehicle_properties));
-
-    EXPECT_CALL(master_vehicle_mock, GetPosition())
-        .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m}));
-
-    EXPECT_CALL(master_vehicle_mock, GetOrientation())
-        .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
-
-    EXPECT_CALL(reference_vehicle_mock, GetPosition())
-        .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{10_m, 0_m, 0_m}));
-
-    EXPECT_CALL(reference_vehicle_mock, GetOrientation())
-        .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 90_deg}));
-
-    const mantle_api::Vec3<units::length::meter_t> mock_position_reference{10_m, 2.5_m, 0_m};
-
-    EXPECT_CALL(dynamic_cast<const mantle_api::MockGeometryHelper&>(*(env_->GetGeometryHelper())),
-                TranslateGlobalPositionLocally(
-                    reference_vehicle_mock.GetPosition(), reference_vehicle_mock.GetOrientation(), testing::_))
-        .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{11_m, -2.5_m, 0_m}))
-        .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{11_m, 2.5_m, 0_m}))
-        .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{9_m, 2.5_m, 0_m}))
-        .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{9_m, -2.5_m, 0_m}))
-        .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{11_m, -2.5_m, 1.8_m}))
-        .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{11_m, 2.5_m, 1.8_m}))
-        .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{9_m, 2.5_m, 1.8_m}))
-        .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{9_m, -2.5_m, 1.8_m}));
-
-    auto expected_distance = 0.0_m;
-    auto actual_distance =
-        EntityUtils::CalculateLateralFreeSpaceDistance(env_, master_vehicle_mock, reference_vehicle_mock);
-
-    ASSERT_EQ(expected_distance, actual_distance);
-    EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kWarning);
-    EXPECT_THAT(LOGGER->LastLogMessage(), testing::HasSubstr("Entity \"\" and \"\" are overlapping"));
+  FakeVehicle master_vehicle_mock{};
+  FakeVehicle reference_vehicle_mock{};
+
+  mantle_api::VehicleProperties properties{};
+  properties.bounding_box.dimension.length = 5.0_m;
+  properties.bounding_box.dimension.width = 2.0_m;
+  properties.bounding_box.dimension.height = 1.8_m;
+  properties.bounding_box.geometric_center.x = 1.4_m;
+  properties.bounding_box.geometric_center.y = 0.0_m;
+  properties.bounding_box.geometric_center.z = 0.9_m;
+
+  auto master_vehicle_properties = std::make_unique<mantle_api::VehicleProperties>(properties);
+  auto reference_vehicle_properties = std::make_unique<mantle_api::VehicleProperties>(properties);
+
+  master_vehicle_mock.SetProperties(std::move(master_vehicle_properties));
+  reference_vehicle_mock.SetProperties(std::move(reference_vehicle_properties));
+
+  EXPECT_CALL(master_vehicle_mock, GetPosition())
+      .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m}));
+
+  EXPECT_CALL(master_vehicle_mock, GetOrientation())
+      .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
+
+  EXPECT_CALL(reference_vehicle_mock, GetPosition())
+      .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{10_m, 0_m, 0_m}));
+
+  EXPECT_CALL(reference_vehicle_mock, GetOrientation())
+      .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 90_deg}));
+
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockGeometryHelper&>(*(env_->GetGeometryHelper())),
+              TranslateGlobalPositionLocally(
+                  reference_vehicle_mock.GetPosition(), reference_vehicle_mock.GetOrientation(), testing::_))
+      .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{11_m, -2.5_m, 0_m}))
+      .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{11_m, 2.5_m, 0_m}))
+      .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{9_m, 2.5_m, 0_m}))
+      .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{9_m, -2.5_m, 0_m}))
+      .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{11_m, -2.5_m, 1.8_m}))
+      .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{11_m, 2.5_m, 1.8_m}))
+      .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{9_m, 2.5_m, 1.8_m}))
+      .WillOnce(testing::Return(mantle_api::Vec3<units::length::meter_t>{9_m, -2.5_m, 1.8_m}));
+
+  auto expected_distance = 0.0_m;
+  auto actual_distance =
+      EntityUtils::CalculateLateralFreeSpaceDistance(env_, master_vehicle_mock, reference_vehicle_mock);
+
+  ASSERT_EQ(expected_distance, actual_distance);
+  EXPECT_THAT(LOGGER->LastLogLevel(), mantle_api::LogLevel::kWarning);
+  EXPECT_THAT(LOGGER->LastLogMessage(), testing::HasSubstr("Entity \"\" and \"\" are overlapping"));
 }
 
 TEST_F(EntityUtilsTestFixture,
        GivenTwoEntitiesAt10metersDistance_WhenCalculateRelativeLongitudinalDistance_ThenDistanceBetweenIsCalculated)
 {
-    mantle_api::MockVehicle master_vehicle_mock{};
-    mantle_api::MockVehicle reference_vehicle_mock{};
+  FakeVehicle master_vehicle_mock{};
+  FakeVehicle reference_vehicle_mock{};
 
-    mantle_api::VehicleProperties properties{};
-    properties.bounding_box.dimension.length = 5.0_m;
-    properties.bounding_box.dimension.width = 2.0_m;
-    properties.bounding_box.dimension.height = 1.8_m;
-    properties.bounding_box.geometric_center.x = 1.4_m;
-    properties.bounding_box.geometric_center.y = 0.0_m;
-    properties.bounding_box.geometric_center.z = 0.9_m;
+  mantle_api::VehicleProperties properties{};
+  properties.bounding_box.dimension.length = 5.0_m;
+  properties.bounding_box.dimension.width = 2.0_m;
+  properties.bounding_box.dimension.height = 1.8_m;
+  properties.bounding_box.geometric_center.x = 1.4_m;
+  properties.bounding_box.geometric_center.y = 0.0_m;
+  properties.bounding_box.geometric_center.z = 0.9_m;
 
-    auto master_vehicle_properties = std::make_unique<mantle_api::EntityProperties>(properties);
-    auto reference_vehicle_properties = std::make_unique<mantle_api::EntityProperties>(properties);
+  auto master_vehicle_properties = std::make_unique<mantle_api::VehicleProperties>(properties);
+  auto reference_vehicle_properties = std::make_unique<mantle_api::VehicleProperties>(properties);
 
-    master_vehicle_mock.SetProperties(std::move(master_vehicle_properties));
-    reference_vehicle_mock.SetProperties(std::move(reference_vehicle_properties));
+  master_vehicle_mock.SetProperties(std::move(master_vehicle_properties));
+  reference_vehicle_mock.SetProperties(std::move(reference_vehicle_properties));
 
-    EXPECT_CALL(master_vehicle_mock, GetPosition())
-        .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m}));
+  EXPECT_CALL(master_vehicle_mock, GetPosition())
+      .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{0_m, 0_m, 0_m}));
 
-    EXPECT_CALL(master_vehicle_mock, GetOrientation())
-        .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
+  EXPECT_CALL(master_vehicle_mock, GetOrientation())
+      .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
 
-    EXPECT_CALL(reference_vehicle_mock, GetPosition())
-        .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{10_m, 0_m, 0_m}));
+  EXPECT_CALL(reference_vehicle_mock, GetPosition())
+      .WillRepeatedly(::testing::Return(mantle_api::Vec3<units::length::meter_t>{10_m, 0_m, 0_m}));
 
-    EXPECT_CALL(reference_vehicle_mock, GetOrientation())
-        .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
+  EXPECT_CALL(reference_vehicle_mock, GetOrientation())
+      .WillRepeatedly(::testing::Return(mantle_api::Orientation3<units::angle::radian_t>{0_rad, 0_rad, 0_rad}));
 
-    const mantle_api::Vec3<units::length::meter_t> mock_position_reference{10_m, 0_m, 0_m};
-    const mantle_api::Vec3<units::length::meter_t> mock_position_master{0_m, 0_m, 0_m};
+  const mantle_api::Vec3<units::length::meter_t> mock_position_reference{10_m, 0_m, 0_m};
+  const mantle_api::Vec3<units::length::meter_t> mock_position_master{0_m, 0_m, 0_m};
 
-    EXPECT_CALL(dynamic_cast<const mantle_api::MockGeometryHelper&>(*(env_->GetGeometryHelper())),
-                TranslateGlobalPositionLocally(testing::_, testing::_, testing::_))
-        .WillOnce(testing::Return(mock_position_master))
-        .WillOnce(testing::Return(mock_position_reference));
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockGeometryHelper&>(*(env_->GetGeometryHelper())),
+              TranslateGlobalPositionLocally(testing::_, testing::_, testing::_))
+      .WillOnce(testing::Return(mock_position_master))
+      .WillOnce(testing::Return(mock_position_reference));
 
-    auto expected_distance = 10_m;
-    auto actual_distance =
-        EntityUtils::CalculateRelativeLongitudinalDistance(env_, master_vehicle_mock, reference_vehicle_mock);
+  auto expected_distance = 10_m;
+  auto actual_distance =
+      EntityUtils::CalculateRelativeLongitudinalDistance(env_, master_vehicle_mock, reference_vehicle_mock);
 
-    EXPECT_EQ(expected_distance, actual_distance);
+  EXPECT_EQ(expected_distance, actual_distance);
 }
 
 TEST_F(EntityUtilsTestFixture,
        GivenTwoEntitiesAt10metersDistance_WhenGetBoundingBoxCornerPoints_ThenReturnObjectCornerPointsOfTheEntity)
 {
-    mantle_api::MockVehicle vehicle_mock{};
-
-    mantle_api::VehicleProperties properties{};
-    properties.bounding_box.dimension.length = 5.0_m;
-    properties.bounding_box.dimension.width = 2.0_m;
-    properties.bounding_box.dimension.height = 1.8_m;
-    properties.bounding_box.geometric_center.x = 1.4_m;
-    properties.bounding_box.geometric_center.y = 0.0_m;
-    properties.bounding_box.geometric_center.z = 0.9_m;
-
-    auto master_vehicle_properties = std::make_unique<mantle_api::EntityProperties>(properties);
-    vehicle_mock.SetProperties(std::move(master_vehicle_properties));
-
-    auto actual_corner_points = EntityUtils::GetBoundingBoxCornerPoints(vehicle_mock);
-
-    std::vector<mantle_api::Vec3<units::length::meter_t>> expected_corner_points{
-        {2.5_m, 1_m, -0.9_m},
-        {2.5_m, -1_m, -0.9_m},
-        {2.5_m, 1_m, 0.9_m},
-        {2.5_m, -1_m, 0.9_m},
-        {-2.5_m, 1_m, -0.9_m},
-        {-2.5_m, -1_m, -0.9_m},
-        {-2.5_m, 1_m, 0.9_m},
-        {-2.5_m, -1_m, 0.9_m},
-    };
-    EXPECT_EQ(expected_corner_points.size(), actual_corner_points.size());
-
-    for (std::size_t i = 0; i < expected_corner_points.size(); i++)
-    {
-        EXPECT_EQ(expected_corner_points[i], actual_corner_points[i]);
-    }
+  FakeVehicle vehicle_mock{};
+
+  mantle_api::VehicleProperties properties{};
+  properties.bounding_box.dimension.length = 5.0_m;
+  properties.bounding_box.dimension.width = 2.0_m;
+  properties.bounding_box.dimension.height = 1.8_m;
+  properties.bounding_box.geometric_center.x = 1.4_m;
+  properties.bounding_box.geometric_center.y = 0.0_m;
+  properties.bounding_box.geometric_center.z = 0.9_m;
+
+  auto master_vehicle_properties = std::make_unique<mantle_api::VehicleProperties>(properties);
+  vehicle_mock.SetProperties(std::move(master_vehicle_properties));
+
+  auto actual_corner_points = EntityUtils::GetBoundingBoxCornerPoints(vehicle_mock);
+
+  std::vector<mantle_api::Vec3<units::length::meter_t>> expected_corner_points{
+      {2.5_m, 1_m, -0.9_m},
+      {2.5_m, -1_m, -0.9_m},
+      {2.5_m, 1_m, 0.9_m},
+      {2.5_m, -1_m, 0.9_m},
+      {-2.5_m, 1_m, -0.9_m},
+      {-2.5_m, -1_m, -0.9_m},
+      {-2.5_m, 1_m, 0.9_m},
+      {-2.5_m, -1_m, 0.9_m},
+  };
+  EXPECT_EQ(expected_corner_points.size(), actual_corner_points.size());
+
+  for (std::size_t i = 0; i < expected_corner_points.size(); i++)
+  {
+    EXPECT_EQ(expected_corner_points[i], actual_corner_points[i]);
+  }
 }
 
 TEST_F(
     EntityUtilsTestFixture,
     GivenTwoEntitiesAt10metersDistance_WhenGetBoundingBoxCornerPointsInGlobal_ThenReturnGlobalObjectCornerPointsOfTheEntity)
 {
-    const mantle_api::Vec3<units::length::meter_t> position{10_m, 0_m, 0_m};
-    const mantle_api::Orientation3<units::angle::radian_t> orientation{0_rad, 0_rad, 0_rad};
-
-    std::vector<mantle_api::Vec3<units::length::meter_t>> local_corner_points{
-        {1_m, 1_m, -1_m},
-        {1_m, -1_m, -1_m},
-        {1_m, 1_m, 1_m},
-        {1_m, -1_m, 1_m},
-        {-1_m, 1_m, -1_m},
-        {-1_m, -1_m, -1_m},
-        {-1_m, 1_m, 1_m},
-        {-1_m, -1_m, 1_m},
-    };
-
-    EXPECT_CALL(dynamic_cast<const mantle_api::MockGeometryHelper&>(*(env_->GetGeometryHelper())),
-                TranslateGlobalPositionLocally(position, orientation, testing::_))
-        .WillRepeatedly(testing::Return(position));
-    auto actual_global_corner_points =
-        EntityUtils::GetBoundingBoxCornerPointsInGlobal(env_, position, orientation, local_corner_points);
-
-    EXPECT_EQ(local_corner_points.size(), actual_global_corner_points.size());
-
-    for (std::size_t i = 0; i < actual_global_corner_points.size(); i++)
-    {
-        EXPECT_EQ(position, actual_global_corner_points[i]);
-    }
+  const mantle_api::Vec3<units::length::meter_t> position{10_m, 0_m, 0_m};
+  const mantle_api::Orientation3<units::angle::radian_t> orientation{0_rad, 0_rad, 0_rad};
+
+  std::vector<mantle_api::Vec3<units::length::meter_t>> local_corner_points{
+      {1_m, 1_m, -1_m},
+      {1_m, -1_m, -1_m},
+      {1_m, 1_m, 1_m},
+      {1_m, -1_m, 1_m},
+      {-1_m, 1_m, -1_m},
+      {-1_m, -1_m, -1_m},
+      {-1_m, 1_m, 1_m},
+      {-1_m, -1_m, 1_m},
+  };
+
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockGeometryHelper&>(*(env_->GetGeometryHelper())),
+              TranslateGlobalPositionLocally(position, orientation, testing::_))
+      .WillRepeatedly(testing::Return(position));
+  auto actual_global_corner_points =
+      EntityUtils::GetBoundingBoxCornerPointsInGlobal(env_, position, orientation, local_corner_points);
+
+  EXPECT_EQ(local_corner_points.size(), actual_global_corner_points.size());
+
+  for (std::size_t i = 0; i < actual_global_corner_points.size(); i++)
+  {
+    EXPECT_EQ(position, actual_global_corner_points[i]);
+  }
 }
 
 TEST_F(
     EntityUtilsTestFixture,
     GivenEntityAndEnvironment_WhenGetCornerPositionsInGlobalSortedByLongitudinalDistanceInLaneDirection_ThenReturnCornerPositionInCorrectOrder)
 {
-    auto& mocked_entity = dynamic_cast<mantle_api::MockVehicle&>(env_->GetEntityRepository().Get("").value().get());
-    auto& mocked_geo_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*(env_->GetGeometryHelper()));
+  auto& mocked_entity = dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().Get("").lock());
+  auto& mocked_geo_helper = dynamic_cast<const mantle_api::MockGeometryHelper&>(*(env_->GetGeometryHelper()));
 
-    const auto headmost_corner = mantle_api::Vec3<units::length::meter_t>{3.0_m, 0_m, 0_m};
-    const auto rearmost_corner = mantle_api::Vec3<units::length::meter_t>{-1.0_m, 0_m, 0_m};
+  const auto headmost_corner = mantle_api::Vec3<units::length::meter_t>{3.0_m, 0_m, 0_m};
+  const auto rearmost_corner = mantle_api::Vec3<units::length::meter_t>{-1.0_m, 0_m, 0_m};
 
-    const auto other_corner = mantle_api::Vec3<units::length::meter_t>{0.0_m, 0_m, 0_m};
+  const auto other_corner = mantle_api::Vec3<units::length::meter_t>{0.0_m, 0_m, 0_m};
 
-    const auto entity_position = mantle_api::Vec3<units::length::meter_t>{2.0_m, 2.1_m, 0_m};
-    const auto entity_orientation = mantle_api::Orientation3<units::angle::radian_t>{2.2_rad, 2.3_rad, 0_rad};
-    EXPECT_CALL(mocked_entity, GetPosition()).WillOnce(testing::Return(entity_position));
-    EXPECT_CALL(mocked_entity, GetOrientation()).WillOnce(testing::Return(entity_orientation));
+  const auto entity_position = mantle_api::Vec3<units::length::meter_t>{2.0_m, 2.1_m, 0_m};
+  const auto entity_orientation = mantle_api::Orientation3<units::angle::radian_t>{2.2_rad, 2.3_rad, 0_rad};
+  EXPECT_CALL(mocked_entity, GetPosition()).WillOnce(testing::Return(entity_position));
+  EXPECT_CALL(mocked_entity, GetOrientation()).WillOnce(testing::Return(entity_orientation));
 
-    EXPECT_CALL(mocked_geo_helper, TranslateGlobalPositionLocally(entity_position, entity_orientation, testing::_))
-        .Times(8)
-        .WillOnce(::testing::Return(headmost_corner))
-        .WillOnce(::testing::Return(rearmost_corner))
-        .WillRepeatedly(::testing::Return(other_corner));
+  EXPECT_CALL(mocked_geo_helper, TranslateGlobalPositionLocally(entity_position, entity_orientation, testing::_))
+      .Times(8)
+      .WillOnce(::testing::Return(headmost_corner))
+      .WillOnce(::testing::Return(rearmost_corner))
+      .WillRepeatedly(::testing::Return(other_corner));
 
-    const auto local_origin = mantle_api::Vec3<units::length::meter_t>{1.0_m, 1.1_m, 0_m};
-    const auto local_orientation = mantle_api::Orientation3<units::angle::radian_t>{1.2_rad, 1.3_rad, 0_rad};
-    const auto corner_points_in_local = EntityUtils::GetCornerPositionsInLocalSortedByLongitudinalDistance(
-        env_, mocked_entity, local_origin, local_orientation);
+  const auto local_origin = mantle_api::Vec3<units::length::meter_t>{1.0_m, 1.1_m, 0_m};
+  const auto local_orientation = mantle_api::Orientation3<units::angle::radian_t>{1.2_rad, 1.3_rad, 0_rad};
+  const auto corner_points_in_local = EntityUtils::GetCornerPositionsInLocalSortedByLongitudinalDistance(
+      env_, mocked_entity, local_origin, local_orientation);
 
-    EXPECT_EQ(corner_points_in_local.size(), 8);  // 8 corners
-    EXPECT_EQ(corner_points_in_local.front(), rearmost_corner);
-    EXPECT_EQ(corner_points_in_local.back(), headmost_corner);
+  EXPECT_EQ(corner_points_in_local.size(), 8);  // 8 corners
+  EXPECT_EQ(corner_points_in_local.front(), rearmost_corner);
+  EXPECT_EQ(corner_points_in_local.back(), headmost_corner);
 }
 
 TEST_F(
     EntityUtilsTestFixture,
     GivenEntityAndEnvironment_WhenRemovingEntity_ThenControllerAndEntityAreDeleted)
 {
-  std::unique_ptr<mantle_api::MockVehicle> mocked_entity;
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
-  auto& mockEntityRepository = static_cast<mantle_api::MockEntityRepository&>(mockEnvironment->GetEntityRepository());
+  std::shared_ptr<mantle_api::MockVehicle> mocked_entity;
+  auto fake_environment = std::make_shared<FakeEnvironment>();
+  auto& fake_entity_repository = static_cast<FakeEntityRepository&>(fake_environment->GetEntityRepository());
   auto mockControllerService = std::make_shared<testing::OpenScenarioEngine::v1_3::MockControllerService>();
-  auto& mockControllerRepository = static_cast<mantle_api::MockControllerRepository&>(mockEnvironment->GetControllerRepository());
+  auto& mockControllerRepository = static_cast<mantle_api::MockControllerRepository&>(fake_environment->GetControllerRepository());
 
-  std::vector<std::unique_ptr<mantle_api::IEntity>> vehicles;
-  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault([&vehicles, &mocked_entity]() -> std::vector<std::unique_ptr<mantle_api::IEntity>>&
-    {
-      mocked_entity = std::make_unique<mantle_api::MockVehicle>();
-      vehicles.emplace_back(std::move(mocked_entity));
-      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicles.back()), GetUniqueId).WillByDefault(testing::Return(1234));
+  std::vector<std::shared_ptr<mantle_api::IEntity>> vehicles;
+  std::vector<std::weak_ptr<mantle_api::IEntity>> weak_vehicle_vec;
+  ON_CALL(fake_entity_repository, GetEntities()).WillByDefault([&vehicles, &mocked_entity, &weak_vehicle_vec]() -> std::vector<std::weak_ptr<mantle_api::IEntity>>&
+                                                               {
+      mocked_entity = std::make_shared<mantle_api::MockVehicle>();
+      vehicles.emplace_back(mocked_entity);
+      weak_vehicle_vec.push_back(std::weak_ptr<mantle_api::IEntity>(mocked_entity));
+      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicles.back()), GetUniqueId).WillByDefault(testing::Return(mantle_api::UniqueId(1234)));
 
-      return vehicles;
-    });
+      return weak_vehicle_vec; });
 
-  ON_CALL(*mockControllerService, GetControllerIds(1234)).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{1001}));
+  ON_CALL(*mockControllerService, GetControllerIds(mantle_api::UniqueId(1234))).WillByDefault(testing::Return(std::vector<mantle_api::UniqueId>{mantle_api::UniqueId(1001)}));
 
-  EXPECT_CALL(mockControllerRepository, Delete(1001));
-  EXPECT_CALL(mockEntityRepository, Delete(1234)).WillRepeatedly([&mocked_entity](mantle_api::UniqueId entity_id){mocked_entity.reset();});
-  EntityUtils::RemoveEntity(mockEnvironment, 1234, {1001});
+  EXPECT_CALL(mockControllerRepository, Delete(mantle_api::UniqueId(1001)));
+  EXPECT_CALL(fake_entity_repository, Delete(mantle_api::UniqueId(1234))).WillRepeatedly([&mocked_entity](mantle_api::UniqueId entity_id)
+                                                                                         { mocked_entity.reset(); });
+  EntityUtils::RemoveEntity(fake_environment, mantle_api::UniqueId(1234), {mantle_api::UniqueId(1001)});
   EXPECT_FALSE(mocked_entity.get());
 }
diff --git a/engine/tests/data/Scenarios/Catalogs/MiscObjects/MiscObjectCatalog.xosc b/engine/tests/data/Scenarios/Catalogs/MiscObjects/MiscObjectCatalog.xosc
index d5bb02e6ee6fcae7f772ce2a802fa32ab8f02080..c0b92c006b3c0fa5a97b4b482aad5523af12923e 100644
--- a/engine/tests/data/Scenarios/Catalogs/MiscObjects/MiscObjectCatalog.xosc
+++ b/engine/tests/data/Scenarios/Catalogs/MiscObjects/MiscObjectCatalog.xosc
@@ -12,4 +12,4 @@
       </Properties>
     </MiscObject>
   </Catalog>
-</OpenSCENARIO>
\ No newline at end of file
+</OpenSCENARIO>
diff --git a/engine/tests/data/Scenarios/Catalogs/Vehicles/VehicleCatalog.xosc b/engine/tests/data/Scenarios/Catalogs/Vehicles/VehicleCatalog.xosc
index ccf99478ea177f0deb705c6f714cffa66725eb1a..6b51c61fe70074905c81ec760f553cfb2c93e6ec 100644
--- a/engine/tests/data/Scenarios/Catalogs/Vehicles/VehicleCatalog.xosc
+++ b/engine/tests/data/Scenarios/Catalogs/Vehicles/VehicleCatalog.xosc
@@ -23,7 +23,7 @@
       </BoundingBox>
       <Performance maxSpeed="70" maxDeceleration="10" maxAcceleration="10" />
       <Axles>
-	<FrontAxle maxSteering="0.5" wheelDiameter="0.8" trackWidth="1.68" positionX="2.98" positionZ="0.4" />
+        <FrontAxle maxSteering="0.5" wheelDiameter="0.8" trackWidth="1.68" positionX="2.98" positionZ="0.4" />
         <RearAxle maxSteering="0" wheelDiameter="0.8" trackWidth="1.68" positionX="0" positionZ="0.4" />
       </Axles>
       <Properties></Properties>
diff --git a/engine/tests/data/Scenarios/test_entities_valid.xosc b/engine/tests/data/Scenarios/test_entities_valid.xosc
index 07f3c6a925e14ce1d82da8c3b744c618f565a256..f1d7016c3916aac889137236cb3efdeb3b694945 100644
--- a/engine/tests/data/Scenarios/test_entities_valid.xosc
+++ b/engine/tests/data/Scenarios/test_entities_valid.xosc
@@ -69,6 +69,9 @@
           <Center x="0.5" y="0.0" z="0.5" />
           <Dimensions width="1.0" length="1.0" height="1.0" />
         </BoundingBox>
+        <Properties>
+          <Property name="mount_height" value="0.5"/>
+        </Properties>
       </MiscObject>
     </ScenarioObject>
   </Entities>
diff --git a/engine/third_party/mantle_api/mantle_api.bzl b/engine/third_party/mantle_api/mantle_api.bzl
index 107b3d4e61dea7c8983b4f11c86d1af725437215..02a4359676fc9cefea26e66b3e5bbc55a5655faa 100644
--- a/engine/third_party/mantle_api/mantle_api.bzl
+++ b/engine/third_party/mantle_api/mantle_api.bzl
@@ -1,14 +1,14 @@
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
 
-_TAG = "v14.0.0"
+_TAG = "prepare_integration_of_v9"
 
 def mantle_api():
     maybe(
         http_archive,
         name = "mantle_api",
         url = "https://gitlab.eclipse.org/eclipse/openpass/mantle-api/-/archive/{tag}/mantle-api-{tag}.tar.gz".format(tag = _TAG),
-        sha256 = "3cb1aa0dd479a4bb457b3aaa59615f27f84a8ea7d9815f03f23ca7893e063583",
+        sha256 = "82fe6287474b48b9960d80bf6ac509cbe007472a6d68b49ab9068b6e8b7ec241",
         strip_prefix = "mantle-api-{tag}".format(tag = _TAG),
         type = "tar.gz",
     )
diff --git a/utils/ci/conan/conanfile.txt b/utils/ci/conan/conanfile.txt
index 2cd59264a312b987d035dff89046a1b764f15989..6cc2ec133b628754af304f9eb860766180c7a1ab 100644
--- a/utils/ci/conan/conanfile.txt
+++ b/utils/ci/conan/conanfile.txt
@@ -1,6 +1,6 @@
 [requires]
 units/2.3.4@openscenarioengine/testing
-mantleapi/v14.0.0@openscenarioengine/testing
+mantleapi/prepare_integration_of_v9@openscenarioengine/testing
 yase/d0c0e58d17358044cc9018c74308b45f6097ecfb@openscenarioengine/testing
 openscenario_api/v1.4.0@openscenarioengine/testing
 stochastics/0.11.0@openscenarioengine/testing
diff --git a/utils/ci/conan/recipe/mantleapi/all/conandata.yml b/utils/ci/conan/recipe/mantleapi/all/conandata.yml
index 6bd5d1be36147e7ec256931e305f5a0a64135524..b1e3f44c9137d3213dd6373836ca5856d375e1d2 100644
--- a/utils/ci/conan/recipe/mantleapi/all/conandata.yml
+++ b/utils/ci/conan/recipe/mantleapi/all/conandata.yml
@@ -61,5 +61,9 @@ sources:
     url: https://gitlab.eclipse.org/eclipse/openpass/mantle-api.git
     sha256: "5541bf1ab65333cf791739bd9d7296837cdf5381"
 
+  "prepare_integration_of_v9":
+    url: https://gitlab.eclipse.org/eclipse/openpass/mantle-api.git
+    sha256: "ed710922db6a9dddd7f536958cbfe89bfe49ebec"
+
   "default":
     url: https://gitlab.eclipse.org/eclipse/openpass/mantle-api.git