diff --git a/.cmake-format b/.cmake-format
new file mode 100644
index 0000000000000000000000000000000000000000..2f9d9eef1ae63f21a72422015a6940e2bd5a68c9
--- /dev/null
+++ b/.cmake-format
@@ -0,0 +1,79 @@
+line_width: 120
+tab_size: 2
+max_subgroups_hwrap: 2
+max_pargs_hwrap: 6
+separate_ctrl_name_with_space: false
+separate_fn_name_with_space: false
+dangle_parens: true
+dangle_align: prefix
+min_prefix_chars: 4
+max_prefix_chars: 10
+max_lines_hwrap: 2
+line_ending: unix
+command_case: canonical
+keyword_case: upper
+additional_commands:
+  CPMAddPackage:
+    flags:
+      - SYSTEM
+    pargs: "*"
+    kwargs:
+      NAME: "*"
+      GIT_REPOSITORY: "*"
+      GITHUB_REPOSITORY: "*"
+      GITLAB_REPOSITORY: "*"
+      GIT_TAG: "*"
+      VERSION: "*"
+      OPTIONS: "*"
+      PATCH_COMMAND: "*"
+  configure_package_config_file:
+    flags:
+      - NO_SET_AND_CHECK_MACRO
+      - NO_CHECK_REQUIRED_COMPONENTS_MACRO
+    kwargs:
+      INSTALL_DESTINATION: "*"
+      PATH_VARS: "*"
+      INSTALL_PREFIX: "*"
+  find_dependency:
+    flags:
+      - CONFIG
+      - QUIET
+      - REQUIRED
+    kwargs:
+      COMPONENTS: "*"
+  gtest_discover_tests:
+    flags:
+      - NO_PRETTY_TYPES
+      - NO_PRETTY_VALUES
+    kwargs:
+      EXTRA_ARGS: "*"
+      WORKING_DIRECTORY: "*"
+      TEST_PREFIX: "*"
+      TEST_SUFFIX: "*"
+      PROPERTIES: "*"
+      TEST_LIST: "*"
+      DISCOVERY_TIMEOUT: "*"
+  setup_target_for_coverage_gcovr_html:
+    kwargs:
+      BASE_DIRECTORY: "*"
+      EXCLUDE: "*"
+      EXECUTABLE: "*"
+      EXECUTABLE_ARGS: "*"
+      DEPENDENCIES: "*"
+always_wrap: []
+enable_sort: true
+autosort: false
+hashruler_min_length: 10
+per_command: {}
+layout_passes: {}
+bullet_char: "*"
+enum_char: .
+enable_markup: true
+first_comment_is_literal: true
+literal_comment_pattern: null
+fence_pattern: ^\s*([`~]{3}[`~]*)(.*)$
+ruler_pattern: ^\s*[^\w\s]{3}.*[^\w\s]{3}$
+canonicalize_hashrulers: true
+emit_byteorder_mark: false
+input_encoding: utf-8
+output_encoding: utf-8
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6354414d05259c768085502c4d0e2365c4b1f39f
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,147 @@
+#===------------------------------------------------------------------------===#
+#
+# Copyright (c) 2025 Mercedes-Benz Tech Innovation GmbH
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+#===------------------------------------------------------------------------===#
+
+cmake_minimum_required(VERSION 3.25.0)
+
+cmake_policy(SET CMP0135 NEW)
+
+list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
+
+project(
+  MapSDK
+  VERSION 4.1.2
+  DESCRIPTION "Library for loading and providing data from an OpenDRIVE map"
+  HOMEPAGE_URL "https://gitlab.eclipse.org/eclipse/openpass/road-logic-suite"
+  LANGUAGES CXX
+)
+
+option(BUILD_SHARED_LIBS "Build shared libraries" ON)
+option(MAP_SDK_BUILD_DOCS "Build documentation" ${PROJECT_IS_TOP_LEVEL})
+option(MAP_SDK_BUILD_TESTS "Build tests" ${PROJECT_IS_TOP_LEVEL})
+option(MAP_SDK_INSTALL "Install the project" ${PROJECT_IS_TOP_LEVEL})
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+if(MAP_SDK_INSTALL)
+  include(GNUInstallDirs)
+  set(MAP_SDK_INSTALL_LIBDIR
+      "${CMAKE_INSTALL_LIBDIR}"
+      CACHE PATH "Library install directory"
+  )
+  set(MAP_SDK_INSTALL_INCLUDEDIR
+      "${CMAKE_INSTALL_INCLUDEDIR}"
+      CACHE PATH "Include install directory"
+  )
+  set(MAP_SDK_INSTALL_CONFIGDIR
+      "${MAP_SDK_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
+      CACHE PATH "Config install directory"
+  )
+  set(MAP_SDK_INSTALL_DATADIR
+      "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}"
+      CACHE PATH "Data install directory"
+  )
+endif()
+
+include(CPM)
+CPMAddPackage(
+  NAME units
+  GITHUB_REPOSITORY nholthaus/units
+  VERSION 2.3.4
+  SYSTEM
+)
+
+CPMAddPackage(
+  NAME mantle_api
+  GIT_REPOSITORY https://gitlab.eclipse.org/eclipse/openpass/mantle-api.git
+  # FIXME(mstump8): Remove next line and set to correct version when available
+  GIT_TAG 6661fe96a2c8534dd49da66c08ec1c1ad67e1a90
+  VERSION 8.0.0
+  OPTIONS "MantleAPI_INSTALL ON" "MantleAPI_INSTALL_MOCKS ON"
+  SYSTEM
+)
+
+add_library(map_sdk INTERFACE)
+add_library(MapSDK::map_sdk ALIAS map_sdk)
+
+set(MAP_SDK_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/include")
+
+target_sources(
+  map_sdk
+  INTERFACE FILE_SET
+            HEADERS
+            BASE_DIRS
+            ${MAP_SDK_INCLUDE_DIR}
+            FILES
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/Common/base_properties.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/Common/common.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/Common/external_reference.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/Common/geometry.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/Common/identifier.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/i_map_loader.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/lane_boundary.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/lane_group.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/lane.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/logical_lane_assignment.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/logical_lane_boundary.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/logical_lane.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/map.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/reference_line.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/road_marking.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/stationary_object.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/traffic_light.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/traffic_sign_common.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/traffic_sign_main_sign.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/traffic_sign_supplementary_sign.h
+            ${MAP_SDK_INCLUDE_DIR}/MapSDK/traffic_sign.h
+)
+
+target_link_libraries(map_sdk INTERFACE MantleAPI::MantleAPI units::units)
+
+if(MAP_SDK_BUILD_TESTS)
+  enable_testing()
+  add_subdirectory(test)
+endif()
+
+if(MAP_SDK_BUILD_DOCS)
+  add_subdirectory(doc)
+endif()
+
+if(MAP_SDK_INSTALL)
+  install(
+    TARGETS map_sdk
+    EXPORT MapSDKTargets
+    FILE_SET HEADERS
+  )
+
+  install(
+    EXPORT MapSDKTargets
+    NAMESPACE MapSDK::
+    DESTINATION "${MAP_SDK_INSTALL_CONFIGDIR}"
+  )
+
+  include(CMakePackageConfigHelpers)
+
+  configure_package_config_file(
+    cmake/MapSDKConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/MapSDKConfig.cmake"
+    INSTALL_DESTINATION "${MAP_SDK_INSTALL_CONFIGDIR}"
+  )
+
+  write_basic_package_version_file(
+    "${CMAKE_CURRENT_BINARY_DIR}/MapSDKConfigVersion.cmake"
+    VERSION ${PROJECT_VERSION}
+    COMPATIBILITY SameMajorVersion
+  )
+
+  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/MapSDKConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/MapSDKConfigVersion.cmake"
+          DESTINATION "${MAP_SDK_INSTALL_CONFIGDIR}"
+  )
+
+  install(FILES LICENSE.txt README.md DESTINATION "${MAP_SDK_INSTALL_DATADIR}")
+endif()
diff --git a/CMakePresets.json b/CMakePresets.json
new file mode 100644
index 0000000000000000000000000000000000000000..4abb61237c4f39ab6420153e0fc4b21de2205e47
--- /dev/null
+++ b/CMakePresets.json
@@ -0,0 +1,126 @@
+{
+  "version": 10,
+  "cmakeMinimumRequired": {
+    "major": 3,
+    "minor": 25,
+    "patch": 0
+  },
+  "configurePresets": [
+    {
+      "name": "default",
+      "displayName": "Default Config",
+      "description": "Default build using Ninja generator",
+      "generator": "Ninja",
+      "binaryDir": "${sourceDir}/build",
+      "installDir": "${sourceDir}/build/prefix"
+    },
+    {
+      "name": "devel",
+      "inherits": "default",
+      "displayName": "Devel Config",
+      "description": "Devel build using Ninja Multi-Config generator",
+      "generator": "Ninja Multi-Config",
+      "cacheVariables": {
+        "CMAKE_EXPORT_COMPILE_COMMANDS": true
+      }
+    }
+  ],
+  "buildPresets": [
+    {
+      "name": "default",
+      "displayName": "Default Build",
+      "configurePreset": "default",
+      "configuration": "Release"
+    },
+    {
+      "name": "devel-debug",
+      "displayName": "Devel Debug Build",
+      "configurePreset": "devel",
+      "configuration": "Debug"
+    },
+    {
+      "name": "devel-release",
+      "displayName": "Devel Release Build",
+      "configurePreset": "devel",
+      "configuration": "Release"
+    }
+  ],
+  "testPresets": [
+    {
+      "name": "default",
+      "displayName": "Default Test",
+      "configurePreset": "default",
+      "output": {
+        "outputOnFailure": true
+      },
+      "execution": {
+        "noTestsAction": "error",
+        "stopOnFailure": true
+      }
+    },
+    {
+      "name": "devel",
+      "displayName": "Devel Test",
+      "configurePreset": "devel",
+      "output": {
+        "outputOnFailure": true
+      },
+      "execution": {
+        "noTestsAction": "error",
+        "stopOnFailure": true
+      }
+    }
+  ],
+  "packagePresets": [
+    {
+      "name": "default",
+      "displayName": "Default Package",
+      "configurePreset": "default",
+      "generators": [
+        "TGZ"
+      ]
+    }
+  ],
+  "workflowPresets": [
+    {
+      "name": "default",
+      "displayName": "Default Workflow",
+      "steps": [
+        {
+          "type": "configure",
+          "name": "default"
+        },
+        {
+          "type": "build",
+          "name": "default"
+        },
+        {
+          "type": "test",
+          "name": "default"
+        },
+        {
+          "type": "package",
+          "name": "default"
+        }
+      ]
+    },
+    {
+      "name": "devel",
+      "displayName": "Devel Workflow",
+      "steps": [
+        {
+          "type": "configure",
+          "name": "devel"
+        },
+        {
+          "type": "build",
+          "name": "devel"
+        },
+        {
+          "type": "test",
+          "name": "devel"
+        }
+      ]
+    }
+  ]
+}
diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..47e2e872abb89bbdda6794532d12b1a6dbe50c65
--- /dev/null
+++ b/cmake/CPM.cmake
@@ -0,0 +1,24 @@
+# SPDX-License-Identifier: MIT
+#
+# SPDX-FileCopyrightText: Copyright (c) 2019-2023 Lars Melchior and contributors
+
+set(CPM_DOWNLOAD_VERSION 0.40.5)
+set(CPM_HASH_SUM "c46b876ae3b9f994b4f05a4c15553e0485636862064f1fcc9d8b4f832086bc5d")
+
+if(CPM_SOURCE_CACHE)
+  set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
+elseif(DEFINED ENV{CPM_SOURCE_CACHE})
+  set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
+else()
+  set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
+endif()
+
+# Expand relative path. This is important if the provided path contains a tilde (~)
+get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE)
+
+file(DOWNLOAD
+     https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
+     ${CPM_DOWNLOAD_LOCATION} EXPECTED_HASH SHA256=${CPM_HASH_SUM}
+)
+
+include(${CPM_DOWNLOAD_LOCATION})
diff --git a/cmake/FindPlantUML.cmake b/cmake/FindPlantUML.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..9f056d1940a2d2f2d959b48be423fe83d8ee831d
--- /dev/null
+++ b/cmake/FindPlantUML.cmake
@@ -0,0 +1,23 @@
+################################################################################
+# Copyright (c) 2024 Mercedes-Benz Tech Innovation GmbH
+#
+# This program and the accompanying materials are made available under the terms
+# of the Eclipse Public License 2.0 which is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+################################################################################
+
+find_file(PLANTUML_JAR plantuml.jar PATHS ${PLANTUML_JAR_PATH} ENV{PLANTUML_JAR_PATH} /usr/share/plantuml)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(PlantUML DEFAULT_MSG PLANTUML_JAR)
+
+if(PlantUML_FOUND)
+  if(NOT TARGET PlantUML::PlantUML)
+    add_executable(PlantUML::PlantUML IMPORTED)
+    if(EXISTS "${PLANTUML_JAR}")
+      set_target_properties(PlantUML::PlantUML PROPERTIES IMPORTED_LOCATION "${PLANTUML_JAR}")
+    endif()
+  endif()
+endif()
diff --git a/cmake/MapSDKConfig.cmake.in b/cmake/MapSDKConfig.cmake.in
new file mode 100644
index 0000000000000000000000000000000000000000..7315238b4c9b25dd09ba98a6974cf86b278c1a0d
--- /dev/null
+++ b/cmake/MapSDKConfig.cmake.in
@@ -0,0 +1,19 @@
+#===------------------------------------------------------------------------===#
+#
+# Copyright (c) 2025 Mercedes-Benz Tech Innovation GmbH
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+#===------------------------------------------------------------------------===#
+
+@PACKAGE_INIT@
+
+include(CMakeFindDependencyMacro)
+find_dependency(units)
+find_dependency(MantleAPI)
+
+if(NOT TARGET MapSDK::map_sdk AND NOT MapSDK_BINARY_DIR)
+  set_and_check(MapSDK_INCLUDE_DIR "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@")
+  mark_as_advanced(MapSDK_INCLUDE_DIR)
+  include("${CMAKE_CURRENT_LIST_DIR}/MapSDKTargets.cmake")
+endif()
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f39e5d5f3a83f9fa96be3c9cd71ed3122156a350
--- /dev/null
+++ b/doc/CMakeLists.txt
@@ -0,0 +1,58 @@
+################################################################################
+# Copyright (c) 2022-2024 Mercedes-Benz Tech Innovation GmbH
+#               2024 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
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+################################################################################
+
+CPMAddPackage("gh:jothepro/doxygen-awesome-css@2.3.4")
+
+find_package(Doxygen QUIET REQUIRED dot OPTIONAL_COMPONENTS mscgen dia)
+
+set(DOXYGEN_BUILTIN_STL_SUPPORT YES)
+set(DOXYGEN_DISABLE_INDEX NO)
+set(DOXYGEN_DOT_IMAGE_FORMAT svg)
+set(DOXYGEN_DOT_TRANSPARENT YES)
+set(DOXYGEN_EXCLUDE_SYMBOLS "detail*")
+set(DOXYGEN_FULL_SIDEBAR NO)
+set(DOXYGEN_GENERATE_LATEX NO)
+set(DOXYGEN_GENERATE_TREEVIEW YES)
+set(DOXYGEN_HTML_EXTRA_FILES
+    ${CMAKE_CURRENT_SOURCE_DIR}/header.html
+    ${doxygen-awesome-css_SOURCE_DIR}/doxygen-awesome-darkmode-toggle.js
+    ${doxygen-awesome-css_SOURCE_DIR}/doxygen-awesome-fragment-copy-button.js
+    ${doxygen-awesome-css_SOURCE_DIR}/doxygen-awesome-interactive-toc.js
+    ${doxygen-awesome-css_SOURCE_DIR}/doxygen-awesome-paragraph-link.js
+)
+set(DOXYGEN_HTML_EXTRA_STYLESHEET
+    ${doxygen-awesome-css_SOURCE_DIR}/doxygen-awesome.css
+    ${doxygen-awesome-css_SOURCE_DIR}/doxygen-awesome-sidebar-only.css
+    ${doxygen-awesome-css_SOURCE_DIR}/doxygen-awesome-sidebar-only-darkmode-toggle.css
+)
+set(DOXYGEN_HTML_HEADER header.html)
+set(DOXYGEN_INCLUDE_PATH ${PROJECT_SOURCE_DIR}/include)
+set(DOXYGEN_INTERACTIVE_SVG YES)
+set(DOXYGEN_JAVADOC_AUTOBRIEF YES)
+set(DOXYGEN_QUIET YES)
+set(DOXYGEN_RECURSIVE YES)
+set(DOXYGEN_TAB_SIZE 2)
+set(DOXYGEN_UML_LOOK YES)
+set(DOXYGEN_USE_MATHJAX YES)
+set(DOXYGEN_USE_MDFILE_AS_MAINPAGE ${PROJECT_SOURCE_DIR}/README.md)
+set(DOXYGEN_WARN_LOGFILE ${CMAKE_CURRENT_BINARY_DIR}/DoxygenWarningLog.txt)
+set(DOXYGEN_WARN_NO_PARAMDOC YES)
+
+find_package(PlantUML)
+if(PlantUML_FOUND)
+  set(DOXYGEN_ENABLED_SECTIONS diagrams)
+  set(DOXYGEN_PLANTUML_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/diagrams)
+  set(DOXYGEN_PLANTUML_JAR_PATH ${PLANTUML_JAR})
+endif()
+
+doxygen_add_docs(
+  ${PROJECT_NAME}_doc ${PROJECT_SOURCE_DIR}/README.md ${PROJECT_SOURCE_DIR}/include COMMENT "Generate html docs"
+)
diff --git a/doc/diagrams/.gitkeep b/doc/diagrams/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/doc/header.html b/doc/header.html
new file mode 100644
index 0000000000000000000000000000000000000000..81f90941ed30759ee8f4cf53acdbca8820acce00
--- /dev/null
+++ b/doc/header.html
@@ -0,0 +1,73 @@
+<!-- HTML header for doxygen 1.9.1-->
+<!DOCTYPE html
+  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+<head>
+  <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8" />
+  <meta http-equiv="X-UA-Compatible" content="IE=9" />
+  <meta name="generator" content="Doxygen $doxygenversion" />
+  <meta name="viewport" content="width=device-width, initial-scale=1" />
+  <!--BEGIN PROJECT_NAME-->
+  <title>$projectname: $title</title><!--END PROJECT_NAME-->
+  <!--BEGIN !PROJECT_NAME-->
+  <title>$title</title><!--END !PROJECT_NAME-->
+  <link href="$relpath^tabs.css" rel="stylesheet" type="text/css" />
+  <script type="text/javascript" src="$relpath^jquery.js"></script>
+  <script type="text/javascript" src="$relpath^dynsections.js"></script>
+  $treeview
+  $search
+  $mathjax
+  <link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
+  $extrastylesheet
+
+  <script type="text/javascript" src="$relpath^doxygen-awesome-darkmode-toggle.js"></script>
+  <script type="text/javascript" src="$relpath^doxygen-awesome-fragment-copy-button.js"></script>
+  <script type="text/javascript" src="$relpath^doxygen-awesome-paragraph-link.js"></script>
+  <script type="text/javascript" src="$relpath^doxygen-awesome-interactive-toc.js"></script>
+  <script type="text/javascript">
+    DoxygenAwesomeDarkModeToggle.init()
+    DoxygenAwesomeFragmentCopyButton.init()
+    DoxygenAwesomeParagraphLink.init()
+    DoxygenAwesomeInteractiveToc.init()
+  </script>
+</head>
+
+<body>
+  <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+
+    <!--BEGIN TITLEAREA-->
+    <div id="titlearea">
+      <table cellspacing="0" cellpadding="0">
+        <tbody>
+          <tr style="height: 56px;">
+            <!--BEGIN PROJECT_LOGO-->
+            <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo" /></td>
+            <!--END PROJECT_LOGO-->
+            <!--BEGIN PROJECT_NAME-->
+            <td id="projectalign" style="padding-left: 0.5em;">
+              <div id="projectname">$projectname
+                <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
+              </div>
+              <!--BEGIN PROJECT_BRIEF-->
+              <div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
+            </td>
+            <!--END PROJECT_NAME-->
+            <!--BEGIN !PROJECT_NAME-->
+            <!--BEGIN PROJECT_BRIEF-->
+            <td style="padding-left: 0.5em;">
+              <div id="projectbrief">$projectbrief</div>
+            </td>
+            <!--END PROJECT_BRIEF-->
+            <!--END !PROJECT_NAME-->
+            <!--BEGIN DISABLE_INDEX-->
+            <!--BEGIN SEARCHENGINE-->
+            <td>$searchbox</td>
+            <!--END SEARCHENGINE-->
+            <!--END DISABLE_INDEX-->
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <!--END TITLEAREA-->
+    <!-- end header part -->
diff --git a/include/MapAPI/Common/base_properties.h b/include/MapSDK/Common/base_properties.h
similarity index 100%
rename from include/MapAPI/Common/base_properties.h
rename to include/MapSDK/Common/base_properties.h
diff --git a/include/MapAPI/Common/common.h b/include/MapSDK/Common/common.h
similarity index 100%
rename from include/MapAPI/Common/common.h
rename to include/MapSDK/Common/common.h
diff --git a/include/MapAPI/Common/external_reference.h b/include/MapSDK/Common/external_reference.h
similarity index 100%
rename from include/MapAPI/Common/external_reference.h
rename to include/MapSDK/Common/external_reference.h
diff --git a/include/MapAPI/Common/geometry.h b/include/MapSDK/Common/geometry.h
similarity index 100%
rename from include/MapAPI/Common/geometry.h
rename to include/MapSDK/Common/geometry.h
diff --git a/include/MapAPI/Common/identifier.h b/include/MapSDK/Common/identifier.h
similarity index 100%
rename from include/MapAPI/Common/identifier.h
rename to include/MapSDK/Common/identifier.h
diff --git a/include/MapAPI/i_map_loader.h b/include/MapSDK/i_map_loader.h
similarity index 100%
rename from include/MapAPI/i_map_loader.h
rename to include/MapSDK/i_map_loader.h
diff --git a/include/MapAPI/lane.h b/include/MapSDK/lane.h
similarity index 100%
rename from include/MapAPI/lane.h
rename to include/MapSDK/lane.h
diff --git a/include/MapAPI/lane_boundary.h b/include/MapSDK/lane_boundary.h
similarity index 100%
rename from include/MapAPI/lane_boundary.h
rename to include/MapSDK/lane_boundary.h
diff --git a/include/MapAPI/lane_group.h b/include/MapSDK/lane_group.h
similarity index 100%
rename from include/MapAPI/lane_group.h
rename to include/MapSDK/lane_group.h
diff --git a/include/MapAPI/logical_lane.h b/include/MapSDK/logical_lane.h
similarity index 100%
rename from include/MapAPI/logical_lane.h
rename to include/MapSDK/logical_lane.h
diff --git a/include/MapAPI/logical_lane_assignment.h b/include/MapSDK/logical_lane_assignment.h
similarity index 100%
rename from include/MapAPI/logical_lane_assignment.h
rename to include/MapSDK/logical_lane_assignment.h
diff --git a/include/MapAPI/logical_lane_boundary.h b/include/MapSDK/logical_lane_boundary.h
similarity index 100%
rename from include/MapAPI/logical_lane_boundary.h
rename to include/MapSDK/logical_lane_boundary.h
diff --git a/include/MapAPI/map.h b/include/MapSDK/map.h
similarity index 100%
rename from include/MapAPI/map.h
rename to include/MapSDK/map.h
diff --git a/include/MapAPI/reference_line.h b/include/MapSDK/reference_line.h
similarity index 100%
rename from include/MapAPI/reference_line.h
rename to include/MapSDK/reference_line.h
diff --git a/include/MapAPI/road_marking.h b/include/MapSDK/road_marking.h
similarity index 100%
rename from include/MapAPI/road_marking.h
rename to include/MapSDK/road_marking.h
diff --git a/include/MapAPI/stationary_object.h b/include/MapSDK/stationary_object.h
similarity index 100%
rename from include/MapAPI/stationary_object.h
rename to include/MapSDK/stationary_object.h
diff --git a/include/MapAPI/traffic_light.h b/include/MapSDK/traffic_light.h
similarity index 100%
rename from include/MapAPI/traffic_light.h
rename to include/MapSDK/traffic_light.h
diff --git a/include/MapAPI/traffic_sign.h b/include/MapSDK/traffic_sign.h
similarity index 100%
rename from include/MapAPI/traffic_sign.h
rename to include/MapSDK/traffic_sign.h
diff --git a/include/MapAPI/traffic_sign_common.h b/include/MapSDK/traffic_sign_common.h
similarity index 100%
rename from include/MapAPI/traffic_sign_common.h
rename to include/MapSDK/traffic_sign_common.h
diff --git a/include/MapAPI/traffic_sign_main_sign.h b/include/MapSDK/traffic_sign_main_sign.h
similarity index 100%
rename from include/MapAPI/traffic_sign_main_sign.h
rename to include/MapSDK/traffic_sign_main_sign.h
diff --git a/include/MapAPI/traffic_sign_supplementary_sign.h b/include/MapSDK/traffic_sign_supplementary_sign.h
similarity index 100%
rename from include/MapAPI/traffic_sign_supplementary_sign.h
rename to include/MapSDK/traffic_sign_supplementary_sign.h
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..12495114d74b233e7000d372dc08c59b14d09b2a
--- /dev/null
+++ b/test/CMakeLists.txt
@@ -0,0 +1,21 @@
+#===------------------------------------------------------------------------===#
+#
+# Copyright (c) 2025 Mercedes-Benz Tech Innovation GmbH
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+#===------------------------------------------------------------------------===#
+
+CPMAddPackage(
+  NAME googletest
+  GITHUB_REPOSITORY google/googletest
+  VERSION 1.15.2
+  OPTIONS "INSTALL_GTEST OFF" "gtest_force_shared_crt ON"
+)
+
+add_executable(map_sdk_test)
+target_sources(map_sdk_test PUBLIC map_test.cpp)
+target_link_libraries(map_sdk_test PUBLIC MapSDK::map_sdk GTest::gmock_main)
+
+include(GoogleTest)
+gtest_discover_tests(map_sdk_test)
diff --git a/test/map_test.cpp b/test/map_test.cpp
index 831c23d66f332743a09b6d976974348d009cc096..9b600c7973659ddfa2857719913f6651d23511d2 100644
--- a/test/map_test.cpp
+++ b/test/map_test.cpp
@@ -9,12 +9,19 @@
  * SPDX-License-Identifier: EPL-2.0
  *******************************************************************************/
 
