diff --git a/CMakeLists.txt b/CMakeLists.txt
index d4459b12769ba9b2b1e1770cae35c7377cac53ab..f05c2d9442f54ed940e4ecda71cb6803e5158fbb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,11 +4,6 @@
 
 cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
 
-if(APPLE)
-if(POLICY CMP0025)
-    cmake_policy(SET CMP0025 NEW)
-endif()
-endif()
 
 set(CMAKE_MODULE_PATH
     ${CMAKE_SOURCE_DIR}/cmake/generic/modules
@@ -64,6 +59,7 @@ if(ZERO_TOLERANCE)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wfatal-errors")
 endif()
 include(BornAgainConfiguration)
+include(BornAgainPolicy)
 include(GeneratePythonDocs)
 include(PyExamplesLineLength)
 include(CheckCode)
diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt
index 8bc3aa0c18a6aa0ec1184bf507bc81d0dcce77cf..26f335c8b2d4e70802e682046e6a45e675a83e43 100644
--- a/Core/CMakeLists.txt
+++ b/Core/CMakeLists.txt
@@ -4,10 +4,6 @@
 
 set(library_name BornAgainCore)
 
-if(POLICY CMP0042)
-    cmake_policy(SET CMP0042 NEW)
-endif()
-
 if(BORNAGAIN_TIDY)
 #    set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=-*,readability-*,-readability-braces-around-statements")
     set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=-*,clang-analyzer-*,readability-*,-readability-braces-around-statements,modernize-*")
diff --git a/Fit/CMakeLists.txt b/Fit/CMakeLists.txt
index 346f7d7c0198c6ae0169743eb91e8e4753ff738c..4b0af5985bea92f8ef08327ca292014322ef6122 100644
--- a/Fit/CMakeLists.txt
+++ b/Fit/CMakeLists.txt
@@ -4,10 +4,6 @@
 
 set(library_name BornAgainFit)
 
-if(POLICY CMP0042)
-    cmake_policy(SET CMP0042 NEW)
-endif()
-
 # --- source and include files ------
 set(FIT_SOURCE_DIRS
     ${CMAKE_CURRENT_SOURCE_DIR}/Kernel
diff --git a/GUI/CMakeLists.txt b/GUI/CMakeLists.txt
index ea8ff265f479fd79bb4445bffecf14654d457100..69f3895f40cde4f38bfdc76bf5ab4e385fe5e225 100644
--- a/GUI/CMakeLists.txt
+++ b/GUI/CMakeLists.txt
@@ -1,12 +1,6 @@
 ############################################################################
 # CMakeLists.txt file for building BornAgain/GUI libraries and executable
 ############################################################################
-if(POLICY CMP0020)
-    cmake_policy(SET CMP0020 NEW)
-endif()
-if(POLICY CMP0043)
-    cmake_policy(SET CMP0043 NEW)
-endif()
 
 message(STATUS "Configuring BornAgain GUI")
 
diff --git a/GUI/coregui/CMakeLists.txt b/GUI/coregui/CMakeLists.txt
index 7c5daf8a2337d1ab6bc358d84718adcc92acf33a..5caa7bf421ce708ca372795b8644f7c427d61716 100644
--- a/GUI/coregui/CMakeLists.txt
+++ b/GUI/coregui/CMakeLists.txt
@@ -3,22 +3,6 @@
 ############################################################################
 set(library_name BornAgainGUI)
 
-if(POLICY CMP0020)
-    cmake_policy(SET CMP0020 NEW)
-endif()
-if(POLICY CMP0043)
-    cmake_policy(SET CMP0043 NEW)
-endif()
-if(POLICY CMP0042)
-    cmake_policy(SET CMP0042 NEW)
-endif()
-if(POLICY CMP0028)
-    cmake_policy(SET CMP0028 NEW)
-endif()
-if(POLICY CMP0071)
-  cmake_policy(SET CMP0071 NEW)
-endif()
-
 # --- source and include files ---
 set(include_dirs
     ${CMAKE_CURRENT_SOURCE_DIR}/mainwindow
diff --git a/Tests/Functional/GUI/CMakeLists.txt b/Tests/Functional/GUI/CMakeLists.txt
index 8fe5660ce1f300a15221d29ac5f8883132af0368..c0a7bdb20fa5256e9707be9c00d66761c32682aa 100644
--- a/Tests/Functional/GUI/CMakeLists.txt
+++ b/Tests/Functional/GUI/CMakeLists.txt
@@ -1,10 +1,3 @@
-if(POLICY CMP0020)
-    cmake_policy(SET CMP0020 NEW)
-endif()
-if(POLICY CMP0043)
-    cmake_policy(SET CMP0043 NEW)
-endif()
-
 find_package(Qt5Widgets REQUIRED)
 
 add_subdirectory(GUIStandardTest)
diff --git a/Tests/Functional/TestMachinery/CMakeLists.txt b/Tests/Functional/TestMachinery/CMakeLists.txt
index ba4b66229fa85b2145b0a4a5739ef97deeadd19a..9bf0b1c4db669fed61d2b7b09667c180a74339bf 100644
--- a/Tests/Functional/TestMachinery/CMakeLists.txt
+++ b/Tests/Functional/TestMachinery/CMakeLists.txt
@@ -4,10 +4,6 @@
 
 set(library_name BornAgainTestMachinery)
 
-if(POLICY CMP0042)
-    cmake_policy(SET CMP0042 NEW)
-endif()
-
 file(GLOB source_files "*.cpp")
 file(GLOB include_files "*.h")
 
@@ -41,8 +37,3 @@ if(APPLE AND BORNAGAIN_APPLE_BUNDLE)
     set(link_flags "-Wl,-rpath,@loader_path/../../Frameworks")
     set_target_properties(${library_name} PROPERTIES LINK_FLAGS ${link_flags})
 endif()
-
-# --- installation ---------
-
-#install (TARGETS ${library_name} DESTINATION ${destination_lib} COMPONENT Libraries)
-#install (FILES ${include_files} DESTINATION ${destination_include} COMPONENT Headers)
diff --git a/Tests/UnitTests/Core/CMakeLists.txt b/Tests/UnitTests/Core/CMakeLists.txt
index 824b1886d7e61a762465d8968186fdd52ad6ab76..070f4f29d48bf9c08acf3b81f380f20653209a20 100644
--- a/Tests/UnitTests/Core/CMakeLists.txt
+++ b/Tests/UnitTests/Core/CMakeLists.txt
@@ -3,14 +3,6 @@
 ############################################################################
 set(test UnitTestCore)
 
-if(POLICY CMP0020)
-    cmake_policy(SET CMP0020 NEW)
-endif()
-
-if(POLICY CMP0043)
-    cmake_policy(SET CMP0043 NEW)
-endif()
-
 include_directories(${CMAKE_SOURCE_DIR}/Tests/UnitTests/utilities)
 
 file(GLOB source_files "*/*.cpp" "../utilities/TestAll.cpp")
diff --git a/Tests/UnitTests/Fit/CMakeLists.txt b/Tests/UnitTests/Fit/CMakeLists.txt
index 3f29e7cf08016e15a3ee6b5251deac58bf1cce69..2cd1c801d2a9777ece16e386986fb63e435bc140 100644
--- a/Tests/UnitTests/Fit/CMakeLists.txt
+++ b/Tests/UnitTests/Fit/CMakeLists.txt
@@ -4,14 +4,6 @@
 
 set(test UnitTestFit)
 
-if(POLICY CMP0020)
-    cmake_policy(SET CMP0020 NEW)
-endif()
-
-if(POLICY CMP0043)
-    cmake_policy(SET CMP0043 NEW)
-endif()
-
 include_directories(${CMAKE_SOURCE_DIR}/Tests/UnitTests/utilities)
 
 file(GLOB source_files "*.cpp" "../utilities/TestAll.cpp")
diff --git a/Tests/UnitTests/GUI/CMakeLists.txt b/Tests/UnitTests/GUI/CMakeLists.txt
index ddf2adcc11126de9227dd0a16c52936148574ffe..a40e9e5d68c534bd8d36cbe728dae475878a2e79 100644
--- a/Tests/UnitTests/GUI/CMakeLists.txt
+++ b/Tests/UnitTests/GUI/CMakeLists.txt
@@ -4,14 +4,6 @@
 
 set(test UnitTestGUI)
 
-if(POLICY CMP0020)
-    cmake_policy(SET CMP0020 NEW)
-endif()
-
-if(POLICY CMP0043)
-    cmake_policy(SET CMP0043 NEW)
-endif()
-
 file(GLOB source_files "*.cpp")
 file(GLOB include_files "*.h")
 
diff --git a/Tests/UnitTests/Numeric/CMakeLists.txt b/Tests/UnitTests/Numeric/CMakeLists.txt
index 4aac2074b034d063d8e2d2f3ad7f179d83b84d17..f3fc2bb9fd801dcf94f0314f45ba362ba5564db1 100644
--- a/Tests/UnitTests/Numeric/CMakeLists.txt
+++ b/Tests/UnitTests/Numeric/CMakeLists.txt
@@ -3,14 +3,6 @@
 ############################################################################
 set(test UnitTestNumeric)
 
-if(POLICY CMP0020)
-    cmake_policy(SET CMP0020 NEW)
-endif()
-
-if(POLICY CMP0043)
-    cmake_policy(SET CMP0043 NEW)
-endif()
-
 if(MSVC)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_LINKED_AS_SHARED_LIBRARY=1")
 endif()
diff --git a/ThirdParty/GUI/qcustomplot/CMakeLists.txt b/ThirdParty/GUI/qcustomplot/CMakeLists.txt
index 1d73689015f7e7f852627ad6639c72e95eb6e202..21d5d4ac20e076464d6ebd751b7b61c9520b468f 100644
--- a/ThirdParty/GUI/qcustomplot/CMakeLists.txt
+++ b/ThirdParty/GUI/qcustomplot/CMakeLists.txt
@@ -1,12 +1,6 @@
 ############################################################################
 # CMakeLists.txt file for building qcustomplot static library
 ############################################################################
-if(POLICY CMP0020)
-    cmake_policy(SET CMP0020 NEW)
-endif()
-if(POLICY CMP0043)
-    cmake_policy(SET CMP0043 NEW)
-endif()
 set(library_name qcustomplot)
 
 set(source_files qcustomplot.h qcustomplot.cpp)
diff --git a/ThirdParty/GUI/qt-manhattan-style/CMakeLists.txt b/ThirdParty/GUI/qt-manhattan-style/CMakeLists.txt
index 9ec5be50c29a7cbe60900e9ec51c68e96ff625a8..24fdaa55cc42db28d661d829f9951025b73c0a8e 100644
--- a/ThirdParty/GUI/qt-manhattan-style/CMakeLists.txt
+++ b/ThirdParty/GUI/qt-manhattan-style/CMakeLists.txt
@@ -1,16 +1,6 @@
 ############################################################################
 # CMakeLists.txt file for building libManhattanStyle
 ############################################################################
-if(POLICY CMP0020)
-    cmake_policy(SET CMP0020 NEW)
-endif()
-if(POLICY CMP0043)
-    cmake_policy(SET CMP0043 NEW)
-endif()
-if(POLICY CMP0071)
-  cmake_policy(SET CMP0071 NEW)
-endif()
-
 set(library_name ManhattanStyle)
 
 set(SRCS
diff --git a/ThirdParty/common/gtest/CMakeLists.txt b/ThirdParty/common/gtest/CMakeLists.txt
index b6b96d7e07b4c12d3f7c3c6b4034257ac03aee84..3d7abaf296c0efc829b55ff87de479f74a637df5 100644
--- a/ThirdParty/common/gtest/CMakeLists.txt
+++ b/ThirdParty/common/gtest/CMakeLists.txt
@@ -1,10 +1,6 @@
 ############################################################################
 # CMakeLists.txt file for building gtest library
 ############################################################################
-if(POLICY CMP0042)
-    cmake_policy(SET CMP0042 NEW)
-endif()
-
 # instructs CMake to consider libgtest.so as our project library (inspite of the fact, that
 # it is not installed) and to provide @rpath instead of hardcoded links.
 if(APPLE)
diff --git a/cmake/bornagain/modules/BornAgainPolicy.cmake b/cmake/bornagain/modules/BornAgainPolicy.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..15eb6dcece9911a39dfa08012df96d5b4eb60e55
--- /dev/null
+++ b/cmake/bornagain/modules/BornAgainPolicy.cmake
@@ -0,0 +1,25 @@
+if(APPLE)
+if(POLICY CMP0025)
+    cmake_policy(SET CMP0025 NEW)
+endif()
+endif()
+
+if(POLICY CMP0020)
+    cmake_policy(SET CMP0020 NEW)
+endif()
+
+if(POLICY CMP0028)
+    cmake_policy(SET CMP0028 NEW)
+endif()
+
+if(POLICY CMP0042)
+    cmake_policy(SET CMP0042 NEW)
+endif()
+
+if(POLICY CMP0043)
+    cmake_policy(SET CMP0043 NEW)
+endif()
+
+if(POLICY CMP0071)
+  cmake_policy(SET CMP0071 NEW)
+endif()