From cc2c129dcf2fcab8e6b4f65c8fd2c290f2528f07 Mon Sep 17 00:00:00 2001
From: Andreas Rauschert <andreas.rb.rauschert@bmw.de>
Date: Wed, 4 Jun 2025 10:42:59 +0200
Subject: [PATCH] Integrate MantleAPI v12

- Reimplement deleted Mocks that return other mocks on e.g.
GetEntityRepository() in test/TestUtils.h as Fake classes
- Replace mocks with fake classes in tests
- fix wrong usage of (local) LaneIds and (global) UniqueId for lanes in
LateralDistanceAction and ConvertScenarioAbsoluteTargetLaneTest
- adjust to new getter for entities (weak ptr instead of optional
reference wrapper)
- entities in the repo are now shared ptr instead of unique ptrs (for
tests)
- adjust to new route handling (removed AssignRoute(), add Create() in
route repository
and SetRoute() in entity)
- adjust to renaming of members in route definition
- adjust to redefinition of polynomial in SplineSection (struct instead
of tuple)
- fix namespace for MockStatistics
- add demo as bazel target and fix compilation
---
 README.md                                     |   2 +-
 engine/BUILD.bazel                            |  14 +
 engine/demo/main.cpp                          |  44 +-
 .../LaneChangeAction_base.h                   |   6 +-
 .../OpenScenarioEngine/OpenScenarioEngine.h   |   3 +
 .../ConvertScenarioLaneOffsetTarget.cpp       |   4 +-
 .../ConvertScenarioLongitudinalDistance.cpp   |   8 +-
 .../OscToMantle/ConvertScenarioPosition.cpp   |  11 +-
 .../ConvertScenarioRelativeTargetLane.cpp     |  10 +-
 .../OscToMantle/ConvertScenarioRoute.cpp      |  31 +-
 .../OscToMantle/ConvertScenarioRoute.h        |   8 +-
 .../ConvertScenarioSpeedActionTarget.cpp      |  12 +-
 .../ConvertScenarioTrafficDefinition.cpp      |  40 +-
 engine/src/OpenScenarioEngine.cpp             |   6 +
 .../DistanceCondition_impl.cpp                |   6 +-
 .../ReachPositionCondition_impl.cpp           |   8 +-
 .../RelativeDistanceCondition_impl.cpp        |  12 +-
 .../RelativeSpeedCondition_impl.cpp           |  12 +-
 .../ByEntityCondition/SpeedCondition_impl.cpp |   6 +-
 .../TimeHeadwayCondition_impl.cpp             |  24 +-
 .../TimeToCollisionCondition_impl.cpp         |   6 +-
 .../TraveledDistanceCondition_impl.cpp        |   6 +-
 .../AcquirePositionAction_impl.cpp            |  40 +-
 .../ActivateControllerAction_impl.cpp         |   6 +-
 .../AssignControllerAction_impl.cpp           |  10 +-
 .../GenericAction/AssignRouteAction_impl.cpp  |  16 +-
 .../GenericAction/LightStateAction_impl.cpp   |   6 +-
 .../GenericAction/TeleportAction_impl.cpp     |  19 +-
 .../GenericAction/TrafficSinkAction_impl.cpp  |   2 +-
 .../GenericAction/TrafficSwarmAction_impl.cpp |  22 +-
 .../GenericAction/TrafficSwarmAction_impl.h   |   6 +-
 .../GenericAction/VisibilityAction_impl.cpp   |   6 +-
 .../FollowTrajectoryAction_impl.cpp           |  12 +-
 .../LaneChangeAction_impl.cpp                 |   6 +-
 .../LaneOffsetAction_impl.cpp                 |  10 +-
 .../LateralDistanceAction_impl.cpp            |  20 +-
 .../LateralDistanceAction_impl.h              |   4 +-
 .../LongitudinalDistanceAction_impl.cpp       |  26 +-
 .../MotionControlAction/MotionControlAction.h |   8 +-
 .../MotionControlAction/SpeedAction_impl.cpp  |  49 +-
 engine/src/Utils/ControllerCreator.cpp        |  20 +-
 engine/src/Utils/ControllerService.cpp        |   6 +-
 engine/src/Utils/EntityCreator.cpp            |  12 +-
 engine/src/Utils/EntityUtils.cpp              |  18 +-
 engine/src/Utils/EntityUtils.h                |   5 +-
 .../ConvertScenarioAbsoluteTargetLaneTest.cpp |   7 +-
 .../ConvertScenarioLaneOffsetTargetTest.cpp   |  40 +-
 .../ConvertScenarioPositionTest.cpp           | 113 +--
 .../ConvertScenarioRelativeTargetLaneTest.cpp |   8 +-
 .../ConvertScenarioSpeedActionTargetTest.cpp  |  15 +-
 .../ConvertScenarioTimeReferenceTest.cpp      |   5 +-
 ...arioTimeToCollisionConditionTargetTest.cpp |   5 +-
 .../ConvertScenarioTrafficDefinitionTest.cpp  |  14 +-
 .../ConvertScenarioTrajectoryRefTest.cpp      |  12 +-
 .../tests/Node/ByEntityConditionNodeTest.cpp  |   4 +-
 engine/tests/Node/ConditionNodeTest.cpp       |   8 +-
 engine/tests/Node/EntityConditionNodeTest.cpp |   4 +-
 engine/tests/OpenScenarioEngineTest.cpp       |  39 +-
 .../DistanceConditionTest.cpp                 |  21 +-
 .../ReachPositionConditionTest.cpp            |  16 +-
 .../RelativeDistanceConditionTest.cpp         |  22 +-
 .../RelativeSpeedConditionTest.cpp            |  22 +-
 .../ByEntityCondition/SpeedConditionTest.cpp  |  22 +-
 .../TimeHeadwayConditionTest.cpp              |  46 +-
 .../TimeToCollisionConditionTest.cpp          |  16 +-
 .../TraveledDistanceConditionTest.cpp         |  19 +-
 .../SimulationTimeConditionTest.cpp           |   6 +-
 .../UserDefinedValueConditionTest.cpp         |   6 +-
 .../AcquirePositionActionTest.cpp             |  39 +-
 .../ActivateControllerActionTest.cpp          |  20 +-
 .../AssignControllerActionTest.cpp            |  46 +-
 .../GenericAction/AssignRouteActionTest.cpp   | 157 ++--
 .../GenericAction/EnvironmentActionTest.cpp   |  17 +-
 .../GenericAction/LightStateActionTests.cpp   |  11 +-
 .../GenericAction/TeleportActionTest.cpp      |  89 ++-
 .../TrafficSignalStateActionTest.cpp          |   8 +-
 .../GenericAction/TrafficSinkActionTest.cpp   | 202 +++--
 .../GenericAction/TrafficSwarmActionTest.cpp  | 127 ++-
 .../GenericAction/VisibilityActionTest.cpp    |   8 +-
 .../FollowTrajectoryActionTest.cpp            |  57 +-
 .../LaneChangeActionTest.cpp                  | 202 ++---
 .../LaneOffsetActionTest.cpp                  |  20 +-
 .../LateralDistanceActionTest.cpp             |  97 +--
 .../LongitudinalDistanceActionTest.cpp        | 725 +++++++++---------
 .../MotionControlActionTest.cpp               |  22 +-
 .../MotionControlAction/SpeedActionTest.cpp   | 147 ++--
 engine/tests/TestUtils.h                      | 414 +++++++---
 engine/tests/TestUtils/MockLogger.h           |  13 +-
 engine/tests/TestUtils/MockStochastics.h      |   6 +-
 .../TrafficPhaseNodeTest.cpp                  |   4 +-
 .../TreeGenerationTest.cpp                    |   3 +-
 engine/tests/Utils/ControllerCreatorTest.cpp  | 137 ++--
 engine/tests/Utils/DistributionTest.cpp       |   1 +
 engine/tests/Utils/EntityCreatorTest.cpp      | 271 +++----
 engine/tests/Utils/EntityUtilsTest.cpp        | 483 ++++++------
 .../tests/Utils/PropertyInterpreterTest.cpp   |   3 +-
 .../MiscObjects/MiscObjectCatalog.xosc        |   2 +-
 .../Catalogs/Vehicles/VehicleCatalog.xosc     |   2 +-
 .../data/Scenarios/test_entities_valid.xosc   |   3 +
 engine/third_party/mantle_api/mantle_api.bzl  |   4 +-
 utils/ci/conan/conanfile.txt                  |   2 +-
 .../conan/recipe/mantleapi/all/conandata.yml  |   4 +
 102 files changed, 2323 insertions(+), 2101 deletions(-)

