Index: /pyyaml/trunk/lib/yaml/representer.py
===================================================================
--- /pyyaml/trunk/lib/yaml/representer.py	(revision 139)
+++ /pyyaml/trunk/lib/yaml/representer.py	(revision 143)
@@ -64,5 +64,5 @@
         data_types = type(data).__mro__
         if type(data) is self.instance_type:
-            data_types = self.get_classobj_bases(data.__class__)+data_types
+            data_types = self.get_classobj_bases(data.__class__)+list(data_types)
         for data_type in data_types:
             if data_type in self.yaml_representers:
@@ -292,8 +292,12 @@
 
     def represent_complex(self, data):
-        if data.real != 0.0:
+        if data.imag == 0.0:
+            data = u'%r' % data.real
+        elif data.real == 0.0:
+            data = u'%rj' % data.imag
+        elif data.imag > 0:
             data = u'%r+%rj' % (data.real, data.imag)
         else:
-            data = u'%rj' % data.imag
+            data = u'%r%rj' % (data.real, data.imag)
         return self.represent_scalar(u'tag:yaml.org,2002:python/complex', data)
 
Index: /pyyaml/trunk/lib/yaml/emitter.py
===================================================================
--- /pyyaml/trunk/lib/yaml/emitter.py	(revision 141)
+++ /pyyaml/trunk/lib/yaml/emitter.py	(revision 143)
@@ -960,8 +960,7 @@
             if end < len(text):
                 ch = text[end]
-            if ch is None or ch in u'"\\'   \
+            if ch is None or ch in u'"\\\x85\u2028\u2029\uFEFF' \
                     or not (u'\x20' <= ch <= u'\x7E'
-                            or (self.allow_unicode and ch > u'\x7F'
-                                and ch not in u'\x85\u2028\u2029')):
+                            or (self.allow_unicode and ch > u'\x7F')):
                 if start < end:
                     data = text[start:end]
@@ -997,5 +996,5 @@
                 self.whitespace = False
                 self.indention = False
-                if ch == u' ':
+                if text[start] == u' ':
                     data = u'\\'
                     self.column += len(data)
