Index: libcfa/src/fstream.cfa
===================================================================
--- libcfa/src/fstream.cfa	(revision 167d5ae3d404a556561f41a5c8d53b2064a0a99f)
+++ libcfa/src/fstream.cfa	(revision 24662ff50dfb325fe8845d2ec497b66224708e7d)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug 10 18:19:40 2018
-// Update Count     : 284
+// Last Modified On : Wed Dec 12 08:34:28 2018
+// Update Count     : 298
 //
 
@@ -20,5 +20,4 @@
 #include <stdarg.h>										// varargs
 #include <string.h>										// strlen
-#include <stdbool.h>									// true/false
 #include <float.h>										// DBL_DIG, LDBL_DIG
 #include <complex.h>									// creal, cimag
@@ -27,8 +26,10 @@
 #define IO_MSG "I/O error: "
 
-void ?{}( ofstream & os, void * file, bool sepDefault, bool sepOnOff, const char * separator, const char * tupleSeparator ) {
+void ?{}( ofstream & os, void * file, bool sepDefault, bool sepOnOff, bool nlOnOff, bool nonlManip, const char * separator, const char * tupleSeparator ) {
 	os.file = file;
 	os.sepDefault = sepDefault;
 	os.sepOnOff = sepOnOff;
+	os.nlOnOff = nlOnOff;
+	os.nonlManip = nonlManip;
 	sepSet( os, separator );
 	sepSetCur( os, sepGet( os ) );
@@ -44,4 +45,7 @@
 bool getNL( ofstream & os ) { return os.sawNL; }
 void setNL( ofstream & os, bool state ) { os.sawNL = state; }
+bool getANL( ofstream & os ) { return os.nlOnOff; }
+bool getNonl( ofstream & os ) { return os.nonlManip; }
+void setNonl( ofstream & os, bool state ) { os.nonlManip = state; }
 
 // public
@@ -72,4 +76,7 @@
 } // sepEnable
 
+void nlOn( ofstream & os ) { os.nlOnOff = true; }
+void nlOff( ofstream & os ) { os.nlOnOff = false; }
+
 const char * sepGet( ofstream & os ) { return os.separator; }
 void sepSet( ofstream & os, const char * s ) {
@@ -103,5 +110,5 @@
 	} // if
 	#endif // __CFA_DEBUG__
-	(os){ file, true, false, " ", ", " };
+	(os){ file, true, false, true, false, " ", ", " };
 } // open
 
@@ -147,7 +154,7 @@
 } // fmt
 
-static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), true, false, " ", ", " };
+static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), true, false, true, false, " ", ", " };
 ofstream & sout = soutFile;
-static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), true, false, " ", ", " };
+static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), true, false, true, false, " ", ", " };
 ofstream & serr = serrFile;
 
Index: libcfa/src/fstream.hfa
===================================================================
--- libcfa/src/fstream.hfa	(revision 167d5ae3d404a556561f41a5c8d53b2064a0a99f)
+++ libcfa/src/fstream.hfa	(revision 24662ff50dfb325fe8845d2ec497b66224708e7d)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Aug 11 13:54:27 2018
-// Update Count     : 132
+// Last Modified On : Wed Dec 12 07:52:41 2018
+// Update Count     : 143
 //
 
@@ -23,4 +23,6 @@
 	bool sepDefault;
 	bool sepOnOff;
+	bool nlOnOff;
+	bool nonlManip;
 	bool sawNL;
 	const char * sepCur;
@@ -37,4 +39,7 @@
 bool getNL( ofstream & );
 void setNL( ofstream &, bool );
+bool getANL( ofstream & );
+bool getNonl( ofstream & );
+void setNonl( ofstream &, bool );
 
 // public
@@ -43,4 +48,6 @@
 bool sepDisable( ofstream & );
 bool sepEnable( ofstream & );
+void nlOn( ofstream & );
+void nlOff( ofstream & );
 
 const char * sepGet( ofstream & );
