diff --git a/product/ERP5/interfaces/mapped_value.py b/product/ERP5/interfaces/mapped_value.py
new file mode 100644
index 0000000000000000000000000000000000000000..79c68bb333975c1744ba961343b5235afa22d8cf
--- /dev/null
+++ b/product/ERP5/interfaces/mapped_value.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (c) 2010 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 Products.ERP5.interfaces.predicate import IPredicate
+
+_MARKER = []
+
+class IMappedValue(IPredicate):
+  """Mapped Value document interface specification
+
+  A Mapped Value provides 
+  """
+  def getMappedValuePropertyList():
+    """
+    """
+
+  def getMappedValueBaseCategoryList():
+    """
+    """
+
+  def getProperty(key, d=_MARKER, **kw):
+    """
+    """
+
+  def getPropertyList(key, d=None):
+    """
+    XXX- useful ?
+    """
+
+  def getAcquiredCategoryMembershipList(category, spec=(), filter=None,
+      portal_type=(), base=0, keep_default=1, checked_permission=None, **kw):
+    """
+    """
+
+
+
diff --git a/product/ERP5/interfaces/predicate.py b/product/ERP5/interfaces/predicate.py
index 8cd67fafee4d02293252d6f27a922e172f524380..21ee72815555dc78c5ab9b0e3d1568792c35a52f 100644
--- a/product/ERP5/interfaces/predicate.py
+++ b/product/ERP5/interfaces/predicate.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 ##############################################################################
 #
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
+# Copyright (c) 2002-2010 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
@@ -33,31 +33,38 @@ Products.ERP5.interfaces.predicate
 from zope.interface import Interface
 
 class IPredicate(Interface):
-  """
-    A Predicate allows to make a statement about a document.
-    A statement can be related to:
+  """Predicate document interface specification
+
+  A Predicate allows to make a statement about a document.
+  A statement can be related to:
 
-    - the attributes of the document (ex. price >= 3.0)
+  - the attributes of the document (ex. price >= 3.0)
 
-    - the categories of the document (ex. )
+  - the categories of the document (ex. )
 
-    The Predicate class is an abstract class, which is
-    implemented by subclasses.
+  The Predicate class is an abstract class, which is
+  implemented by subclasses.
   """
 
   def test(context, tested_base_category_list=None):
-    """A Predicate can be tested on a given context.
-
-      Parameters can passed in order to ignore some conditions:
-      - tested_base_category_list:  this is the list of category that we do
+    """
+    A Predicate can be tested on a given context. Parameters can
+    passed in order to ignore some conditions:
+    
+    tested_base_category_list -- a list of category that we do
         want to test. For example, we might want to test only the
         destination or the source of a predicate.
+        (XXX-JPS - is this really needed ? is this appropriate
+         naming - probably not)
     """
 
   def asSQLExpression():
     """
-      A Predicate can be rendered as an sql expression. This
-      can be useful to create reporting trees based on the
-      ZSQLCatalog
-    """
-
+    A Predicate can be rendered as an sql expression. This
+    can be useful to create reporting trees based on the
+    ZSQLCatalog. This SQL expression is however partial since
+    python scripts which are used by the test method of the predicate
+    can be converted to SQL. If a python script is defined to 
+    implement test, results obtained through asSQLExpression
+    must be additionnaly tested by invoking test().
+    """
\ No newline at end of file
diff --git a/product/ERP5/interfaces/variated.py b/product/ERP5/interfaces/variated.py
index b35dd4493523da0300d8a00c249c639240cd2b34..94fae108d37e5197be6a9a6a0364b840f0b7d50a 100644
--- a/product/ERP5/interfaces/variated.py
+++ b/product/ERP5/interfaces/variated.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 ##############################################################################
 #
-# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
+# Copyright (c) 2002-2010 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
@@ -33,9 +33,21 @@ Products.ERP5.interfaces.variated
 from zope.interface import Interface
 
 class IVariated(Interface):
-  """
-    Common Interface for all objects which can be
-    variated.
+  """IVariated interface specification
+
+  IVariated defines methods to access and modify
+  discrete variations (categories) and variation
+  properties. It also provides variation range methods
+  which are often invoked from variated objects.
+
+  IVariated is normally used to specify discrete variations
+  of a movement.
+
+  IVariated is also used on all objects which define
+  a variation range, such as Resources, Delivery Lines
+  which contain Delivery Cells. In this case, categories
+  specify a subset of the total variation range, rather
+  than a specific discrete variation.
   """
 
   # The following methods are intended to access to the
@@ -43,76 +55,213 @@ class IVariated(Interface):
   # are based on categories. General variations are encapsulated
   # into VariationValue instances.
 
