diff --git a/Lib/Cookie.py b/Lib/Cookie.py
index fa2e05e..20a2941 100644
--- a/Lib/Cookie.py
+++ b/Lib/Cookie.py
@@ -224,6 +224,7 @@
 
 _nulljoin = ''.join
 _semispacejoin = '; '.join
+_spacejoin = ' '.join
 
 #
 # Define an exception visible to External modules
@@ -594,7 +595,7 @@
         items.sort()
         for K,V in items:
             L.append( '%s=%s' % (K,repr(V.value) ) )
-        return '<%s: %s>' % (self.__class__.__name__, _semispacejoin(L))
+        return '<%s: %s>' % (self.__class__.__name__, _spacejoin(L))
 
     def js_output(self, attrs=None):
         """Return a string suitable for JavaScript."""
diff --git a/Lib/test/test_cookie.py b/Lib/test/test_cookie.py
index 3e80b6f..c20beee 100644
--- a/Lib/test/test_cookie.py
+++ b/Lib/test/test_cookie.py
@@ -12,17 +12,17 @@
 
 cases = [
     ('chips=ahoy; vienna=finger', {'chips':'ahoy', 'vienna':'finger'}),
-    ('keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;";',
+    ('keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;"',
      {'keebler' : 'E=mc2; L="Loves"; fudge=\012;'}),
 
     # Check illegal cookies that have an '=' char in an unquoted value
-    ('keebler=E=mc2;', {'keebler' : 'E=mc2'})
+    ('keebler=E=mc2', {'keebler' : 'E=mc2'})
     ]
 
 for data, dict in cases:
     C = Cookie.SimpleCookie() ; C.load(data)
     print repr(C)
-    print str(C)
+    print C.output(sep='\n')
     for k, v in sorted(dict.iteritems()):
         print ' ', k, repr( C[k].value ), repr(v)
         verify(C[k].value == v)
