diff --git a/product/ERP5Type/ZopePatch.py b/product/ERP5Type/ZopePatch.py
index a5bdcb60e040297dc841741be3a9cc16f7ef4c0e..96ee4b40ccc0a9548f31d18314db016e9adcd67e 100644
--- a/product/ERP5Type/ZopePatch.py
+++ b/product/ERP5Type/ZopePatch.py
@@ -56,7 +56,6 @@ from Products.ERP5Type.patches import PersistentMapping
 from Products.ERP5Type.patches import DateTimePatch
 from Products.ERP5Type.patches import PythonScript
 from Products.ERP5Type.patches import MailHost
-from Products.ERP5Type.patches import MailTemplates
 from Products.ERP5Type.patches import http_server
 from Products.ERP5Type.patches import memcache_client
 from Products.ERP5Type.patches import StateChangeInfoPatch
diff --git a/product/ERP5Type/patches/MailTemplates.py b/product/ERP5Type/patches/MailTemplates.py
deleted file mode 100644
index ccfe7bffa2c345402eb9d669f1866ca0984fb9f2..0000000000000000000000000000000000000000
--- a/product/ERP5Type/patches/MailTemplates.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2005 Simplistix Ltd
-#
-# This Software is released under the MIT License:
-# http://www.opensource.org/licenses/mit-license.html
-# See license.txt for more details.
-
-"""
-this patch is based on MailTemplates 1.1.0
-it will only try to encode() text if it's of type unicode
-"""
-
-try:
-  from Products.MailTemplates import BaseMailTemplate
-except ImportError:
-  BaseMailTemplate = None
-
-from email.Header import Header
-from email.Utils import make_msgid, formataddr, getaddresses
-
-if BaseMailTemplate is not None:
-  def _process_utf8(self,kw):
-      # sort out what encoding we're going to use
-      encoding = kw.get('encoding',
-                        self.getProperty('encoding',
-                                         BaseMailTemplate.default_encoding))
-      text = self.__class__.__bases__[1].__call__(self,**kw)
-      # ZPT adds newline at the end, but it breaks backward compatibility.
-      # So I remove it.
-      if text and text[-1]=='\n':
-        text = text[:-1]
-      if not self.html() and isinstance(text, unicode):
-          text = text.encode(encoding,'replace')
-      # now turn the result into a MIMEText object
-      msg = BaseMailTemplate.MIMEText(
-          text.replace('\r',''),
-          self.content_type.split('/')[1],
-          encoding
-          )
-      # sort out what headers and addresses we're going to use
-      headers = {}
-      values = {}
-      # headers from the headers property
-      for header in getattr(self,'headers',()):
-          name,value = header.split(':',1)
-          headers[name]=value
-      # headers from the headers parameter
-      headers_param = kw.get('headers',{})
-      headers.update(headers_param)
-      # values and some specific headers
-      for key,header in (('mfrom','From'),
-                         ('mto','To'),
-                         ('mcc','Cc'),
-                         ('mbcc','Bcc'),
-                         ('subject','Subject')):
-          value = kw.get(key,
-                         headers_param.get(header,
-                                           getattr(self,
-                                                   key,
-                                                   headers.get(header))))
-          if value is not None:
-              values[key]=value
-
-              # turn some sequences in coma-seperated strings
-              if isinstance(value, (tuple, list)):
-                  value = ', '.join(value)
-              # make sure we have no unicode headers
-              if isinstance(value,unicode):
-                  value = value.encode(encoding)
-
-              if key == 'subject':
-                  try:
-                      # Try to keep header non encoded
-                      value = Header(value.encode("ascii"))
-                  except UnicodeDecodeError:
-                      value = Header(value, "UTF-8")
-
-              else:
-                  value_list = getaddresses([value])
-                  dest_list = []
-                  for name, email in value_list:
-                      try:
-                          name = Header(name.encode("ascii"))
-                      except UnicodeDecodeError:
-                          name = Header(name, "UTF-8")
-                      dest_list.append(formataddr((name.encode(), email)))
-                  value = ", ".join(dest_list)
-
-              headers[header]=value
-      # check required values have been supplied
-      errors = []
-      for param in ('mfrom','mto'):
-          if not values.get(param):
-              errors.append(param)
-      if errors:
-          raise TypeError(
-              'The following parameters were required by not specified: '+(
-              ', '.join(errors)
-              ))
-      # add date header
-      headers['Date']=BaseMailTemplate.DateTime().rfc822()
-      # add message-id header
-      headers['Message-ID']=make_msgid()
-      # turn headers into an ordered list for predictable header order
-      keys = headers.keys()
-      keys.sort()
-      return msg,values,[(key,headers[key]) for key in keys]
-
-  BaseMailTemplate.BaseMailTemplate._process = _process_utf8
-
diff --git a/product/MailTemplates/BaseMailTemplate.py b/product/MailTemplates/BaseMailTemplate.py
index 61abea4b996c5020a4d947b6eb817572e78a4afe..4c5938da5af87bfbb6e4aa4e8edda21716236281 100644
--- a/product/MailTemplates/BaseMailTemplate.py
+++ b/product/MailTemplates/BaseMailTemplate.py
@@ -9,8 +9,10 @@ import rfc822
 
 from AccessControl import ClassSecurityInfo
 from DateTime import DateTime
