Index: libcfa/src/collections/string.cfa
===================================================================
--- libcfa/src/collections/string.cfa	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
+++ libcfa/src/collections/string.cfa	(revision bb1eabcd6f64b0ee41ffacd7dd40e7329004f68e)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Sep 15 10:26:35 2025
-// Update Count     : 394
+// Last Modified On : Sun May  3 23:21:25 2026
+// Update Count     : 395
 //
 
@@ -214,5 +214,5 @@
 		for ( i; l ) cstr[i] = f.val[i];					// copy string
 		cstr[l] = '\0';										// terminate
-		_Ostream_Manip(const char *) cf @= { cstr, f.wd, f.pc, f.base, {f.all} };
+		_Ostream_Manip(const char *) cf @= { cstr, f.wd, f.pc, f.base, {f.all}, f.qleft, f.qright };
 		return os | cf | nonl;
 	} // ?|?
Index: libcfa/src/collections/string.hfa
===================================================================
--- libcfa/src/collections/string.hfa	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
+++ libcfa/src/collections/string.hfa	(revision bb1eabcd6f64b0ee41ffacd7dd40e7329004f68e)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat May  2 19:09:55 2026
-// Update Count     : 322
+// Last Modified On : Sun May  3 23:24:08 2026
+// Update Count     : 324
 //
 
@@ -90,5 +90,6 @@
 	_Ostream_Manip(string) oct( string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = 1, .pc = 0, .base = 'o', { .all = 0 } }; }
 	_Ostream_Manip(string) hex( string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = 1, .pc = 0, .base = 'x', { .all = 0 } }; }
-	_Ostream_Manip(string) quote( string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = 1, .pc = 0, .base = 's', { .flags.quote = true } }; }
+	_Ostream_Manip(string) quote( string s, const char qleft = '"', const char qright = '\0' ) {
+		return (_Ostream_Manip(string))@{ .val = s, .wd = 1, .pc = 0, .base = 's', { .flags.quote = true }, .qleft = qleft, .qright = qright }; }
 	_Ostream_Manip(string) wd( unsigned int wd, string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = wd, .pc = 0, .base = 's', { .all = 0 } }; }
 	_Ostream_Manip(string) wd( unsigned int wd, unsigned int pc, string s ) { return (_Ostream_Manip(string))@{ .val = s, .wd = wd, .pc = pc, .base = 's', { .flags.pc = true } }; }
@@ -98,5 +99,6 @@
 	_Ostream_Manip(string) & nobase( _Ostream_Manip(string) & fmt ) { fmt.flags.nobsdp = true; return fmt; }
 	_Ostream_Manip(string) & upcase( _Ostream_Manip(string) & fmt ) { if ( fmt.base == 'x' || fmt.base == 'b' ) fmt.base -= 32; /* upper case */ return fmt; }
-	_Ostream_Manip(string) & quote( _Ostream_Manip(string) & fmt ) { fmt.flags.quote = true; return fmt; } \
+	_Ostream_Manip(string) & quote( _Ostream_Manip(string) & fmt, const char qleft = '"', const char qright = '\0' ) {
+		fmt.flags.quote = true; fmt.qleft = qleft, fmt.qright = qright; return fmt; }
 } // distribution
 
Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
+++ libcfa/src/iostream.cfa	(revision bb1eabcd6f64b0ee41ffacd7dd40e7329004f68e)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May  3 08:08:29 2026
-// Update Count     : 2241
+// Last Modified On : Sun May  3 22:02:37 2026
+// Update Count     : 2271
 //
 
@@ -698,6 +698,5 @@
 		} // if
 		if ( f.flags.quote ) {							// print as string
-			char qv[] = "' '";
-			qv[1] = f.val;
+			char qv[] = { f.qleft, f.val, f.qright ? : f.qleft, '\0' };
 			f.flags.quote = false;						// already quoted
 			_Ostream_Manip(const char *) fmtuc @= { qv, f.wd, f.pc, 's', {f.all} };
@@ -743,8 +742,6 @@
 			int len = strlen( f.val );
 			char qv[len + 3];							// space for quotes and '\0'
-			qv[0] = '"';								// copy string surrounded with quotes
-			strcpy( &qv[1], f.val );
-			qv[len + 1] = '"';
-			qv[len + 2] = '\0';
+			qv[0] = f.qleft; strcpy( &qv[1], f.val );
+			qv[len + 1] = f.qright ? : f.qleft; qv[len + 2] = '\0'; // copy string surrounded with quotes
 			f.flags.quote = false;						// already quoted
 			_Ostream_Manip(const char *) fmtuc @= { qv, f.wd, f.pc, 's', {f.all} };
Index: libcfa/src/iostream.hfa
===================================================================
--- libcfa/src/iostream.hfa	(revision b19b3623da9e91bd1dc2397cc1211cf5def36992)
+++ libcfa/src/iostream.hfa	(revision bb1eabcd6f64b0ee41ffacd7dd40e7329004f68e)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat May  2 18:48:56 2026
-// Update Count     : 780
+// Last Modified On : Sun May  3 21:55:06 2026
+// Update Count     : 829
 //
 
@@ -209,4 +209,5 @@
 	char base;											// numeric base / floating-point style
 	inline _Ostream_Manip_Mode;
+	char qleft, qright;									// quote delimiters (PLACE HERE SO OPTIONAL IN INITIALIZATION)
 }; // _Ostream_Manip
 
