diff --git a/tests/Makefile.am b/tests/Makefile.am
index f6f88b51cbdc5a7c5ab1d331b295418af66ade53..998a0e0bb05704ff8f8502a0452755cca37b3378 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -30,7 +30,7 @@ TESTS = testGreetings testMaths testReading.sh testSingle testKernel testSymmetr
 
 # List of test programs to compile
 check_PROGRAMS = testGreetings testReading testSingle testTimeIntegration \
-		 testSPHStep testActivePair test27cells test125cells testParser \
+		 testSPHStep testActivePair test27cells test27cells_subset test125cells testParser \
                  testKernel testFFT testInteractions testMaths \
                  testSymmetry testThreadpool \
                  testAdiabaticIndex testRiemannExact testRiemannTRRS \
@@ -60,6 +60,10 @@ testActivePair_SOURCES = testActivePair.c
 
 test27cells_SOURCES = test27cells.c
 
+test27cells_subset_SOURCES = test27cells.c
+
+test27cells_subset_CFLAGS = $(AM_CFLAGS) -DDOSELF_SUBSET
+
 testPeriodicBC_SOURCES = testPeriodicBC.c
 
 test125cells_SOURCES = test125cells.c
diff --git a/tests/test27cells.sh.in b/tests/test27cells.sh.in
index 059a7a208aa8e570ad5035fac16ffd201bf3dddd..cc8083221420e97a38fbaf2a3ecc0234997cfc61 100755
--- a/tests/test27cells.sh.in
+++ b/tests/test27cells.sh.in
@@ -1,87 +1,94 @@
 #!/bin/bash
 
-# Test for particles with the same smoothing length
-for v in {0..3}
+# List each test that should be run
+declare -a TEST_LIST=(test27cells test27cells_subset)
+
+# Run same test for each executable
+for TEST in "${TEST_LIST[@]}"
 do
+  # Test for particles with the same smoothing length
+  for v in {0..3}
+  do
     echo ""
-	
+
     rm -f brute_force_27_standard.dat swift_dopair_27_standard.dat
 
-    echo "Running ./test27cells -n 6 -r 1 -d 0 -f standard -v $v"
-    ./test27cells -n 6 -r 1 -d 0 -f standard -v $v
+    echo "Running ./$TEST -n 6 -r 1 -d 0 -f standard -v $v"
+    ./$TEST -n 6 -r 1 -d 0 -f standard -v $v
 
     if [ -e brute_force_27_standard.dat ]
     then
-	if python @srcdir@/difffloat.py brute_force_27_standard.dat swift_dopair_27_standard.dat @srcdir@/tolerance_27_normal.dat 6
-	then
-	    echo "Accuracy test passed"
-	else
-	    echo "Accuracy test failed"
-	    exit 1
-	fi
+      if python @srcdir@/difffloat.py brute_force_27_standard.dat swift_dopair_27_standard.dat @srcdir@/tolerance_27_normal.dat 6
+      then
+        echo "Accuracy test passed"
+      else
+        echo "Accuracy test failed"
+        exit 1
+      fi
     else
-	echo "Error Missing test output file"
-	exit 1
+      echo "Error Missing test output file"
+      exit 1
     fi
 
     echo "------------"
-    
-done
 
-# Test for particles with random smoothing lengths
-for v in {0..3}
-do
+  done
+
+  # Test for particles with random smoothing lengths
+  for v in {0..3}
+  do
     echo ""
-	
+
     rm -f brute_force_27_standard.dat swift_dopair_27_standard.dat
 
-    echo "Running ./test27cells -n 6 -r 1 -d 0 -f standard -v $v -p 1.1"
-    ./test27cells -n 6 -r 1 -d 0 -f standard -v $v -p 1.1
+    echo "Running ./$TEST -n 6 -r 1 -d 0 -f standard -v $v -p 1.1"
+    ./$TEST -n 6 -r 1 -d 0 -f standard -v $v -p 1.1
 
     if [ -e brute_force_27_standard.dat ]
     then
-	if python @srcdir@/difffloat.py brute_force_27_standard.dat swift_dopair_27_standard.dat @srcdir@/tolerance_27_perturbed_h.dat 6
-	then
-	    echo "Accuracy test passed"
-	else
-	    echo "Accuracy test failed"
-	    exit 1
-	fi
+      if python @srcdir@/difffloat.py brute_force_27_standard.dat swift_dopair_27_standard.dat @srcdir@/tolerance_27_perturbed_h.dat 6
+      then
+        echo "Accuracy test passed"
+      else
+        echo "Accuracy test failed"
+        exit 1
+      fi
     else
-	echo "Error Missing test output file"
-	exit 1
+      echo "Error Missing test output file"
+      exit 1
     fi
 
     echo "------------"
-    
-done
 
-# Test for particles with random smoothing lengths
-for v in {0..3}
-do
+  done
+
+  # Test for particles with random smoothing lengths
+  for v in {0..3}
+  do
     echo ""
-	
+
     rm -f brute_force_27_standard.dat swift_dopair_27_standard.dat
 
-    echo "Running ./test27cells -n 6 -r 1 -d 0 -f standard -v $v -p 1.3"
-    ./test27cells -n 6 -r 1 -d 0 -f standard -v $v -p 1.3
+    echo "Running ./$TEST -n 6 -r 1 -d 0 -f standard -v $v -p 1.3"
+    ./$TEST -n 6 -r 1 -d 0 -f standard -v $v -p 1.3
 
     if [ -e brute_force_27_standard.dat ]
     then
-	if python @srcdir@/difffloat.py brute_force_27_standard.dat swift_dopair_27_standard.dat @srcdir@/tolerance_27_perturbed_h2.dat 6
-	then
-	    echo "Accuracy test passed"
-	else
-	    echo "Accuracy test failed"
-	    exit 1
-	fi
+      if python @srcdir@/difffloat.py brute_force_27_standard.dat swift_dopair_27_standard.dat @srcdir@/tolerance_27_perturbed_h2.dat 6
+      then
+        echo "Accuracy test passed"
+      else
+        echo "Accuracy test failed"
+        exit 1
+      fi
     else
-	echo "Error Missing test output file"
-	exit 1
+      echo "Error Missing test output file"
+      exit 1
     fi
 
     echo "------------"
-    
+
+  done
 done
 
 exit $?