Index: libcfa/src/gmp.hfa
===================================================================
--- libcfa/src/gmp.hfa	(revision 167d5ae3d404a556561f41a5c8d53b2064a0a99f)
+++ libcfa/src/gmp.hfa	(revision 24662ff50dfb325fe8845d2ec497b66224708e7d)
@@ -10,6 +10,6 @@
 // Created On       : Tue Apr 19 08:43:43 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Dec  7 09:10:41 2017
-// Update Count     : 21
+// Last Modified On : Tue Dec  4 23:25:51 2018
+// Update Count     : 22
 //
 
@@ -262,11 +262,16 @@
 } // ?|?
 
-static inline forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, Int mp ) {
-	if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-	gmp_printf( "%Zd", mp.mpz );
-	sepOn( os );
- 	return os;
-} // ?|?
+static inline forall( dtype ostype | ostream( ostype ) ) {
+	ostype & ?|?( ostype & os, Int mp ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		gmp_printf( "%Zd", mp.mpz );
+		sepOn( os );
+		return os;
+	} // ?|?
+
+	void ?|?( ostype & os, Int mp ) {
+		(ostype)(os | mp); if ( getANL( os ) ) nl( os );
+	} // ?|?
+} // distribution
 
 // Local Variables: //
Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 167d5ae3d404a556561f41a5c8d53b2064a0a99f)
+++ libcfa/src/iostream.cfa	(revision 24662ff50dfb325fe8845d2ec497b66224708e7d)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Nov  2 07:17:05 2018
-// Update Count     : 474
+// Last Modified On : Tue Dec 11 22:02:03 2018
+// Update Count     : 546
 //
 
@@ -19,5 +19,5 @@
 #include <stdio.h>
 #include <stdbool.h>									// true/false
-//#include <string.h>										// strlen, strcmp
+//#include <string.h>									// strlen, strcmp
 extern int strcmp (const char *__s1, const char *__s2) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
 extern size_t strlen (const char *__s) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
@@ -32,22 +32,33 @@
 		return os;
 	} // ?|?
-
-	ostype & ?|?( ostype & os, char ch ) {
-		fmt( os, "%c", ch );
-		if ( ch == '\n' ) setNL( os, true );
-		sepOff( os );
-		return os;
-	} // ?|?
-
-	ostype & ?|?( ostype & os, signed char c ) {
-		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		fmt( os, "%hhd", c );
-		return os;
-	} // ?|?
-
-	ostype & ?|?( ostype & os, unsigned char c ) {
-		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
-		fmt( os, "%hhu", c );
-		return os;
+	void ?|?( ostype & os, bool b ) {
+		(ostype)(os | b); if ( getANL( os ) ) nl( os );
+	} // ?|?
+
+	ostype & ?|?( ostype & os, char c ) {
+		fmt( os, "%c", c );
+		if ( c == '\n' ) setNL( os, true );
+		return sepOff( os );
+	} // ?|?
+	void ?|?( ostype & os, char c ) {
+		(ostype)(os | c); if ( getANL( os ) ) nl( os );
+	} // ?|?
+
+	ostype & ?|?( ostype & os, signed char sc ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%hhd", sc );
+		return os;
+	} // ?|?
+	void ?|?( ostype & os, signed char sc ) {
+		(ostype)(os | sc); if ( getANL( os ) ) nl( os );
+	} // ?|?
+
+	ostype & ?|?( ostype & os, unsigned char usc ) {
+		if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) );
+		fmt( os, "%hhu", usc );
+		return os;
+	} // ?|?
+	void ?|?( ostype & os, unsigned char usc ) {
+		(ostype)(os | usc); if ( getANL( os ) ) nl( os );
 	} // ?|?
 
