diff --git a/cmake/modules/DuneUtils.cmake b/cmake/modules/DuneUtils.cmake
index c8522b81a66f6245af0084afe52f3aefa96de4ba..ab448b10b774fcff38cedbe80e2b011eb6be4b2f 100644
--- a/cmake/modules/DuneUtils.cmake
+++ b/cmake/modules/DuneUtils.cmake
@@ -95,9 +95,15 @@ macro(END_TESTCASES)
     endforeach (target ${dxt_test_binaries})
     set(dxt_headercheck_targets "")
     get_headercheck_targets(dxt_headercheck_targets)
-    add_custom_target(refresh_test_timings ${CMAKE_BINARY_DIR}/dune-env-3 distribute_testing.py
+    add_custom_target(rerun_test_distribution ${CMAKE_BINARY_DIR}/dune-env-3 distribute_testing.py
                         "${CMAKE_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" "${dxt_test_binaries}"
                         "${all_sorted_testnames}" "${dxt_headercheck_targets}" "${DXT_BIN_COUNT}" VERBATIM)
+    add_custom_target(copy_builders_if_different
+        COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_BINARY_DIR}/builder_definitions.cmake"
+        "${CMAKE_CURRENT_SOURCE_DIR}/builder_definitions.cmake")
+    add_custom_target(refresh_test_timings)
+    add_dependencies(copy_builders_if_different rerun_test_distribution)
+    add_dependencies(refresh_test_timings copy_builders_if_different)
 endmacro(END_TESTCASES)
 
 macro(add_header_listing)
diff --git a/python/scripts/distribute_testing.py b/python/scripts/distribute_testing.py
index 076db3837a625e9d43f8591d305342ac0fcf8699..d38ae536f29fef594d5cfe60fefb6d828311b1ef 100644
--- a/python/scripts/distribute_testing.py
+++ b/python/scripts/distribute_testing.py
@@ -125,7 +125,7 @@ def do_timings(builddir, pickledir, binaries, testnames, processes, headerlibs):
 all_testnames = sys.argv[4].split('/')[1:]
 builddir = sys.argv[1]
 testdir = sys.argv[2]
-cmake_outfile = os.path.join(testdir, 'builder_definitions.cmake')
+cmake_outfile = os.path.join(builddir, 'builder_definitions.cmake')
 binaries = sys.argv[3].split(';')
 headerlibs = sys.argv[5].split(';')
 try: