diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt
index 96fefc09ced059bd9196ebffa904c9e968e08631..19262458906e35f179e6b6e06d22abc7d03827c7 100644
--- a/Core/CMakeLists.txt
+++ b/Core/CMakeLists.txt
@@ -28,48 +28,7 @@ set_target_properties(${lib} PROPERTIES PREFIX ${libprefix} SUFFIX ${libsuffix})
 set(${lib}_LIBRARY_TYPE SHARED)
 
 if(BORNAGAIN_PYTHON)
-
-    if(CONFIGURE_BINDINGS)
-
-        set(TMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/Wrap)
-        file(MAKE_DIRECTORY ${TMP_DIR})
-
-        GeneratePythonDocs(${AUTO_DIR}/doxygen${name}.i ${WRAP_DIR}/swig)
-
-        set(swig_dependencies
-            ${WRAP_DIR}/swig/lib${lib}.i
-            ${WRAP_DIR}/swig/directors.i
-            ${WRAP_DIR}/swig/extend${name}.i
-            ${WRAP_DIR}/swig/ignores.i
-            ${WRAP_DIR}/swig/shared_pointers.i
-            ${WRAP_DIR}/swig/warnings.i
-            )
-        foreach(FNAM ${swig_dependencies})
-            if(NOT EXISTS ${FNAM})
-                message(FATAL_ERROR "Could NOT find SWIG input ${FNAM}")
-            endif()
-        endforeach()
-        list(APPEND swig_dependencies ${AUTO_DIR}/doxygen${name}.i)
-
-        set(SWIG_FLAGS "-c++;-python;-o;${AUTO_DIR}/lib${lib}_wrap.cpp;-outdir;${TMP_DIR}"
-                               ";-I${CMAKE_SOURCE_DIR};-I${CMAKE_BINARY_DIR}/inc")
-
-        add_custom_command(
-            OUTPUT ${AUTO_DIR}/lib${lib}.py
-            COMMAND ${Python3_EXECUTABLE} ${WRAP_DIR}/swig/tweaks.py
-                   ${TMP_DIR}/lib${lib}.py
-                   ${AUTO_DIR}/lib${lib}.py
-            DEPENDS ${TMP_DIR}/lib${lib}.py
-            )
-        add_custom_command(
-            OUTPUT ${TMP_DIR}/lib${lib}.py
-                   ${AUTO_DIR}/lib${lib}_wrap.h
-                   ${AUTO_DIR}/lib${lib}_wrap.cpp
-            COMMAND ${SWIG_EXECUTABLE} ${SWIG_FLAGS} ${WRAP_DIR}/swig/lib${lib}.i
-            DEPENDS ${swig_dependencies} ${include_files}
-            )
-
-    endif(CONFIGURE_BINDINGS)
+    SwigLib(${name} ${lib} ${CMAKE_CURRENT_BINARY_DIR}/Wrap)
 
     add_custom_target(
         ${lib}_python
diff --git a/Fit/CMakeLists.txt b/Fit/CMakeLists.txt
index d2b53a8e9bc0f058968cedb6581e83e80fc3c932..1e53df4f27190beb4c6f08b30132f21a1015e7f1 100644
--- a/Fit/CMakeLists.txt
+++ b/Fit/CMakeLists.txt
@@ -21,48 +21,7 @@ set_target_properties(${lib} PROPERTIES PREFIX ${libprefix} SUFFIX ${libsuffix})
 set(${lib}_LIBRARY_TYPE SHARED)
 
 if(BORNAGAIN_PYTHON)
-
-    if(CONFIGURE_BINDINGS)
-
-        set(TMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/Wrap)
-        file(MAKE_DIRECTORY ${TMP_DIR})
-
-        GeneratePythonDocs(${AUTO_DIR}/doxygen${name}.i ${WRAP_DIR}/swig)
-
-        set(swig_dependencies
-            ${WRAP_DIR}/swig/lib${lib}.i
-            ${WRAP_DIR}/swig/directors.i
-            ${WRAP_DIR}/swig/extend${name}.i
-            ${WRAP_DIR}/swig/ignores.i
-            ${WRAP_DIR}/swig/shared_pointers.i
-            ${WRAP_DIR}/swig/warnings.i
-            )
-        foreach(FNAM ${swig_dependencies})
-            if(NOT EXISTS ${FNAM})
-                message(FATAL_ERROR "Could NOT find SWIG input ${FNAM}")
-            endif()
-        endforeach()
-        list(APPEND swig_dependencies ${AUTO_DIR}/doxygen${name}.i)
-
-        set(SWIG_FLAGS "-c++;-python;-o;${AUTO_DIR}/lib${lib}_wrap.cpp;-outdir;${TMP_DIR}"
-                               ";-I${CMAKE_SOURCE_DIR};-I${CMAKE_BINARY_DIR}/inc")
-
-        add_custom_command(
-            OUTPUT ${AUTO_DIR}/lib${lib}.py
-            COMMAND ${Python3_EXECUTABLE} ${WRAP_DIR}/swig/tweaks.py
-                   ${TMP_DIR}/lib${lib}.py
-                   ${AUTO_DIR}/lib${lib}.py
-            DEPENDS ${TMP_DIR}/lib${lib}.py
-            )
-        add_custom_command(
-            OUTPUT ${TMP_DIR}/lib${lib}.py
-                   ${AUTO_DIR}/lib${lib}_wrap.h
-                   ${AUTO_DIR}/lib${lib}_wrap.cpp
-            COMMAND ${SWIG_EXECUTABLE} ${SWIG_FLAGS} ${WRAP_DIR}/swig/lib${lib}.i
-            DEPENDS ${swig_dependencies} ${include_files}
-            )
-
-    endif(CONFIGURE_BINDINGS)
+    SwigLib(${name} ${lib} ${CMAKE_CURRENT_BINARY_DIR}/Wrap)
 
     add_custom_target(
         ${lib}_python
diff --git a/cmake/BornAgain/SwigLib.cmake b/cmake/BornAgain/SwigLib.cmake
index c5e41f8997a947e1616d444abbe11ff0944be61e..dce997bc0f10f1c596b28a4b20bdb1db21b911ad 100644
--- a/cmake/BornAgain/SwigLib.cmake
+++ b/cmake/BornAgain/SwigLib.cmake
@@ -1,8 +1,49 @@
-function(SwigLib name lib)
+function(SwigLib name lib TMP_DIR)
 
     if(NOT BORNAGAIN_PYTHON)
-        return()
+        message(FATAL_ERROR "Function SwigLib called though BORNAGAIN_PYTHON=false")
     endif()
 
+    if(CONFIGURE_BINDINGS)
+
+        file(MAKE_DIRECTORY ${TMP_DIR})
+
+        GeneratePythonDocs(${AUTO_DIR}/doxygen${name}.i ${WRAP_DIR}/swig)
+
+        set(swig_dependencies
+            ${WRAP_DIR}/swig/lib${lib}.i
+            ${WRAP_DIR}/swig/directors.i
+            ${WRAP_DIR}/swig/extend${name}.i
+            ${WRAP_DIR}/swig/ignores.i
+            ${WRAP_DIR}/swig/shared_pointers.i
+            ${WRAP_DIR}/swig/warnings.i
+            )
+        foreach(FNAM ${swig_dependencies})
+            if(NOT EXISTS ${FNAM})
+                message(FATAL_ERROR "Could NOT find SWIG input ${FNAM}")
+            endif()
+        endforeach()
+        list(APPEND swig_dependencies ${AUTO_DIR}/doxygen${name}.i)
+
+        set(SWIG_FLAGS "-c++;-python;-o;${AUTO_DIR}/lib${lib}_wrap.cpp;-outdir;${TMP_DIR}"
+                               ";-I${CMAKE_SOURCE_DIR};-I${CMAKE_BINARY_DIR}/inc")
+
+        add_custom_command(
+            OUTPUT ${AUTO_DIR}/lib${lib}.py
+            COMMAND ${Python3_EXECUTABLE} ${WRAP_DIR}/swig/tweaks.py
+                   ${TMP_DIR}/lib${lib}.py
+                   ${AUTO_DIR}/lib${lib}.py
+            DEPENDS ${TMP_DIR}/lib${lib}.py
+            )
+        add_custom_command(
+            OUTPUT ${TMP_DIR}/lib${lib}.py
+                   ${AUTO_DIR}/lib${lib}_wrap.h
+                   ${AUTO_DIR}/lib${lib}_wrap.cpp
+            COMMAND ${SWIG_EXECUTABLE} ${SWIG_FLAGS} ${WRAP_DIR}/swig/lib${lib}.i
+            DEPENDS ${swig_dependencies} ${include_files}
+            )
+
+    endif(CONFIGURE_BINDINGS)
+
 
 endfunction()