Index: libcfa/src/collections/string.cfa
===================================================================
--- libcfa/src/collections/string.cfa	(revision 739495a2dfb9ddf9e1f5cab76d8451ea64d277b3)
+++ libcfa/src/collections/string.cfa	(revision 38951c316de3e4ae1583d45726880474bcdeba7c)
@@ -236,22 +236,24 @@
 // Repetition
 
+void ?*=?(string & s, size_t factor) {
+    (*s.inner) *= factor;
+}
+
 string ?*?(const string & s, size_t factor) {
-    string ret = "";
-    for (factor) ret += s;
-    return ret;
-}
-
-void ?*=?(string & s, size_t factor) {
-    s = s * factor;
+    string ret = s;
+    ret *= factor;
+    return ret;
 }
 
 string ?*?(char c, size_t factor) {
     string ret = c;
-    return ret * factor;
+    ret *= factor;
+    return ret;
 }
 
 string ?*?(const char * s, size_t factor) {
     string ret = s;
-    return ret * factor;
+    ret *= factor;
+    return ret;
 }
 
Index: libcfa/src/collections/string_res.cfa
===================================================================
--- libcfa/src/collections/string_res.cfa	(revision 739495a2dfb9ddf9e1f5cab76d8451ea64d277b3)
+++ libcfa/src/collections/string_res.cfa	(revision 38951c316de3e4ae1583d45726880474bcdeba7c)
@@ -642,4 +642,13 @@
 
 
+///////////////////////////////////////////////////////////////////
+// Repetition
+
+void ?*=?(string_res & s, size_t factor) {
+    string_res s2 = { s, COPY_VALUE, 0, size(s) };
+    s = "";
+    for (factor) s += s2;
+}
+
 //////////////////////////////////////////////////////////
 // Comparisons
Index: libcfa/src/collections/string_res.hfa
===================================================================
--- libcfa/src/collections/string_res.hfa	(revision 739495a2dfb9ddf9e1f5cab76d8451ea64d277b3)
+++ libcfa/src/collections/string_res.hfa	(revision 38951c316de3e4ae1583d45726880474bcdeba7c)
@@ -136,4 +136,7 @@
 }
 
+// Repetition
+void ?*=?(string_res & s, size_t factor);
+
 // Character access
 void assignAt(const string_res & s, size_t index, char val);
Index: tests/collections/.expect/string-api-coverage.txt
===================================================================
--- tests/collections/.expect/string-api-coverage.txt	(revision 739495a2dfb9ddf9e1f5cab76d8451ea64d277b3)
+++ tests/collections/.expect/string-api-coverage.txt	(revision 38951c316de3e4ae1583d45726880474bcdeba7c)
@@ -29,4 +29,5 @@
 hello, friend
 bye, friend
+hellohellohellohello
 hellohellohello
 QQQ
Index: tests/collections/string-api-coverage.cfa
===================================================================
--- tests/collections/string-api-coverage.cfa	(revision 739495a2dfb9ddf9e1f5cab76d8451ea64d277b3)
+++ tests/collections/string-api-coverage.cfa	(revision 38951c316de3e4ae1583d45726880474bcdeba7c)
@@ -129,4 +129,9 @@
     // repetition
     //
+
+    sx = s;
+    sx *= 4;
+    sout | sx; // hellohellohellohello
+
     sx = s * 3;
     sout | sx; // hellohellohello