@@ -57,4 +68,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, short int si ) {
+		(ostype)(os | si); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, unsigned short int usi ) {
@@ -63,4 +77,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, unsigned short int usi ) {
+		(ostype)(os | usi); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, int i ) {
@@ -69,4 +86,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, int i ) {
+		(ostype)(os | i); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, unsigned int ui ) {
@@ -75,4 +95,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, unsigned int ui ) {
+		(ostype)(os | ui); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, long int li ) {
@@ -81,4 +104,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, long int li ) {
+		(ostype)(os | li); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, unsigned long int uli ) {
@@ -87,4 +113,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, unsigned long int uli ) {
+		(ostype)(os | uli); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, long long int lli ) {
@@ -93,4 +122,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, long long int lli ) {
+		(ostype)(os | lli); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, unsigned long long int ulli ) {
@@ -99,4 +131,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, unsigned long long int ulli ) {
+		(ostype)(os | ulli); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, float f ) {
@@ -105,4 +140,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, float f ) {
+		(ostype)(os | f); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, double d ) {
@@ -111,4 +149,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, double d ) {
+		(ostype)(os | d); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, long double ld ) {
@@ -117,4 +158,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, long double ld ) {
+		(ostype)(os | ld); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, float _Complex fc ) {
@@ -123,4 +167,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, float _Complex fc ) {
+		(ostype)(os | fc); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, double _Complex dc ) {
@@ -129,4 +176,7 @@
 		return os;
 	} // ?|?
+	void & ?|?( ostype & os, double _Complex dc ) {
+		(ostype)(os | dc); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	ostype & ?|?( ostype & os, long double _Complex ldc ) {
@@ -134,4 +184,7 @@
 		fmt( os, "%.*Lg%+.*Lgi", LDBL_DIG, creall( ldc ), LDBL_DIG, cimagl( ldc ) );
 		return os;
+	} // ?|?
+	void & ?|?( ostype & os, long double _Complex ldc ) {
+		(ostype)(os | ldc); if ( getANL( os ) ) nl( os );
 	} // ?|?
 
@@ -174,4 +227,7 @@
 		return write( os, str, len );
 	} // ?|?
+	void ?|?( ostype & os, const char * str ) {
+		(ostype)(os | str); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 // 	ostype & ?|?( ostype & os, const char16_t * str ) {
@@ -200,75 +256,104 @@
 		return os;
 	} // ?|?
-
+	void ?|?( ostype & os, const void * p ) {
+		(ostype)(os | p); if ( getANL( os ) ) nl( os );
+	} // ?|?
 
 	// manipulators
 	ostype & ?|?( ostype & os, ostype & (* manip)( ostype & ) ) {
-		return manip( os );
+		(ostype)(manip( os ));
+		setNonl( os, false );							// ignore nonl in middle
+		return os;
+	} // ?|?
+	void ?|?( ostype & os, ostype & (* manip)( ostype & ) ) {
+		(ostype)(manip( os ));
+		if ( getANL( os ) && ! getNonl( os ) ) nl( os ); // ignore nl if nonl at end
+		setNonl( os, false );
 	} // ?|?
 
 	ostype & sep( ostype & os ) {
-		os | sepGet( os );
-		return os;
+		return (ostype)(os | sepGet( os ));
 	} // sep
 
 	ostype & sepTuple( ostype & os ) {
-		os | sepGetTuple( os );
-		return os;
+		return os | sepGetTuple( os );
 	} // sepTuple
 
-	ostype & endl( ostype & os ) {
-		os | '\n';
+	ostype & nl( ostype & os ) {
+		(ostype)(os | '\n');
 		setNL( os, true );
 		flush( os );
-		sepOff( os );									// prepare for next line
-		return os;
-	} // endl
+		return sepOff( os );							// prepare for next line
+	} // nl
+
+	ostype & nonl( ostype & os ) {
+		setNonl( os, true );							// indicate nonl manipulator
+		return os;
+	} // nonl
 
 	ostype & sepOn( ostype & os ) {
-		sepOn( os );
+		sepOn( os );									// call void returning
 		return os;
 	} // sepOn
 
 	ostype & sepOff( ostype & os ) {
-		sepOff( os );
+		sepOff( os );									// call void returning
 		return os;
 	} // sepOff
 
 	ostype & sepEnable( ostype & os ) {
-		sepEnable( os );
+		sepEnable( os );								// call void returning
 		return os;
 	} // sepEnable
 
 	ostype & sepDisable( ostype & os ) {
-		sepDisable( os );
+		sepDisable( os );								// call void returning
 		return os;
 	} // sepDisable
