diff --git a/product/ERP5/Document/EmploymentContract.py b/product/ERP5/Document/EmploymentContract.py
index 3e937a8631915d9e55160cde6a95764878e65402..fd1d5eeb2db13d7da0a7bb097a2c816b526ffed4 100644
--- a/product/ERP5/Document/EmploymentContract.py
+++ b/product/ERP5/Document/EmploymentContract.py
@@ -60,7 +60,7 @@ class EmploymentContract(SubscriptionItem):
 
   def assertMovementExists(self, applied_rule, start_date):
     """
-      a movment exist if there is already a movement with the same 
+      a movment exist if there is already a movement with the same
       start_date and stop_date
     """
     movement_id = 'movement_%s_%s' % (start_date.year(), start_date.month())
@@ -69,7 +69,7 @@ class EmploymentContract(SubscriptionItem):
   def expandOpenOrderRule(self, applied_rule, force=0, **kw):
     """
       Expand tries to find all applicable supply path and all
-      applicable transformations. 
+      applicable transformations.
     """
     number_of_months_in_year = 12
 
diff --git a/product/ERP5/Document/TradeModelLine.py b/product/ERP5/Document/TradeModelLine.py
index fd36c41af833c7f132eb51b6ec862b1b9ed0d4dd..b3a920108bdf71995d8d9fe3107da52404b549a0 100644
--- a/product/ERP5/Document/TradeModelLine.py
+++ b/product/ERP5/Document/TradeModelLine.py
@@ -40,10 +40,10 @@ import zope.interface
 class TradeModelLine(Predicate, XMLMatrix, Amount):
     """Trade Model Line is a way to represent trade transformation for movements
 
-    TODO: 
-      - make this code readable 
-      - use comments 
-      - use docstrings 
+    TODO:
+      - make this code readable
+      - use comments
+      - use docstrings
     """
     meta_type = 'ERP5 Trade Model Line'
     portal_type = 'Trade Model Line'
@@ -53,9 +53,9 @@ class TradeModelLine(Predicate, XMLMatrix, Amount):
     security.declareObjectProtected(Permissions.AccessContentsInformation)
 
     # Declarative interfaces
-    # interfaces.IVariated - as soon as interfaces.IVariated will be zope3
     zope.interface.implements(
-        interfaces.ITransformation
+        interfaces.ITransformation,
+        interfaces.IVariated
     )
 
     # Declarative properties
@@ -182,13 +182,13 @@ class TradeModelLine(Predicate, XMLMatrix, Amount):
             self.getQuantity(None) is None or \
             len(self.getVariationCategoryList()) and \
             tmp_movement.getQuantity(None) is None:
-          # if the quantity is not defined, that mean we should search on 
+          # if the quantity is not defined, that mean we should search on
           # all movements with correponding base_amount (if we use cells, we
           # have to look on cells, if we don't, look on self)
           for movement in movement_list:
             if set(base_application_list)\
                 .intersection(set(movement.getBaseContributionList())):
-              # if the movement have no variation category, it's the same as 
+              # if the movement have no variation category, it's the same as
               # if he have all variation categories
               if len(movement.getVariationCategoryList()) == 0 or \
                   set(movement.getVariationCategoryList()).intersection(\