diff --git a/cmake/ThirdPartyPython.cmake b/cmake/ThirdPartyPython.cmake
index f1e37ba1a..643bf225c 100644
--- cmake/ThirdPartyPython.cmake
+++ cmake/ThirdPartyPython.cmake
@@ -40,18 +40,27 @@ IF (NEKTAR_BUILD_PYTHON)
         COMMAND ${Python3_EXECUTABLE} -m pip install .
         WORKING_DIRECTORY ${NEKPY_BASE_DIR})
 
-    EXTERNALPROJECT_ADD(
-        pybind11
-        PREFIX ${TPSRC}
-        URL ${TPURL}/pybind11-002c05b17.zip
-        URL_MD5 4fd2f2df6a8a4f28c260e56163bf4481
-        STAMP_DIR ${TPBUILD}/stamp
-        DOWNLOAD_DIR ${TPSRC}
-        SOURCE_DIR ${TPSRC}/pybind11
-        BINARY_DIR ${TPBUILD}/pybind11
-        TMP_DIR ${TPBUILD}/pybind11-tmp
-        INSTALL_DIR ${TPDIST}
-        CONFIGURE_COMMAND ${CMAKE_COMMAND}
+    # Require pybind11 v3 or later for unique_ptr transfer
+    FIND_PACKAGE(pybind11 3 CONFIG QUIET)
+
+    IF (pybind11_FOUND)
+        MESSAGE(STATUS "Found pybind11: ${pybind11_INCLUDE_DIR}")
+        ADD_CUSTOM_TARGET(pybind11 ALL)
+        INCLUDE_DIRECTORIES(${pybind11_INCLUDE_DIR})
+    ELSE()
+        MESSAGE(STATUS "Build pybind11: ${TPDIST}/include/pybind11")
+        EXTERNALPROJECT_ADD(
+            pybind11
+            PREFIX ${TPSRC}
+            URL ${TPURL}/pybind11-3.0.1.zip
+            URL_MD5 53f015a45ffaeeec2ad605ac436526ba
+            STAMP_DIR ${TPBUILD}/stamp
+            DOWNLOAD_DIR ${TPSRC}
+            SOURCE_DIR ${TPSRC}/pybind11
+            BINARY_DIR ${TPBUILD}/pybind11
+            TMP_DIR ${TPBUILD}/pybind11-tmp
+            INSTALL_DIR ${TPDIST}
+            CONFIGURE_COMMAND ${CMAKE_COMMAND}
             -G ${CMAKE_GENERATOR}
             -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
             -DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
@@ -59,12 +68,13 @@ IF (NEKTAR_BUILD_PYTHON)
             -DPYBIND11_TEST=OFF
             ${TPSRC}/pybind11)
 
-     # Add third-party include to include path.
-     INCLUDE_DIRECTORIES(${TPDIST}/include)
+        # Add third-party include to include path.
+        INCLUDE_DIRECTORIES(${TPDIST}/include)
 
-     ADD_DEPENDENCIES(thirdparty pybind11)
+        ADD_DEPENDENCIES(thirdparty pybind11)
+    ENDIF()
 
-     FILE(WRITE ${NEKPY_BASE_DIR}/NekPy/__init__.py "# Adjust dlopen flags to avoid OpenMPI issues
+    FILE(WRITE ${NEKPY_BASE_DIR}/NekPy/__init__.py "# Adjust dlopen flags to avoid OpenMPI issues
 try:
     import DLFCN as dl
     import sys
