Index: libcfa/src/iostream.cfa
===================================================================
--- libcfa/src/iostream.cfa	(revision 097c8d0db2c39c0fca0eb36f369aea4b09227342)
+++ libcfa/src/iostream.cfa	(revision b67b6322c8f003229f94dfa2140f1d5b55e74cbe)
@@ -960,5 +960,16 @@
 	istype & ?|?( istype & is, _Istream_Cskip f ) {
 		// printf( "skip %s %d\n", f.scanset, f.wd );
-		if ( f.scanset ) fmt( is, f.scanset, "" );		// no input arguments
+		if ( f.scanset ) {
+			int nscanset = strlen(f.scanset);
+			char fmtstr[ sizeof("%*[]") + nscanset ];
+			int pos = 0;
+			fmtstr[pos] = '%';                  pos += 1;
+			fmtstr[pos] = '*';                  pos += 1;
+			fmtstr[pos] = '[';                  pos += 1;
+			strcpy( &fmtstr[pos], f.scanset );  pos += nscanset;
+			fmtstr[pos] = ']';                  pos += 1;
+			fmtstr[pos] = '\0';
+			fmt( is, fmtstr, (void*)0 );  // last arg is dummy: suppress gcc warning
+		}
 		else for ( f.wd ) fmt( is, "%*c" );
 		return is;
@@ -1000,9 +1011,12 @@
 
 		int check = f.wd - 2;
-		if ( ! f.flags.rwd ) f.s[check] = '\0';			// insert sentinel
+		if (! f.flags.ignore ) {
+			f.s[0] = '\0';
+			if ( ! f.flags.rwd ) f.s[check] = '\0';		// insert sentinel
+		}
 		len = fmt( is, fmtstr, f.s );
 		//fprintf( stderr, "KK %s %zd %d %c %s\n", fmtstr, len, check, f.s[check], f.s );
 
-		if ( ! f.flags.rwd && f.s[check] != '\0' )		// sentinel overwritten ?
+		if (! f.flags.ignore && ! f.flags.rwd && f.s[check] != '\0' ) // sentinel overwritten ?
 			throw (cstring_length){ &cstring_length_vt };
 
Index: tests/collections/.expect/string-istream-manip.txt
===================================================================
--- tests/collections/.expect/string-istream-manip.txt	(revision 097c8d0db2c39c0fca0eb36f369aea4b09227342)
+++ tests/collections/.expect/string-istream-manip.txt	(revision b67b6322c8f003229f94dfa2140f1d5b55e74cbe)
@@ -12,4 +12,6 @@
 12 wwwwwwww
 13 wwwwwwww
+14 cccc
+15 
 1 yyyyyyyyyyyyyyyyyyyy
 2 abcxxx
@@ -25,2 +27,4 @@
 12 wwwwwwww
 13 wwwwwwww
+14 cccc
+15 
Index: tests/collections/.in/string-istream-manip.txt
===================================================================
--- tests/collections/.in/string-istream-manip.txt	(revision 097c8d0db2c39c0fca0eb36f369aea4b09227342)
+++ tests/collections/.in/string-istream-manip.txt	(revision b67b6322c8f003229f94dfa2140f1d5b55e74cbe)
@@ -1,12 +1,14 @@
 abc 
-abc 
+cccccb 
 xx
 abcxxx
 abcyyy
 aaaaaaaaxxxxxxxxaabbccbbdddwwwbbbbbbbbwwwwwwwwaaaaaaaawwwwwwww
+uuuuuccccuuuuu
 abc 
-abc 
+cccccb 
 xx
 abcxxx
 abcyyy
 aaaaaaaaxxxxxxxxaabbccbbdddwwwbbbbbbbbwwwwwwwwaaaaaaaawwwwwwww
+uuuuuccccuuuuu
Index: tests/collections/string-istream-manip.cfa
===================================================================
--- tests/collections/string-istream-manip.cfa	(revision 097c8d0db2c39c0fca0eb36f369aea4b09227342)
+++ tests/collections/string-istream-manip.cfa	(revision b67b6322c8f003229f94dfa2140f1d5b55e74cbe)
@@ -23,5 +23,12 @@
         sin | ignore( incl( "abc", wdi( 8, s ) ) );     sout | "12" | s;
         sin | ignore( excl( "abc", wdi( 8, s ) ) );     sout | "13" | s;
-    }
+
+		s = "q";
+		sin | incl( "abc", s );                         sout | "14" | s;
+		s = "q";
+		sin | excl( "u", s );                           sout | "15" | s;
+		sin | skip( "u" );
+		sin | "\n";
+	}
     {
         string_res s = "yyyyyyyyyyyyyyyyyyyy";
@@ -41,4 +48,11 @@
         sin | ignore( incl( "abc", wdi( 8, s ) ) );     sout | "12" | s;
         sin | ignore( excl( "abc", wdi( 8, s ) ) );     sout | "13" | s;
+
+		s = "q";
+		sin | incl( "abc", s );                         sout | "14" | s;
+		s = "q";
+		sin | excl( "u", s );                           sout | "15" | s;
+		sin | skip( "u" );
+		sin | "\n";
     }
 }
