diff --git a/product/ERP5/Tool/DomainTool.py b/product/ERP5/Tool/DomainTool.py
index bee67c696b775cfaece160e8280f19e68fcbf98e..047ebe78910a8d294aa468171d25bf24119f2bcb 100755
--- a/product/ERP5/Tool/DomainTool.py
+++ b/product/ERP5/Tool/DomainTool.py
@@ -59,7 +59,7 @@ class DomainTool(BaseTool):
     manage_overview = DTMLFile( 'explainDomainTool', _dtmldir )
 
     security.declarePublic('searchPredicateList')
-    def searchPredicateList(self,context,test=1,**kw):
+    def searchPredicateList(self,context,test=1,sort_method=None,**kw):
       """
       Search all predicates wich corresponds to this particular context.
       """
@@ -121,18 +121,50 @@ class DomainTool(BaseTool):
       for predicate in [x.getObject() for x in sql_result_list]:
         if test or predicate.test(context):
           result_list.append(predicate)
+      LOG('searchPredicateList, result_list before sort',0,result_list)
+      if sort_method is not None:
+        result_list.sort(sort_method)
+      LOG('searchPredicateList, result_list after sort',0,result_list)
       return result_list
 
     security.declarePublic('generateMappedValue')
     def generateMappedValue(self,context,test=1,**kw):
       """
+      We will generate a mapped value witht the list of all predicates founds. Let's say
+      we have 3 predicates (in the order we want) like this:
+      Predicate 1   [ base_price1,           ,   ,   ,    ,    , ]
+      Predicate 2   [ base_price2, quantity2 ,   ,   ,    ,    , ]
+      Predicate 3   [ base_price3, quantity3 ,   ,   ,    ,    , ]
+
+      Our MappedValue generated will have the base_price of the predicate1, and the quantity of 
+      the Predicate2, because Predicate 1 is the first one wich defines a base_price and the
+      Predicate2 is the first one wich defines a quantity
       """
-      pass
-
-
-
-
-
+      # First get the list of predicates
+      predicate_list = self.searchPredicateList(context,test=test,**kw)
+
+      #mapped_value = newTempBase(self.getPortalObject(),'new_mapped_value')
+      from Products.ERP5Type.Document import newTempDeliveryCell
+      mapped_value = newTempDeliveryCell(self.getPortalObject(),'new_mapped_value')
+      mapped_value_property_dict = {}
+      #mapped_value = self
+
+      # Look for each property the first predicate wich defines the property
+      LOG('DomainTool.generateMappedValue predicate_list',0,[x.getPath() for x in predicate_list])
+      for predicate in predicate_list:
+        LOG('DomainTool.generateMappedValue predicate',0,predicate.getPath())
+        for mapped_value_property in predicate.getMappedValuePropertyList():
+          if not mapped_value_property_dict.has_key(mapped_value_property):
+            value = predicate.getProperty(mapped_value_property)
+            LOG('DomainTool.generateMappedValue (property,value)',0,(mapped_value_property,value))
+            if value is not None:
+              mapped_value_property_dict[mapped_value_property] = value
+      mapped_value = mapped_value.asContext(**mapped_value_property_dict)
+      LOG('DomainTool.generateMappedValue mapped_value_property_dict',0,mapped_value_property_dict)
+      LOG('DomainTool.generateMappedValue mapped_value.__dict__',0,mapped_value.__dict__)
+      LOG('DomainTool.generateMappedValue mapped_value',0,mapped_value)
+      return mapped_value
+      
 
 
 InitializeClass(DomainTool)