diff --git a/README.md b/README.md
index 69cdb1de..3061b72d 100644
--- a/README.md
+++ b/README.md
@@ -269,7 +269,7 @@ For more information on how to define these properties, refer to the documentati
 | [CPM](https://github.com/cpm-cmake/CPM.cmake) | 03705fc | 0.36.0 | MIT License |
 | [googletest](https://github.com/google/googletest) | f8d7d77 | 1.14.0 | BSD-3-Clause License |
 | [JSON for Modern C++](https://github.com/nlohmann/json) | db78ac1 | 3.9.1 | MIT 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) | fa2c771a | 17.0.0 | EPL 2.0 |
 | [openpass/stochastics-library](https://gitlab.eclipse.org/eclipse/openpass/stochastics-library) | 6c9dde71 | 0.11.0 | EPL 2.0 |
 | [OpenSCENARIO API](https://github.com/RA-Consulting-GmbH/openscenario.api.test/) | 5980e88 | 1.4.0 | Apache 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 b3f3450b..dd12358e 100644
--- a/engine/BUILD.bazel
+++ b/engine/BUILD.bazel
@@ -37,6 +37,18 @@ cc_library(
     ],
 )
 
+cc_binary(
+    name = "demo",
+    srcs = glob([
+        "demo/main.cpp",
+    ]),
+    deps = [
+        ":open_scenario_engine",
+        ":open_scenario_engine_test_utils",
+        "@googletest//:gtest_main",
+    ],
+)
+
 filegroup(
     name = "scenario_environment_test_data",
     srcs = [
@@ -109,6 +121,7 @@ cc_test(
     tags = ["test"],
     deps = [
         ":open_scenario_engine",
+        ":open_scenario_engine_test_utils",
         ":test_utils",
         "@googletest//:gtest_main",
         "@mantle_api//:test_utils",
@@ -123,6 +136,7 @@ cc_test(
     tags = ["test"],
     deps = [
         ":open_scenario_engine",
+        ":open_scenario_engine_test_utils",
         "@googletest//:gtest_main",
         "@mantle_api//:test_utils",
     ],
diff --git a/engine/demo/main.cpp b/engine/demo/main.cpp
index df6c95f4..467ccb11 100644
--- a/engine/demo/main.cpp
+++ b/engine/demo/main.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
@@ -9,8 +9,6 @@
  ********************************************************************************/
 
 #include <MantleAPI/Common/i_logger.h>
-#include <MantleAPI/Common/log_utils.h>
-#include <MantleAPI/Test/test_utils.h>
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
@@ -19,6 +17,7 @@
 #include <string>
 
 #include "OpenScenarioEngine/OpenScenarioEngine.h"
+#include "tests/TestUtils.h"
 
 using namespace units::literals;
 
@@ -62,42 +61,45 @@ int main(int argc, char* argv[])
     return -1;
   }
 
-  auto mockEnvironment = std::make_shared<mantle_api::MockEnvironment>();
+  auto fake_environment = std::make_shared<testing::OpenScenarioEngine::v1_3::FakeEnvironment>();
 
-  auto& mockEntityRepository = static_cast<mantle_api::MockEntityRepository&>(mockEnvironment->GetEntityRepository());
+  auto& mockEntityRepository = static_cast<mantle_api::MockEntityRepository&>(fake_environment->GetEntityRepository());
 
-  mantle_api::MockVehicle mockVehicle1;
-  ON_CALL(mockEntityRepository, Create("Vehicle1", A<const mantle_api::VehicleProperties&>())).WillByDefault(ReturnRef(mockVehicle1));
+  auto mock_vehicle_1 = std::make_shared<mantle_api::MockVehicle>();
+  ON_CALL(mockEntityRepository, Create("Vehicle1", A<const mantle_api::VehicleProperties&>())).WillByDefault(Return(mock_vehicle_1));
 
-  mantle_api::MockVehicle mockVehicle2;
-  ON_CALL(mockEntityRepository, Create("Vehicle2", A<const mantle_api::VehicleProperties&>())).WillByDefault(ReturnRef(mockVehicle2));
+  auto mock_vehicle_2 = std::make_shared<mantle_api::MockVehicle>();
+  ON_CALL(mockEntityRepository, Create("Vehicle2", A<const mantle_api::VehicleProperties&>())).WillByDefault(Return(mock_vehicle_2));
 
-  auto& mockControllerRepository = mockEnvironment->GetControllerRepository();
+  auto& mockControllerRepository = fake_environment->GetControllerRepository();
 
-  mantle_api::MockController mockController;
+  auto mockController = std::make_shared<mantle_api::MockController>();
   auto controller_name("demo_controller"s);
-  ON_CALL(mockControllerRepository, Create(_)).WillByDefault(ReturnRef(mockController));
-  ON_CALL(mockController, GetName()).WillByDefault(ReturnRef(controller_name));
-  ON_CALL(mockController, GetUniqueId()).WillByDefault(Return(1234));
+  ON_CALL(mockControllerRepository, Create(_)).WillByDefault(Return(mockController));
+  ON_CALL(*mockController, GetName()).WillByDefault(ReturnRef(controller_name));
+  ON_CALL(*mockController, GetUniqueId()).WillByDefault(Return(mantle_api::UniqueId(1234)));
 
-  OpenScenarioEngine::v1_3::OpenScenarioEngine openScenarioEngine(scenario_file.string(), mockEnvironment, consoleLogger);
+  OpenScenarioEngine::v1_3::OpenScenarioEngine openScenarioEngine(scenario_file.string(), fake_environment, consoleLogger);
 
   mantle_api::Time current_time{0_s};
-  ON_CALL(*mockEnvironment, GetSimulationTime())
-      .WillByDefault(Invoke([&current_time]() { return current_time; }));
-  ON_CALL(*mockEnvironment, HasControlStrategyGoalBeenReached(_, mantle_api::ControlStrategyType::kFollowVelocitySpline))
-      .WillByDefault(Invoke([&current_time]() -> bool { return current_time > 5.5_s; }));
+  ON_CALL(*fake_environment, GetSimulationTime())
+      .WillByDefault(Invoke([&current_time]()
+                            { return current_time; }));
+  ON_CALL(*fake_environment, HasControlStrategyGoalBeenReached(_, mantle_api::ControlStrategyType::kFollowVelocitySpline))
+      .WillByDefault(Invoke([&current_time]() -> bool
+                            { return current_time > 5.5_s; }));
 
   try
   {
     openScenarioEngine.Init();
+    openScenarioEngine.Step(0_ms);
     while (!openScenarioEngine.IsFinished())
     {
-      openScenarioEngine.Step();
+      openScenarioEngine.Step(500_ms);
       current_time += 500_ms;
     }
   }
-  catch(const std::runtime_error& e)
+  catch (const std::runtime_error& e)
   {
     consoleLogger->Log(mantle_api::LogLevel::kError, e.what());
   }
diff --git a/engine/gen/Storyboard/MotionControlAction/LaneChangeAction_base.h b/engine/gen/Storyboard/MotionControlAction/LaneChangeAction_base.h
index e35c1178..ba3179a7 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 d1d1f201..af948f63 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/ConvertScenarioLaneOffsetTarget.cpp b/engine/src/Conversion/OscToMantle/ConvertScenarioLaneOffsetTarget.cpp
index f177c07e..6f25b99d 100644
--- a/engine/src/Conversion/OscToMantle/ConvertScenarioLaneOffsetTarget.cpp
+++ b/engine/src/Conversion/OscToMantle/ConvertScenarioLaneOffsetTarget.cpp
@@ -31,9 +31,9 @@ units::length::meter_t ConvertToAbsoluteLaneOffset(const std::shared_ptr<NET_ASA
 {
   const auto& reference_entity = EntityUtils::GetEntityByName(environment, relative_target_offset->GetEntityRef()->GetNameRef());
   const auto& actor_entity = EntityUtils::GetEntityByName(environment, actor);
-  const mantle_api::Pose actor_pose{actor_entity.GetPosition(), actor_entity.GetOrientation()};
+  const mantle_api::Pose actor_pose{actor_entity->GetPosition(), actor_entity->GetOrientation()};
   units::length::meter_t relative_target_offset_value{relative_target_offset->GetValue()};
-  auto absolute_target_lane_offset = environment->GetQueryService().GetLateralCenterLineOffset(actor_pose, reference_entity.GetPosition());
+  auto absolute_target_lane_offset = environment->GetQueryService().GetLateralCenterLineOffset(actor_pose, reference_entity->GetPosition());
   if (!absolute_target_lane_offset)
   {
     throw std::runtime_error("ConvertScenarioLaneOffsetTarget: unable to calculate lane offset from RelativeTargetLaneOffset, please adjust the scenario.");
diff --git a/engine/src/Conversion/OscToMantle/ConvertScenarioLongitudinalDistance.cpp b/engine/src/Conversion/OscToMantle/ConvertScenarioLongitudinalDistance.cpp
index d5fdc2f1..4013080a 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 aa7678b0..d0b7629e 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))
   {
     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 82430a7a..9fa864af 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 935684ec..4f35ed34 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;
-    case NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum::RANDOM:  // NOLINT(bugprone-branch-clone)
-      [[fallthrough]];
+      return mantle_api::RoutingStrategy::kShortest;
+    case NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum::RANDOM:
+      return mantle_api::RoutingStrategy::kRandom;
     case NET_ASAM_OPENSCENARIO::v1_3::RouteStrategy::RouteStrategyEnum::UNKNOWN:  // NOLINT(bugprone-branch-clone)
       [[fallthrough]];
     default:
-      return mantle_api::RouteStrategy::kUndefined;
+      return mantle_api::RoutingStrategy::kUnknown;
   }
 }
 
-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 8d01b577..80745cca 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 f490b444..880cf3ff 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);
+    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 c871ea97..140ca4db 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 76bd104d..d15b30dd 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 5582e59b..98ee3d94 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 a5de6086..24fdc5c0 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);
   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 33cbb81e..ff46fc4b 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 f2084a48..c2a06466 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 59048e53..deedd88e 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 4aa69651..24b9bfbf 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 6cbea0fe..bdd08568 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 11e1a10b..1e6e35af 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 2c38bb5a..cb31cd09 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,29 @@
 
 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();
-
-    mantle_api::RouteDefinition route_definition{
-        {{std::move(current_pos), mantle_api::RouteStrategy::kShortest},
-         {std::move(position->position), mantle_api::RouteStrategy::kShortest}}};
-
-    mantle.environment->AssignRoute(entity.GetUniqueId(), route_definition);
+    auto entity = std::dynamic_pointer_cast<mantle_api::IMovingEntity>(EntityUtils::GetEntityByName(mantle.environment, actor));
+    if (!entity)
+    {
+      throw std::runtime_error("AcquirePositionAction: Cannot assign route to MiscObject entity. Please adjust scenario.");
+    }
+    const auto& current_pos = entity->GetPosition();
+
+    mantle_api::RoutingDefinition routing_definition{
+        {{std::move(current_pos), mantle_api::RoutingStrategy::kShortest},
+         {std::move(position->position), mantle_api::RoutingStrategy::kShortest}}};
+
+    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 92d6399a..0640c2fc 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))
     {
-      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 8b43a9be..9bac9076 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->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 083c3716..3cf21d35 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,15 @@ 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 = std::dynamic_pointer_cast<mantle_api::IMovingEntity>(EntityUtils::GetEntityByName(mantle.environment, actor));
+    if (!entity)
+    {
+      throw std::runtime_error("AssignRouteAction: Cannot assign route to MiscObject entity. Please adjust scenario.");
+    }
+    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 e993a670..5b50aa1e 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 9fd0d625..3787cbc2 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 3a9f6799..da3783da 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());
diff --git a/engine/src/Storyboard/GenericAction/TrafficSwarmAction_impl.cpp b/engine/src/Storyboard/GenericAction/TrafficSwarmAction_impl.cpp
index 16deb16a..75912c05 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)
   {
@@ -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)};
+    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))};
+    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 f57a1559..3e8bbb89 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 1e97c5ed..bcf067bd 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 97f3bb41..26fc1d0c 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,7 +120,7 @@ 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});
   }
 }