+
+	ostype & nlOn( ostype & os ) {
+		nlOn( os );										// call void returning
+		return os;
+	} // nlOn
+
+	ostype & nlOff( ostype & os ) {
+		nlOff( os );									// call void returning
+		return os;
+	} // nlOff
 } // distribution
 
-
 // tuples
-forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype & ?|?( ostype &, Params ); } )
-ostype & ?|?( ostype & os, T arg, Params rest ) {
-	os | arg;											// print first argument
-	sepSetCur( os, sepGetTuple( os ) );					// switch to tuple separator
-	os | rest;											// print remaining arguments
-	sepSetCur( os, sepGet( os ) );						// switch to regular separator
-	return os;
-} // ?|?
+forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype & ?|?( ostype &, Params ); } ) {
+	ostype & ?|?( ostype & os, T arg, Params rest ) {
+		(ostype)(os | arg);								// print first argument
+		sepSetCur( os, sepGetTuple( os ) );				// switch to tuple separator
+		(ostype)(os | rest);							// print remaining arguments
+		sepSetCur( os, sepGet( os ) );					// switch to regular separator
+		return os;
+	} // ?|?
+	void ?|?( ostype & os, T arg, Params rest ) {
+//		(ostype)(?|?( os, arg, rest )); if ( getANL( os ) ) nl( os );
+		(ostype)(os | arg);								// print first argument
+		sepSetCur( os, sepGetTuple( os ) );				// switch to tuple separator
+		(ostype)(os | rest);							// print remaining arguments
+		sepSetCur( os, sepGet( os ) );					// switch to regular separator
+		if ( getANL( os ) ) nl( os );
+	} // ?|?
+} // distribution
 
 //---------------------------------------
 
 // writes the range [begin, end) to the given stream
-forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) )
-void write( iterator_type begin, iterator_type end, ostype & os ) {
-	void print( elt_type i ) { os | i; }
-	for_each( begin, end, print );
-} // ?|?
-
-forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) )
-void write_reverse( iterator_type begin, iterator_type end, ostype & os ) {
-	void print( elt_type i ) { os | i; }
-	for_each_reverse( begin, end, print );
-} // ?|?
+forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) ) {
+	void write( iterator_type begin, iterator_type end, ostype & os ) {
+		void print( elt_type i ) { os | i; }
+		for_each( begin, end, print );
+	} // ?|?
+
+	void write_reverse( iterator_type begin, iterator_type end, ostype & os ) {
+		void print( elt_type i ) { os | i; }
+		for_each_reverse( begin, end, print );
+	} // ?|?
+} // distribution
 
 //---------------------------------------
@@ -386,8 +471,8 @@
 	} // ?|?
 
-	istype & endl( istype & is ) {
+	istype & nl( istype & is ) {
 		fmt( is, "%*[ \t\f\n\r\v]" );					// ignore whitespace
 		return is;
-	} // endl
+	} // nl
 } // distribution
 
Index: libcfa/src/iostream.hfa
===================================================================
--- libcfa/src/iostream.hfa	(revision 167d5ae3d404a556561f41a5c8d53b2064a0a99f)
+++ libcfa/src/iostream.hfa	(revision 24662ff50dfb325fe8845d2ec497b66224708e7d)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Aug 11 08:22:49 2018
-// Update Count     : 156
+// Last Modified On : Tue Dec 11 22:01:31 2018
+// Update Count     : 213
 //
 
@@ -25,11 +25,16 @@
 	const char * sepGetCur( ostype & );					// get current separator string
 	void sepSetCur( ostype &, const char * );			// set current separator string
-	bool getNL( ostype & );							// check newline
+	bool getNL( ostype & );								// check newline
 	void setNL( ostype &, bool );						// saw newline
