diff --git a/.gitlab-ci/default.yml b/.gitlab-ci/default.yml
index 54338ba6c7a1a11705811bc66096bf471c9b6c1a..f68b2283edd53cded8fc46e1a9e53a033d527637 100644
--- a/.gitlab-ci/default.yml
+++ b/.gitlab-ci/default.yml
@@ -19,10 +19,8 @@ select tests:
   script:
     - |
       if [[ "$TRIGGER_SOURCE" == "merge_request_event" ]]; then
-          dunecontrol --opts=$DUNE_OPTS_FILE --current all
-          pushd build-cmake
-            python3 ../bin/testing/findtests.py -f ../affectedtests.json -t origin/$MR_TARGET_BRANCH_NAME
-          popd
+          python3 bin/testing/getchangedfiles.py -o changedfiles.txt -t origin/$MR_TARGET_BRANCH_NAME
+          python3 bin/testing/findtests.py -f affectedtests.json --file-list changedfiles.txt --build-dir build-cmake
       else
           echo "Skipping test selection, build/test stages will consider all tests!"
           echo "{}" >> ../affectedtests.json
diff --git a/bin/testing/findtests.py b/bin/testing/findtests.py
index f9a810522d6e49a9cd441d2c1435abd891ddaaaa..52923c1541a70a735f58d859d69f1243cc92e184 100755
--- a/bin/testing/findtests.py
+++ b/bin/testing/findtests.py
@@ -68,19 +68,10 @@ def isAffectedTest(testConfigFile, changedFiles):
     headers = subprocess.run(command + ["-MM", "-H"],
                              stderr=PIPE, stdout=PIPE, cwd=dir,
                              encoding='ascii').stderr.splitlines()
+    headers = [h.lstrip('. ') for h in headers]
+    headers.append(mainFile)
 
-    # filter only headers from this project and turn them into relative paths
-    projectDir = os.path.abspath(os.getcwd().rstrip("build-cmake"))
-
-    def isProjectHeader(headerPath):
-        return projectDir in headerPath
-
-    testFiles = [os.path.relpath(mainFile.lstrip(". "), projectDir)]
-    testFiles.extend([os.path.relpath(header.lstrip(". "), projectDir)
-                      for header in filter(isProjectHeader, headers)])
-    testFiles = set(testFiles)
-
-    if hasCommonMember(changedFiles, testFiles):
+    if hasCommonMember(changedFiles, headers):
         return True, testConfig["name"], testConfig["target"]
 
     return False, testConfig["name"], testConfig["target"]
@@ -90,26 +81,25 @@ if __name__ == '__main__':
 
     # parse input arguments
     parser = ArgumentParser(description='Find tests affected by changes')
-    parser.add_argument('-s', '--source',
-                        required=False, default='HEAD',
-                        help='The source tree (default: `HEAD`)')
-    parser.add_argument('-t', '--target',
-                        required=False, default='master',
-                        help='The tree to compare against (default: `master`)')
+    parser.add_argument('-l', '--file-list', required=True,
+                        help='A file containing a list of files that changed')
     parser.add_argument('-np', '--num-processes',
                         required=False, type=int, default=4,
                         help='Number of processes (default: 4)')
     parser.add_argument('-f', '--outfile',
                         required=False, default='affectedtests.json',
                         help='The file in which to write the affected tests')
+    parser.add_argument('-b', '--build-dir',
+                        required=False, default='.',
+                        help='The path to the top-level build directory of the project to be checked')
     args = vars(parser.parse_args())
 
-    # find the changes files
-    changedFiles = subprocess.check_output(
-        ["git", "diff-tree", "-r", "--name-only", args['source'],  args['target']],
-        encoding='ascii'
-    ).splitlines()
-    changedFiles = set(changedFiles)
+    targetFile = os.path.abspath(args['outfile'])
+    with open(args['file_list']) as files:
+        changedFiles = set([line.strip('\n') for line in files.readlines()])
+
+    owd = os.getcwd()
+    os.chdir(args['build_dir'])
 
     # clean build directory
     subprocess.run(["make", "clean"])
@@ -133,5 +123,7 @@ if __name__ == '__main__':
 
     print("Detected {} affected tests".format(len(affectedTests)))
 
-    with open(args['outfile'], 'w') as jsonFile:
+    with open(targetFile, 'w') as jsonFile:
         json.dump(affectedTests, jsonFile)
+
+    os.chdir(owd)