@@ -130,7 +130,7 @@ bool FollowTrajectoryAction::HasControlStrategyGoalBeenReached(const std::string
   if (auto entity = mantle.environment->GetEntityRepository().Get(actor))
   {
     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 b1a0399d..be9769cd 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
@@ -27,7 +27,7 @@ void LaneChangeAction::SetControlStrategy()
     if (auto entity = mantle.environment->GetEntityRepository().Get(actor))
     {
       mantle.environment->UpdateControlStrategies(
-          entity.value().get().GetUniqueId(),
+          entity->GetUniqueId(),
           {control_strategy_});
     }
     else
@@ -43,7 +43,7 @@ bool LaneChangeAction::HasControlStrategyGoalBeenReached(const std::string& acto
   if (auto entity = mantle.environment->GetEntityRepository().Get(actor))
   {
     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 fad7307a..bdae728e 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 e2d5c0e2..1c5fde27 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))
   {
     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 0d3c2db9..6dfba8e3 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 7deaf674..f739e1e9 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))
   {
     return (!values_.dynamicConstraints.has_value() && !values_.continuous);
   }
diff --git a/engine/src/Storyboard/MotionControlAction/MotionControlAction.h b/engine/src/Storyboard/MotionControlAction/MotionControlAction.h
index 3cf55316..2191c1ea 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,19 @@ public:
     {
       if (action_.HasControlStrategyGoalBeenReached(actor))
       {
-        if (const auto &entity = environment->GetEntityRepository().Get(actor); entity)
+        if (auto entity = environment->GetEntityRepository().Get(actor))
         {
           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 044cee98..6d5cee62 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:
@@ -248,7 +245,7 @@ void SpeedAction::SetControlStrategy()
 bool SpeedAction::HasControlStrategyGoalBeenReached(const std::string& actor)
 {
   auto entity = mantle.environment->GetEntityRepository().Get(actor);
-  if (!entity.has_value())
+  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 669a8875..78e9b804 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
@@ -140,7 +140,7 @@ void ControllerCreator::CreateControllers(const std::vector<std::shared_ptr<NET_
     }
 
     const auto entity = environment_.GetEntityRepository().Get(entity_name);
-    if (!entity.has_value())
+    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));
+  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));
+      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));
+      RegisterUserDefinedController(*controller);
     }
   }
 }
diff --git a/engine/src/Utils/ControllerService.cpp b/engine/src/Utils/ControllerService.cpp
index adafe058..a4dc05da 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 0042a031..12d30f9e 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 dd56b16c..11a29ee4 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))
   {
-    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,15 @@ 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)
+  if (const auto host_entity = environment->GetEntityRepository().GetHost(); entity_id == 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 7b7c3dd9..ae4221d4 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 fd94349a..2e47f1d2 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 a3998acc..ccfc1b59 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"
 
 using OpenScenarioEngine::v1_3::ConvertScenarioLaneOffsetTarget;
 using namespace units::literals;
@@ -60,17 +60,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)
@@ -82,19 +82,18 @@ 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, GivenOscRelativeLaneOffsetTarget_WhenConvertionError_ThenThrowError)
 {
   using meter_t = units::length::meter_t;
 
-  auto& mock_entity_repo = dynamic_cast<mantle_api::MockEntityRepository&>(mock_environment_->GetEntityRepository());
-  auto host_entity_ref = mock_entity_repo.GetHost();
-  auto& actor = dynamic_cast<mantle_api::MockVehicle&>(host_entity_ref.value().get());
-  actor.SetName("actor");
-  auto& mock_target = mock_entity_repo.RegisterEntity<mantle_api::MockVehicle>();
-  mock_target.SetName("target");
+  auto& fake_entity_repo = dynamic_cast<testing::OpenScenarioEngine::v1_3::FakeEntityRepository&>(fake_environment_->GetEntityRepository());
+  auto host_entity = fake_entity_repo.GetHost();
+  host_entity->SetName("actor");
+  auto fake_target = fake_entity_repo.RegisterEntity<testing::OpenScenarioEngine::v1_3::FakeVehicle>();
+  fake_target->SetName("target");
 
   auto relative_target_offset = std::make_shared<NiceMock<MockRelativeTargetLaneOffset>>();
   ON_CALL(*mock_lane_offset_target_, IsSetRelativeTargetLaneOffset()).WillByDefault(Return(true));
@@ -107,12 +106,12 @@ TEST_F(LaneOffsetTargetTest, GivenOscRelativeLaneOffsetTarget_WhenConvertionErro
   ON_CALL(*relative_target_offset, GetEntityRef()).WillByDefault(Return(mock_target_name_ref));
   ON_CALL(*relative_target_offset, GetValue()).WillByDefault(Return(0.123));
 
-  const auto& mock_lane_location_service = dynamic_cast<const mantle_api::MockQueryService&>(mock_environment_->GetQueryService());
+  const auto& mock_lane_location_service = dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_environment_->GetQueryService());
 
   std::optional<meter_t> mock_offset{std::nullopt};
 
   ON_CALL(mock_lane_location_service, GetLateralCenterLineOffset(_, _)).WillByDefault(Return(mock_offset));
-  EXPECT_THROW(ConvertScenarioLaneOffsetTarget(mock_environment_, mock_lane_offset_target_, "actor"), std::runtime_error);
+  EXPECT_THROW(ConvertScenarioLaneOffsetTarget(fake_environment_, mock_lane_offset_target_, "actor"), std::runtime_error);
 }
 
 TEST_F(LaneOffsetTargetTest, GivenOscRelativeLaneOffsetTarget_WhenConvert_ThenGetAbsoluteLaneOffsetFromActorLaneCenterline)
