Index: .gitignore
===================================================================
--- .gitignore	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ .gitignore	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -38,5 +38,5 @@
 libcfa/prelude/gcc-builtins.cf
 libcfa/prelude/gcc-builtins.c
-libcfa/prelude/prelude.cf
+libcfa/prelude/prelude.cfa
 libcfa/x64-debug/
 libcfa/x64-nodebug/
Index: Jenkinsfile
===================================================================
--- Jenkinsfile	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ Jenkinsfile	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -128,6 +128,6 @@
 			//Run the tests from the tests directory
 			if ( Settings.RunAllTests ) {
-				sh 'make --no-print-directory -C tests all-tests debug=yes'
-				sh 'make --no-print-directory -C tests all-tests debug=no '
+				sh 'make --no-print-directory -C tests timeouts="--timeout=600" all-tests debug=yes'
+				sh 'make --no-print-directory -C tests timeouts="--timeout=600" all-tests debug=no '
 			}
 			else {
Index: benchmark/Makefile.am
===================================================================
--- benchmark/Makefile.am	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ benchmark/Makefile.am	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -33,6 +33,4 @@
 TIME_FORMAT = "%E"
 PRINT_FORMAT = %20s: #Comments needed for spacing
-
-LIBFIBRE_DIR ?= /home/tdelisle/software/KOS/src/
 
 .NOTPARALLEL:
@@ -111,5 +109,5 @@
 
 ## =========================================================================================================
-ctxswitch$(EXEEXT): \
+CTXSWITCH_DEPEND  =                 \
 	loop.run				\
 	function.run			\
@@ -121,9 +119,22 @@
 	ctxswitch-upp_coroutine.run	\
 	ctxswitch-upp_thread.run	\
-	-ctxswitch-kos_fibre.run	\
-	-ctxswitch-kos_fibre2.run	\
 	ctxswitch-goroutine.run		\
 	ctxswitch-java_thread.run
 
+if WITH_LIBFIBRE
+CTXSWITCH_DEPEND  +=           \
+	ctxswitch-kos_fibre.run	 \
+	ctxswitch-kos_fibre2.run
+
+
+ctxswitch-kos_fibre$(EXEEXT):
+	@$(CXXCOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/kos_fibre.cpp  -I$(LIBFIBRE_DIR) -lfibre
+
+ctxswitch-kos_fibre2$(EXEEXT):
+	@$(CXXCOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/kos_fibre2.cpp -I$(LIBFIBRE_DIR) -lfibre
+endif
+
+ctxswitch$(EXEEXT): $(CTXSWITCH_DEPEND)
+
 ctxswitch-pthread$(EXEEXT):
 	@$(COMPILE)    -DBENCH_N=50000000 $(srcdir)/ctxswitch/pthreads.c
@@ -143,10 +154,4 @@
 ctxswitch-upp_thread$(EXEEXT):
 	@$(UPPCOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/upp_thrd.cc
-
-ctxswitch-kos_fibre$(EXEEXT):
-	@$(CXXCOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/kos_fibre.cpp  -I$(LIBFIBRE_DIR) -lfibre
-
-ctxswitch-kos_fibre2$(EXEEXT):
-	@$(CXXCOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/kos_fibre2.cpp -I$(LIBFIBRE_DIR) -lfibre
 
 ctxswitch-goroutine$(EXEEXT):
Index: benchmark/Makefile.in
===================================================================
--- benchmark/Makefile.in	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ benchmark/Makefile.in	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -93,4 +93,8 @@
 host_triplet = @host@
 noinst_PROGRAMS =
+@WITH_LIBFIBRE_TRUE@am__append_1 = \
+@WITH_LIBFIBRE_TRUE@	ctxswitch-kos_fibre.run	 \
+@WITH_LIBFIBRE_TRUE@	ctxswitch-kos_fibre2.run
+
 subdir = benchmark
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -273,4 +277,10 @@
 TIME_FORMAT = "%E"
 PRINT_FORMAT = %20s: #Comments needed for spacing
+CTXSWITCH_DEPEND = loop.run function.run fetch_add.run \
+	ctxswitch-pthread.run ctxswitch-cfa_coroutine.run \
+	ctxswitch-cfa_thread.run ctxswitch-cfa_thread2.run \
+	ctxswitch-upp_coroutine.run ctxswitch-upp_thread.run \
+	ctxswitch-goroutine.run ctxswitch-java_thread.run \
+	$(am__append_1)
 testdir = $(top_srcdir)/tests
 all: all-am
@@ -465,10 +475,8 @@
 
 
-.cfa.o: $(CFACC) $(CFACPP)
+.cfa.o:
 	$(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
 	$(CFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
 	$(am__mv) $$depbase.Tpo $$depbase.Po
-
-LIBFIBRE_DIR ?= /home/tdelisle/software/KOS/src/
 
 .NOTPARALLEL:
@@ -541,18 +549,11 @@
 	$(COMPILE) -DBENCH_N=500000000  fetch_add.c
 
-ctxswitch$(EXEEXT): \
-	loop.run				\
-	function.run			\
-	fetch_add.run			\
-	ctxswitch-pthread.run		\
-	ctxswitch-cfa_coroutine.run	\
-	ctxswitch-cfa_thread.run	\
-	ctxswitch-cfa_thread2.run	\
-	ctxswitch-upp_coroutine.run	\
-	ctxswitch-upp_thread.run	\
-	-ctxswitch-kos_fibre.run	\
-	-ctxswitch-kos_fibre2.run	\
-	ctxswitch-goroutine.run		\
-	ctxswitch-java_thread.run
+@WITH_LIBFIBRE_TRUE@ctxswitch-kos_fibre$(EXEEXT):
+@WITH_LIBFIBRE_TRUE@	@$(CXXCOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/kos_fibre.cpp  -I$(LIBFIBRE_DIR) -lfibre
+
+@WITH_LIBFIBRE_TRUE@ctxswitch-kos_fibre2$(EXEEXT):
+@WITH_LIBFIBRE_TRUE@	@$(CXXCOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/kos_fibre2.cpp -I$(LIBFIBRE_DIR) -lfibre
+
+ctxswitch$(EXEEXT): $(CTXSWITCH_DEPEND)
 
 ctxswitch-pthread$(EXEEXT):
@@ -573,10 +574,4 @@
 ctxswitch-upp_thread$(EXEEXT):
 	@$(UPPCOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/upp_thrd.cc
-
-ctxswitch-kos_fibre$(EXEEXT):
-	@$(CXXCOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/kos_fibre.cpp  -I$(LIBFIBRE_DIR) -lfibre
-
-ctxswitch-kos_fibre2$(EXEEXT):
-	@$(CXXCOMPILE) -DBENCH_N=50000000 $(srcdir)/ctxswitch/kos_fibre2.cpp -I$(LIBFIBRE_DIR) -lfibre
 
 ctxswitch-goroutine$(EXEEXT):
Index: configure
===================================================================
--- configure	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ configure	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -630,4 +630,6 @@
 GREP
 CPP
+WITH_LIBFIBRE_FALSE
+WITH_LIBFIBRE_TRUE
 RANLIB
 LEXLIB
@@ -5439,4 +5441,54 @@
 
 # Checks for libraries.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fibre::yield in -lfibre" >&5
+$as_echo_n "checking for Fibre::yield in -lfibre... " >&6; }
+if ${ac_cv_lib_fibre_Fibre__yield+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfibre  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char Fibre::yield ();
+int
+main ()
+{
+return Fibre::yield ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_fibre_Fibre__yield=yes
+else
+  ac_cv_lib_fibre_Fibre__yield=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fibre_Fibre__yield" >&5
+$as_echo "$ac_cv_lib_fibre_Fibre__yield" >&6; }
+if test "x$ac_cv_lib_fibre_Fibre__yield" = xyes; then :
+  HAVE_LIBFIBRE=1
+else
+  HAVE_LIBFIBRE=0
+fi
+
+ if test "$HAVE_LIBFIBRE" -eq 1; then
+  WITH_LIBFIBRE_TRUE=
+  WITH_LIBFIBRE_FALSE='#'
+else
+  WITH_LIBFIBRE_TRUE='#'
+  WITH_LIBFIBRE_FALSE=
+fi
+
 
 # Checks for header files.
@@ -6478,4 +6530,8 @@
 if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
   as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WITH_LIBFIBRE_TRUE}" && test -z "${WITH_LIBFIBRE_FALSE}"; then
+  as_fn_error $? "conditional \"WITH_LIBFIBRE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
Index: configure.ac
===================================================================
--- configure.ac	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ configure.ac	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -204,4 +204,6 @@
 
 # Checks for libraries.
+AC_CHECK_LIB([fibre], [Fibre::yield], [HAVE_LIBFIBRE=1], [HAVE_LIBFIBRE=0])
+AM_CONDITIONAL([WITH_LIBFIBRE], [test "$HAVE_LIBFIBRE" -eq 1])
 
 # Checks for header files.
Index: doc/bibliography/pl.bib
===================================================================
--- doc/bibliography/pl.bib	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ doc/bibliography/pl.bib	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -701,4 +701,18 @@
 % B
 
+@article{Michael13,
+    contributer	= {pabuhr@plg},
+    author	= {Maged M. Michael},
+    title	= {The Balancing Act of Choosing Nonblocking Features},
+    journal	= cacm,
+    volume	= 56,
+    number	= 9,
+    month	= sep,
+    year	= 2013,
+    pages	= {46--53},
+    publisher	= {ACM},
+    address	= {New York, NY, USA},
+}
+
 @incollection{beta:old,
     keywords	= {beta, patterns, virtual types},
@@ -908,7 +922,8 @@
 
 @misc{Cforall,
+    contributer	= {pabuhr@plg},
     key		= {Cforall},
-    title	= {\textsf{C}{$\mathbf{\forall}$} Features},
-    howpublished= {\url{https://plg.uwaterloo.ca/~cforall/features}},
+    author	= {{\textsf{C}{$\mathbf{\forall}$} Features}},
+    howpublished= {\href{https://plg.uwaterloo.ca/~cforall/features}{https://\-plg.uwaterloo.ca/\-~cforall/\-features}},
     optnote	= {Accessed: 2018-01-01},
 }
@@ -926,4 +941,5 @@
 
 @misc{CFAStackEvaluation,
+    contributer	= {a3moss@plg},
     author	= {Aaron Moss},
     title	= {\textsf{C}$\mathbf{\forall}$ Stack Evaluation Programs},
@@ -934,5 +950,5 @@
 
 @article{Moss18,
-    keywords	= {concurrency, C++},
+    keywords	= {type systems, tuples, Cforall},
     contributer	= {pabuhr@plg},
     author	= {Aaron Moss and Robert Schluntz and Peter A. Buhr},
@@ -941,5 +957,5 @@
     month	= aug,
     journal	= spe,
-    note	= {http://dx.doi.org/10.1002/spe.2624},
+    note	= {\href{http://dx.doi.org/10.1002/spe.2624}{http://\-dx.doi.org/\-10.1002/\-spe.2624}},
 }
 
@@ -1417,4 +1433,14 @@
 }
 
+@misc{NThreadCode13,
+    keywords	= {N-thread software-solution mutual exclusion},
+    contributer	= {pabuhr@plg},
+    key		= {concurrent locking},
+    author	= {Peter A. Buhr and David Dice and Wim H. Hesselink},
+    title	= {concurrent-locking},
+    howpublished= {\href{https://github.com/pabuhr/concurrent-locking}{https://\-github.com/\-pabuhr/\-concurrent-locking}},
+    optnote	= {[Accessed April 2017]},
+}
+
 @incollection{Reppy93,
     keywords	= {ML, concurrency, continuation passing},
@@ -1490,5 +1516,5 @@
     month	= dec,
     year	= 2017,
-    note	= {\href{http://plg.uwaterloo.ca/~usystem/pub/uSystem/u++-7.0.0.sh}{http://\-plg.\-uwaterloo.\-ca/\-$\sim$usystem/\-pub/\-uSystem/\-u++-7.0.0.sh}},
+    note	= {\href{https://plg.uwaterloo.ca/~usystem/pub/uSystem/uC++.pdf}{https://\-plg.uwaterloo.ca/\-~usystem/\-pub/\-uSystem/uC++.pdf}},
 }
 
@@ -1557,4 +1583,13 @@
 }
 
+@mastersthesis{Sun15,
+    author	= {Sun, Xianda},
+    title	= {Concurrent High-performance Persistent Hash Table In {J}ava},
+    school	= {School of Computer Science, University of Waterloo},
+    year	= 2015,
+    optaddress	= {Waterloo, Ontario, Canada, N2L 3G1},
+    note	= {\href{https://uwspace.uwaterloo.ca/handle/10012/10013}{https://\-uwspace.uwaterloo.ca/\-handle/\-10012/\-10013}},
+}
+
 @book{Andrews91:book,
     keywords	= {concurrency},
@@ -1581,10 +1616,23 @@
 
 @mastersthesis{Delisle18,
+    keywords	= {concurrency, Cforall},
+    contributer	= {pabuhr@plg},
     author	= {Thierry Delisle},
     title	= {Concurrency in \textsf{C}$\mathbf{\forall}$},
     school	= {School of Computer Science, University of Waterloo},
     year	= 2018,
-    address	= {Waterloo, Ontario, Canada, N2L 3G1},
+    optaddress	= {Waterloo, Ontario, Canada, N2L 3G1},
     note	= {\href{https://uwspace.uwaterloo.ca/handle/10012/12888}{https://\-uwspace.uwaterloo.ca/\-handle/\-10012/\-12888}},
+}
+
+@article{Delisle18b,
+    keywords	= {concurrency, Cforall},
+    contributer	= {pabuhr@plg},
+    author	= {Thierry Delisle and Peter A. Buhr},
+    title	= {Concurrency in \textsf{C}$\mathbf{\forall}$},
+    year	= 2018,
+    journal	= spe,
+    pages	= {1-32},
+    note	= {submitted},
 }
 
@@ -2865,5 +2913,5 @@
     keywords	= {concurrency, mutual exclusion, performance experiment, software solutions},
     title	= {Fast mutual exclusion by the {T}riangle algorithm},
-    author	= {Wim H. Hesselink and Peter Buhr and David Dice},
+    author	= {Wim H. Hesselink and Peter A. Buhr and David Dice},
     journal	= ccpe,
     volume	= 30,
@@ -2872,5 +2920,5 @@
     month	= feb,
     publisher	= {John Wiley \& Sons},
-    note	= {\url{https://doi.org/10.1002/cpe.4183}}
+    note	= {\href{https://doi.org/10.1002/cpe.4183}{https://\-doi.org/\-10.1002/\-cpe.4183}}
 }
 
@@ -3284,5 +3332,5 @@
     edition	= {{S}imon {M}arlow},
     year	= 2010,
-    note	= {\href{https://haskell.org/definition/haskell2010.pdf}{https://haskell.org/\-definition/\-haskell2010.pdf}},
+    note	= {\href{https://haskell.org/definition/haskell2010.pdf}{https://\-haskell.org/\-definition/\-haskell2010.pdf}},
 }
 
@@ -3358,8 +3406,8 @@
 }
 
-@article{Hesselink17,
+@article{Hesselink17b,
     keywords	= {concurrency, mutual exclusion, performance experiment, software solutions},
     title	= {High-Contention Mutual Exclusion by Elevator Algorithms},
-    author	= {Peter Buhr and David Dice and Wim H. Hesselink},
+    author	= {Peter A. Buhr and David Dice and Wim H. Hesselink},
     journal	= ccpe,
     volume	= 30,
@@ -3368,5 +3416,5 @@
     month	= sep,
     publisher	= {John Wiley \& Sons},
-    note	= {\url{https://doi-org.proxy.lib.uwaterloo.ca/10.1002/cpe.4475}}
+    note	= {\href{https://doi-org.proxy.lib.uwaterloo.ca/10.1002/cpe.4475}{https://\-doi-org.proxy.lib.uwaterloo.ca/\-10.1002/\-cpe.4475}},
 }
 
@@ -3846,4 +3894,15 @@
 
 % K
+
+@inproceedings{Buhr96b,
+    author	= {Peter A. Buhr and Martin Karsten and Jun Shih},
+    title	= {{\small\textsf{KDB}}: A Multi-threaded Debugger for Multi-threaded Applications},
+    booktitle	= {Proceedings of SPDT'96: SIGMETRICS Symposium on Parallel and Distributed Tools},
+    publisher	= {ACM Press},
+    address	= {Philadelphia, Pennsylvania, U.S.A.},
+    month	= may,
+    year	= 1996,
+    pages	= {80-87},
+}
 
 @article{Duggan96,
@@ -4534,4 +4593,14 @@
 % N
 
+@techreport{Drepper03,
+    keywords	= {NPTL, threading, 1:1 model},
+    contributer	= {pabuhr@plg},
+    author	= {Ulrich Drepper and Ingo Molnar},
+    title	= {The Native POSIX Thread Library for Linux},
+    institution	= {Red Hat},
+    year	= 2003,
+    note	= {\href{http://www.cs.utexas.edu/~witchel/372/lectures/POSIX_Linux_Threading.pdf}{http://www.cs.utexas.edu/\-$\sim$witchel/\-372/\-lectures/\-POSIX\_Linux\_Threading.pdf}},
+}
+
 @article{Haddon77,
     keywords	= {monitors, nested monitor calls},
@@ -4657,4 +4726,10 @@
     volume	= 9,
     pages	= {157-164},
+}
+
+@misc{nginx,
+    key		= {nginx},
+    author	= {{NGINX}},
+    howpublished= {\href{https://www.nginx.com}{https://\-www.nginx.com}},
 }
 
@@ -4769,10 +4844,10 @@
 @misc{obj-c-book,
     keywords	= {objective-c},
-    contributor	= {a3moss@uwaterloo.ca},
+    contributor	= {pabuhr@plg},
     key		= {Objective-C},
-    title	= {Objective-C},
+    author	= {Objective-C},
     publisher	= {Apple Inc.},
-    year	= 2015,
-    howpublished= {\href{https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/ObjectiveC.html}{https://developer.apple.com/\-library/\-content/\-documentation/\-General/\-Conceptual/\-DevPedia-\-CocoaCore/\-ObjectiveC.html}},
+    year	= 2014,
+    howpublished= {\href{https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC}{https://\-developer.apple.com/\-library/archive/\-documentation/\-Cocoa/\-Conceptual/\-ProgrammingWithObjectiveC}},
     optnote	= {Accessed: 2018-03}
 }
@@ -4784,5 +4859,5 @@
     title	= {{X}code 7 Release Notes},
     year	= 2015,
-    howpublished= {\href{https://developer.apple.com/library/content/documentation/Xcode/Conceptual/RN-Xcode-Archive/Chapters/xc7_release_notes.html}{https://developer.apple.com/\-library/\-content/\-documentation/\-Xcode/\-Conceptual/\-RN-Xcode-Archive/\-Chapters/\-xc7\_release\_notes.html}},
+    howpublished= {\href{https://developer.apple.com/library/content/documentation/Xcode/Conceptual/RN-Xcode-Archive/Chapters/xc7_release_notes.html}{https://\-developer.apple.com/\-library/\-content/\-documentation/\-Xcode/\-Conceptual/\-RN-Xcode-Archive/\-Chapters/\-xc7\_release\_notes.html}},
     optnote	= {Accessed: 2017-04}
 }
@@ -5284,4 +5359,21 @@
 }
 
+@misc{perf,
+    contributer	= {pabuhr@plg},
+    key		= {perf},
+    author	= {perf},
+    howpublished= {\href{https://perf.wiki.kernel.org/index.php/Tutorial}{https://\-perf.wiki.kernel.org/\-index.php/\-Tutorial}},
+}
+
+@misc{Verch12,
+    contributer	= {pabuhr@plg},
+    author	= {Shaun Verch},
+    title	= {Performance Analysis of 64-Bit Capriccio},
+    month	= may,
+    year	= 2012,
+    howpublished= {\href{http://cs.brown.edu/research/pubs/theses/masters/2012/verch.pdf}{http://cs.brown.edu/\-research/\-pubs/\-theses/\-masters/\-2012/\-verch.pdf}},
+    optnote	= {Accessed: 2013-10-4}
+}
+
 @article{Anderson90,
     keywords	= {spin locks, back off, performance},
@@ -5504,4 +5596,20 @@
     note	= {Proceedings of the OOPSLA'89 Conference, Oct. 1--6, 1989, New Orleans, Lousiana},
     abstract	= {},
+}
+
+@inproceedings{Buhr98,
+    keywords	= {profiling, monitoring, visualization},
+    contributer	= {pabuhr@plg},
+    author	= {Peter A. Buhr and Robert Denda},
+    title	= {{$\mu$Profiler} : Profiling User-Level Threads in a Shared-Memory Programming Environment},
+    booktitle	= {Proceedings of the Second International Symposium on Computing in Object-Oriented Parallel Environments (ISCOPE'98)},
+    series	= {Lecture Notes in Computer Science},
+    publisher	= {Springer-Verlag},
+    volume	= 1505,
+    opteditor	= {Dennis Caromel and Rodney R. Oldehoeft and Marydell Tholburn},
+    address	= {Santa Fe, New Mexico, U.S.A.},
+    month	= dec,
+    year	= 1998,
+    pages	= {159-166},
 }
 
@@ -5965,4 +6073,17 @@
 }
 
+@article{Ronsse03,
+    keywords	= {profiling, replay},
+    contributer	= {pabuhr@plg},
+    author	= {Michiel Ronsse and De Bosschere, Koen and Mark Christiaens and Jacques Chassin de Kergommeaux and Dieter Kranzlm\"{u}ller},
+    title	= {Record/Replay for Nondeterministic Program Executions},
+    journal	= cacm,
+    month	= sep,
+    year	= 2003,
+    volume	= 46,
+    number	= 9,
+    pages	= {62-67},
+}
+
 @article{Robinson48,
     keywords	= {recursion, Ackermann function},
@@ -6003,4 +6124,15 @@
 }
 
+@mastersthesis{Schuster99,
+    author	= {Oliver Schuster},
+    title	= {Replay of Concurrent Shared-Memory Programs},
+    school	= {Universit\"at Mannheim},
+    address	= {Mannheim, Deutschland},
+    year	= 1999,
+    month	= apr,
+    type	= {Diplomarbeit},
+    note	= {\href{ftp://plg.uwaterloo.ca/pub/theses/SchusterThesis.ps.gz}{ftp://\-plg.uwaterloo.ca/\-pub/\-theses/\-SchusterThesis.ps.gz}},
+}
+
 @article{Euclid,
     keywords	= {Euclid},
@@ -6034,5 +6166,5 @@
     school	= {School of Computer Science, University of Waterloo},
     year	= 2017,
-    address	= {Waterloo, Ontario, Canada, N2L 3G1},
+    optaddress	= {Waterloo, Ontario, Canada, N2L 3G1},
     note	= {\href{https://uwspace.uwaterloo.ca/handle/10012/11830}{https://\-uwspace.uwaterloo.ca/\-handle/\-10012/\-11830}},
 }
@@ -6861,5 +6993,5 @@
     contributer	= {pabuhr@plg},
     key		= {TIOBE Index},
-    title	= {{TIOBE} Index},
+    author	= {{TIOBE Index}},
     howpublished= {\href{http://www.tiobe.com/tiobe_index}{http://\-www.tiobe.com/\-tiobe\_index}},
     optnote	= {Accessed: 2018-09},
@@ -7001,4 +7133,11 @@
     year	= 1980
 }
+
+@misc{TraceCompass,
+    contributer	= {pabuhr@plg},
+    key		= {Trace Compass},
+    author	= {{T}race {C}ompass},
+    howpublished= {\href{https://projects.eclipse.org/proposals/trace-compass}{https://\-projects.eclipse.org/\-proposals/\-trace-compass}},
+}
  
 @article{Leroy00,
@@ -7136,5 +7275,5 @@
     title	= {Usability Challenges in Exception Handling},
     booktitle	= {5th International Workshop on Exception Handling (WEH)},
-    organization= {16th International Symposium on the Foundations of Software Engineering (FSE 16)},
+    optorganization= {16th International Symposium on the Foundations of Software Engineering (FSE 16)},
     address	= {Zurich, Switzerland},
     month	= jun,
@@ -7280,4 +7419,17 @@
 }
 
+@inproceedings{vonBehren03,
+    keywords	= {threads, events, web server},
+    contributer	= {pabuhr@plg},
+    author	= {Rob von Behren and Jeremy Condit and Eric Brewer},
+    title	= {Why Events Are a Bad Idea (for high-concurrency servers)},
+    booktitle	= {HotOS IX: The 9th Workshop on Hot Topics in Operating Systems},
+    publisher	= {USENIX Association},
+    address	= {Lihue, Hawaii, U.S.A.},
+    month	= may,
+    year	= 2003,
+    pages	= {19-24},
+}
+
 @techreport{Moss90,
     keywords	= {Swizzling, database},
@@ -7344,8 +7496,8 @@
     year	= 1986,
     editor	= {Norman Meyrowitz},
-    publisher	= sigplan # " 21(11)",
+    publisher	= sigplan,
     organization= {Association for Computing Machinery},
     address	= {Portland, Oregon},
-    month	= sep # { 29}
+    month	= sep,
 }
 
@@ -7356,8 +7508,8 @@
     year	= 1987,
     editor	= {Norman Meyrowitz},
-    publisher	= sigplan # " 22(12)",
+    publisher	= sigplan,
     organization= {Association for Computing Machinery},
     address	= {Orlando, Florida},
-    month	= oct # { 4--8}
+    month	= oct,
 }
 
@@ -7368,8 +7520,8 @@
     year	= 1988,
     editor	= {Norman Meyrowitz},
-    publisher	= sigplan # " 23(11)",
+    publisher	= sigplan,
     organization= {Association for Computing Machinery},
     address	= {San Diego, California},
-    month	= sep # { 25--30}
+    month	= sep,
 }
 
@@ -7380,8 +7532,8 @@
     year	= 1989,
     editor	= {Norman Meyrowitz},
-    publisher	= sigplan # " 24(10)",
+    publisher	= sigplan,
     organization= {Association for Computing Machinery},
     address	= {New Orleans, Louisiana},
-    month	= oct # { 1--6}
+    month	= oct,
 }
 
@@ -7392,8 +7544,8 @@
     year	= 1990,
     editor	= {Norman Meyrowitz},
-    publisher	= sigplan # " 25(10)",
+    publisher	= sigplan,
     organization= {Association for Computing Machinery},
     address	= {Ottawa, Canada},
-    month	= oct # { 21--25}
+    month	= oct,
 }
 
@@ -7404,7 +7556,7 @@
     year	= 1991,
     editor	= {Andreas Paepcke},
-    publisher	= sigplan # " 26(11)",
+    publisher	= sigplan,
     organization= {Association for Computing Machinery},
     address	= {Phoenix, Arizona},
-    month	= oct # { 6--11}
-}
+    month	= oct,
+}
Index: doc/proposals/virtual.txt
===================================================================
--- doc/proposals/virtual.txt	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ doc/proposals/virtual.txt	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -87,8 +87,8 @@
 first polymorphic parameter).
 
-Once a function in a trait has been marked as virtual it defines a new
-function that takes in that trait's reference and then dynamically calls the
-underlying type implementation. Hence a trait reference becomes a kind of
-abstract type, cannot be directly instantiated but can still be used.
+Instances of a trait are created by wrapping an existing instance of a type
+that implements that trait. This wrapper includes all the function pointers
+and other values required to preform the dynamic look-up. These are chosen by
+the normal look-up rules at the point of abstraction.
 
 One of the limitations of this design is that it does not support double
@@ -98,4 +98,8 @@
 is also restricted, initially forbidden, see extension.
 
+Ownership of the underlying structure is also a bit of a trick. Considering
+the use cases for trait object, it is probably best to have the underlying
+object be heap allocated and owned by the trait object.
+
 Extension: Multi-parameter Virtual Traits:
 
@@ -157,4 +161,20 @@
 context, for instance if the cast occurs on the right hand side of an
 assignment.
+
+Function look-up follows the same rules as relaxed (behavioural) inheritance.
+Traits can be upcast and down cast without losing information unless the
+trait is cast down to a structure. Here there are two options.
+
+  Abstraction Time Binding: The more efficient and consistant with other parts
+of CFA. Only the trait types use dynamic look-up, if converveted back into a
+structure the normal static look-up rules find the function at compile time.
+Casting down to a structure type can then result in the loss of a set of
+bindings.
+  Construction Time Binding: For more consistant handling of the virtual
+structs, they are always considered wrapped. Functions are bound to the
+instance the moment it is constructed and remain unchanged throughout its
+lifetime, so down casting does not lose information.
+
+(We will have to decide between one of these two.)
 
 Extension: Multiple Parents
@@ -205,21 +225,33 @@
 
 We have so far been silent on how the vtable is created, stored and accessed.
-
-Creation happens at compile time. Function pointers are found by using the
-same best match rules as elsewhere (additional rules for defaults from the
-parent may or may not be required). For strict virtual this must happen at the
-global scope and forbidding static functions, to ensure that a single unique
-vtable is created. Similarly, there may have to be stricter matching rules
-for the functions that go into the vtable, possibly requiring an exact match.
-Relaxed virtual could relax both restrictions, if we allow different vtable
-at different conversion (struct to trait reference) sites. If it is allowed
-local functions being bound to a vtable could cause issues when they go out
-of scope, however this should follow the lifetime rules most C programs
-already follow implicitly.
-
-Most vtables should be stored statically, the only exception being some of
-the relaxed vtables that could have local function pointers. These may be able
-to be stack allocated. All vtables should be immutable and require no manual
-cleanup.
+The vtables for the two types might be handled slightly differently and then
+there is also the hierarchy data for virtual casts.
+
+The hierarchy data is simple conceptually. A single (exactly one copy) pointer
+for each type can act as the identity for it. The value of the pointer is
+its parent type, with the root pointer being NULL. Additional meta-data
+can accompany the parent pointer, such as a string name or the vtable fields.
+
+They types of each vtable can be constructed from the definitions of the
+traits (or internal nodes). The stand alone/base vtable is the same for both
+kinds of inheritance. It may be argumented differently however (include parent
+/this pointer in hierachal inheritance).
+
+Creation of the actual vtable is tricky. For classical single implementation
+semantics we would assemble the functions and create one vtable at compile
+time. However, not only does this not give CFA-like behaviour, it is
+impossible generally because types can satify assertions in different ways at
+different times and stop satifying them. A special set of harder rules could
+be used, instead we have decided to try creating multiple vtables for each
+type. The different vtables will all implement the same type but not always
+in the same way.
+
+Storage has some issues from creation. If the contents of every vtable could
+be determained at compile time they could all be created and stored
+statically. However since thunks can be constructed on the stack and become
+the best match, that isn't always possible. Those will have to be stored in
+dynamic memory. Which means that all vtables must be stored dynamically or
+there must be a way to determain which ones to free when the trait object is
+destroyed.
 
 Access has two main options:
Index: driver/cfa.cc
===================================================================
--- driver/cfa.cc	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ driver/cfa.cc	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -359,7 +359,12 @@
 
 	string arch = m32 ? CFA_32_CPU : (m64 ? CFA_64_CPU : CFA_DEFAULT_CPU);
-	if ( ! m32 && ! m64 && arch == "x86" ) {			// no override and 32-bit architecture
-		args[nargs] = "-m32";
-		nargs += 1;
+	if ( ! m32 && ! m64 ) {
+		if ( arch == "x86" ) {
+			args[nargs] = "-m32";
+			nargs += 1;
+		} else if ( arch == "x64" ) {
+			args[nargs] = "-m64";
+			nargs += 1;
+		}  // if
 	} // if
 	const char * config = debug ? "debug": "nodebug";
Index: libcfa/Makefile.in
===================================================================
--- libcfa/Makefile.in	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ libcfa/Makefile.in	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -229,4 +229,5 @@
 CFLAGS = @CFLAGS@
 CONFIGURATION = @CONFIGURATION@
+CONFIG_BUILDLIB = @CONFIG_BUILDLIB@
 CONFIG_CFAFLAGS = @CONFIG_CFAFLAGS@
 CONFIG_CFLAGS = @CONFIG_CFLAGS@
Index: libcfa/configure
===================================================================
--- libcfa/configure	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ libcfa/configure	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -623,4 +623,7 @@
 CFA_PREFIX
 CFA_NAME
+BUILDLIB_FALSE
+BUILDLIB_TRUE
+CONFIG_BUILDLIB
 CONFIG_CFAFLAGS
 CONFIG_CFLAGS
@@ -2531,16 +2534,29 @@
 		CONFIG_CFLAGS="-O0 -g"
 		CONFIG_CFAFLAGS="-debug"
+		CONFIG_BUILDLIB="yes"
 	;;
 	"nodebug" )
 		CONFIG_CFLAGS="-O2 -s"
 		CONFIG_CFAFLAGS="-nodebug"
+		CONFIG_BUILDLIB="yes"
 	;;
 	"nolib"   )
-		CONFIG_CFLAGS=""
-		CONFIG_CFAFLAGS=""
+		CONFIG_CFLAGS="-O2 -s"
+		CONFIG_CFAFLAGS="-nodebug"
+		CONFIG_BUILDLIB="no"
 	;;
 esac
 
 
+
+
+
+ if test "x${CONFIG_BUILDLIB}" = "xyes"; then
+  BUILDLIB_TRUE=
+  BUILDLIB_FALSE='#'
+else
+  BUILDLIB_TRUE='#'
+  BUILDLIB_FALSE=
+fi
 
 
@@ -4478,4 +4494,8 @@
 fi
 
+if test -z "${BUILDLIB_TRUE}" && test -z "${BUILDLIB_FALSE}"; then
+  as_fn_error $? "conditional \"BUILDLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
   as_fn_error $? "conditional \"AMDEP\" was never defined.
Index: libcfa/configure.ac
===================================================================
--- libcfa/configure.ac	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ libcfa/configure.ac	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -41,12 +41,15 @@
 		CONFIG_CFLAGS="-O0 -g"
 		CONFIG_CFAFLAGS="-debug"
+		CONFIG_BUILDLIB="yes"
 	;;
 	"nodebug" )
 		CONFIG_CFLAGS="-O2 -s"
 		CONFIG_CFAFLAGS="-nodebug"
+		CONFIG_BUILDLIB="yes"
 	;;
 	"nolib"   )
-		CONFIG_CFLAGS=""
-		CONFIG_CFAFLAGS=""
+		CONFIG_CFLAGS="-O2 -s"
+		CONFIG_CFAFLAGS="-nodebug"
+		CONFIG_BUILDLIB="no"
 	;;
 esac
@@ -54,4 +57,7 @@
 AC_SUBST(CONFIG_CFLAGS)
 AC_SUBST(CONFIG_CFAFLAGS)
+AC_SUBST(CONFIG_BUILDLIB)
+
+AM_CONDITIONAL([BUILDLIB], [test "x${CONFIG_BUILDLIB}" = "xyes"])
 
 #==============================================================================
Index: libcfa/prelude/Makefile.am
===================================================================
--- libcfa/prelude/Makefile.am	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ libcfa/prelude/Makefile.am	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -20,6 +20,5 @@
 # put into lib for now
 cfalibdir = ${CFA_LIBDIR}
-cfalib_DATA = gcc-builtins.cf builtins.cf extras.cf prelude.cf bootloader.c
-noinst_DATA = ../src/prelude.c
+cfalib_DATA = gcc-builtins.cf builtins.cf extras.cf prelude.cfa bootloader.c
 
 CC = @CFACC@
@@ -44,5 +43,5 @@
 	${AM_V_GEN}gcc -I${srcdir} -E ${srcdir}/prototypes.c | awk -f ${srcdir}/prototypes.awk > $@
 
-prelude.cf : prelude-gen.cc
+prelude.cfa : prelude-gen.cc
 	${AM_V_GEN}${CXX} ${AM_CXXFLAGS} ${CXXFLAGS} ${AM_CFLAGS} ${<} -o prelude-gen -Wall -Wextra -O2 -g -std=c++14
 	@./prelude-gen > $@
@@ -60,8 +59,5 @@
 include $(DEPDIR)/builtins.Po
 
-../src/prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
-	${AM_V_GEN}@CFACPP@ --prelude-dir=${builddir} -l prelude.cf $@  # use src/cfa-cpp as not in lib until after install
-
-bootloader.c : ${srcdir}/bootloader.cf prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
+bootloader.c : ${srcdir}/bootloader.cf prelude.cfa extras.cf gcc-builtins.cf builtins.cf @CFACPP@
 	${AM_V_GEN}@CFACPP@ --prelude-dir=${builddir} -tpm ${srcdir}/bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
 
@@ -69,4 +65,4 @@
 	rm -rf $(DEPDIR)
 
-MOSTLYCLEANFILES = bootloader.c builtins.cf extras.cf gcc-builtins.c gcc-builtins.cf prelude.cf
+MOSTLYCLEANFILES = bootloader.c builtins.cf extras.cf gcc-builtins.c gcc-builtins.cf prelude.cfa
 MAINTAINERCLEANFILES = ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
Index: libcfa/prelude/Makefile.in
===================================================================
--- libcfa/prelude/Makefile.in	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ libcfa/prelude/Makefile.in	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -147,5 +147,5 @@
   }
 am__installdirs = "$(DESTDIR)$(cfalibdir)"
-DATA = $(cfalib_DATA) $(noinst_DATA)
+DATA = $(cfalib_DATA)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 am__DIST_COMMON = $(srcdir)/Makefile.in
@@ -174,4 +174,5 @@
 CFLAGS = @CFLAGS@
 CONFIGURATION = @CONFIGURATION@
+CONFIG_BUILDLIB = @CONFIG_BUILDLIB@
 CONFIG_CFAFLAGS = @CONFIG_CFAFLAGS@
 CONFIG_CFLAGS = @CONFIG_CFLAGS@
@@ -263,9 +264,8 @@
 # put into lib for now
 cfalibdir = ${CFA_LIBDIR}
-cfalib_DATA = gcc-builtins.cf builtins.cf extras.cf prelude.cf bootloader.c
-noinst_DATA = ../src/prelude.c
+cfalib_DATA = gcc-builtins.cf builtins.cf extras.cf prelude.cfa bootloader.c
 AM_CFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@
 AM_CFAFLAGS = @CONFIG_CFAFLAGS@
-MOSTLYCLEANFILES = bootloader.c builtins.cf extras.cf gcc-builtins.c gcc-builtins.cf prelude.cf
+MOSTLYCLEANFILES = bootloader.c builtins.cf extras.cf gcc-builtins.c gcc-builtins.cf prelude.cfa
 MAINTAINERCLEANFILES = ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
 all: all-am
@@ -499,5 +499,5 @@
 	${AM_V_GEN}gcc -I${srcdir} -E ${srcdir}/prototypes.c | awk -f ${srcdir}/prototypes.awk > $@
 
-prelude.cf : prelude-gen.cc
+prelude.cfa : prelude-gen.cc
 	${AM_V_GEN}${CXX} ${AM_CXXFLAGS} ${CXXFLAGS} ${AM_CFLAGS} ${<} -o prelude-gen -Wall -Wextra -O2 -g -std=c++14
 	@./prelude-gen > $@
@@ -515,8 +515,5 @@
 include $(DEPDIR)/builtins.Po
 
-../src/prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
-	${AM_V_GEN}@CFACPP@ --prelude-dir=${builddir} -l prelude.cf $@  # use src/cfa-cpp as not in lib until after install
-
-bootloader.c : ${srcdir}/bootloader.cf prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
+bootloader.c : ${srcdir}/bootloader.cf prelude.cfa extras.cf gcc-builtins.cf builtins.cf @CFACPP@
 	${AM_V_GEN}@CFACPP@ --prelude-dir=${builddir} -tpm ${srcdir}/bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
 
Index: libcfa/prelude/prelude-gen.cc
===================================================================
--- libcfa/prelude/prelude-gen.cc	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ libcfa/prelude/prelude-gen.cc	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -142,5 +142,5 @@
 
 int main() {
-	cout << "# 2 \"prelude.cf\"  // needed for error messages from this file" << endl;
+	cout << "# 2 \"prelude.cfa\"  // needed for error messages from this file" << endl;
 	cout << "trait sized(dtype T) {};" << endl;
 
Index: libcfa/src/Makefile.am
===================================================================
--- libcfa/src/Makefile.am	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ libcfa/src/Makefile.am	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -16,5 +16,5 @@
 
 # create object files in directory with source files
-AUTOMAKE_OPTIONS = subdir-objects
+AUTOMAKE_OPTIONS = foreign subdir-objects
 ARFLAGS = cr
 
@@ -24,9 +24,11 @@
 lib_LIBRARIES =  libcfa.a
 
+VPATH += :../prelude
+
 # AM_CFLAGS for all cfa source
 # AM_CFAFLAGS for only cfa source
 # use -no-include-stdhdr to prevent rebuild cycles
 # The built sources must not depend on the installed headers
-AM_CFAFLAGS = -quiet -in-tree -imacros prelude.c -I$(srcdir)/stdhdr @CONFIG_CFAFLAGS@
+AM_CFAFLAGS = -quiet -in-tree -I$(srcdir)/stdhdr @CONFIG_CFAFLAGS@
 AM_CFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@
 AM_CCASFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@
@@ -34,42 +36,62 @@
 
 #----------------------------------------------------------------------------------------------------------------
+if BUILDLIB
 headers = fstream.hfa iostream.hfa iterator.hfa limits.hfa rational.hfa time.hfa stdlib.hfa common.hfa \
 	  containers/maybe.hfa containers/pair.hfa containers/result.hfa containers/vector.hfa
+
+headers_nosrc = math.hfa gmp.hfa time_t.hfa bits/align.hfa bits/containers.hfa bits/defs.hfa bits/debug.hfa bits/locks.hfa
 
 # not all platforms support concurrency, add option do disable it
 headers += concurrency/coroutine.hfa concurrency/thread.hfa concurrency/kernel.hfa concurrency/monitor.hfa concurrency/mutex.hfa
 
-libobjs = ${headers:.hfa=.o}
-libsrc = prelude.c startup.cfa interpose.cfa bits/debug.cfa assert.cfa exception.c virtual.c heap.cfa \
-	${headers:.hfa=.cfa}
+headers_nosrc += concurrency/invoke.h
+
+libsrc = startup.cfa interpose.cfa bits/debug.cfa assert.cfa exception.c virtual.c heap.cfa ${headers:.hfa=.cfa}
 
 # not all platforms support concurrency, add option do disable it
 libsrc += concurrency/CtxSwitch-@ARCHITECTURE@.S concurrency/alarm.cfa concurrency/invoke.c concurrency/preemption.cfa
+else
+headers =
+headers_nosrc =
+libsrc =
+endif
+
 
 #----------------------------------------------------------------------------------------------------------------
 # add dependency to cfa-cpp so all libraries are rebuilt with new translator
-${libobjs} : ${cfalib_DATA}
+#@CFACC@ @CFACPP@ prelude.cfa
 
-libcfa_a_SOURCES = ${libsrc}
+# add dependency of cfa files
+libobjs = $(addsuffix .o, $(basename $(filter %.cfa,$(libsrc))))
+$(libobjs) : @CFACC@ @CFACPP@ prelude.cfa
+
+
+# .deps inclusion is not done automatically by automake for new languages
+libdeps = $(join \
+	$(addsuffix $(DEPDIR)/ , $(dir $(libobjs) ) ), \
+	$(notdir ${libobjs:.o=.Po}) \
+)
+
+-include $(libdeps)
+
+prelude.o : prelude.cfa extras.cf gcc-builtins.cf builtins.cf @CFACC@ @CFACPP@
+	${AM_V_GEN}@CFACC@ ${AM_CFLAGS} ${CFLAGS} -quiet -in-tree -XCFA -l ${<} -c -o ${@}
+
+
+
+#----------------------------------------------------------------------------------------------------------------
+libcfa_a_SOURCES = prelude.cfa ${libsrc}
 
 stdhdr = ${shell find ${srcdir}/stdhdr -type f -printf "%p "}
 
 cfa_includedir = $(CFA_INCDIR)
-nobase_cfa_include_HEADERS = \
-	${headers}             \
-	${stdhdr}              \
-	math.hfa               \
-	gmp.hfa                \
-	time_t.hfa             \
-	bits/align.hfa         \
-	bits/containers.hfa    \
-	bits/defs.hfa          \
-	bits/debug.hfa         \
-	bits/locks.hfa         \
-	concurrency/invoke.h
-
-MOSTLYCLEANFILES = prelude.c
+nobase_cfa_include_HEADERS = ${stdhdr} ${headers} ${headers_nosrc}
 
 #----------------------------------------------------------------------------------------------------------------
 maintainer-clean-local:
 	-rm -rf ${CFA_INCDIR} ${CFA_LIBDIR}
+
+
+# $(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+# 	$(CFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+# 	$(am__mv) $$depbase.Tpo $$depbase.Po
Index: libcfa/src/Makefile.in
===================================================================
--- libcfa/src/Makefile.in	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ libcfa/src/Makefile.in	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -19,5 +19,4 @@
 
 
-VPATH = @srcdir@
 am__is_gnu_make = { \
   if test -z '$(MAKELEVEL)'; then \
@@ -97,6 +96,6 @@
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(nobase_cfa_include_HEADERS) \
-	$(am__DIST_COMMON)
+DIST_COMMON = $(srcdir)/Makefile.am \
+	$(am__nobase_cfa_include_HEADERS_DIST) $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_CLEAN_FILES =
@@ -138,21 +137,37 @@
 libcfa_a_AR = $(AR) $(ARFLAGS)
 libcfa_a_LIBADD =
+am__libcfa_a_SOURCES_DIST = prelude.cfa startup.cfa interpose.cfa \
+	bits/debug.cfa assert.cfa exception.c virtual.c heap.cfa \
+	fstream.cfa iostream.cfa iterator.cfa limits.cfa rational.cfa \
+	time.cfa stdlib.cfa common.cfa containers/maybe.cfa \
+	containers/pair.cfa containers/result.cfa \
+	containers/vector.cfa concurrency/coroutine.cfa \
+	concurrency/thread.cfa concurrency/kernel.cfa \
+	concurrency/monitor.cfa concurrency/mutex.cfa \
+	concurrency/CtxSwitch-@ARCHITECTURE@.S concurrency/alarm.cfa \
+	concurrency/invoke.c concurrency/preemption.cfa
 am__dirstamp = $(am__leading_dot)dirstamp
-am__objects_1 = fstream.$(OBJEXT) iostream.$(OBJEXT) \
-	iterator.$(OBJEXT) limits.$(OBJEXT) rational.$(OBJEXT) \
-	time.$(OBJEXT) stdlib.$(OBJEXT) common.$(OBJEXT) \
-	containers/maybe.$(OBJEXT) containers/pair.$(OBJEXT) \
-	containers/result.$(OBJEXT) containers/vector.$(OBJEXT) \
-	concurrency/coroutine.$(OBJEXT) concurrency/thread.$(OBJEXT) \
-	concurrency/kernel.$(OBJEXT) concurrency/monitor.$(OBJEXT) \
-	concurrency/mutex.$(OBJEXT)
-am__objects_2 = prelude.$(OBJEXT) startup.$(OBJEXT) \
-	interpose.$(OBJEXT) bits/debug.$(OBJEXT) assert.$(OBJEXT) \
-	exception.$(OBJEXT) virtual.$(OBJEXT) heap.$(OBJEXT) \
-	$(am__objects_1) \
-	concurrency/CtxSwitch-@ARCHITECTURE@.$(OBJEXT) \
-	concurrency/alarm.$(OBJEXT) concurrency/invoke.$(OBJEXT) \
-	concurrency/preemption.$(OBJEXT)
-am_libcfa_a_OBJECTS = $(am__objects_2)
+@BUILDLIB_TRUE@am__objects_1 = fstream.$(OBJEXT) iostream.$(OBJEXT) \
+@BUILDLIB_TRUE@	iterator.$(OBJEXT) limits.$(OBJEXT) \
+@BUILDLIB_TRUE@	rational.$(OBJEXT) time.$(OBJEXT) \
+@BUILDLIB_TRUE@	stdlib.$(OBJEXT) common.$(OBJEXT) \
+@BUILDLIB_TRUE@	containers/maybe.$(OBJEXT) \
+@BUILDLIB_TRUE@	containers/pair.$(OBJEXT) \
+@BUILDLIB_TRUE@	containers/result.$(OBJEXT) \
+@BUILDLIB_TRUE@	containers/vector.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/coroutine.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/thread.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/kernel.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/monitor.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/mutex.$(OBJEXT)
+@BUILDLIB_TRUE@am__objects_2 = startup.$(OBJEXT) interpose.$(OBJEXT) \
+@BUILDLIB_TRUE@	bits/debug.$(OBJEXT) assert.$(OBJEXT) \
+@BUILDLIB_TRUE@	exception.$(OBJEXT) virtual.$(OBJEXT) \
+@BUILDLIB_TRUE@	heap.$(OBJEXT) $(am__objects_1) \
+@BUILDLIB_TRUE@	concurrency/CtxSwitch-@ARCHITECTURE@.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/alarm.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/invoke.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/preemption.$(OBJEXT)
+am_libcfa_a_OBJECTS = prelude.$(OBJEXT) $(am__objects_2)
 libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS)
 AM_V_P = $(am__v_P_@AM_V@)
@@ -191,5 +206,5 @@
 am__v_CCLD_1 = 
 SOURCES = $(libcfa_a_SOURCES)
-DIST_SOURCES = $(libcfa_a_SOURCES)
+DIST_SOURCES = $(am__libcfa_a_SOURCES_DIST)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -197,4 +212,13 @@
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+am__nobase_cfa_include_HEADERS_DIST = ${shell find ${srcdir}/stdhdr \
+	-type f -printf "%p "} fstream.hfa iostream.hfa iterator.hfa \
+	limits.hfa rational.hfa time.hfa stdlib.hfa common.hfa \
+	containers/maybe.hfa containers/pair.hfa containers/result.hfa \
+	containers/vector.hfa concurrency/coroutine.hfa \
+	concurrency/thread.hfa concurrency/kernel.hfa \
+	concurrency/monitor.hfa concurrency/mutex.hfa math.hfa gmp.hfa \
+	time_t.hfa bits/align.hfa bits/containers.hfa bits/defs.hfa \
+	bits/debug.hfa bits/locks.hfa concurrency/invoke.h
 HEADERS = $(nobase_cfa_include_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
@@ -220,4 +244,5 @@
 	$(top_srcdir)/./automake/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+VPATH = @srcdir@ :../prelude
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -243,4 +268,5 @@
 CFLAGS = @CFLAGS@
 CONFIGURATION = @CONFIGURATION@
+CONFIG_BUILDLIB = @CONFIG_BUILDLIB@
 CONFIG_CFAFLAGS = @CONFIG_CFAFLAGS@
 CONFIG_CFLAGS = @CONFIG_CFLAGS@
@@ -328,5 +354,5 @@
 
 # create object files in directory with source files
-AUTOMAKE_OPTIONS = subdir-objects
+AUTOMAKE_OPTIONS = foreign subdir-objects
 ARFLAGS = cr
 CFACOMPILE = $(CFACC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(CFAFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -341,41 +367,53 @@
 # use -no-include-stdhdr to prevent rebuild cycles
 # The built sources must not depend on the installed headers
-AM_CFAFLAGS = -quiet -in-tree -imacros prelude.c -I$(srcdir)/stdhdr @CONFIG_CFAFLAGS@
+AM_CFAFLAGS = -quiet -in-tree -I$(srcdir)/stdhdr @CONFIG_CFAFLAGS@
 AM_CFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@
 AM_CCASFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@
+@BUILDLIB_FALSE@headers = 
 
 #----------------------------------------------------------------------------------------------------------------
 
 # not all platforms support concurrency, add option do disable it
-headers = fstream.hfa iostream.hfa iterator.hfa limits.hfa \
-	rational.hfa time.hfa stdlib.hfa common.hfa \
-	containers/maybe.hfa containers/pair.hfa containers/result.hfa \
-	containers/vector.hfa concurrency/coroutine.hfa \
-	concurrency/thread.hfa concurrency/kernel.hfa \
-	concurrency/monitor.hfa concurrency/mutex.hfa
-libobjs = ${headers:.hfa=.o}
+@BUILDLIB_TRUE@headers = fstream.hfa iostream.hfa iterator.hfa \
+@BUILDLIB_TRUE@	limits.hfa rational.hfa time.hfa stdlib.hfa \
+@BUILDLIB_TRUE@	common.hfa containers/maybe.hfa \
+@BUILDLIB_TRUE@	containers/pair.hfa containers/result.hfa \
+@BUILDLIB_TRUE@	containers/vector.hfa concurrency/coroutine.hfa \
+@BUILDLIB_TRUE@	concurrency/thread.hfa concurrency/kernel.hfa \
+@BUILDLIB_TRUE@	concurrency/monitor.hfa concurrency/mutex.hfa
+@BUILDLIB_FALSE@headers_nosrc = 
+@BUILDLIB_TRUE@headers_nosrc = math.hfa gmp.hfa time_t.hfa \
+@BUILDLIB_TRUE@	bits/align.hfa bits/containers.hfa \
+@BUILDLIB_TRUE@	bits/defs.hfa bits/debug.hfa bits/locks.hfa \
+@BUILDLIB_TRUE@	concurrency/invoke.h
+@BUILDLIB_FALSE@libsrc = 
 
 # not all platforms support concurrency, add option do disable it
-libsrc = prelude.c startup.cfa interpose.cfa bits/debug.cfa assert.cfa \
-	exception.c virtual.c heap.cfa ${headers:.hfa=.cfa} \
-	concurrency/CtxSwitch-@ARCHITECTURE@.S concurrency/alarm.cfa \
-	concurrency/invoke.c concurrency/preemption.cfa
-libcfa_a_SOURCES = ${libsrc}
+@BUILDLIB_TRUE@libsrc = startup.cfa interpose.cfa bits/debug.cfa \
+@BUILDLIB_TRUE@	assert.cfa exception.c virtual.c heap.cfa \
+@BUILDLIB_TRUE@	${headers:.hfa=.cfa} \
+@BUILDLIB_TRUE@	concurrency/CtxSwitch-@ARCHITECTURE@.S \
+@BUILDLIB_TRUE@	concurrency/alarm.cfa concurrency/invoke.c \
+@BUILDLIB_TRUE@	concurrency/preemption.cfa
+
+#----------------------------------------------------------------------------------------------------------------
+# add dependency to cfa-cpp so all libraries are rebuilt with new translator
+#@CFACC@ @CFACPP@ prelude.cfa
+
+# add dependency of cfa files
+libobjs = $(addsuffix .o, $(basename $(filter %.cfa,$(libsrc))))
+
+# .deps inclusion is not done automatically by automake for new languages
+libdeps = $(join \
+	$(addsuffix $(DEPDIR)/ , $(dir $(libobjs) ) ), \
+	$(notdir ${libobjs:.o=.Po}) \
+)
+
+
+#----------------------------------------------------------------------------------------------------------------
+libcfa_a_SOURCES = prelude.cfa ${libsrc}
 stdhdr = ${shell find ${srcdir}/stdhdr -type f -printf "%p "}
 cfa_includedir = $(CFA_INCDIR)
-nobase_cfa_include_HEADERS = \
-	${headers}             \
-	${stdhdr}              \
-	math.hfa               \
-	gmp.hfa                \
-	time_t.hfa             \
-	bits/align.hfa         \
-	bits/containers.hfa    \
-	bits/defs.hfa          \
-	bits/debug.hfa         \
-	bits/locks.hfa         \
-	concurrency/invoke.h
-
-MOSTLYCLEANFILES = prelude.c
+nobase_cfa_include_HEADERS = ${stdhdr} ${headers} ${headers_nosrc}
 all: all-am
 
@@ -506,5 +544,4 @@
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exception.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prelude.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virtual.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/CtxSwitch-@ARCHITECTURE@.Po@am__quote@
@@ -676,5 +713,4 @@
 	fi
 mostlyclean-generic:
-	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
@@ -784,12 +820,14 @@
 
 
-.cfa.o: $(CFACC) $(CFACPP)
+.cfa.o:
 	$(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
 	$(CFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
 	$(am__mv) $$depbase.Tpo $$depbase.Po
-
-#----------------------------------------------------------------------------------------------------------------
-# add dependency to cfa-cpp so all libraries are rebuilt with new translator
-${libobjs} : ${cfalib_DATA}
+$(libobjs) : @CFACC@ @CFACPP@ prelude.cfa
+
+-include $(libdeps)
+
+prelude.o : prelude.cfa extras.cf gcc-builtins.cf builtins.cf @CFACC@ @CFACPP@
+	${AM_V_GEN}@CFACC@ ${AM_CFLAGS} ${CFLAGS} -quiet -in-tree -XCFA -l ${<} -c -o ${@}
 
 #----------------------------------------------------------------------------------------------------------------
@@ -797,4 +835,8 @@
 	-rm -rf ${CFA_INCDIR} ${CFA_LIBDIR}
 
+# $(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+# 	$(CFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+# 	$(am__mv) $$depbase.Tpo $$depbase.Po
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
Index: src/CodeTools/ResolvProtoDump.cc
===================================================================
--- src/CodeTools/ResolvProtoDump.cc	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ src/CodeTools/ResolvProtoDump.cc	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -196,12 +196,20 @@
 			}
 			
-			// default to just name
-			ss << pre << name;
+			// default to just name, with first character in lowercase
+			ss << pre 
+			   << (char)std::tolower( static_cast<unsigned char>(name[0]) )
+			   << (name.c_str() + 1);
 		}
 
 		/// ensures type inst names are uppercase
 		static void ti_name( const std::string& name, std::stringstream& ss ) {
-			ss << (char)std::toupper( static_cast<unsigned char>(name[0]) )
-			   << (name.c_str() + 1);
+			unsigned i = 0;
+			while ( i < name.size() && name[i] == '_' ) { ++i; }
+			if ( i == name.size() ) {
+				ss << "Anon";
+				return;
+			}
+			ss << (char)std::toupper( static_cast<unsigned char>(name[i]) )
+			   << (name.c_str() + i + 1);
 		}
 
@@ -219,12 +227,15 @@
 			void previsit( BasicType* bt ) { ss << (int)bt->get_kind(); }
 
-			// pointers represented as generic type
-			// TODO except pointer to function
-			void previsit( PointerType* ) { ss << "#$ptr<"; ++depth; }
-			void postvisit( PointerType* ) { --depth; ss << '>'; }
-
-			// arrays represented as generic type
+			// pointers (except function pointers) represented as generic type
+			void previsit( PointerType* pt ) {
+				if ( ! dynamic_cast<FunctionType*>(pt->base) ) { ss << "#$ptr<"; ++depth; }
+			}
+			void postvisit( PointerType* pt ) {
+				if ( ! dynamic_cast<FunctionType*>(pt->base) ) { --depth; ss << '>'; }
+			}
+
+			// arrays represented as generic pointers
 			void previsit( ArrayType* at ) {
-				ss << "#$arr<";
+				ss << "#$ptr<";
 				++depth;
 				at->base->accept( *visitor );
@@ -244,14 +255,13 @@
 			}
 
-			// encode function type as a 2-param generic type
-			// TODO handle forall functions
+			// print function types using prototype syntax
 			void previsit( FunctionType* ft ) {
-				ss << "#$fn<";
+				ss << '[';
 				++depth;
-				buildAsTuple( *visitor, from_decls( ft->returnVals ), ss );
-				ss << ' ';
-				buildAsTuple( *visitor, from_decls( ft->parameters ), ss );
+				build( *visitor, from_decls( ft->returnVals ), ss, preceded );
+				ss << " : ";
+				build( *visitor, from_decls( ft->parameters ), ss, terminated );
 				--depth;
-				ss << '>';
+				ss << ']';
 				visit_children = false;
 			}
@@ -341,8 +351,8 @@
 			}
 
-			// print variable declaration as zero-arg function
+			// print variable declaration in prototype syntax
 			PassVisitor<TypePrinter> printTy{ closed, ss };
 			norefs->accept( printTy );
-			ss << ' ';
+			ss << " &";
 			rp_name( name, ss );
 		}
@@ -381,8 +391,8 @@
 				: closed(closed), ss(ss) {}
 
-			/// Names handled as nullary function calls
+			/// Names handled as name expressions
 			void previsit( NameExpr* expr ) {
+				ss << '&';
 				rp_name( expr->name, ss );
-				ss << "()";
 			}
 
@@ -416,4 +426,9 @@
 			}
 
+			/// Already-resolved calls skipped
+			void previsit( ApplicationExpr* ) {
+				visit_children = false;
+			}
+
 			/// Address-of handled as operator
 			void previsit( AddressExpr* expr ) {
@@ -585,4 +600,12 @@
 
 		void previsit( FunctionDecl *decl ) {
+			// skip decls with ftype parameters
+			for ( TypeDecl* tyvar : decl->type->forall ) {
+				if ( tyvar->get_kind() == TypeDecl::Ftype ) {
+					visit_children = false;
+					return;
+				}
+			}
+
 			// add function as declaration
 			std::stringstream ss;
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ src/Makefile.am	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -50,4 +50,5 @@
 AM_CXXFLAGS = @HOST_FLAGS@ -Wno-deprecated -Wall -Wextra -DDEBUG_ALL -I./Parser -I$(srcdir)/Parser -I$(srcdir)/include -DYY_NO_INPUT -O2 -g -std=c++14
 AM_LDFLAGS  = @HOST_FLAGS@ -Xlinker -export-dynamic
+ARFLAGS     = cr
 
 demangler_SOURCES = SymTab/demangler.cc
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ src/Makefile.in	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -152,5 +152,4 @@
 LIBRARIES = $(noinst_LIBRARIES)
 AR = ar
-ARFLAGS = cru
 AM_V_AR = $(am__v_AR_@AM_V@)
 am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
@@ -582,4 +581,5 @@
 AM_CXXFLAGS = @HOST_FLAGS@ -Wno-deprecated -Wall -Wextra -DDEBUG_ALL -I./Parser -I$(srcdir)/Parser -I$(srcdir)/include -DYY_NO_INPUT -O2 -g -std=c++14
 AM_LDFLAGS = @HOST_FLAGS@ -Xlinker -export-dynamic
+ARFLAGS = cr
 demangler_SOURCES = SymTab/demangler.cc
 demangler_LDADD = libdemangle.a     # yywrap
Index: src/SymTab/Demangle.cc
===================================================================
--- src/SymTab/Demangle.cc	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ src/SymTab/Demangle.cc	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -392,6 +392,6 @@
 				parsers.emplace_back(Encoding::enum_t, [this](Type::Qualifiers tq) { return parseEnum(tq); });
 				parsers.emplace_back(Encoding::type, [this](Type::Qualifiers tq) { return parseType(tq); });
-				parsers.emplace_back(Encoding::zero, [this](Type::Qualifiers tq) { return new ZeroType(tq); });
-				parsers.emplace_back(Encoding::one, [this](Type::Qualifiers tq) { return new OneType(tq); });
+				parsers.emplace_back(Encoding::zero, [](Type::Qualifiers tq) { return new ZeroType(tq); });
+				parsers.emplace_back(Encoding::one, [](Type::Qualifiers tq) { return new OneType(tq); });
 			}
 
Index: src/cfa.make
===================================================================
--- src/cfa.make	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ src/cfa.make	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -6,5 +6,5 @@
 am__v_CFA_1 =
 
-.cfa.o: $(CFACC) $(CFACPP)
+.cfa.o:
 	$(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
 	$(CFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ src/main.cc	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -172,5 +172,5 @@
 			if ( filename == nullptr ) filename = argv[ optind ];
 			// prelude filename comes in differently
-			if ( libcfap ) filename = "prelude.cf";
+			if ( libcfap ) filename = "prelude.cfa";
 			optind += 1;
 		} else {										// no input file name
@@ -199,6 +199,6 @@
 			if ( ! libcfap ) {
 				// read the prelude in, if not generating the cfa library
-				FILE * prelude = fopen( (PreludeDirector + "/prelude.cf").c_str(), "r" );
-				assertf( prelude, "cannot open prelude.cf\n" );
+				FILE * prelude = fopen( (PreludeDirector + "/prelude.cfa").c_str(), "r" );
+				assertf( prelude, "cannot open prelude.cfa\n" );
 				parse( prelude, LinkageSpec::Intrinsic );
 
Index: tests/Makefile.am
===================================================================
--- tests/Makefile.am	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ tests/Makefile.am	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -23,4 +23,5 @@
 
 concurrent=
+timeouts=
 
 TEST_PY = python ${builddir}/test.py
@@ -50,8 +51,8 @@
 #----------------------------------------------------------------------------------------------------------------
 all-local :
-	@+${TEST_PY} --debug=${debug}  --install=${installed} ${concurrent} ${quick_test}
+	@+${TEST_PY} --debug=${debug}  --install=${installed} ${concurrent} ${timeouts} ${quick_test}
 
 all-tests :
-	@+${TEST_PY} --all --debug=${debug}  --install=${installed} ${concurrent}		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
+	@+${TEST_PY} --debug=${debug}  --install=${installed} ${concurrent} ${timeouts} --all # '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
 
 clean-local :
Index: tests/Makefile.in
===================================================================
--- tests/Makefile.in	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ tests/Makefile.in	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -301,4 +301,5 @@
 quick_test = avl_test operators numericConstants expression enum array typeof cast raii/dtor-early-exit raii/init_once attributes
 concurrent = 
+timeouts = 
 TEST_PY = python ${builddir}/test.py
 
@@ -616,8 +617,8 @@
 #----------------------------------------------------------------------------------------------------------------
 all-local :
-	@+${TEST_PY} --debug=${debug}  --install=${installed} ${concurrent} ${quick_test}
+	@+${TEST_PY} --debug=${debug}  --install=${installed} ${concurrent} ${timeouts} ${quick_test}
 
 all-tests :
-	@+${TEST_PY} --all --debug=${debug}  --install=${installed} ${concurrent}		# '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
+	@+${TEST_PY} --debug=${debug}  --install=${installed} ${concurrent} ${timeouts} --all # '@' => do not echo command (SILENT), '+' => allows recursive make from within python program
 
 clean-local :
Index: tools/cfa.nanorc
===================================================================
--- tools/cfa.nanorc	(revision 48b7085ecdfefbf973599bc2ab3d2c330090c910)
+++ tools/cfa.nanorc	(revision a32346b71b731ec08c51be209f4d0e454c15f101)
@@ -2,5 +2,5 @@
 ## WIP
 
-syntax "cfa" "\.cfa"
+syntax "cfa" "\.(c|h)fa"
 
 # Macros
@@ -9,6 +9,6 @@
 # Types
 color green "\<(forall|trait|(o|d|f|t)type|mutex|_Bool|volatile|virtual)\>"
-color green "\<(float|double|bool|char|int|short|long|sizeof|enum|void|auto)\>"
-color green "\<(static|const|struct|union|typedef|extern|(un)?signed|inline)\>"
+color green "\<(float|double|bool|char|int|short|long|enum|void|auto)\>"
+color green "\<(static|const|extern|(un)?signed|inline)\>" "\<(sizeof)\>"
 color green "\<((s?size)|one|zero|((u_?)?int(8|16|32|64|ptr)))_t\>"
 
@@ -19,8 +19,12 @@
 # Control Flow Structures
 color brightyellow "\<(if|else|while|do|for|switch|choose|case|default)\>"
+color brightyellow "\<(disable|enable|waitfor|when|timeout)\>"
 color brightyellow "\<(try|catch(Resume)?|finally)\>"
 
 # Control Flow Statements
 color magenta "\<(goto|return|break|continue|fallthr(u|ough)|throw(Resume)?)\>"
+
+# Escaped Keywords, now Identifiers.
+color white "`\w+`"
 
 # Operator Names
