diff --git a/finders/FindCLP.cmake b/finders/FindCLP.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..e7056f655efecd32fefc97942947ec17730d00cf
--- /dev/null
+++ b/finders/FindCLP.cmake
@@ -0,0 +1,54 @@
+# Try to find CLP: https://www.coin-or.org/Clp/
+# On success, this will define the target Coin::CLP
+
+if(NOT TARGET Coin::CLP)
+
+if(NOT TARGET Coin::CoinUtils)
+    find_package(CoinUtils REQUIRED)
+endif()
+
+find_path(CLP_INCLUDE_DIR
+          NAMES ClpConfig.h
+          PATHS "$ENV{CLP_DIR}/include/coin"
+                "/opt/homebrew/include/clp/coin"  #homebrew default path
+                "/usr/local/include/clp/coin"     #homebrew default path
+                "/usr/local/include/coin-or"
+                "/usr/include/coin"
+                "/usr/include/coin-or"
+                 "C:\\libs\\clp\\include"
+                 "C:\\libs\\cbc\\include"
+                 "${VS_SEARCH_PATH}CBC-2.9.7/Clp/include"
+                 "${VS_SEARCH_PATH}CBC-2.9.4/Clp/include"
+              )
+
+find_library( CLP_LIBRARY
+              NAMES Clp libClp
+              PATHS "$ENV{CLP_DIR}/lib"
+                    "/opt/homebrew/lib"  # homebrew default path
+                    "/usr/local/lib"     # homebrew default path
+                    "/usr/local/lib/coin-or"
+                    "/usr/local/lib/coin"
+                    "/usr/lib/coin-or"
+                    "/usr/lib/coin"
+                    "/usr/lib"
+                    "C:\\libs\\clp\\lib"
+                    "C:\\libs\\cbc\\lib"
+              )
+
+set(CLP_INCLUDE_DIRS "${CLP_INCLUDE_DIR}" )
+set(CLP_LIBRARIES "${CLP_LIBRARY}" )
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(CLP  DEFAULT_MSG
+                                  CLP_LIBRARY CLP_INCLUDE_DIR)
+
+if(CLP_FOUND)
+    add_library(Coin::CLP SHARED IMPORTED)
+    set_property(TARGET Coin::CLP PROPERTY IMPORTED_LOCATION ${CLP_LIBRARY})
+    target_include_directories(Coin::CLP INTERFACE ${CLP_INCLUDE_DIR})
+    target_link_libraries(Coin::CLP INTERFACE Coin::CoinUtils)
+endif()
+
+
+mark_as_advanced(CLP_INCLUDE_DIR CLP_LIBRARY)
+endif(NOT TARGET Coin::CLP)
diff --git a/finders/FindCoinUtils.cmake b/finders/FindCoinUtils.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..f8962d6258a287e407da4948885980bd8ac198d0
--- /dev/null
+++ b/finders/FindCoinUtils.cmake
@@ -0,0 +1,44 @@
+# Try to find Coin-ORs CoinUtils: https://www.coin-or.org/
+# On success, this will define the target Coin::CoinUtils
+if (NOT TARGET Coin::CoinUtils)
+find_path(CoinUtils_INCLUDE_DIR
+            NAMES CoinPragma.hpp
+          PATHS "$ENV{CoinUtils_DIR}/include/coin"
+                "/opt/homebrew/include/coinutils/coin"  #homebrew default path
+                "/usr/local/include/coinutils/coin"     #homebrew default path
+                "/usr/local/include/coin-or"
+                "/usr/include/coinutils"
+                "/usr/include/coin-or"
+                "/usr/include/coin"
+                "/usr/lib/coin-or"
+                "C:\\libs\\coinutils\\include"
+              )
+
+find_library( CoinUtils_LIBRARY
+    NAMES CoinUtils
+              PATHS "$ENV{CoinUtils_DIR}/lib"
+                    "/opt/homebrew/lib"  # homebrew default path
+                    "/usr/local/lib"     # homebrew default path
+                    "/usr/local/lib/coin-or"
+                    "/usr/local/lib/coin"
+                    "/usr/lib/coin-or"
+                    "/usr/lib/coin"
+                    "/usr/lib"
+                    "C:\\libs\\clp\\lib"
+              )
+
+set(CoinUtils_INCLUDE_DIRS "${CoinUtils_INCLUDE_DIR}" )
+set(CoinUtils_LIBRARIES "${CoinUtils_LIBRARY}" )
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(CoinUtils DEFAULT_MSG CoinUtils_LIBRARY CoinUtils_INCLUDE_DIR)
+
+if(CoinUtils_FOUND)
+    add_library(Coin::CoinUtils SHARED IMPORTED)
+    set_property(TARGET Coin::CoinUtils PROPERTY IMPORTED_LOCATION ${CoinUtils_LIBRARY})
+    target_include_directories(Coin::CoinUtils INTERFACE ${CoinUtils_INCLUDE_DIR})
+endif()
+
+
+mark_as_advanced(CoinUtils_INCLUDE_DIR CoinUtils_LIBRARY)
+endif (NOT TARGET Coin::CoinUtils)
diff --git a/finders/FindGMM.cmake b/finders/FindGMM.cmake
index 36be566895c273cce7924f0591e2b20ceb40cde4..78b84b2a11eccfb697ab628e7c87bc1337b2c68e 100644
--- a/finders/FindGMM.cmake
+++ b/finders/FindGMM.cmake
@@ -1,3 +1,5 @@
+if (NOT TARGET GMM::GMM)
+
 set(GMM_DIR $ENV{GMM_DIR} CACHE PATH "GMM directory (contain gmm/gmm.h).")
 
 find_path(GMM_INCLUDE_DIR
@@ -21,4 +23,4 @@ endif()
 
 mark_as_advanced(GMM_INCLUDE_DIR)
 
-
+endif(NOT TARGET GMM::GMM)
diff --git a/finders/FindGMSH.cmake b/finders/FindGMSH.cmake
index 559358b7b69bcf9be6b82a98064e798484c4573f..90f47797593e05fa98243b547b8dfd552767b034 100644
--- a/finders/FindGMSH.cmake
+++ b/finders/FindGMSH.cmake
@@ -1,3 +1,5 @@
+if(NOT TARGET GMSH::GMSH)
+
 set(GMSH_DIR $ENV{GMSH_DIR} CACHE PATH "GMSH directory (containing include/gmsh.h).")
 
 find_path(GMSH_INCLUDE_DIR
@@ -29,3 +31,4 @@ mark_as_advanced(GMSH_INCLUDE_DIR)
 mark_as_advanced(GMSH_LIBRARY)
 
 
+endif(NOT TARGET GMSH::GMSH)
diff --git a/finders/FindGurobi.cmake b/finders/FindGurobi.cmake
index 36a80bf035b523c60bcfd54842822e4fde1f67cc..8a1440faa10ca4e2eba9efab68e473e00d47f2cb 100644
--- a/finders/FindGurobi.cmake
+++ b/finders/FindGurobi.cmake
@@ -4,6 +4,7 @@
 #       Gurobi::GurobiC   - only the C interface
 #       Gurobi::GurobiCXX - C and C++ interface
 
+if (NOT TARGET Gurobi::GurobiCXX)
 find_path(GUROBI_HOME
           NAMES include/gurobi_c++.h
           PATHS
@@ -131,3 +132,4 @@ set(GUROBI_LIBRARIES Gurobi::GurobiC Gurobi::GurobiCXX)
 include(FindPackageHandleStandardArgs)
 find_package_handle_standard_args(Gurobi  DEFAULT_MSG GUROBI_LIBRARY GUROBI_INCLUDE_DIR GUROBI_SRC_DIR)
 
+endif (NOT TARGET Gurobi::GurobiCXX)
diff --git a/finders/FindLPSolve.cmake b/finders/FindLPSolve.cmake
index af9418c690204246f3a184f5e91a96fe1e6f8bbb..131c02fbf973acdd704f592bb419b527d51d1fbd 100644
--- a/finders/FindLPSolve.cmake
+++ b/finders/FindLPSolve.cmake
@@ -1,3 +1,4 @@
+if(NOT TARGET lpsolve::lpsolve)
 set(LPSOLVE_DIR $ENV{LPSOLVE_DIR} CACHE PATH "lpsolve directory (contain include/lp_lib.h).")
 
 find_path(LPSOLVE_INCLUDE_DIR
@@ -34,3 +35,5 @@ endif()
 
 mark_as_advanced(LPSOLVE_INCLUDE_DIR)
 mark_as_advanced(LPSOLVE_LIBRARY)
+
+endif(NOT TARGET lpsolve::lpsolve)
diff --git a/finders/FindMPFI.cmake b/finders/FindMPFI.cmake
index 3364d89961214387a6cb89e34d7bb4ed003ff9bb..f4a4eb5af7492da391779bd125a4a30ff85e9e5a 100644
--- a/finders/FindMPFI.cmake
+++ b/finders/FindMPFI.cmake
@@ -1,3 +1,5 @@
+if (NOT TARGET MPFI::MPFI)
+
 find_path(MPFI_INCLUDE_DIR
     NAMES mpfi.h
     PATHS /usr/local/include
@@ -23,3 +25,4 @@ endif()
 mark_as_advanced(MPFI_INCLUDE_DIR)
 mark_as_advanced(MPFI_LIBRARY)
 
+endif (NOT TARGET MPFI::MPFI)
diff --git a/finders/FindMPFR.cmake b/finders/FindMPFR.cmake
index 1f06d543433c24da01f5e13b061bc97d5f5fcf1d..4bed0ce4274fe036193f2a469152987fde8a4637 100644
--- a/finders/FindMPFR.cmake
+++ b/finders/FindMPFR.cmake
@@ -1,3 +1,4 @@
+if (NOT TARGET MPFR::MPFR)
 find_path(MPFR_INCLUDE_DIR
     NAMES mpfr.h
     PATHS /usr/local/include
@@ -23,3 +24,4 @@ endif()
 mark_as_advanced(MPFR_INCLUDE_DIR)
 mark_as_advanced(MPFR_LIBRARY)
 
+endif (NOT TARGET MPFR::MPFR)
diff --git a/finders/FindMosek.cmake b/finders/FindMosek.cmake
index 0255e2176ccc8ded9d07932188c3dc874be56b8e..606e8c527989e6f854b4ac1838cf4a55a0c13389 100644
--- a/finders/FindMosek.cmake
+++ b/finders/FindMosek.cmake
@@ -6,6 +6,8 @@
 
 # Tested with Mosek 9.2 on Linux
 
+if (NOT TARGET Mosek::MosekC)
+
 find_path (MOSEK_BASE
     NAMES tools/platform
     HINTS $ENV{MOSEK_DIR}
@@ -19,6 +21,8 @@ if (${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
     set(DEFAULT_MOSEK_PLATFORM "win64x86")
 elseif (${CMAKE_HOST_SYSTEM_NAME} MATCHES "Darwin")
     set(DEFAULT_MOSEK_PLATFORM "osx64x86")
+    # TODO: arm64 (also on other platforms). I currently don't have Mosek installed,
+    # so I cant't test this.
 elseif (${CMAKE_HOST_SYSTEM_NAME} MATCHES "Linux")
     set(DEFAULT_MOSEK_PLATFORM "linux64x86")
 else()
@@ -77,3 +81,4 @@ set(MOSEK_LIBRARIES Mosek::MosekC Mosek::FusionCXX)
 include(FindPackageHandleStandardArgs)
 find_package_handle_standard_args(Mosek DEFAULT_MSG MOSEK_LIBRARY MOSEK_INCLUDE_DIR)
 
+endif (NOT TARGET Mosek::MosekC)