diff --git a/product/ERP5OOo/OOoTemplate.py b/product/ERP5OOo/OOoTemplate.py
index 7cd88bcaac24422e799358d7f556154cd6c8a244..b4f97b6dd8f909042c8aaa11579128ff662da86d 100644
--- a/product/ERP5OOo/OOoTemplate.py
+++ b/product/ERP5OOo/OOoTemplate.py
@@ -166,6 +166,12 @@ class OOoTemplate(ZopePageTemplate):
       )
     )
 
+  _properties= ZopePageTemplate._properties + (
+                                        {'id': 'filename',
+                                         'type': 'tales',
+                                         'mode': 'w',}, )
+  filename = 'object/title_or_id'
+
   security.declareProtected('View management screens', 'formSettings')
   formSettings = PageTemplateFile('www/formSettings', globals(),
                                   __name__='formSettings')
@@ -525,7 +531,7 @@ class OOoTemplate(ZopePageTemplate):
       request.RESPONSE.setHeader('Content-Type',
           '%s; charset=utf-8' % self.content_type)
       request.RESPONSE.setHeader('Content-disposition',
-          'inline;filename="%s%s"' % (self.title_or_id(),
+          'inline;filename="%s%s"' % (self._getFileName(),
                                       guess_extension(self.content_type)))
     
     if DevelopmentMode:
@@ -572,29 +578,36 @@ class OOoTemplate(ZopePageTemplate):
               if x[1].endswith('pdf')]
       if len(tgts) > 1:
         REQUEST.RESPONSE.setHeader('Content-type', 'text/html')
-        REQUEST.RESPONSE.setHeader('Content-disposition',
-            'inline;filename="%s.pdf"' % self.title_or_id())
         raise ValueError, 'multiple pdf formats found - this shouldnt happen'
       if len(tgts) == 0:
         REQUEST.RESPONSE.setHeader('Content-type', 'text/html')
-        REQUEST.RESPONSE.setHeader('Content-disposition',
-            'inline;filename="%s.pdf"' % self.title_or_id())
         raise ValueError, 'no pdf format found'
       fmt = tgts[0]
       mime, data = tmp_ooo.convert(fmt)
       if REQUEST is not None:
           REQUEST.RESPONSE.setHeader('Content-type', 'application/pdf')
           REQUEST.RESPONSE.setHeader('Content-disposition',
-              'attachment;filename="%s.pdf"' % self.title_or_id())
+              'attachment;filename="%s.pdf"' % self._getFileName())
       return data
     mime, data = tmp_ooo.convert(format)
     if REQUEST is not None and not batch_mode:
       REQUEST.RESPONSE.setHeader('Content-type', mime)
       REQUEST.RESPONSE.setHeader('Content-disposition',
-          'attachment;filename="%s.%s"' % (self.title_or_id(),format))
+          'attachment;filename="%s.%s"' % (self._getFileName(),format))
         # FIXME the above lines should return zip format when html was requested
     return data
 
+  def _getFileName(self):
+    """Returns the filename used for content-disposition header.
+    """
+    # The "filename" property has a TALES type, but getProperty for TALES types
+    # only works if the context has an ERP5 Site in his acquisition context.
+    # If it's not the case, we will not evaluate the TALES, but simply use the
+    # template's title or id as filename.
+    if getattr(self, 'getPortalObject', None) is None:
+      return self.title_or_id()
+    return self.getProperty('filename')
+
 InitializeClass(OOoTemplate)
 
 class FSOOoTemplate(FSPageTemplate, OOoTemplate):
diff --git a/product/ERP5OOo/tests/testDeferredStyle.py b/product/ERP5OOo/tests/testDeferredStyle.py
index 33f5d0f1653a7a8154fe64a2a999eaab8b179fc2..4b70ebe8640342846e2a0ccef3143686ee47a23c 100644
--- a/product/ERP5OOo/tests/testDeferredStyle.py
+++ b/product/ERP5OOo/tests/testDeferredStyle.py
@@ -101,9 +101,10 @@ class TestDeferredStyle(ERP5TypeTestCase, ZopeTestCase.Functional):
     for part in mail_message.walk():
       content_type = part.get_content_type()
       file_name = part.get_filename()
-      if file_name == 'report_view%s' % self.attachment_file_extension:
+      # "History" is the title of Base_viewHistory form
+      if file_name == 'History%s' % self.attachment_file_extension:
         self.assertEquals(content_type, self.content_type)
-        self.assertEquals('attachment; filename="report_view%s"' %
+        self.assertEquals('attachment; filename="History%s"' %
                                 self.attachment_file_extension,
                           part.get('Content-Disposition'))
         data = part.get_payload(decode=True)