diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8a0c700b2409ff255484f0c54f58e7c1ebe3e444..eed6834064cba31453318da4fdf51c74b8c9d63b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,15 +27,7 @@ cmake_minimum_required(VERSION 3.25)
 
 set(CMAKE_MAXIMUM_SUPPORTED_VERSION 3.28)
 
-# If CMAKE_VERSION <= CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up
-# to CMAKE_VERSION to NEW
-if (${CMAKE_VERSION} VERSION_LESS_EQUAL ${CMAKE_MAXIMUM_SUPPORTED_VERSION})
-    cmake_policy(VERSION ${CMAKE_VERSION})
-# If CMAKE_VERSION > CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up to
-# CMAKE_MAXIMUM_SUPPORTED_VERSION to NEW
-else ()
-    cmake_policy(VERSION ${CMAKE_MAXIMUM_SUPPORTED_VERSION})
-endif()
+include("./cmake/HandlePolicies.cmake" NO_POLICY_SCOPE)
 
 project(LoadStaticSharedTargets VERSION 1.5.0 LANGUAGES NONE)
 
@@ -51,6 +43,8 @@ if (IS_TOP_LEVEL)
     endif ()
 endif ()
 
+option(LoadStaticSharedTargets_INCLUDE_PACKAGING "Include packaging rules for LoadStaticSharedTargets" "${IS_TOP_LEVEL}")
+
 add_subdirectory(src)
 
 if (IS_TOP_LEVEL AND BUILD_TESTING)
@@ -59,8 +53,6 @@ if (IS_TOP_LEVEL AND BUILD_TESTING)
     add_subdirectory(tests EXCLUDE_FROM_ALL)
 endif ()
 
-option(LoadStaticSharedTargets_INCLUDE_PACKAGING "Include packaging rules for LoadStaticSharedTargets" "${IS_TOP_LEVEL}")
-
 if (LoadStaticSharedTargets_INCLUDE_PACKAGING)
     add_subdirectory(packaging)
 endif ()
diff --git a/cmake/HandlePolicies.cmake b/cmake/HandlePolicies.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..0fb9a23ce0e52ef616d706fea0a36fccec2fedc1
--- /dev/null
+++ b/cmake/HandlePolicies.cmake
@@ -0,0 +1,38 @@
+#[[
+MIT License
+
+CMake build script for LoadStaticSharedTargets module
+Copyright (c) 2024 Tim Kaune
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+]]
+
+if (NOT DEFINED CMAKE_MAXIMUM_SUPPORTED_VERSION)
+    set(CMAKE_MAXIMUM_SUPPORTED_VERSION ${CMAKE_MINIMUM_REQUIRED_VERSION})
+endif ()
+
+# If CMAKE_VERSION <= CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up
+# to CMAKE_VERSION to NEW
+if (${CMAKE_VERSION} VERSION_LESS_EQUAL ${CMAKE_MAXIMUM_SUPPORTED_VERSION})
+    cmake_policy(VERSION ${CMAKE_VERSION})
+# If CMAKE_VERSION > CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up to
+# CMAKE_MAXIMUM_SUPPORTED_VERSION to NEW
+else ()
+    cmake_policy(VERSION ${CMAKE_MAXIMUM_SUPPORTED_VERSION})
+endif()
diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt
index ba64606ee81b00b56e8bed8a2e4e25c871026390..2f4ed2abd33f711f433c9b03728f60e5fb9134c6 100644
--- a/packaging/CMakeLists.txt
+++ b/packaging/CMakeLists.txt
@@ -47,6 +47,8 @@ write_basic_package_version_file(
     COMPATIBILITY SameMajorVersion
 )
 
+file(READ "../cmake/HandlePolicies.cmake" HANDLE_POLICIES_SCRIPT OFFSET 1128)
+
 configure_file(
     "LoadStaticSharedTargetsConfig.cmake.in"
     "${CMAKE_CURRENT_BINARY_DIR}/LoadStaticSharedTargetsConfig.cmake"
diff --git a/packaging/LoadStaticSharedTargetsConfig.cmake.in b/packaging/LoadStaticSharedTargetsConfig.cmake.in
index dd2608401aae2ecb2b0f0443e1f4a54197d36ebe..fe5ff22c2ec2f005b664b9d1ec9a2e350bc84d2a 100644
--- a/packaging/LoadStaticSharedTargetsConfig.cmake.in
+++ b/packaging/LoadStaticSharedTargetsConfig.cmake.in
@@ -27,15 +27,9 @@ cmake_minimum_required(VERSION @CMAKE_MINIMUM_REQUIRED_VERSION@)
 
 set(CMAKE_MAXIMUM_SUPPORTED_VERSION @CMAKE_MAXIMUM_SUPPORTED_VERSION@)
 
-# If CMAKE_VERSION <= CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up
-# to CMAKE_VERSION to NEW
-if (${CMAKE_VERSION} VERSION_LESS_EQUAL ${CMAKE_MAXIMUM_SUPPORTED_VERSION})
-    cmake_policy(VERSION ${CMAKE_VERSION})
-# If CMAKE_VERSION > CMAKE_MAXIMUM_SUPPORTED_VERSION is used, set policies up to
-# CMAKE_MAXIMUM_SUPPORTED_VERSION to NEW
-else ()
-    cmake_policy(VERSION ${CMAKE_MAXIMUM_SUPPORTED_VERSION})
-endif()
+# begin HANDLE_POLICIES_SCRIPT
+@HANDLE_POLICIES_SCRIPT@
+# end HANDLE_POLICIES_SCRIPT
 
 # include(LoadStaticSharedTargets) should work after this
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")