@@ -122,12 +121,11 @@ TEST_F(LaneOffsetTargetTest, GivenOscRelativeLaneOffsetTarget_WhenConvert_ThenGe
   const meter_t offset_from_reference{0.123};
   std::optional<meter_t> mock_offset{expected_offset - offset_from_reference};
 
-  auto& mock_entity_repo = dynamic_cast<mantle_api::MockEntityRepository&>(mock_environment_->GetEntityRepository());
-  auto host_entity_ref = mock_entity_repo.GetHost();
-  auto& actor = dynamic_cast<mantle_api::MockVehicle&>(host_entity_ref.value().get());
-  actor.SetName("actor");
-  auto& mock_target = mock_entity_repo.RegisterEntity<mantle_api::MockVehicle>();
-  mock_target.SetName("target");
+  auto& fake_entity_repo = dynamic_cast<testing::OpenScenarioEngine::v1_3::FakeEntityRepository&>(fake_environment_->GetEntityRepository());
+  auto host_entity = fake_entity_repo.GetHost();
+  host_entity->SetName("actor");
+  auto fake_target = fake_entity_repo.RegisterEntity<testing::OpenScenarioEngine::v1_3::FakeVehicle>();
+  fake_target->SetName("target");
 
   auto relative_target_offset = std::make_shared<NiceMock<MockRelativeTargetLaneOffset>>();
   ON_CALL(*mock_lane_offset_target_, IsSetRelativeTargetLaneOffset()).WillByDefault(Return(true));
@@ -140,8 +138,8 @@ TEST_F(LaneOffsetTargetTest, GivenOscRelativeLaneOffsetTarget_WhenConvert_ThenGe
   ON_CALL(*relative_target_offset, GetEntityRef()).WillByDefault(Return(mock_target_name_ref));
   ON_CALL(*relative_target_offset, GetValue()).WillByDefault(Return(offset_from_reference()));
 
-  const auto& mock_lane_location_service = dynamic_cast<const mantle_api::MockQueryService&>(mock_environment_->GetQueryService());
+  const auto& mock_lane_location_service = dynamic_cast<const mantle_api::MockLaneLocationQueryService&>(fake_environment_->GetQueryService());
 
   ON_CALL(mock_lane_location_service, GetLateralCenterLineOffset(_, _)).WillByDefault(Return(mock_offset));
-  EXPECT_THAT(ConvertScenarioLaneOffsetTarget(mock_environment_, mock_lane_offset_target_, "actor"), Eq(expected_offset));
+  EXPECT_THAT(ConvertScenarioLaneOffsetTarget(fake_environment_, mock_lane_offset_target_, "actor"), Eq(expected_offset));
 }
diff --git a/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp b/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp
index 1629ea0c..355bbbb8 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 d0a84195..0bd011ef 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 0ee431c3..79f44dc5 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 a6d820c7..29d277c6 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 d9df35ca..90f6aefe 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 c0667efc..9736ab5b 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 6a223eef..dac046f5 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 1c5a5b61..7f0cb25e 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")), 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 0f4b4e5c..81f639a2 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 69a934f0..6a74d001 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")), 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 137907ca..dca48016 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::shared_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("")),
               SetPosition(_))
       .Times(1);
 