Index: tests/io/.expect/manipulatorsInput.arm64.txt
===================================================================
--- tests/io/.expect/manipulatorsInput.arm64.txt	(revision 097c8d0db2c39c0fca0eb36f369aea4b09227342)
+++ tests/io/.expect/manipulatorsInput.arm64.txt	(revision b67b6322c8f003229f94dfa2140f1d5b55e74cbe)
@@ -15,4 +15,6 @@
 12 wwwwwwww
 13 wwwwwwww
+14 rc=1, cccc
+15 rc=0, q
 1 yyyyyyyyyyyyyyyyyyyy
 2 abcxxx
@@ -28,4 +30,6 @@
 12 wwwwwwww
 13 wwwwwwww
+14 cccc
+15
 a
 a
Index: tests/io/.expect/manipulatorsInput.x64.txt
===================================================================
--- tests/io/.expect/manipulatorsInput.x64.txt	(revision 097c8d0db2c39c0fca0eb36f369aea4b09227342)
+++ tests/io/.expect/manipulatorsInput.x64.txt	(revision b67b6322c8f003229f94dfa2140f1d5b55e74cbe)
@@ -15,4 +15,6 @@
 12 wwwwwwww
 13 wwwwwwww
+14 rc=1, cccc
+15 rc=0, q
 1 yyyyyyyyyyyyyyyyyyyy
 2 abcxxx
@@ -28,4 +30,6 @@
 12 wwwwwwww
 13 wwwwwwww
+14 cccc
+15
 a
 a
Index: tests/io/.expect/manipulatorsInput.x86.txt
===================================================================
--- tests/io/.expect/manipulatorsInput.x86.txt	(revision 097c8d0db2c39c0fca0eb36f369aea4b09227342)
+++ tests/io/.expect/manipulatorsInput.x86.txt	(revision b67b6322c8f003229f94dfa2140f1d5b55e74cbe)
@@ -15,4 +15,6 @@
 12 wwwwwwww
 13 wwwwwwww
+14 rc=1, cccc
+15 rc=0, q
 1 yyyyyyyyyyyyyyyyyyyy
 2 abcxxx
@@ -28,4 +30,6 @@
 12 wwwwwwww
 13 wwwwwwww
+14 cccc
+15
 a
 a
Index: tests/io/.in/manipulatorsInput.txt
===================================================================
--- tests/io/.in/manipulatorsInput.txt	(revision 097c8d0db2c39c0fca0eb36f369aea4b09227342)
+++ tests/io/.in/manipulatorsInput.txt	(revision b67b6322c8f003229f94dfa2140f1d5b55e74cbe)
@@ -2,15 +2,17 @@
 123456789
 abc 
-abc 
+cccccb 
 xx
 abcxxx
 abcyyy
 aaaaaaaaxxxxxxxxaabbccbbdddwwwbbbbbbbbwwwwwwwwaaaaaaaawwwwwwww
+uuuuuccccuuuuu
 abc 
-abc 
+cccccb 
 xx
 abcxxx
 abcyyy
 aaaaaaaaxxxxxxxxaabbccbbdddwwwbbbbbbbbwwwwwwwwaaaaaaaawwwwwwww
+uuuuuccccuuuuu
 ab
 0xff 017 15-15
Index: tests/io/manipulatorsInput.cfa
===================================================================
--- tests/io/manipulatorsInput.cfa	(revision 097c8d0db2c39c0fca0eb36f369aea4b09227342)
+++ tests/io/manipulatorsInput.cfa	(revision b67b6322c8f003229f94dfa2140f1d5b55e74cbe)
@@ -52,6 +52,6 @@
 	{
 		char s[] = "yyyyyyyyyyyyyyyyyyyy";
-		const char sk[] = "abc";
-		scanf( "abc " ); scanf( sk ); for ( 5 ) scanf( "%*c" );	printf( "1 %s\n", s );
+		const char sk_fmt[] = "%*[abc]";
+		scanf( "abc " ); scanf( sk_fmt ); for ( 5 ) scanf( "%*c" ); printf( "1 %s\n", s );
 		scanf( "%s", s );								printf( "2 %s\n", s );
 		scanf( "%*s" );									printf( "3 %s\n", s );
@@ -67,4 +67,12 @@
 		scanf( "%*8[abc]" );							printf( "12 %s\n", s );
 		scanf( "%*8[^abc]" );							printf( "13 %s\n", s );
+
+		int rc;
+		s[0] = 'q'; s[1] = '\0'; rc = 99;
+		rc = scanf( "%[abc]", s );						printf( "14 rc=%d, %s\n", rc, s );
+		s[0] = 'q'; s[1] = '\0'; rc = 99;
+		rc = scanf( "%[^u]", s );						printf( "15 rc=%d, %s\n", rc, s );
+		scanf( "%*[u]" );
+		scanf("\n");
 	}
 	{
@@ -85,4 +93,11 @@
 		sin | ignore( incl( "abc", wdi( sizeof(s), 8, s ) ) ); sout | "12" | s;
 		sin | ignore( excl( "abc", wdi( sizeof(s), 8, s ) ) ); sout | "13" | s;
+
+		s[0] = 'q'; s[1] = '\0';
+		sin | incl( "abc", wdi( sizeof(s), s ) );		sout | "14" | s;
+		s[0] = 'q'; s[1] = '\0';
+		sin | excl( "u", wdi( sizeof(s), s ) );			sout | "15" | s;
+		sin | skip( "u" );
+		sin | "\n";
 	}
     /* Keep harmonized with collections/string-istream-manip */
