Index: pyyaml/trunk/lib/yaml/emitter.py
===================================================================
--- pyyaml/trunk/lib/yaml/emitter.py	(revision 132)
+++ pyyaml/trunk/lib/yaml/emitter.py	(revision 133)
@@ -77,4 +77,5 @@
         # Formatting details.
         self.canonical = False
+        self.allow_unicode = False
         self.best_line_break = u'\n'
         self.best_indent = 2
@@ -141,4 +142,5 @@
             self.encoding = self.event.encoding
             self.canonical = self.event.canonical
+            self.allow_unicode = self.event.allow_unicode
             if self.event.indent and self.event.indent > 1:
                 self.best_indent = self.event.indent
@@ -622,5 +624,5 @@
                     if followed_by_space or last:
                         contains_block_indicator = True
-                if ch == u'-' and followed_by_space or last:
+                if ch == u'-' and (followed_by_space or last):
                     contains_flow_indicator = True
                     contains_block_indicator = True
@@ -632,5 +634,5 @@
                     if followed_by_space or last:
                         contains_block_indicator = True
-                if ch == u'#' and preceeded_by_space:
+                if ch == u'#' and (preceeded_by_space or first):
                     contains_flow_indicator = True
                     contains_block_indicator = True
@@ -641,7 +643,4 @@
                     contains_special_characters = True
                 else:
-                    contains_special_characters = True
-                    # TODO: We need an option to allow unescaped unicode
-                    # characters.
                     contains_unicode_characters = True
             if ch == u' ':
@@ -692,4 +691,6 @@
             followed_by_space = (index+1 < len(scalar) and
                     scalar[index+1] in u'\0 \t\r\n\x85\u2028\u2029')
+        if contains_unicode_characters and not self.allow_unicode:
+            contains_special_characters = True
         allow_flow_plain = not (contains_flow_indicator or contains_special_characters
             or contains_leading_spaces or contains_leading_breaks
@@ -854,5 +855,8 @@
             if end < len(text):
                 ch = text[end]
-            if ch is None or not (u'\x20' <= ch <= u'\x7E') or ch in u'"\\':
+            if ch is None or ch in u'"\\'   \
+                    or not (u'\x20' <= ch <= u'\x7E'
+                            or (self.allow_unicode and ch > u'\x7F'
+                                and ch not in u'\x85\u2028\u2029')):
                 if start < end:
                     data = text[start:end]