diff --git a/engine/tests/Storyboard/ByEntityCondition/DistanceConditionTest.cpp b/engine/tests/Storyboard/ByEntityCondition/DistanceConditionTest.cpp
index f89602ac..1ce9a5b1 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 00237a12..07488982 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 a5117006..d5867849 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));
   }
 
-  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 7ef1585a..3a5d84a3 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)),
               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)),
               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 205820fd..8052f501 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)),
               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)),
               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 89ee7348..9eac6d97 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(""));
   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(""));
 
   // 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(""));
+  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(""));
 
   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 59d662a6..a7e51cac 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 07417f45..b5db66c1 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);
+    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 09302020..f4157770 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 36d2eec9..c1022857 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 fca08970..449fd75d 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());
 
   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")), 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 d8f36438..b523deaf 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");
     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 a44aecf4..91625396 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 48a1776b..9a6d5386 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")), 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::kShortest});
 
-  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::kShortest});
+  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 61dda524..3ee68f69 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 2384fc47..c3361cfb 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 4ce155f4..9c4fca50 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")),
           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")),
           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("")),
               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("")),
               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("")),
               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 3149a97a..ed8b5257 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 e8d22e8d..e045aa5a 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>
@@ -16,76 +15,73 @@
 
 #include "MantleAPI/Common/i_identifiable.h"
 #include "Storyboard/GenericAction/TrafficSinkAction.h"
+#include "TestUtils.h"
 #include "TestUtils/MockControllerService.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;
+
+  ON_CALL(fakeEntityRepository, GetEntities()).WillByDefault([&vehicle_vec, &vehicle_position]() -> const std::vector<std::shared_ptr<mantle_api::IEntity>>&
+                                                             {
+      auto vehicle{std::make_shared<mantle_api::MockVehicle>()};
+      vehicle_vec.emplace_back(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 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}));
-
   OpenScenarioEngine::v1_3::TrafficSinkAction action_under_test(
       {.radius = 10.0,
        .rate = std::numeric_limits<double>::infinity(),
        .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))).WillRepeatedly(testing::Return(std::vector<UniqueId>{UniqueId(1001), UniqueId(1002)}));
+  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;
+
+  ON_CALL(fake_entity_repository, GetEntities()).WillByDefault([&vehicle_vec, &vehicle_position]() -> const std::vector<std::shared_ptr<mantle_api::IEntity>>&
+                                                               {
+      auto vehicle{std::make_shared<mantle_api::MockVehicle>()};
+      vehicle_vec.emplace_back(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 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 +90,37 @@ 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;
 
-  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]() -> const std::vector<std::shared_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);
+      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}));
 
   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 +129,33 @@ 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;
 
-  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]() -> const std::vector<std::shared_ptr<IEntity>>&
+                                                             {
+      auto object{std::make_shared<MockStaticObject>()};
+      vehicle_vec.emplace_back(object);
+      return vehicle_vec; });
 
   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 +164,34 @@ 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;
