diff --git a/product/ERP5Form/PDFTemplate.py b/product/ERP5Form/PDFTemplate.py
index d2797f157834dc4f7f4dc3c37b7b81c3b18bab70..5b64ef256206ae529ad820fed83c8ddc9793af25 100755
--- a/product/ERP5Form/PDFTemplate.py
+++ b/product/ERP5Form/PDFTemplate.py
@@ -135,9 +135,9 @@ class PDFTemplate(ZopePageTemplate):
     # Proxy method to PageTemplate
     def pt_render(self, source=0, extra_context={}):
       doc_xml = ZopePageTemplate.pt_render(self, source=source, extra_context=extra_context)
-      
+
       # Unmarshall arguments to __call__ API
-      args = extra_context.get('options', None)      
+      args = extra_context.get('options', None)
       kwargs = extra_context.copy()
       if kwargs.has_key('options'): del kwargs['options']
       if kwargs.has_key('context'): del kwargs['context']
@@ -277,22 +277,34 @@ class ERP5ReportTool(ReportTool):
       context = self
 
     encoding = kwargs.get('encoding') or 'UTF-8'
+    #LOG('ERP5ReportTool', 0, 'encoding = %r' % encoding)
     rhandler = ERP5ResourceHandler(context, getattr(self, 'resourcePath', None))
 
-    #template = self._v_templatecache.get(templatename,None)
-    #if not template:
-    if 1:
-      template_xml = getattr(context, templatename)(*args, **kwargs)
-      if type(template_xml) is not type(u'a'):
-        template_xml = unicode(template_xml,encoding=encoding)
-      template_xml = template_xml.encode('UTF-8')
-      template_dom = xml.dom.minidom.parseString(template_xml)
-      template = TemplateParser(template_dom,encoding,resourceHandler=rhandler)()
-      #self._v_templatecache[templatename] = template
-
+    # if zope gives us the xml in unicode
+    # we need to encode it before it can be parsed
+    template_xml = getattr(context, templatename)(*args, **kwargs)
+    if type(template_xml) is type(u''):
+      template_xml = self._encode(template_xml, encoding)
+    if type(document_xml) is type(u''):
+      document_xml = self._encode(document_xml, encoding)
+    #LOG('ERP5ReportTool', 0, 'template_xml = %r, document_xml = %r' % (template_xml, document_xml))
+
+    # XXXXX Because reportlab does not support UTF-8, use Latin-1. What a mess.
+    template_xml = unicode(template_xml,encoding).encode('iso-8859-1')
+    document_xml = unicode(document_xml,encoding).encode('iso-8859-1')
+    encoding = 'iso-8859-1'
+
+    # create the PDFTemplate from xml
+    template_dom = xml.dom.minidom.parseString(template_xml)
+    template_dom.encoding = encoding
+    template = TemplateParser(template_dom,encoding,resourceHandler=rhandler)()
+
+    # create the PDFDocment from xml
     document_dom = xml.dom.minidom.parseString(document_xml)
+    document_dom.encoding = encoding
     document = DocumentParser(document_dom,encoding,resourceHandler=rhandler)
 
+    # create the PDF itself using the document and the template
     buf = StringIO()
     document(template,buf)
     buf.seek(0)