@@ -289,5 +290,6 @@
 	_Ostream_Manip(char) oct( char c ) { return (_Ostream_Manip(char))@{ .val = c, .wd = 1, .pc = 0, .base = 'o', { .all = 0 } }; }
 	_Ostream_Manip(char) hex( char c ) { return (_Ostream_Manip(char))@{ .val = c, .wd = 1, .pc = 0, .base = 'x', { .all = 0 } }; }
-	_Ostream_Manip(char) quote( char c ) { return (_Ostream_Manip(char))@{ .val = c, .wd = 1, .pc = 0, .base = 'c', { .flags.quote = true } }; }
+	_Ostream_Manip(char) quote( char c, const char qleft = '\'', const char qright = '\0' ) {
+		return (_Ostream_Manip(char))@{ .val = c, .wd = 1, .pc = 0, .base = 'c', { .flags.quote = true }, .qleft = qleft, .qright = qright }; }
 	_Ostream_Manip(char) wd( unsigned int wd, char c ) { return (_Ostream_Manip(char))@{ .val = c, .wd = wd, .pc = 0, .base = 'c', { .all = 0 } }; }
 	_Ostream_Manip(char) & wd( unsigned int wd, _Ostream_Manip(char) & fmt ) { fmt.wd = wd; return fmt; }
@@ -295,5 +297,6 @@
 	_Ostream_Manip(char) & upcase( _Ostream_Manip(char) & fmt ) { if ( fmt.base == 'x' || fmt.base == 'b' ) fmt.base -= 32; /* upper case */ return fmt; }
 	_Ostream_Manip(char) & nobase( _Ostream_Manip(char) & fmt ) { fmt.flags.nobsdp = true; return fmt; }
-	_Ostream_Manip(char) & quote( _Ostream_Manip(char) & fmt ) { fmt.flags.quote = true; return fmt; }
+	_Ostream_Manip(char) & quote( _Ostream_Manip(char) & fmt, const char qleft = '\'', const char qright = '\0' ) {
+		fmt.flags.quote = true; fmt.qleft = qleft, fmt.qright = qright; return fmt; }
 } // distribution
 forall( ostype & | basic_ostream( ostype ) ) {
@@ -308,5 +311,6 @@
 	_Ostream_Manip(const char *) oct( const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = 1, .pc = 0, .base = 'o', { .all = 0 } }; }
 	_Ostream_Manip(const char *) hex( const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = 1, .pc = 0, .base = 'x', { .all = 0 } }; }
-	_Ostream_Manip(const char *) quote( const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = 1, .pc = 0, .base = 's', { .flags.quote = true } }; }
+	_Ostream_Manip(const char *) quote( const char s[], const char qleft = '"', const char qright = '\0' ) {
+		return (_Ostream_Manip(const char *))@{ .val = s, .wd = 1, .pc = 0, .base = 's', { .flags.quote = true }, .qleft = qleft, .qright = qright }; }
 	_Ostream_Manip(const char *) wd( unsigned int wd, const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = wd, .pc = 0, .base = 's', { .all = 0 } }; }
 	_Ostream_Manip(const char *) wd( unsigned int wd, unsigned int pc, const char s[] ) { return (_Ostream_Manip(const char *))@{ .val = s, .wd = wd, .pc = pc, .base = 's', { .flags.pc = true } }; }
@@ -316,5 +320,6 @@
 	_Ostream_Manip(const char *) & upcase( _Ostream_Manip(const char *) & fmt ) { if ( fmt.base == 'x' || fmt.base == 'b' ) fmt.base -= 32; /* upper case */ return fmt; }
 	_Ostream_Manip(const char *) & nobase( _Ostream_Manip(const char *) & fmt ) { fmt.flags.nobsdp = true; return fmt; }
-	_Ostream_Manip(const char *) & quote( _Ostream_Manip(const char *) & fmt ) { fmt.flags.quote = true; return fmt; } \
+	_Ostream_Manip(const char *) & quote( _Ostream_Manip(const char *) & fmt, const char qleft = '"', const char qright = '\0' ) {
+		fmt.flags.quote = true; fmt.qleft = qleft; fmt.qright = qright; return fmt; }
 } // distribution
 forall( ostype & | basic_ostream( ostype ) ) {
@@ -430,5 +435,5 @@
 	union {
 		const char * scanset;
-		char delimiters[3];								// [0] => left, [1] => right
+		char delimiters[3];								// [0] => qleft or terminator, [1] => qright or getline '\0', [2] => char '\0' or char * '\1'
 	};
 	int wd;												// width
