Index: libcfa/src/collections/string.cfa
===================================================================
--- libcfa/src/collections/string.cfa	(revision 906d8fa2462dabd55ea8943acbe9ac9f33195f35)
+++ libcfa/src/collections/string.cfa	(revision 544deb9e858ecd53a7b4d97ac4ac077c84729e37)
@@ -30,7 +30,7 @@
 
 // private (not in header)
-static void ?{}( string & s, string_res & src, size_t start, size_t end ) {
-    (s.inner) { malloc() };
-    ?{}( *s.inner, src, SHARE_EDITS, start, end );
+static void ?{}( string & s, string_res & src, size_t start, size_t len ) {
+    (s.inner) { malloc() };
+    ?{}( *s.inner, src, SHARE_EDITS, start, len );
 }
 
@@ -161,11 +161,11 @@
 // Slicing
 
-string ?()( string & s, size_t start, size_t end ) {
-    string ret = { *s.inner, start, end };
+string ?()( string & s, size_t start, size_t len ) {
+    string ret = { *s.inner, start, len };
     return ret`shareEdits;
 }
 
 string ?()( string & s, size_t start ) {
-    string ret = { *s.inner, start, size( s ) };
+    string ret = { *s.inner, start, size( s ) - start };
     return ret`shareEdits;
 }
@@ -286,5 +286,5 @@
 
 string ?[?](string & s, size_t index) {
-    string ret = { *s.inner, index, index + 1 };
+    string ret = { *s.inner, index, 1 };
     return ret`shareEdits;
 }
Index: libcfa/src/collections/string.hfa
===================================================================
--- libcfa/src/collections/string.hfa	(revision 906d8fa2462dabd55ea8943acbe9ac9f33195f35)
+++ libcfa/src/collections/string.hfa	(revision 544deb9e858ecd53a7b4d97ac4ac077c84729e37)
@@ -162,5 +162,5 @@
 
 // Slicing
-string ?()( string & s, size_t start, size_t end );  // TODO const?
+string ?()( string & s, size_t start, size_t len );  // TODO const?
 string ?()( string & s, size_t start);
 
Index: libcfa/src/collections/string_res.cfa
===================================================================
--- libcfa/src/collections/string_res.cfa	(revision 906d8fa2462dabd55ea8943acbe9ac9f33195f35)
+++ libcfa/src/collections/string_res.cfa	(revision 544deb9e858ecd53a7b4d97ac4ac077c84729e37)
@@ -346,7 +346,9 @@
 }
 
+
 // General copy constructor
-void ?{}(string_res & s, const string_res & s2, StrResInitMode mode, size_t start, size_t end ) {
-
+void ?{}(string_res & s, const string_res & s2, StrResInitMode mode, size_t start, size_t len ) {
+
+    size_t end = start + len;
     verify( start <= end && end <= s2.Handle.lnth );
 
@@ -611,5 +613,8 @@
 
 void assignAt(const string_res & s, size_t index, char val) {
-    string_res editZone = { s, SHARE_EDITS, index, index+1 };
+    // caution: not tested (not reachable by string-api-coverage interface)
+    // equivalent form at string level is `s[index] = val`,
+    // which uses the overload that returns a length-1 string
+    string_res editZone = { s, SHARE_EDITS, index, 1 };
     assign(editZone, &val, 1);
 }
@@ -656,5 +661,5 @@
 
 void ?*=?(string_res & s, size_t factor) {
-    string_res s2 = { s, COPY_VALUE, 0, size(s) };
+    string_res s2 = { s, COPY_VALUE };
     s = "";
     for (factor) s += s2;
Index: libcfa/src/collections/string_res.hfa
===================================================================
--- libcfa/src/collections/string_res.hfa	(revision 906d8fa2462dabd55ea8943acbe9ac9f33195f35)
+++ libcfa/src/collections/string_res.hfa	(revision 544deb9e858ecd53a7b4d97ac4ac077c84729e37)
@@ -87,5 +87,5 @@
 
 enum StrResInitMode { COPY_VALUE, SHARE_EDITS };
-void ?{}(string_res & s, const string_res & src, StrResInitMode, size_t start, size_t end );
+void ?{}(string_res & s, const string_res & src, StrResInitMode, size_t start, size_t len );
 static inline void ?{}(string_res & s, const string_res & src, StrResInitMode mode ) {
     ?{}( s, src, mode, 0, size(src));
