Index: django/utils/safestring.py
===================================================================
--- django/utils/safestring.py	(revision 6813)
+++ django/utils/safestring.py	(working copy)
@@ -34,13 +34,13 @@
         Concatenating a safe string with another safe string or safe unicode
         object is safe. Otherwise, the result is no longer safe.
         """
+        t = super(SafeString, self).__add__(rhs)
         if isinstance(rhs, SafeUnicode):
-            return SafeUnicode(self + rhs)
+            return SafeUnicode(t)
         elif isinstance(rhs, SafeString):
-            return SafeString(self + rhs)
-        else:
-            return super(SafeString, self).__add__(rhs)
-
+            return SafeString(t)
+        return t
+        
     def _proxy_method(self, *args, **kwargs):
         """
         Wrap a call to a normal unicode method up so that we return safe
@@ -66,11 +66,11 @@
         Concatenating a safe unicode object with another safe string or safe
         unicode object is safe. Otherwise, the result is no longer safe.
         """
+        t = super(SafeUnicode, self).__add__(rhs)
         if isinstance(rhs, SafeData):
-            return SafeUnicode(self + rhs)
-        else:
-            return super(SafeUnicode, self).__add__(rhs)
-
+            return SafeUnicode(t)
+        return t
+    
     def _proxy_method(self, *args, **kwargs):
         """
         Wrap a call to a normal unicode method up so that we return safe
Index: tests/regressiontests/i18n/tests.py
===================================================================
--- tests/regressiontests/i18n/tests.py	(revision 6813)
+++ tests/regressiontests/i18n/tests.py	(working copy)
@@ -43,7 +43,7 @@
 Translating a string requiring no auto-escaping shouldn't change the "safe"
 status.
 
->>> from django.utils.safestring import mark_safe
+>>> from django.utils.safestring import mark_safe, SafeString
 >>> s = mark_safe('Password')
 >>> type(s)
 <class 'django.utils.safestring.SafeString'>
@@ -51,6 +51,19 @@
 >>> type(ugettext(s))
 <class 'django.utils.safestring.SafeUnicode'>
 >>> deactivate()
+
+>>> SafeString('a') + s
+'aPassword'
+>>> s + SafeString('a')
+'Passworda'
+>>> s + mark_safe('a')
+'Passworda'
+>>> mark_safe('a') + s
+'aPassword'
+>>> mark_safe('a') + mark_safe('s')
+'as'
+>>> print s
+Password
 """
 
 __test__ = {
Index: AUTHORS
===================================================================
--- AUTHORS	(revision 6813)
+++ AUTHORS	(working copy)
@@ -204,6 +204,7 @@
     Waylan Limberg <waylan@gmail.com>
     limodou
     Philip Lindborg <philip.lindborg@gmail.com>
+    Trey Long <trey@ktrl.com>
     msaelices <msaelices@gmail.com>
     Matt McClanahan <http://mmcc.cx/>
     Martin Maney <http://www.chipy.org/Martin_Maney>