+	bool getANL( ostype & );							// check auto newline
+	bool getNonl( ostype & );							// check nonnl manipulator
+	void setNonl( ostype &, bool );						// set nonnl manipulator
 	// public
 	void sepOn( ostype & );								// turn separator state on
 	void sepOff( ostype & );							// turn separator state off
 	bool sepDisable( ostype & );						// set default state to off, and return previous state
-	bool sepEnable( ostype & );						// set default state to on, and return previous state
+	bool sepEnable( ostype & );							// set default state to on, and return previous state
+	void nlOn( ostype & );								// turn auto-newline state on
+	void nlOff( ostype & );								// turn auto-newline state off
 
 	const char * sepGet( ostype & );					// get separator string
@@ -58,27 +63,46 @@
 forall( dtype ostype | ostream( ostype ) ) {
 	ostype & ?|?( ostype &, bool );
+	void & ?|?( ostype &, bool );
 
 	ostype & ?|?( ostype &, char );
+	void & ?|?( ostype &, char );
 	ostype & ?|?( ostype &, signed char );
+	void & ?|?( ostype &, signed char );
 	ostype & ?|?( ostype &, unsigned char );
+	void & ?|?( ostype &, unsigned char );
 
 	ostype & ?|?( ostype &, short int );
+	void & ?|?( ostype &, short int );
 	ostype & ?|?( ostype &, unsigned short int );
+	void & ?|?( ostype &, unsigned short int );
 	ostype & ?|?( ostype &, int );
+	void & ?|?( ostype &, int );
 	ostype & ?|?( ostype &, unsigned int );
+	void & ?|?( ostype &, unsigned int );
 	ostype & ?|?( ostype &, long int );
+	void & ?|?( ostype &, long int );
 	ostype & ?|?( ostype &, long long int );
+	void & ?|?( ostype &, long long int );
 	ostype & ?|?( ostype &, unsigned long int );
+	void & ?|?( ostype &, unsigned long int );
 	ostype & ?|?( ostype &, unsigned long long int );
+	void & ?|?( ostype &, unsigned long long int );
 
 	ostype & ?|?( ostype &, float ); // FIX ME: should not be required
+	void & ?|?( ostype &, float ); // FIX ME: should not be required
 	ostype & ?|?( ostype &, double );
+	void & ?|?( ostype &, double );
 	ostype & ?|?( ostype &, long double );
+	void & ?|?( ostype &, long double );
 
 	ostype & ?|?( ostype &, float _Complex );
+	void & ?|?( ostype &, float _Complex );
 	ostype & ?|?( ostype &, double _Complex );
+	void & ?|?( ostype &, double _Complex );
 	ostype & ?|?( ostype &, long double _Complex );
+	void & ?|?( ostype &, long double _Complex );
 
 	ostype & ?|?( ostype &, const char * );
+	void & ?|?( ostype &, const char * );
 	// ostype & ?|?( ostype &, const char16_t * );
 #if ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 ) // char32_t == wchar_t => ambiguous
@@ -87,8 +111,11 @@
 	// ostype & ?|?( ostype &, const wchar_t * );
 	ostype & ?|?( ostype &, const void * );
+	void & ?|?( ostype &, const void * );
 
 	// manipulators
 	ostype & ?|?( ostype &, ostype & (*)( ostype & ) );
-	ostype & endl( ostype & );
+	void ?|?( ostype &, ostype & (*)( ostype & ) );
+	ostype & nl( ostype & );
+	ostype & nonl( ostype & );
 	ostype & sep( ostype & );
 	ostype & sepTuple( ostype & );
@@ -97,16 +124,19 @@
 	ostype & sepDisable( ostype & );
 	ostype & sepEnable( ostype & );
+	ostype & nlOn( ostype & );
+	ostype & nlOff( ostype & );
 } // distribution
 
 // tuples
-forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype & ?|?( ostype &, Params ); } )
-ostype & ?|?( ostype & os, T arg, Params rest );
+forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype & ?|?( ostype &, Params ); } ) {
+	ostype & ?|?( ostype & os, T arg, Params rest );
+	void ?|?( ostype & os, T arg, Params rest );
+} // distribution
 
 // writes the range [begin, end) to the given stream
-forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) )
-void write( iterator_type begin, iterator_type end, ostype & os );
-
-forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) )
-void write_reverse( iterator_type begin, iterator_type end, ostype & os );
+forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) ) {
+	void write( iterator_type begin, iterator_type end, ostype & os );
+	void write_reverse( iterator_type begin, iterator_type end, ostype & os );
+} // distribution
 
 //---------------------------------------
@@ -152,5 +182,5 @@
 	// manipulators
 	istype & ?|?( istype &, istype & (*)( istype & ) );
-	istype & endl( istype & is );
+	istype & nl( istype & is );
 } // distribution
 
@@ -164,9 +194,12 @@
 
 
-#include <time_t.hfa>										// Duration (constructors) / Time (constructors)
-
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype & os, Duration dur );
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype & os, Time time );
-
+#include <time_t.hfa>									// Duration (constructors) / Time (constructors)
+
+forall( dtype ostype | ostream( ostype ) ) {
+	ostype & ?|?( ostype & os, Duration dur );
+	void ?|?( ostype & os, Duration dur );
+	ostype & ?|?( ostype & os, Time time );
+	void ?|?( ostype & os, Time time );
+} // distribution
 
 // Local Variables: //
Index: libcfa/src/rational.cfa
===================================================================
--- libcfa/src/rational.cfa	(revision 167d5ae3d404a556561f41a5c8d53b2064a0a99f)
+++ libcfa/src/rational.cfa	(revision 24662ff50dfb325fe8845d2ec497b66224708e7d)
@@ -10,6 +10,6 @@
 // Created On       : Wed Apr  6 17:54:28 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun  2 09:24:33 2018
-// Update Count     : 162
+// Last Modified On : Tue Dec 11 22:02:29 2018
+// Update Count     : 168
 //
 
@@ -35,5 +35,5 @@
 	static RationalImpl simplify( RationalImpl & n, RationalImpl & d ) {
 		if ( d == (RationalImpl){0} ) {
-			serr | "Invalid rational number construction: denominator cannot be equal to 0." | endl;
+			serr | "Invalid rational number construction: denominator cannot be equal to 0.";
 			exit( EXIT_FAILURE );
 		} // exit
@@ -175,8 +175,13 @@
 	} // ?|?
 
-	forall( dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, RationalImpl ); } )
-	ostype & ?|?( ostype & os, Rational(RationalImpl ) r ) {
-		return os | r.numerator | '/' | r.denominator;
-	} // ?|?
+	forall( dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, RationalImpl ); } ) {
+		ostype & ?|?( ostype & os, Rational(RationalImpl) r ) {
+			return os | r.numerator | '/' | r.denominator;
+		} // ?|?
+
+		void ?|?( ostype & os, Rational(RationalImpl) r ) {
+			(ostype)(os | r); if ( getANL( os ) ) nl( os );
+		} // ?|?
+	} // distribution
 } // distribution
 
Index: libcfa/src/rational.hfa
===================================================================
--- libcfa/src/rational.hfa	(revision 167d5ae3d404a556561f41a5c8d53b2064a0a99f)
+++ libcfa/src/rational.hfa	(revision 24662ff50dfb325fe8845d2ec497b66224708e7d)
@@ -12,6 +12,6 @@
 // Created On       : Wed Apr  6 17:56:25 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun  2 09:10:01 2018
-// Update Count     : 105
+// Last Modified On : Tue Dec  4 23:07:46 2018
+// Update Count     : 106
 //
 
@@ -92,6 +92,8 @@
 	istype & ?|?( istype &, Rational(RationalImpl) & );
 
-	forall( dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, RationalImpl ); } )
-	ostype & ?|?( ostype &, Rational(RationalImpl ) );
+	forall( dtype ostype | ostream( ostype ) | { ostype & ?|?( ostype &, RationalImpl ); } ) {
+		ostype & ?|?( ostype &, Rational(RationalImpl) );
+		void ?|?( ostype &, Rational(RationalImpl) );
+	} // distribution
 } // distribution
 
