Index: genshi/filters/i18n.py
===================================================================
--- genshi/filters/i18n.py	(revision 1158)
+++ genshi/filters/i18n.py	(working copy)
@@ -369,11 +369,9 @@
         new_stream = []
         singular_stream = None
         singular_msgbuf = None
-        plural_stream = None
         plural_msgbuf = None
 
         numeral = self.numeral.evaluate(ctxt)
-        is_plural = self._is_plural(numeral, ngettext)
 
         for event in stream:
             if event[0] is SUB and any(isinstance(d, ChooseBranchDirective)
@@ -387,10 +385,12 @@
                     new_stream.append((MSGBUF, None, (None, -1, -1)))
 
                 elif isinstance(subdirectives[0], PluralDirective):
-                    if is_plural:
-                        plural_stream = list(_apply_directives(substream,
-                                                               subdirectives,
-                                                               ctxt, vars))
+                    # plural stream is a convenience for generating a
+                    # fallback for plurals when no translations exist,
+                    # its XML structure is not expected to be preserved.
+                    _plural_stream = list(_apply_directives(substream,
+                                                           subdirectives,
+                                                           ctxt, vars))
 
             else:
                 new_stream.append(event)
@@ -400,13 +400,10 @@
                                                  s, p, n)
 
         singular_msgbuf = ctxt.get('_i18n.choose.singular')
-        if is_plural:
-            plural_msgbuf = ctxt.get('_i18n.choose.plural')
-            msgbuf, choice = plural_msgbuf, plural_stream
-        else:
-            msgbuf, choice = singular_msgbuf, singular_stream
-            plural_msgbuf = MessageBuffer(self)
+        plural_msgbuf = ctxt.get('_i18n.choose.plural')
 
+        msgbuf, choice = singular_msgbuf, singular_stream
+
         for kind, data, pos in new_stream:
             if kind is MSGBUF:
                 for event in choice:
