Index: src/libcfa/fstream.c
===================================================================
--- src/libcfa/fstream.c	(revision 87d13cd6f0b6eede5621fb0f5bd5b06911c656fe)
+++ src/libcfa/fstream.c	(revision cb914379c23218fde6d6aaf354fb109d6e02f15c)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Mar 21 20:56:10 2017
-// Update Count     : 215
+// Last Modified On : Wed Mar 22 16:17:21 2017
+// Update Count     : 221
 //
 
@@ -25,4 +25,5 @@
 #include <complex.h>									// creal, cimag
 }
+#include "assert"
 
 #define IO_MSG "I/O error: "
@@ -37,15 +38,17 @@
 void sepSetCur( ofstream * os, const char * sepCur ) { os->sepCur = sepCur; }
 
-const char * sepGet( ofstream * os ) { return &(os->separator[0]); }
+const char * sepGet( ofstream * os ) { return os->separator; }
 
 void sepSet( ofstream * os, const char * s ) {
-	strncpy( &(os->separator[0]), s, separateSize - 1 );
+	assert( s );
+	strncpy( os->separator, s, separateSize - 1 );
 	os->separator[separateSize - 1] = '\0';
 } // sepSet
 
-const char * sepGetTuple( ofstream * os ) { return &(os->tupleSeparator[0]); }
+const char * sepGetTuple( ofstream * os ) { return os->tupleSeparator; }
 
 void sepSetTuple( ofstream * os, const char * s ) {
-	strncpy( &(os->tupleSeparator[0]), s, separateSize - 1 );
+	assert( s );
+	strncpy( os->tupleSeparator, s, separateSize - 1 );
 	os->tupleSeparator[separateSize - 1] = '\0';
 } // sepSet
Index: src/libcfa/iostream.c
===================================================================
--- src/libcfa/iostream.c	(revision 87d13cd6f0b6eede5621fb0f5bd5b06911c656fe)
+++ src/libcfa/iostream.c	(revision cb914379c23218fde6d6aaf354fb109d6e02f15c)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Mar 21 22:05:57 2017
-// Update Count     : 348
+// Last Modified On : Wed Mar 22 17:21:23 2017
+// Update Count     : 358
 //
 
@@ -157,5 +157,5 @@
 		// opening delimiters, no space after
 		['('] : Open, ['['] : Open, ['{'] : Open,
-		['$'] : Open, ['='] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open,
+		['='] : Open, ['$'] : Open, [(unsigned char)'£'] : Open, [(unsigned char)'¥'] : Open,
 		[(unsigned char)'¡'] : Open, [(unsigned char)'¿'] : Open, [(unsigned char)'«'] : Open,
 		// closing delimiters, no space before
@@ -201,8 +201,13 @@
 forall( dtype ostype, otype T, ttype Params | ostream( ostype ) | writeable( T ) | { ostype * ?|?( ostype *, Params ); } )
 ostype * ?|?( ostype * os, T arg, Params rest ) {
+	forall( ttype Params ) ostype * prtTuple( ostype * os, T arg, Params rest ) {
+		os | arg;										// print first argument
+		os | rest;										// print remaining arguments
+		return os;
+	} // prtTuple
 	sepSetCur( os, sepGetTuple( os ) );					// switch to tuple separator
-	os | arg;											// print first argument
-	os | rest;											// print remaining arguments
+	prtTuple( os, arg, rest );							// recursively print tuple
 	sepSetCur( os, sepGet( os ) );						// switch to regular separator
+	return os;
 } // ?|?
 
Index: src/tests/.expect/io.txt
===================================================================
--- src/tests/.expect/io.txt	(revision 87d13cd6f0b6eede5621fb0f5bd5b06911c656fe)
+++ src/tests/.expect/io.txt	(revision cb914379c23218fde6d6aaf354fb109d6e02f15c)
@@ -25,3 +25,7 @@
 27 25	27 25
 27
-Segmentation fault (core dumped)
+3, 4, a, 7.2
+3, 4, a, 7.2
+3 4 a 7.2
+ 3 4 a 7.234a7.2 3 4 a 7.2
+3-4-a-7.2^3^4-3-4-a-7.2
Index: src/tests/io.c
===================================================================
--- src/tests/io.c	(revision 87d13cd6f0b6eede5621fb0f5bd5b06911c656fe)
+++ src/tests/io.c	(revision cb914379c23218fde6d6aaf354fb109d6e02f15c)
@@ -10,6 +10,6 @@
 // Created On       : Wed Mar  2 16:56:02 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Mar 21 21:24:50 2017
-// Update Count     : 47
+// Last Modified On : Tue Mar 21 22:36:06 2017
+// Update Count     : 48
 // 
 
@@ -108,5 +108,5 @@
 
 	[int, int, const char *, double] t = { 3, 4, "a", 7.2 };
-	sout | [ 3, 4, 'a', 7.2 ] | endl;
+	sout | [ 3, 4, "a", 7.2 ] | endl;
 	sout | t | endl;
 	sepSetTuple( sout, " " );
