diff --git a/README.md b/README.md
index 15946611099539e670c42a9862a9538ded90aaae..0484affebcb0b7c09ccdf42fe131ca6e6ec77128 100644
--- a/README.md
+++ b/README.md
@@ -254,7 +254,7 @@ Converts `NET_ASAM_OPENSCENARIO::v1_3::ITransitionDynamics` object type to [mant
 
 | Dependency | Commit | Version | License |
 | ---------- | ------ | ------- | ------- |
-| [MantleAPI](https://gitlab.eclipse.org/eclipse/openpass/mantle-api) | 86cedf7d | 9.0.0 | EPL 2.0 |
+| [MantleAPI](https://gitlab.eclipse.org/eclipse/openpass/mantle-api) | ce2a378d | 11.0.0 | EPL 2.0 |
 | [OpenSCENARIO API](https://github.com/RA-Consulting-GmbH/openscenario.api.test/) | 5980e88 | 1.4.0 | Apache 2.0 |
 | [YASE](https://gitlab.eclipse.org/eclipse/openpass/yase) | d0c0e58d | | EPL 2.0 |
 | [Units](https://github.com/nholthaus/units) | e27eed9 | 2.3.4 | MIT License |
diff --git a/engine/src/Conversion/OscToMantle/ConvertScenarioPosition.cpp b/engine/src/Conversion/OscToMantle/ConvertScenarioPosition.cpp
index 794a0cde73c966c28db2f1de3e21d75b4433ecb4..aa7678b008133a4d17858b7579717f18c4287193 100644
--- a/engine/src/Conversion/OscToMantle/ConvertScenarioPosition.cpp
+++ b/engine/src/Conversion/OscToMantle/ConvertScenarioPosition.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
@@ -98,6 +98,11 @@ mantle_api::Pose ConvertGeoPosition(mantle_api::IEnvironment& environment,
 
   mantle_api::Pose pose{};
   pose.position = environment.GetConverter()->Convert(lat_lon_position);
+  if (environment.GetQueryService().IsPositionOnLane(pose.position))  // 2D check
+  {
+    // Change z position to be on road surface of top-most road
+    pose.position.z = environment.GetQueryService().GetLaneHeightAtPosition(pose.position);
+  }
   detail::FillOrientation(environment, geo_position.GetOrientation(), lat_lon_position, pose);
   return pose;
 }
diff --git a/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp b/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp
index b2f6564b00cfc6b84b394b87e75235fe59ecbc05..1629ea0cbc895489fd0e0cbab89d92c4cb0d6b52 100644
--- a/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp
+++ b/engine/tests/Conversion/OscToMantle/ConvertScenarioPositionTest.cpp
@@ -256,6 +256,41 @@ TEST_F(ConvertScenarioPositionTest,
   ASSERT_EQ(expected_orientation + lane_orientation, pose->orientation);
 }
 
+TEST_F(ConvertScenarioPositionTest,
+       GivenGeoPositionOnRoad_WhenConverting_ThenAltitudeOnRoadSurface)
+{
+  auto pos = GetGeoPosition();
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()),
+              IsPositionOnLane(expected_position_))
+      .Times(1)
+      .WillRepeatedly(testing::Return(true));
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()),
+              GetLaneHeightAtPosition(expected_position_))
+      .Times(1)
+      .WillRepeatedly(testing::Return(5_m));
+
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+
+  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()),
+              IsPositionOnLane(expected_position_))
+      .Times(1)
+      .WillRepeatedly(testing::Return(false));
+  EXPECT_CALL(dynamic_cast<const mantle_api::MockQueryService&>(mockEnvironment->GetQueryService()),
+              GetLaneHeightAtPosition(expected_position_))
+      .Times(0);
+
+  const auto pose = OpenScenarioEngine::v1_3::ConvertScenarioPosition(mockEnvironment, pos);
+
+  EXPECT_EQ(expected_position_, pose->position);
+}
+
 TEST_F(ConvertScenarioPositionTest,
        GivenRelativeLanePositionWithNoOrientation_WhenConverting_ThenPositionConvertedAndOrientationZero)
 {
diff --git a/engine/third_party/mantle_api/mantle_api.bzl b/engine/third_party/mantle_api/mantle_api.bzl
index d8c5afc9469b60463e93cb5b93a873ef8f1fdf48..2b2ce2d6ba6fee5bc180cf33c74a4d64f603fca2 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 = "v9.0.0"
+_TAG = "v11.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 = "c1729af0b937fc836922ae8b17f3de5fb18dca566077d52ee6c6f2a3255a3f43",
+        sha256 = "a723c0815fd524fa932bedcf8e9132cbcde8e4788c1ab8b59bfb7abcfbd4799f",
         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 dc6a61a8375f21c547965a653fa264b20317e8ed..849dff888b3b01f202330e1ca15a313e30145083 100644
--- a/utils/ci/conan/conanfile.txt
+++ b/utils/ci/conan/conanfile.txt
@@ -1,6 +1,6 @@
 [requires]
 units/2.3.4@openscenarioengine/testing
-mantleapi/v9.0.0@openscenarioengine/testing
+mantleapi/v11.0.0@openscenarioengine/testing
 yase/d0c0e58d17358044cc9018c74308b45f6097ecfb@openscenarioengine/testing
 openscenario_api/v1.4.0@openscenarioengine/testing
 stochastics/0.11.0@openscenarioengine/testing
diff --git a/utils/ci/conan/recipe/mantleapi/all/conandata.yml b/utils/ci/conan/recipe/mantleapi/all/conandata.yml
index 33e3f24304264cd774dc317d4096f588abf18281..30e9ad2a81efc15e4c350430aec7dfff64bfe3a3 100644
--- a/utils/ci/conan/recipe/mantleapi/all/conandata.yml
+++ b/utils/ci/conan/recipe/mantleapi/all/conandata.yml
@@ -49,5 +49,9 @@ sources:
     url: https://gitlab.eclipse.org/eclipse/openpass/mantle-api.git
     sha256: "ac2e9d33f00d034c6522dba3224a3dffdece9742"
 
+  "11.0.0":
+    url: https://gitlab.eclipse.org/eclipse/openpass/mantle-api.git
+    sha256: "ce2a378d48bd1526ccb5facce6f0388641ea295c"
+
   "default":
     url: https://gitlab.eclipse.org/eclipse/openpass/mantle-api.git