diff --git a/product/ERP5/interfaces/convertable.py b/product/ERP5/interfaces/convertable.py
new file mode 100644
index 0000000000000000000000000000000000000000..ebf9d1b100cfa5a174693dc279e6b277d6875cba
--- /dev/null
+++ b/product/ERP5/interfaces/convertable.py
@@ -0,0 +1,107 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
+#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+##############################################################################
+
+from zope.interface import Interface
+
+class IConvertable(Interface):
+  """
+  Convertable interface specification
+
+  Documents which immplement IConvertable can be converted
+  to multiple formats. IConvertable also provides 
+  methods to list possible formats which documents can
+  be converted to.
+  """
+
+  def convert(format, **kw):
+    """
+    Converts the current document to the specified format
+    taking into account optional parameters. This method
+    returns a tuple of two values: a mime type string and
+    the converted data.
+
+    format -- the target conversion format specified either as an
+              extension (ex. 'png') or as a mime type
+              string (ex. 'text/plain')
+
+    kw -- optional parameters which can be passed to the
+          conversion engine
+    """
+
+  def isTargetFormatAllowed(format):
+    """
+    Checks if the current document can be converted
+    to the specified target format.
+
+    format -- the target conversion format specified either as an
+              extension (ex. 'png') or as a mime type
+              string (ex. 'text/plain')
+    """
+
+  def isTargetFormatPermitted(format):
+    """
+    Checks if the current user can convert the current
+    document to the specified target format.
+    This method can be used to restrict the list of possible
+    formats to deliver a document to a certain group of 
+    users (ex. read-only PDF only for anonymous users)
+
+    format -- the target conversion format specified either as an
+              extension (ex. 'png') or as a mime type
+              string (ex. 'text/plain')
+    """
+
+  def getTargetFormatItemList():
+    """
+    Returns the list of acceptable formats for conversion
+    in the form of tuples which can be used for example for
+    listfield in ERP5Form. Each tuple in the list has the form
+    (title, format) where format is an extension (ex. 'png')
+    which can be passed to IConvertable.convert or to 
+    IDownloadable.index_html and title is a string which 
+    can be translated and displayed to the user.
+ 
+    Example of result:    
+        [('ODF Drawing', 'odg'), ('ODF Drawing Template', 'otg'), 
+        ('OpenOffice.org 1.0 Drawing', 'sxd')]
+    """
+
+  def getTargetFormatTitleList():
+    """
+    Returns the list of titles of acceptable formats for conversion 
+    as a list of strings which can be translated and displayed 
+    to the user.
+    """
+
+  def getTargetFormatList():
+    """
+    Returns the list of acceptable formats for conversion
+    where format is an extension (ex. 'png') which can be 
+    passed to IConvertable.convert or to IDownloadable.index_html
+    """
\ No newline at end of file
diff --git a/product/ERP5/interfaces/uploadable.py b/product/ERP5/interfaces/uploadable.py
new file mode 100644
index 0000000000000000000000000000000000000000..76ebabd5cf61aa023a52b819681d11d821b0f967
--- /dev/null
+++ b/product/ERP5/interfaces/uploadable.py
@@ -0,0 +1,94 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
+#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+##############################################################################
+
+from zope.interface import Interface
+
+class IUploadable(Interface):
+  """
+  Uploadable interface specification
+
+  Documents which implement IUploadable can be updated
+  by uploading a file using multiple formats. IUploadable
+  provides methods to list possible source formats which
+  can be uploaded into a document.
+  """
+
+  def isSourceFormatAllowed(format):
+    """
+    Checks if a file with the specified format
+    can be uploaded into the current document.
+
+    format -- the source conversion format specified either as an
+              extension (ex. 'png') or as a mime type
+              string (ex. 'text/plain')
+    """
+
+  def isSourceFormatPermitted(format):
+    """
+    Checks if the current user can upload into the current
+    document a file with the specified source format.
+    This method can be used to restrict the list of possible
+    formats which can be uploaded into a document to a certain group of 
+    users (ex. users which are known to use
+    OpenOffice in a company are only allowed to upload ODT files, 
+    as a way to prevent the use of illegal copies of other applications).
+
+    format -- the source conversion format specified either as an
+              extension (ex. 'png') or as a mime type
+              string (ex. 'text/plain')
+    """
+
+  def getSourceFormatItemList():
+    """
+    Returns the list of acceptable formats for upload
+    in the form of tuples which can be used for example for
+    listfield in ERP5Form. Each tuple in the list has the form
+    (title, format) where format is an extension (ex. 'png')
+    which can be passed to IConvertable.convert or to 
+    IDownloadable.index_html and title is a string which 
+    can be translated and displayed to the user.
+ 
+    Example of result:    
+        [('ODF Drawing', 'odg'), ('ODF Drawing Template', 'otg'), 
+        ('OpenOffice.org 1.0 Drawing', 'sxd')]
+    """
+
+  def getSourceFormatTitleList():
+    """
+    Returns the list of titles of acceptable formats for upload 
+    as a list of strings which can be translated and displayed 
+    to the user.
+    """
+
+  def getSourceFormatList():
+    """
+    Returns the list of acceptable formats for upload
+    where format is an extension (ex. 'png') which can be 
+    passed to IConvertable.convert or to IDownloadable.index_html
+    """
\ No newline at end of file
diff --git a/product/ERP5/interfaces/watermarkable.py b/product/ERP5/interfaces/watermarkable.py
new file mode 100644
index 0000000000000000000000000000000000000000..6a7d5a06d3418a6dab23af559e33766f5492f7ac
--- /dev/null
+++ b/product/ERP5/interfaces/watermarkable.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
+#                    Jean-Paul Smets-Solanes <jp@nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+##############################################################################
+
+from zope.interface import Interface
+
+class IWatermarkable(Interface):
+  """
+  Watermarkable interface specification
+
+  Documents which implement IWatermarkable can be 
+  added a watermark before conversion and download.
+  """
+
+  # Declarative interface classification
+  _subject_list = ('DMS', )
+
+  def getWatermarkedData(**kw):
+    """
+    Adds a watermark to the original data of this document 
+    (or to base data if IBaseConvertable is implemented) and
+    return the resulting watermarked data.
+
+    kw -- optional parameters which can be passed to the
+          watermarking engine
+    """
+