diff --git a/RTCP/Cobalt/GPUProc/test/CMakeLists.txt b/RTCP/Cobalt/GPUProc/test/CMakeLists.txt
index 426166e329fdc33753fcbf0ff8ec586b834ab4b7..e6e1966606332534c17d46afb710f91f51fabe90 100644
--- a/RTCP/Cobalt/GPUProc/test/CMakeLists.txt
+++ b/RTCP/Cobalt/GPUProc/test/CMakeLists.txt
@@ -8,6 +8,12 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 
 add_definitions("-DLOFARROOT=${CMAKE_CURRENT_SOURCE_DIR}/..")
 
+configure_file(
+  "${CMAKE_CURRENT_SOURCE_DIR}/runrtcp.sh.in"
+  "${CMAKE_CURRENT_BINARY_DIR}/runrtcp.sh"  # internal, no need to install
+)
+
+
 lofar_add_test(tBestEffortQueue tBestEffortQueue.cc)
 lofar_add_test(tSSH tSSH.cc)
 
diff --git a/RTCP/Cobalt/GPUProc/test/cmpfloat.py b/RTCP/Cobalt/GPUProc/test/cmpfloat.py
index 4ba062326d4c660c91876d4f32eb48a19407bb52..70abb5da4e9172134d74986d8f080bb924d026b4 100755
--- a/RTCP/Cobalt/GPUProc/test/cmpfloat.py
+++ b/RTCP/Cobalt/GPUProc/test/cmpfloat.py
@@ -21,6 +21,7 @@ def cmpfloat(filename_a, filename_b, precision = PRECISION):
   fB = file(B)
 
   sizeof_float = calcsize("f")
+  offset = 0
 
   while 1:
     bA = fA.read(sizeof_float)
@@ -39,7 +40,9 @@ def cmpfloat(filename_a, filename_b, precision = PRECISION):
     xA, = unpack("f", bA)
     xB, = unpack("f", bB)
 
-    assert fabs(xA - xB) < PRECISION, "File %s and %s differ in content." % (A, B)
+    assert fabs(xA - xB) < PRECISION, "File %s and %s differ in content at byte offset %s: value is %.5f versus %.5f." % (A, B, offset, xA, xB)
+
+    offset += sizeof_float
 
 if __name__ == "__main__":
   import sys
diff --git a/RTCP/Cobalt/GPUProc/test/runrtcp.sh.in b/RTCP/Cobalt/GPUProc/test/runrtcp.sh.in
new file mode 100644
index 0000000000000000000000000000000000000000..d213749f4d2d0263be1b3f28bccb8218f61aa6b7
--- /dev/null
+++ b/RTCP/Cobalt/GPUProc/test/runrtcp.sh.in
@@ -0,0 +1,29 @@
+#!/bin/bash -x
+
+if [ "$#" == "0" ]
+then
+  echo Usage: '[NRPROCS=x]' $0 '[params]'
+  exit
+fi
+
+EXECUTABLE="@CMAKE_CURRENT_BINARY_DIR@/../src/rtcp"
+
+HAVE_MPI="@HAVE_MPI@"
+
+echo EXECUTABLE: $EXECUTABLE
+echo HAVE_MPI: $HAVE_MPI
+
+if [ "$HAVE_MPI" == "TRUE" ] # TODO: what to match here? I've seen TRUE and OFF
+then
+  # OpenMPI
+  if [ "$NRPROCS" == "" ]
+  then
+    # A sane default for 1-3 stations
+    NRPROCS=4
+  fi
+
+  mpirun -H localhost -np $NRPROCS "$EXECUTABLE" "$@"
+else
+  # No MPI
+  "$EXECUTABLE" "$@"
+fi
diff --git a/RTCP/Cobalt/GPUProc/test/tCorrelate_1sec_1st_5sb_noflagging.run b/RTCP/Cobalt/GPUProc/test/tCorrelate_1sec_1st_5sb_noflagging.run
index 93942e47d2944bb66284ea8561eb752f68bfca84..aa411aa40a9beed87706dc7768786ad156f53d18 100755
--- a/RTCP/Cobalt/GPUProc/test/tCorrelate_1sec_1st_5sb_noflagging.run
+++ b/RTCP/Cobalt/GPUProc/test/tCorrelate_1sec_1st_5sb_noflagging.run
@@ -4,5 +4,5 @@ TESTNAME=`basename "${0%%.run}"`
 PARSET=$srcdir/$TESTNAME.parset
 OUTPUT=$srcdir/$TESTNAME.output
 
-$srcdir/testParset.sh "$PARSET" -r "$OUTPUT" || exit $?
+$srcdir/testParset.sh -r "$OUTPUT" "$PARSET" || exit $?
 