+
+  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault([&vehicle_vec, &vehicle_position]() -> const std::vector<std::shared_ptr<mantle_api::IEntity>>&
+                                                             {
+      auto vehicle{std::make_shared<mantle_api::MockVehicle>()};
+      vehicle_vec.emplace_back(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 vehicle_vec; });
 
   Pose target_pose{{1.0_m, 2.0_m, 3.0_m}, {}};
   OpenScenarioEngine::v1_3::TrafficSinkAction action_under_test(
@@ -211,37 +200,34 @@ 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;
+
+  ON_CALL(mockEntityRepository, GetEntities()).WillByDefault([&vehicle_vec, &vehicle_position]() -> const std::vector<std::shared_ptr<mantle_api::IEntity>>&
+                                                             {
+      auto vehicle{std::make_shared<mantle_api::MockVehicle>()};
+      vehicle_vec.emplace_back(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 vehicle_vec; });
 
   Pose target_pose{vehicle_position, {}};
   OpenScenarioEngine::v1_3::TrafficSinkAction action_under_test(
@@ -250,13 +236,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))).WillRepeatedly(testing::Return(std::vector<mantle_api::UniqueId>{UniqueId(1001), UniqueId(1002)}));
+  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 be6efd02..9c08ccf5 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>
@@ -16,6 +15,7 @@
 #include <unordered_map>
 
 #include "Storyboard/GenericAction/TrafficSwarmAction_impl.h"
+#include "TestUtils.h"
 #include "TestUtils/MockStochastics.h"
 #include "Utils/Ellipse.h"
 
@@ -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::shared_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::shared_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())};
 
     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::shared_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,14 +278,14 @@ 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;
 
-  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_->GetEntityRepository()), GetEntities()).Times(1).WillOnce([this, &vehicle_vec]() -> const std::vector<std::shared_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);
       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));
     }
@@ -307,21 +303,21 @@ 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;
 
-  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]() -> const std::vector<std::shared_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);
       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));
     }
@@ -329,13 +325,10 @@ TEST_F(TrafficSwarmActionTestFixture, DISABLED_GivenTwoActionsWithIdenticalParam
     return 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
-                                                                                              {
-    mantle_api::VehicleProperties properties;
-    properties.classification = vehicle_class;
-    return properties; });
+  ON_CALL(fake_environment_->GetTrafficSwarmService(), GetVehicleProperties(_)).WillByDefault([](mantle_api::VehicleClass vehicle_class) -> mantle_api::VehicleProperties
+                                                                                              { return mantle_api::VehicleProperties{{}, {}, {}, {}, vehicle_class}; });
 
   std::vector<mantle_api::VehicleClass> action_1_vehicle_classes;
   std::vector<mantle_api::VehicleClass> action_2_vehicle_classes;
diff --git a/engine/tests/Storyboard/GenericAction/VisibilityActionTest.cpp b/engine/tests/Storyboard/GenericAction/VisibilityActionTest.cpp
index f5cddaaf..6e323bf6 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("")),
               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("")),
               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("")),
               SetVisibility(VisConfigEqualTo(expected_vis_config)))
       .Times(1);
 
diff --git a/engine/tests/Storyboard/MotionControlAction/FollowTrajectoryActionTest.cpp b/engine/tests/Storyboard/MotionControlAction/FollowTrajectoryActionTest.cpp
index 8536a2f7..b6203eb7 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 839895b0..c61be897 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")), 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 ab3cc0f9..7370a777 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,19 +8,17 @@
  * 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;
@@ -58,9 +56,9 @@ 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,
+  EXPECT_CALL(*fake_environment,
               UpdateControlStrategies(_, _))
       .WillOnce(testing::SaveArg<1>(&control_strategies));
 
@@ -69,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));
@@ -81,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(_, _))
       .WillOnce(Return(false));
   EXPECT_FALSE(laneOffsetAction.HasControlStrategyGoalBeenReached("Ego"));
@@ -121,7 +119,7 @@ TEST_F(LaneOffsetActionTestFixture, GivenLaneOffsetActionWithRelativeLaneOffset_
   auto lane_offset_action = FakeLaneOffsetActionBuilder{}.WithContinuous(continuous).WithLaneOffsetActionDynamics(lane_offset_action_dynamics).WithLaneOffsetTarget(lane_offset_target).Build();
 
   auto expected_control_strategy = mantle_api::PerformLaneChangeControlStrategy();
-  const auto &lane_location_service = dynamic_cast<const mantle_api::MockQueryService &>(env_->GetQueryService());
+  const auto &lane_location_service = dynamic_cast<const mantle_api::MockLaneLocationQueryService &>(env_->GetQueryService());
   auto fake_calc_offset = std::optional<units::length::meter_t>{1.23};
   ON_CALL(lane_location_service, GetLateralCenterLineOffset(_, _)).WillByDefault(Return(fake_calc_offset));
 
diff --git a/engine/tests/Storyboard/MotionControlAction/LateralDistanceActionTest.cpp b/engine/tests/Storyboard/MotionControlAction/LateralDistanceActionTest.cpp
index fbc93034..b0560239 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"));
+  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"));
+  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"));
+  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"));
+  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 61d0fe27..44abac1a 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("")),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().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());
 }
 
 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("")),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().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());
 }
 
 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("")));
 
-    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("")),
+              SetOrientation(testing::_))
+      .Times(1);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().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());
 }
 
 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("")),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().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());
 }
 
 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("")),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().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());
 }
 
 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("")),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().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());
 }
 
 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"));
+  auto& actor_entity =
+      dynamic_cast<testing::OpenScenarioEngine::v1_3::FakeVehicle&>(*env_->GetEntityRepository().Get("TrafficVehicle"));
+
+  // 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("")),
+              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("")),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().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());
 }
 
 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("")),
+              SetOrientation(testing::_))
+      .Times(0);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().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());
 }
 
 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("")),
