Index: libcfa/src/collections/string.cfa
===================================================================
--- libcfa/src/collections/string.cfa	(revision d8a2f988fbdaa37173653d0e459271591e6afdd0)
+++ libcfa/src/collections/string.cfa	(revision 2f1656963c856b0273be7b573bf11a9e411e68a4)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May  4 21:50:03 2026
-// Update Count     : 400
+// Last Modified On : Fri May  8 07:41:00 2026
+// Update Count     : 409
 //
 
@@ -67,10 +67,10 @@
 }
 
-void ?{}( string & s, signed long int rhs ) {
+void ?{}( string & s, size_t rhs ) {
 	(s.inner) { malloc() };
 	?{}( *s.inner, rhs );
 }
 
-void ?{}( string & s, size_t rhs ) {
+void ?{}( string & s, ssize_t rhs ) {
 	(s.inner) { malloc() };
 	?{}( *s.inner, rhs );
@@ -118,35 +118,35 @@
 // Assignment
 
-PBOOST string & ?=?( string & s, string c ) {
-	(*s.inner) = (*c.inner);
-	return s;
-}
-
-string & ?=?( string & s, const char * val ) {
-	(*s.inner) = val;
-	return s;
-}
-
-string & ?=?( string & s, char val ) {
-	(*s.inner) = val;
-	return s;
-}
-
-string & assign( string & s, const string & c, size_t n ) {
-	assign( *s.inner, *c.inner, n );
-	return s;
-}
-
-string & assign( string & s, const char * cs , size_t n ) {
-	assign( *s.inner, cs, n );
-	return s;
-}
-
-string & ?=?( string & s, signed long int rhs ) {
-	(*s.inner) = rhs;
+PBOOST string & ?=?( string & s, string rhs ) {
+	(*s.inner) = (*rhs.inner);
+	return s;
+}
+
+string & ?=?( string & s, char rhs ) {
+	(*s.inner) = rhs;
+	return s;
+}
+
+string & ?=?( string & s, const char * rhs ) {
+	(*s.inner) = rhs;
+	return s;
+}
+
+string & assign( string & s, const string & rhs, size_t n ) {
+	assign( *s.inner, *rhs.inner, n );
+	return s;
+}
+
+string & assign( string & s, const char * rhs, size_t n ) {
+	assign( *s.inner, rhs, n );
 	return s;
 }
 
 string & ?=?( string & s, size_t rhs ) {
+	(*s.inner) = rhs;
+	return s;
+}
+
+string & ?=?( string & s, ssize_t rhs ) {
 	(*s.inner) = rhs;
 	return s;
@@ -403,8 +403,4 @@
 // Search
 
-bool contains( const string & s, char ch ) {
-	return contains( *s.inner, ch );
-}
-
 size_t find( const string & s, size_t start, size_t len, const string & key, size_t kstart, size_t klen ) {
 	if ( start < 0 ) { start += len( s ); }
@@ -449,15 +445,15 @@
 }
 
-bool includes( const string & s, const string & mask ) {
-	return includes( *s.inner, *mask.inner );
-}
-
-bool includes( const string & s, const char * mask ) {
-	return includes( *s.inner, mask );
-}
-
-bool includes( const string & s, const char * mask, size_t masksize ) {
-	return includes( *s.inner, mask, masksize );
-}
+// bool includes( const string & s, const string & search ) {
+// 	return includes( *s.inner, *search.inner );
+// }
+
+// bool includes( const string & s, const char * search ) {
+// 	return includes( *s.inner, search );
+// }
+
+// bool includes( const string & s, const char * search, size_t searchsize ) {
+// 	return includes( *s.inner, search, searchsize );
+// }
 
 bool startsWith( const string & s, const string & prefix ) {
Index: libcfa/src/collections/string.hfa
===================================================================
--- libcfa/src/collections/string.hfa	(revision d8a2f988fbdaa37173653d0e459271591e6afdd0)
+++ libcfa/src/collections/string.hfa	(revision 2f1656963c856b0273be7b573bf11a9e411e68a4)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May  4 21:54:23 2026
-// Update Count     : 332
+// Last Modified On : Fri May  8 07:40:57 2026
+// Update Count     : 353
 //
 
@@ -35,34 +35,33 @@
 void ?{}( string & s, const char * cs );				// copy from string literal (NULL-terminated)
 void ?{}( string & s, const char * cs, size_t size );	// copy specific length from buffer
-
-void ?{}( string & s, signed long int rhs );
 void ?{}( string & s, size_t rhs );
+void ?{}( string & s, ssize_t rhs );
 void ?{}( string & s, double rhs );
 void ?{}( string & s, long double rhs );
 void ?{}( string & s, double _Complex rhs );
 void ?{}( string & s, long double _Complex rhs );
-static inline void ?{}( string & s, int rhs ) { (s){(signed long int) rhs}; }
-
-PBOOST string & ?=?( string & s, string c );
-string & ?=?( string & s, const char * cs );			// copy from "literal"
-string & ?=?( string & s, char c );						// copy from 'l'
-string & assign( string & s, const string & c, size_t n );
-string & assign( string & s, const char * cs, size_t n );
-string & ?=?( string & s, signed long int rhs );
+
+PBOOST string & ?=?( string & s, string rhs );
+string & ?=?( string & s, char rhs );					// copy from 'l'
+string & ?=?( string & s, const char * rhs );			// copy from "literal"
+string & assign( string & s, const string & rhs, size_t n );
+string & assign( string & s, const char * rhs, size_t n );
 string & ?=?( string & s, size_t rhs );
+string & ?=?( string & s, ssize_t rhs );
 string & ?=?( string & s, double rhs );
 string & ?=?( string & s, long double rhs );
 string & ?=?( string & s, double _Complex rhs );
 string & ?=?( string & s, long double _Complex rhs );
-static inline string & ?=?( string & s, int rhs ) { return s = ((signed long int) rhs); } // to match cost of (char * int): int
-
+
+// Conversion
 static inline string tostr( char c ) { string s = c; return s; }
 static inline string tostr( const char * cs ) { string s = cs; return s; }
-static inline string tostr( signed long int v ) { string s = v; return s; }
 static inline string tostr( size_t v ) { string s = v; return s; }
+static inline string tostr( ssize_t v ) { string s = v; return s; }
 static inline string tostr( double v ) { string s = v; return s; }
 static inline string tostr( long double v ) { string s = v; return s; }
 static inline string tostr( long double _Complex v ) { string s = v; return s; }
 
+// C compatibility
 static inline string & strcpy( string & s, const char * cs ) { s = cs; return s; }
 static inline string & strncpy( string & s, const char * cs, size_t n ) { assign( s, cs, n ); return s; }
@@ -234,8 +233,4 @@
 
 // String search
-bool contains( const string & s, char ch );				// single character
-
-//int find( const string & s, size_t start, size_t len, const string & key, size_t kstart, size_t klen );
-size_t find$( const string_res & s, size_t start, size_t len, const string & key_res, size_t kstart, size_t klen );
 
 size_t find( const string & s, char key );
@@ -249,7 +244,8 @@
 size_t find( const string & s, size_t start, const char * key, size_t keysize );
 
-bool includes( const string & s, const string & mask );
-bool includes( const string & s, const char * mask );
-bool includes( const string & s, const char * mask, size_t masksize );
+static inline bool includes( const string & s, char key ) { return find( s, key ) < len( s ); }
+static inline bool includes( const string & s, const char * key ) { return find( s, key ) < len( s ); }
+static inline bool includes( const string & s, const string & key ) { return find( s, key ) < len( s ); }
+static inline bool includes( const string & s, const char * key, size_t keysize ){ return find( s, key, keysize ) < len( s ); }
 
 bool startsWith( const string & s, const string & prefix );
Index: libcfa/src/collections/string_res.cfa
===================================================================
--- libcfa/src/collections/string_res.cfa	(revision d8a2f988fbdaa37173653d0e459271591e6afdd0)
+++ libcfa/src/collections/string_res.cfa	(revision 2f1656963c856b0273be7b573bf11a9e411e68a4)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Apr 14 20:45:39 2025
-// Update Count     : 130
+// Last Modified On : Thu May  7 13:14:45 2026
+// Update Count     : 135
 //
 
@@ -750,11 +750,4 @@
 // Search
 
-bool contains(const string_res & s, char ch) {
-	for ( i; len(s) ) {
-		if (s[i] == ch) return true;
-	}
-	return false;
-}
-
 // int find$( const string_res & s, ssize_t start, ssize_t len, const string_res & k, ssize_t kstart, ssize_t klen ) {
 //     if ( start < 0 ) start = s.Handle.lnth + start;		// adjust negative starting locations
@@ -917,5 +910,9 @@
 static bool test( const charclass_res & mask, char c ) {
 	// instead, use sorted char list?
-	return contains( mask.chars, c );
+	for ( i; len(mask.chars) ) {
+		if (mask.chars[i] == c) return true;
+	}
+	return false;
+//	return contains( mask.chars, c );
 }
 
Index: libcfa/src/collections/string_res.hfa
===================================================================
--- libcfa/src/collections/string_res.hfa	(revision d8a2f988fbdaa37173653d0e459271591e6afdd0)
+++ libcfa/src/collections/string_res.hfa	(revision 2f1656963c856b0273be7b573bf11a9e411e68a4)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Apr 13 21:03:37 2025
-// Update Count     : 79
+// Last Modified On : Thu May  7 13:14:04 2026
+// Update Count     : 83
 //
 
@@ -94,6 +94,6 @@
 	?{}( s, src, mode, 0, (len(src) > maxlen)?maxlen:len(src) );
 }
+void ?{}( string_res & s, size_t rhs );
 void ?{}( string_res & s, ssize_t rhs );
-void ?{}( string_res & s, size_t rhs );
 void ?{}( string_res & s, double rhs );
 void ?{}( string_res & s, long double rhs );
@@ -222,5 +222,4 @@
 
 // String search
-bool contains( const string_res & s, char ch); // single character
 
 int find$( const string_res & s, ssize_t start, ssize_t len, const string_res & key, ssize_t kstart, ssize_t klen );
Index: tests/collections/string-api-coverage.cfa
===================================================================
--- tests/collections/string-api-coverage.cfa	(revision d8a2f988fbdaa37173653d0e459271591e6afdd0)
+++ tests/collections/string-api-coverage.cfa	(revision 2f1656963c856b0273be7b573bf11a9e411e68a4)
@@ -264,5 +264,5 @@
 
     s += '?'; // already tested
-    sout | contains( s, 'h' ) | contains( s, '?' ) | contains( s, 'o' ); // true true false
+    sout | includes( s, 'h' ) | includes( s, '?' ) | includes( s, 'o' ); // true true false
 
     sout