+from email.Header import Header
 from email.MIMEMultipart import MIMEMultipart
 from email.MIMEText import MIMEText
+from email.Utils import make_msgid, formataddr, getaddresses
 
 from App.class_init import default__class_init__ as InitializeClass
 from App.Common import package_home
@@ -42,7 +44,11 @@ class BaseMailTemplate:
                           self.getProperty('encoding',
                                            default_encoding))
         text = self.__class__.__bases__[1].__call__(self,**kw)
-        if not self.html():
+        # ZPT adds newline at the end, but it breaks backward compatibility.
+        # So I remove it.
+        if text.endswith('\n'):
+            text = text[:-1]
+        if not self.html() and isinstance(text, unicode):
             text = text.encode(encoding,'replace')
         # now turn the result into a MIMEText object
         msg = MIMEText(
@@ -73,16 +79,36 @@ class BaseMailTemplate:
                                                      headers.get(header))))
             if value is not None:
                 values[key]=value
+
                 # turn some sequences in coma-seperated strings
-                if isinstance(value,tuple) or isinstance(value,list):
+                if isinstance(value, (tuple, list)):
                     value = ', '.join(value)
                 # make sure we have no unicode headers
                 if isinstance(value,unicode):
                     value = value.encode(encoding)
+
+                if key == 'subject':
+                    try:
+                        # Try to keep header non encoded
+                        value = Header(value.encode("ascii"))
+                    except UnicodeDecodeError:
+                        value = Header(value, "UTF-8")
+
+                else:
+                    value_list = getaddresses([value])
+                    dest_list = []
+                    for name, email in value_list:
+                        try:
+                            name = Header(name.encode("ascii"))
+                        except UnicodeDecodeError:
+                            name = Header(name, "UTF-8")
+                        dest_list.append(formataddr((name.encode(), email)))
+                    value = ", ".join(dest_list)
+
                 headers[header]=value
         # check required values have been supplied
         errors = []
-        for param in ('mfrom','mto','subject'):
+        for param in ('mfrom','mto'):
             if not values.get(param):
                 errors.append(param)
         if errors:
@@ -92,6 +118,9 @@ class BaseMailTemplate:
                 ))
         # add date header
         headers['Date']=DateTime().rfc822()
+        # do not let the MTA to generate the Message-ID:
+        # we want to have it stored in ERP5, for mail threading
+        headers['Message-ID'] = make_msgid()
         # turn headers into an ordered list for predictable header order
         keys = headers.keys()
         keys.sort()