+              SetOrientation(testing::_))
+      .Times(1);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().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());
 }
 
 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("")),
+              SetOrientation(testing::_))
+      .Times(1);
+
+  EXPECT_CALL(dynamic_cast<mantle_api::MockVehicle&>(*env_->GetEntityRepository().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());
 }
 
 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")),
+              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 6ec29899..6d7a3c44 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 93e61d6c..cdcaa854 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()))};
   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 0dc02223..9cad082b 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,345 @@ 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
 {
-  protected:
-    void SetUp() override
+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
+{
+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
 {
-  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); }
+  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
+{
+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::shared_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::shared_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::shared_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_;
+  }
+
+  MOCK_METHOD(std::shared_ptr<mantle_api::IEntity>,
+              GetImpl,
+              (const std::string& name),
+              (const));
 
-    std::string GetScenariosPath(const std::string& test_file_path) const
+  std::shared_ptr<mantle_api::IEntity> Get(const std::string& name) const 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::shared_ptr<mantle_api::IEntity> Get(mantle_api::UniqueId id) const override
+  {
+    std::ignore = id;
+    return fake_vehicle_;
+  }
+
+  std::shared_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("")), 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 e636b5e6..e3445edf 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 87a4a21e..0c800392 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 8d577b1d..8b5de7ed 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 a7285087..fff7f032 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 2b5bc9ec..15f4d822 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));
 
     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/DistributionTest.cpp b/engine/tests/Utils/DistributionTest.cpp
index 51c4ce2b..8674f55c 100644
--- a/engine/tests/Utils/DistributionTest.cpp
+++ b/engine/tests/Utils/DistributionTest.cpp
@@ -18,6 +18,7 @@
 using namespace OpenScenarioEngine::v1_3;
 using namespace OpenScenarioEngine::v1_3::PropertyInterpretation;
 using namespace testing;
+using namespace testing::OpenScenarioEngine::v1_3;
 
 class DistributionTest : public Test
 {
diff --git a/engine/tests/Utils/EntityCreatorTest.cpp b/engine/tests/Utils/EntityCreatorTest.cpp
index d86ac535..edbae4bb 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 b6774b25..8393fb5f 100644
--- a/engine/tests/Utils/EntityUtilsTest.cpp
+++ b/engine/tests/Utils/EntityUtilsTest.cpp
@@ -17,339 +17,338 @@
 #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(""));
+  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;
+  ON_CALL(fake_entity_repository, GetEntities()).WillByDefault([&vehicles, &mocked_entity]() -> const std::vector<std::shared_ptr<mantle_api::IEntity>>&
+                                                               {
+      mocked_entity = std::make_shared<mantle_api::MockVehicle>();
+      vehicles.emplace_back(mocked_entity);
+      ON_CALL(dynamic_cast<mantle_api::MockVehicle&>(*vehicles.back()), GetUniqueId).WillByDefault(testing::Return(mantle_api::UniqueId(1234)));
 
-      return vehicles;
-    });
+      return vehicles; });
 
-  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/Utils/PropertyInterpreterTest.cpp b/engine/tests/Utils/PropertyInterpreterTest.cpp
index f17a955f..69b2f907 100644
--- a/engine/tests/Utils/PropertyInterpreterTest.cpp
+++ b/engine/tests/Utils/PropertyInterpreterTest.cpp
@@ -19,6 +19,7 @@
 using namespace OpenScenarioEngine::v1_3;
 using namespace OpenScenarioEngine::v1_3::PropertyInterpretation;
 using namespace testing;
+using namespace testing::OpenScenarioEngine::v1_3;
 
 struct PropertyInterpreterTest : public Test
 {
@@ -162,4 +163,4 @@ TEST_F(PropertyInterpreterTest, GivenPropertyInterpreter_WhenCopied_ThenHoldsSta
 
   ASSERT_THAT(result, testing::SizeIs(1));
   EXPECT_EQ(result["prop0"], "RAW_PROPERTY");
-}
\ No newline at end of file
+}
diff --git a/engine/tests/data/Scenarios/Catalogs/MiscObjects/MiscObjectCatalog.xosc b/engine/tests/data/Scenarios/Catalogs/MiscObjects/MiscObjectCatalog.xosc
index d5bb02e6..c0b92c00 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 ccf99478..6b51c61f 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 07f3c6a9..f1d7016c 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 5caf350c..ad52ffe6 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 = "v15.0.0"
+_TAG = "v17.0.0"
 
 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 = "0fa15247c2c0ec20c4a3cbaf0c0a39fc89104fcadad47567e370d4208244ce0d",
+        sha256 = "b13786605d9a1e459dc4c65ab0ce4c3c40ddfd859266f1d876622fa578ffc5f9",
         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 e540637f..2942ecce 100644
--- a/utils/ci/conan/conanfile.txt
+++ b/utils/ci/conan/conanfile.txt
@@ -1,5 +1,5 @@
 [requires]
-mantleapi/v15.0.0@openscenarioengine/testing
+mantleapi/v17.0.0@openscenarioengine/testing
 nlohmann_json/v3.9.1@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 f3926bc2..81269171 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: "e6111e298c2ecb5b402888f8b3b2f94faf24dab0"
 
+  "17.0.0":
+    url: https://gitlab.eclipse.org/eclipse/openpass/mantle-api.git
+    sha256: "fa2c771a62d8f7f0a5dca119f3b310439f06f825"
+
   "default":
     url: https://gitlab.eclipse.org/eclipse/openpass/mantle-api.git
-- 
GitLab