Index: libcfa/src/collections/string.cfa
===================================================================
--- libcfa/src/collections/string.cfa	(revision dab6e3975ec990501362d413e29071b3bcb74874)
+++ libcfa/src/collections/string.cfa	(revision c4f8c4bfa2372f6ff1d67445f9282c8bba3f0770)
@@ -298,5 +298,5 @@
 }
 
-void ?+=?( string & s, const string & s2 ) {
+PBOOST void ?+=?( string & s, string s2 ) {
 	(*s.inner) += (*s2.inner);
 }
Index: libcfa/src/collections/string.hfa
===================================================================
--- libcfa/src/collections/string.hfa	(revision dab6e3975ec990501362d413e29071b3bcb74874)
+++ libcfa/src/collections/string.hfa	(revision c4f8c4bfa2372f6ff1d67445f9282c8bba3f0770)
@@ -160,5 +160,5 @@
 // Concatenation
 void ?+=?( string & s, char c );
-void ?+=?( string & s, const string & s2 );
+PBOOST void ?+=?( string & s, string );
 void append( string & s, const string & s2, size_t maxlen );
 void ?+=?( string & s, const char * s2 );
Index: tests/collections/.expect/string-operator.txt
===================================================================
--- tests/collections/.expect/string-operator.txt	(revision dab6e3975ec990501362d413e29071b3bcb74874)
+++ tests/collections/.expect/string-operator.txt	(revision c4f8c4bfa2372f6ff1d67445f9282c8bba3f0770)
@@ -99,2 +99,15 @@
 (skip)
 0x2a 0x2d
+
+a
+aa
+aaaa
+
+ab
+abab
+ababababab
+
+42
+139
+
+a ab
Index: tests/collections/string-operator.cfa
===================================================================
--- tests/collections/string-operator.cfa	(revision dab6e3975ec990501362d413e29071b3bcb74874)
+++ tests/collections/string-operator.cfa	(revision c4f8c4bfa2372f6ff1d67445f9282c8bba3f0770)
@@ -322,3 +322,33 @@
             printf( "0x%x 0x%x\n", ch, ch + 3 );  // 0x3 0x6 
         }
+        sout | nl;
+
+        s = "";
+        s += 'a';               sout | s;   // a
+        s += "a";               sout | s;   // aa
+        s += s;                 sout | s;   // aaaa
+                                sout | nl;
+
+        s = "";
+        s += 'a' + 'b';         sout | s;   // ab
+        s += "a" + "b";         sout | s;   // abab
+        s += s + 'a' + 'b';     sout | s;   // ababababab
+                                sout | nl;
+
+        {
+            char ch = 42;       sout | (unsigned char) ch; // 42
+            ch += 'a';          sout | (unsigned char) ch; // 139
+                                sout | nl;
+        }
+
+        {
+            char retc = 'a';
+            string rets = "a";
+            char & weird() { return retc; }
+            string & weird() { return rets; }
+            (return char &) weird();
+            (return string &) weird();
+            weird() += 'b';                 // (ideally ambiguous)
+            sout | retc | ' ' | rets;       // a ab (known approximation flaw)
+        }
 }