-  # Discrete Variation accessors
-  def getVariationCategoryList():
+  # Discrete Variation Accessors
+  def getVariationBaseCategoryList(omit_optional_variation=0,
+                                   omit_individual_variation=0):
+    """
+    returns a list of base category ids which are used
+    to define discrete variation dimensions for this instance
+
+    Used in: Resource, Delivery Line, Delivery Cell
+
+    omit_optional_variation -- 
+
+    omit_individual_variation --
     """
-      returns a list or relative URLs which defines
-      a discrete variation (ie. a list of category
-      memberships)
+
+  def getVariationBaseCategoryItemList(self, display_id='title_or_id',
+        omit_optional_variation=0, omit_individual_variation=0):
+    """
+    returns a list of (base_category.id, base_category.display_id())
+    which can be displayed in an ERP5 Form and define 
+    to define discrete variation dimensions for this instance
+
+    Used in: Resource, Delivery Line, Delivery Cell
+
+    display_id -- 
+
+    omit_optional_variation -- 
+
+    omit_individual_variation --
+    """
+
+  def getVariationCategoryList(self, base_category_list=(),
+        omit_optional_variation=0, omit_individual_variation=0):
     """
+    returns a list or relative URLs which defines
+    a discrete variation (ie. a list of category
+    memberships)
+
+    Used in: Resource, Delivery Line, Delivery Cell
+
+    base_category_list --
+
+    omit_optional_variation -- 
+
+    omit_individual_variation --
+    """
+
+  def setVariationCategoryList(node_list, base_category_list=()):
+    """
+    modifies the discrete variation of a variated instance by
+    providing a list of relative URLs
+
+    Used in: Resource, Delivery Line, Delivery Cell
+
+    base_category_list --
+    """
+
+  def getVariationCategoryItemList(base_category_list=(), base=1,
+        display_id='logical_path', display_base_category=1,
+        current_category=None, omit_optional_variation=0,
+        omit_individual_variation=0, **kw):
+    """
+    returns a list of (category.getRelativeUrl(), category.display_id())
+    which define the discrete variations  of a variated instance
+    in a way which be displayed in an ERP5 Form.
+
+    Used in: Resource, Delivery Line, Delivery Cell
+
+    base_category_list --
+
+    base --
 
-  def setVariationCategoryList(node_list):
+    display_id --
+
+    display_base_category --
+
+    base_category_list --
+
+    current_category --
+
+    omit_optional_variation --
+
+    omit_individual_variation --
+
+    **kw -- 
     """
-      modifies the discrete variation of an
-      variated instance by providing a list
-      of relative URLs
+
+  # Discrete Variation Range Accessors
+  def getVariationRangeBaseCategoryList():
     """
+    returns a list of base categories which are acceptable
+    as discrete variation dimensions
 
-  def getVariationBaseCategoryList(node_list):
+    Used in: Resource, Delivery Line, Delivery Cell
     """
-      returns a list of base category ids
-      which are used to define discrete variations
-      for this instance
+
+  def getVariationRangeBaseCategoryItemList(base=1, 
+                                            display_id='getTitle'):
     """
+    returns a list of (base_category.id, base_category.display_id())
+    which are acceptable as discrete variation dimensions of
+    the variated instance and are easy to display in an ERP5Form
+    
+    Used in: Resource, Delivery Line, Delivery Cell
 
-  def setVariationBaseCategoryList(node_list):
+    display_id --
     """
-      modifies the list of base category ids
-      which are used to define discrete variations
-      for this instance
+
+  def getVariationRangeCategoryList(base_category_list=(), base=1,
+        root=1, current_category=None, omit_individual_variation=0):
     """
+    returns a list of categories which are acceptable
+    as discrete variation values of the current variated instance
+
+    Used in: Resource, Delivery Line, Delivery Cell
+
+    base_category_list -- 
+
+    base -- 
 
-  # General Variation accessors
-  def getVariationValue():
+    root -- 
+
+    current_category -- 
+
+    omit_individual_variation -- 
     """
-      Returns a VariationValue object. 
+
+  def getVariationRangeCategoryItemList(base_category_list=(), base=1, 
+        root=1, display_method_id='getCategoryChildLogicalPathItemList',
+        display_base_category=1, current_category=None, **kw):
     """
+    returns a list of (category.id, category.display_id()) which are acceptable
+    as discrete variation values. This is mostly useful in ERP5Form 
+    instances to generate selection menus.
+
+    Used in: Resource, Delivery Line, Delivery Cell
 
-  def setVariationValue(value):
+    base_category_list -- 
+
+    base -- 
+
+    root -- 
+
+    display_method_id -- 
+
+    display_base_category -- 
+
+    current_category -- 
+
+    **kw --
     """