-#include "MapAPI/map.h"
+#include "MapSDK/map.h"
 
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
 #include <limits>
+#include <memory>
+#include <utility>
+#include <vector>
+
+#include "MapSDK/Common/identifier.h"
+#include "MapSDK/lane.h"
+#include "MapSDK/lane_boundary.h"
 
 namespace
 {
@@ -44,8 +51,8 @@ inline auto CreateLaneBoundary(Identifier id, const units::length::meter_t start
   auto lane_boundary = std::make_unique<LaneBoundary>();
   lane_boundary->id = id;
   lane_boundary->boundary_line = std::vector<LaneBoundary::BoundaryPoint>{
-      {.position = {.x = start_x, .y = y_offset, .z = 0.0_m}, .width = 0.13_m, .height = 0.05_m},
-      {.position = {.x = start_x + 1000.0_m, .y = y_offset, .z = 0.0_m}, .width = 0.13_m, .height = 0.05_m}};
+      {{start_x, y_offset, 0.0_m}, 0.13_m, 0.05_m},
+      {{start_x + 1000.0_m, y_offset, 0.0_m}, 0.13_m, 0.05_m}};
   lane_boundary->type = LaneBoundary::Type::kSolidLine;
   lane_boundary->color = LaneBoundary::Color::kWhite;
   return std::move(lane_boundary);