Index: doc/theses/mike_brooks_MMath/benchmarks/list/Makefile
===================================================================
--- doc/theses/mike_brooks_MMath/benchmarks/list/Makefile	(revision 34b6a7b6878154693f83696df612a4adeee0fb87)
+++ doc/theses/mike_brooks_MMath/benchmarks/list/Makefile	(revision 1dfc3d0fceddb07634544841e73360351262ab77)
@@ -12,5 +12,7 @@
 UXX =  ~/u++/u++-7.0.0/bin/u++
 
-MODE = performance
+MODE=performance
+EXTRA_COMP_FLAGS=
+RUN_NUM_REPS=3
 RUNARGS=
 
@@ -102,13 +104,13 @@
 
 perfexp--% : driver--%.o observation.o
-	$(COMPILER) $^ -o $@
+	$(COMPILER) $(EXTRA_COMP_FLAGS) $^ -o $@
 
 driver--%.o : driver.c
-	$(COMPILER) -c $< $(OP_DEFINES) -include op-$(OP).h -include fx-$(FX).h -o $@ -MMD 
+	$(COMPILER) $(EXTRA_COMP_FLAGS) -c $< $(OP_DEFINES) -include op-$(OP).h -include fx-$(FX).h -o $@ -MMD 
+
+sayhi:
+	echo $(PERFPROGS)
 
 
-
-
-RUN_NUM_REPS=3
 RUN_REP_IDS=$(shell echo {1..$(RUN_NUM_REPS)})              # 1 2 3
 RUN_REP_EXTS=$(call cross3,,run,$(RUN_REP_IDS),.1csv)       # run1.1csv run2.1cav run3.1csv
@@ -146,4 +148,3 @@
 .PRECIOUS: result--%.1csv driver--%.o perfexp--% %.o
 
-
 -include *.d
Index: doc/theses/mike_brooks_MMath/benchmarks/list/driver.c
===================================================================
--- doc/theses/mike_brooks_MMath/benchmarks/list/driver.c	(revision 34b6a7b6878154693f83696df612a4adeee0fb87)
+++ doc/theses/mike_brooks_MMath/benchmarks/list/driver.c	(revision 1dfc3d0fceddb07634544841e73360351262ab77)
@@ -17,8 +17,8 @@
 
 #if defined(NDEBUG) || (defined(__cforall) && !defined(__CFA_DEBUG__))
-    enum { DefaultNumNodes = 1000, DefaultExperimentDurSec = 1, DefaultCheckClockFreq = 1000, DefaultExperimentDurOpCount = -1 };
+    enum { DefaultNumNodes = 1000, DefaultExperimentDurSec = 1, DefaultCheckDoneFreq = 1000, DefaultExperimentDurOpCount = -1 };
     #define TRACE(tp)
 #else 
-    enum { DefaultNumNodes = 10, DefaultExperimentDurSec = 1, DefaultCheckClockFreq = 2, DefaultExperimentDurOpCount = 20 };
+    enum { DefaultNumNodes = 10, DefaultExperimentDurSec = 1, DefaultCheckDoneFreq = 2, DefaultExperimentDurOpCount = 20 };
     static const char * tp_filter
     // = "";
@@ -72,26 +72,37 @@
 )
 
+unsigned int uDefaultPreemption() {
+        return 0;
+}
+
 int main(int argc, const char *argv[]) {
 
 
-    const char * usage_args = "[ExperimentDurSec [CheckClockFreq [NumNodes [ExperimentDurOpCount]]]]";
+    const char * usage_args = "[ExperimentDurSec [CheckDoneFreq [NumNodes [ExperimentDurOpCount]]]]";
     const int static_arg_posns = 4;
 
     unsigned int ExperimentDurSec     = DefaultExperimentDurSec;
-    unsigned int CheckClockFreq       = DefaultCheckClockFreq;
+    unsigned int CheckDoneFreq       = DefaultCheckDoneFreq;
     unsigned int NumNodes             = DefaultNumNodes;
     size_t       ExperimentDurOpCount = DefaultExperimentDurOpCount;
 
-    switch ((argc < static_arg_posns) ? argc : static_arg_posns) {
-      case 5: ExperimentDurOpCount = atoi(argv[4]);
-      case 4: NumNodes = atoi(argv[3]);
-      case 3: CheckClockFreq = atoi(argv[2]);
-      case 2: ExperimentDurSec = atoi(argv[1]);
+    switch (((argc - 1) < static_arg_posns) ? (argc - 1) : static_arg_posns) {
+      case 4: ExperimentDurOpCount = atol(argv[4]);
+      case 3: NumNodes = atoi(argv[3]);
+      case 2: CheckDoneFreq = atoi(argv[2]);
+      case 1: ExperimentDurSec = atoi(argv[1]);
     }
 
-    if (ExperimentDurSec == 0 || CheckClockFreq == 0 || NumNodes == 0 || ExperimentDurOpCount == 0 ) {
+    if (ExperimentDurSec == 0 || CheckDoneFreq == 0 || NumNodes == 0 || ExperimentDurOpCount == 0 ) {
         printf("usage: %s %s\n", argv[0], usage_args);
         return -1;
     }
+
+  #ifdef DISABLE_CLOCK_RECHECK
+    if (ExperimentDurSec != -1) {
+        printf("Error: experiment compiled as fixed-work only.  ExperimentDurSec (currently %d) must be set to -1.\nUsage: %s %s\n", ExperimentDurSec, argv[0], usage_args);
+        return -1;
+    }
+  #endif
 
     ui = (B_UserItem*) malloc( NumNodes * sizeof(B_UserItem) );
@@ -100,4 +111,6 @@
     listedItems = (BFX_LISTED_ELEM_T(B_UserItem)*)malloc( NumNodes * sizeof(BFX_LISTED_ELEM_T(B_UserItem)) );
     memset(listedItems, 0, NumNodes * sizeof(BFX_LISTED_ELEM_T(B_UserItem)));
+
+    printf("ui @ %p\nlistedItems @ %p\n\n", ui, listedItems);
 
     for (int i = 0; i < NumNodes; i++) {
@@ -130,5 +143,5 @@
 
     while (elapsed_sec <= (double) ExperimentDurSec && bobs_ops_completed < ExperimentDurOpCount) {
-        for ( int t = 0; t < CheckClockFreq; t += 1 ) {
+        for ( int t = 0; t < CheckDoneFreq; t += 1 ) {
             TRACE('a')
             listedItems[0] =
@@ -166,7 +179,15 @@
             TRACE('g')
         }
+      #ifndef DISABLE_CLOCK_RECHECK
+        clock_t end = clock();
+        elapsed_sec = ((double)(end - start)) / ((double)CLOCKS_PER_SEC);
+      #endif
+    }
+    #ifdef DISABLE_CLOCK_RECHECK
+    {
         clock_t end = clock();
         elapsed_sec = ((double)(end - start)) / ((double)CLOCKS_PER_SEC);
     }
+    #endif
 
     double mean_op_dur_ns = elapsed_sec / ((double)bobs_ops_completed) * 1000 * 1000 * 1000;