diff --git a/RTCP/Cobalt/GPUProc/test/tCorrelate_3sec_1st_5sb.run b/RTCP/Cobalt/GPUProc/test/tCorrelate_3sec_1st_5sb.run
index 93942e47d2944bb66284ea8561eb752f68bfca84..aa411aa40a9beed87706dc7768786ad156f53d18 100755
--- a/RTCP/Cobalt/GPUProc/test/tCorrelate_3sec_1st_5sb.run
+++ b/RTCP/Cobalt/GPUProc/test/tCorrelate_3sec_1st_5sb.run
@@ -4,5 +4,5 @@ TESTNAME=`basename "${0%%.run}"`
 PARSET=$srcdir/$TESTNAME.parset
 OUTPUT=$srcdir/$TESTNAME.output
 
-$srcdir/testParset.sh "$PARSET" -r "$OUTPUT" || exit $?
+$srcdir/testParset.sh -r "$OUTPUT" "$PARSET" || exit $?
 
diff --git a/RTCP/Cobalt/GPUProc/test/tCorrelate_3sec_2st_5sb.run b/RTCP/Cobalt/GPUProc/test/tCorrelate_3sec_2st_5sb.run
index 93942e47d2944bb66284ea8561eb752f68bfca84..aa411aa40a9beed87706dc7768786ad156f53d18 100755
--- a/RTCP/Cobalt/GPUProc/test/tCorrelate_3sec_2st_5sb.run
+++ b/RTCP/Cobalt/GPUProc/test/tCorrelate_3sec_2st_5sb.run
@@ -4,5 +4,5 @@ TESTNAME=`basename "${0%%.run}"`
 PARSET=$srcdir/$TESTNAME.parset
 OUTPUT=$srcdir/$TESTNAME.output
 
-$srcdir/testParset.sh "$PARSET" -r "$OUTPUT" || exit $?
+$srcdir/testParset.sh -r "$OUTPUT" "$PARSET" || exit $?
 
diff --git a/RTCP/Cobalt/GPUProc/test/testParset.sh b/RTCP/Cobalt/GPUProc/test/testParset.sh
index e047965591d3c7d89b944f14bbfcd74fa2057766..902ad753e77944663c3e9a9f24c8932dd2f7d9b3 100755
--- a/RTCP/Cobalt/GPUProc/test/testParset.sh
+++ b/RTCP/Cobalt/GPUProc/test/testParset.sh
@@ -8,6 +8,8 @@
 REFDIR=
 GPUEFFICIENCY=0
 
+echo "Invoked as" "$0" "$@"
+
 # Parse options
 while getopts "r:g:" opt
 do
@@ -32,13 +34,13 @@ do
   esac
 done
 
+shift $((OPTIND-1))
+
 PARSET=$1
 
 # Include some useful shell functions
 . $srcdir/testFuncs.sh
 
-BINDIR=`pwd`/../src
-
 # Some host info
 echo "Running as `whoami`"
 echo "Running on `hostname`"
@@ -57,7 +59,7 @@ fi
 echo "Testing $PARSET"
 
 RUNDIR=`pwd`
-OUTDIR=`basename "${PARSET%.parset}.in_output"`
+OUTDIR=`basename "${PARSET%.parset}.output"`
 
 function parse_logs
 {
@@ -98,9 +100,9 @@ function parse_logs
   export LOFARROOT=$srcdir/.. &&
 
   # run correlator -- without profiling
-  mpirun -H localhost -np 4 $BINDIR/rtcp $PARSET > performance_normal.txt 2>&1 &&
+  $RUNDIR/runrtcp.sh $PARSET > performance_normal.txt 2>&1 &&
   # run correlator -- with profiling
-  mpirun -H localhost -np 4 $BINDIR/rtcp -p $PARSET > performance_profiled.txt 2>&1 &&
+  $RUNDIR/runrtcp.sh -p $PARSET > performance_profiled.txt 2>&1 &&
 
   # compare output
   if [ "x" != "x$REFDIR" ]
@@ -112,16 +114,14 @@ function parse_logs
 
     for f in *.MS
     do
-      ${srcdir}/cmpfloat.py $f $REFDIR/$f || exit 1
+      ${srcdir}/cmpfloat.py `pwd`/$f $REFDIR/$f || exit 1
     done
   fi &&
 
   # check logs
-  parse_logs performance_normal.txt performance_profiled.txt
-) || exit 1
-
-cd $RUNDIR
+  parse_logs performance_normal.txt performance_profiled.txt &&
 
-# toss output
-rm -rf $OUTDIR
+  # toss output if everything is ok
+  (cd $RUNDIR && rm -rf $OUTDIR)
+) || exit 1