Index: libcfa/src/time.cfa
===================================================================
--- libcfa/src/time.cfa	(revision 167d5ae3d404a556561f41a5c8d53b2064a0a99f)
+++ libcfa/src/time.cfa	(revision 24662ff50dfb325fe8845d2ec497b66224708e7d)
@@ -10,6 +10,6 @@
 // Created On       : Tue Mar 27 13:33:14 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May  6 22:26:00 2018
-// Update Count     : 37
+// Last Modified On : Tue Dec 11 21:32:15 2018
+// Update Count     : 53
 //
 
@@ -31,14 +31,19 @@
 
 
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, Duration dur ) with( dur ) {
-	os | tv / TIMEGRAN;									// print seconds
-	long int ns = (tv < 0 ? -tv : tv) % TIMEGRAN;		// compute nanoseconds
-	if ( ns != 0 ) {									// some ?
-		char buf[16];
-		os | nanomsd( ns, buf );						// print nanoseconds
-	} // if
-	return os;
-} // ?|?
+forall( dtype ostype | ostream( ostype ) ) {
+	ostype & ?|?( ostype & os, Duration dur ) with( dur ) {
+		(ostype)(os | tv / TIMEGRAN);					// print seconds
+		long int ns = (tv < 0 ? -tv : tv) % TIMEGRAN;	// compute nanoseconds
+		if ( ns != 0 ) {								// some ?
+			char buf[16];
+			(ostype)(os | nanomsd( ns, buf ));			// print nanoseconds
+		} // if
+		return os;
+	} // ?|?
+
+	void ?|?( ostype & os, Duration dur ) with( dur ) {
+		(ostype)(os | dur); if ( getANL( os ) ) nl( os );
+	} // ?|?
+} // distribution
 
 
@@ -137,22 +142,26 @@
 } // strftime
 
-forall( dtype ostype | ostream( ostype ) )
-ostype & ?|?( ostype & os, Time time ) with( time ) {
-	char buf[32];										// at least 26
-	time_t s = tv / TIMEGRAN;
-    ctime_r( &s, (char *)&buf );						// 26 characters: "Wed Jun 30 21:49:08 1993\n"
-	buf[24] = '\0';										// remove trailing '\n'
-	long int ns = (tv < 0 ? -tv : tv) % TIMEGRAN;		// compute nanoseconds
-	if ( ns == 0 ) {									// none ?
-		os | buf;										// print date/time/year
-	} else {
-		buf[19] = '\0';									// truncate to "Wed Jun 30 21:49:08"
-		os | buf;										// print date/time
-		char buf2[16];
-		nanomsd( ns, buf2 );							// compute nanoseconds
-		os | buf2 | ' ' | &buf[20];						// print nanoseconds and year
-	} // if
-	return os;
-} // ?|?
+forall( dtype ostype | ostream( ostype ) ) {
+	ostype & ?|?( ostype & os, Time time ) with( time ) {
+		char buf[32];									// at least 26
+		time_t s = tv / TIMEGRAN;
+		ctime_r( &s, (char *)&buf );					// 26 characters: "Wed Jun 30 21:49:08 1993\n"
+		buf[24] = '\0';									// remove trailing '\n'
+		long int ns = (tv < 0 ? -tv : tv) % TIMEGRAN;	// compute nanoseconds
+		if ( ns == 0 ) {								// none ?
+			(ostype)(os | buf);							// print date/time/year
+		} else {
+			buf[19] = '\0';								// truncate to "Wed Jun 30 21:49:08"
+			char buf2[16];
+			nanomsd( ns, buf2 );						// compute nanoseconds
+			(ostype)(os | buf | buf2 | ' ' | &buf[20]);	// print date/time, nanoseconds and year
+		} // if
+		return os;
+	} // ?|?
+
+	void ?|?( ostype & os, Time time ) with( time ) {
+		(ostype)(os | time); if ( getANL( os ) ) nl( os );
+	} // ?|?
+} // distribution
 
 // Local Variables: //