-      Sets the VariationValue.
+
+  # Variated Value API
+  def setVariated(variated):
     """
+    Sets all variation categories and properties of the current
+    variated instance to the categories and properties of
+    variated instance provided as parameter.
 
+    Used in: Resource, Delivery Line, Delivery Cell
 
-  # The following methods are intended to access the
-  # variation range of a variated object. A Variation range can
-  # be defined in a Resource instance or in any object
-  # which has a relation with a Resource (Amount, Transformation)
+    variated -- 
+    """
 
-  # Discrete Variation Range accessors
+  def compareVariated(variated):
+    """
+    Compares current variated instance with another
+    variated instance provided as parameter.
+
+    Used in: Resource, Delivery Line, Delivery Cell
 
-  def getVariationRangeCategoryList(base_category_list=(), base=1):
+    variated --     
     """
-      returns a list of categories which are acceptable
-      as discrete variation values
+
+  # Serialization API
+  def getVariationText(self):
     """
+    returns a human readable, computer parsable,
+    non ambiguous string representation of the variation
+    categories and properties of the current instance.
 
-  def getVariationRangeCategoryItemList(base_category_list=(),
-                          display_id='getTitle', base=1, current_category=None):
+    Used in: Delivery Line (terminal), Delivery Cell
     """
-      returns a list of (category.id, category.display_id()) which are acceptable
-      as discrete variation values
+
+  def setVariationText(variation_text):
     """
+    parses variation_text to set variation properties
+    and categories of the current instance
 
-  def getVariationRangeBaseCategoryList(base_category_list=(), base=1):
+    Used in: Delivery Line (terminal), Delivery Cell
+    Could be used in: Resource, Delivery Line (non terminal)
     """
-      returns a list of base categories which are acceptable
-      as discrete variation values
+
+  def setVariationUid():
     """
+    returns a unique UID integer representation of the variation
+    categories and properties of the current instance based
+    on a UID mapping of variation_text
 
-  def getVariationRangeBaseCategoryItemList(base_category_list=(),
-                          display_id='getTitle', base=1, current_category=None):
+    Used in: Delivery Line (terminal), Delivery Cell
+    Could be used in: Resource, Delivery Line (non terminal)
     """
-      returns a list of base category items which are acceptable
-      as discrete variation values
+
+  def setVariationUid(variation_uid):
     """
+    sets variation properties and categories of the current instance
+    by looking up variation to UID mapping
+
+    Used in: Delivery Line (terminal), Delivery Cell
+    Could be used in: Resource, Delivery Line (non terminal)
+    """
\ No newline at end of file
diff --git a/product/ERP5/interfaces/variation_range.py b/product/ERP5/interfaces/variation_range.py
new file mode 100644
index 0000000000000000000000000000000000000000..c29a5958afeea56d1beb53c93d2be34f3bf2dfbe
--- /dev/null
+++ b/product/ERP5/interfaces/variation_range.py
@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright (c) 2002-2010 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.
+#
+##############################################################################
+"""
+Products.ERP5.interfaces.variated
+"""
+
+from zope.interface import Interface
+
+class IVariationRange(Interface):
+  """IVariationRange interface specification
+
+  Common Interface for all objects which define a variation
+  range.
+  """
+
+  # provides VariationRange accessors
+
+  # Discrete Variation Range Accessors
+  def setVariationBaseCategoryList(base_category_id_list):
+    """
+    modifies the list of base category ids which are used to
+    define discrete variation dimensions for this instance.
+    Normally provided by the VariationRange property sheet.
+
+    Used in: Resource, Delivery Line
+
+    base_category_id_list -- 
+    """
+
+  # Matrix Handling API
+  def getLineVariationRangeCategoryItemList():
+    """
+    returns possible variation dimensions displayed in line.
+
+    Used in: Resource, Delivery Line
+
+    XXX - missing default display ID
+    """
+
+  def getColumnVariationRangeCategoryItemList():
+    """
+    returns possible variation dimensions displayed in column
+
+    Used in: Resource, Delivery Line
+
+    XXX - missing default display ID
+    """
+
+  def getTabVariationRangeCategoryItemList():
+    """
+    returns possible variation dimensions displayed in tab
+
+    Used in: Resource, Delivery Line
+
+    XXX - missing default display ID
+    """
+
+  def getMatrixVariationRangeBaseCategoryList(self):
+    """
+    return possible variation dimensions for a matrix
+
+    Used in: Resource, Delivery Line
+
+    XXX - missing default display ID
+    """
\ No newline at end of file