diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py
index b2ebaa72ea17c9eb7fb169661839e08fd01c2232..50c9052dac4735991d070bb4e4ce81b40caf84ef 100755
--- a/product/ERP5/Document/BusinessTemplate.py
+++ b/product/ERP5/Document/BusinessTemplate.py
@@ -68,15 +68,16 @@ class ObjectTemplateItem(Implicit):
     #LOG('Installing' , 0, '%s in %s with %s' % (self.id, container.getPhysicalPath(), self.export_string))
     container_ids = container.objectIds()
     if object_id in container_ids:  # Object already exists
-      pass # Do nothing for now
-      #n = 0
-      #new_object_id = object_id
-      #while new_object_id in container_ids:
-      #  n = n + 1
-      #  new_object_id = '%s_btsave_%s' % (object_id, n)
-      #container.manage_renameObject(object_id, new_object_id)
-    else:
-      container._importObjectFromFile(cStringIO.StringIO(self.export_string))
+      #  pass # Do nothing for now
+      n = 0
+      new_object_id = object_id
+      while new_object_id in container_ids:
+        n = n + 1
+        new_object_id = '%s_btsave_%s' % (object_id, n)
+      container.manage_renameObject(object_id, new_object_id)
+    container._importObjectFromFile(cStringIO.StringIO(self.export_string))
+    #else:
+    #  container._importObjectFromFile(cStringIO.StringIO(self.export_string))
 
 class PortalTypeTemplateItem(Implicit):
   """
@@ -118,6 +119,10 @@ class CatalogMethodTemplateItem(ObjectTemplateItem):
     self._is_uncatalog_method = method_id in portal_catalog.sql_uncatalog_object
     self._is_update_method = method_id in portal_catalog.sql_update_object
     self._is_clear_method = method_id in portal_catalog.sql_clear_catalog
+    self._is_filtered = portal_catalog.filter_dict[method_id]['filtered']
+    self._filter_expression = portal_catalog.filter_dict[method_id]['expression']
+    self._filter_expression_instance = portal_catalog.filter_dict[method_id]['expression_instance']
+    self._filter_type = portal_catalog.filter_dict[method_id]['type']
 
   def install(self, local_configuration):
     ObjectTemplateItem.install(self, local_configuration)
@@ -125,13 +130,35 @@ class CatalogMethodTemplateItem(ObjectTemplateItem):
     portal_catalog = portal.portal_catalog
     method_id = self.id
     if self._is_catalog_method and method_id not in portal_catalog.sql_catalog_object:
-      portal_catalog.sql_catalog_object = tuple([method_id] + portal_catalog.sql_catalog_object)
+      new_list = list(portal_catalog.sql_catalog_object + (method_id,))
+      new_list.sort()
+      portal_catalog.sql_catalog_object = tuple(new_list)
+    if not(self._is_catalog_method) and method_id in portal_catalog.sql_catalog_object:
+      portal_catalog.sql_catalog_object = tuple(filter(lambda id: id != method_id, portal_catalog.sql_catalog_object))
     if self._is_uncatalog_method and method_id not in portal_catalog.sql_uncatalog_object:
-      portal_catalog.sql_uncatalog_object = tuple([method_id] + portal_catalog.sql_uncatalog_object)
+      new_list = list(portal_catalog.sql_uncatalog_object + (method_id,))
+      new_list.sort()
+      portal_catalog.sql_uncatalog_object = tuple(new_list)
+    if not(self._is_uncatalog_method) and method_id in portal_catalog.sql_uncatalog_object:
+      portal_catalog.sql_uncatalog_object = tuple(filter(lambda id: id != method_id, portal_catalog.sql_uncatalog_object))
     if self._is_update_method and method_id not in portal_catalog.sql_update_object:
-      portal_catalog.sql_update_object = tuple([method_id] + portal_catalog.sql_update_object)
+      new_list = list(portal_catalog.sql_update_object + (method_id,))
+      new_list.sort()
+      portal_catalog.sql_update_object = tuple(new_list)
+    if not(self._is_update_method) and method_id in portal_catalog.sql_update_object:
+      portal_catalog.sql_update_object = tuple(filter(lambda id: id != method_id, portal_catalog.sql_update_object))
     if self._is_clear_method and method_id not in portal_catalog.sql_clear_catalog:
-      portal_catalog.sql_clear_catalog = tuple([method_id] + portal_catalog.sql_clear_catalog)
+      new_list = list(portal_catalog.sql_clear_catalog + (method_id,))
+      new_list.sort()
+      portal_catalog.sql_clear_catalog = tuple(new_list)
+    if not(self._is_clear_method) and method_id in portal_catalog.sql_clear_catalog:
+      portal_catalog.sql_clear_catalog = tuple(filter(lambda id: id != method_id, portal_catalog.sql_clear_catalog))
+    if self._is_filtered:
+      portal_catalog.filter_dict[method_id] = PersistentMapping()
+      portal_catalog.filter_dict[method_id]['filtered'] = 1
+      portal_catalog.filter_dict[method_id]['expression'] = self._filter_expression
+      portal_catalog.filter_dict[method_id]['expression_instance'] = self._filter_expression_instance
+      portal_catalog.filter_dict[method_id]['type'] = self._filter_type
 
 class ActionTemplateItem(Implicit):
   export_string = None
@@ -279,7 +306,7 @@ class BusinessTemplate(XMLObject):
          , 'description'    : """\
 Une ligne tarifaire."""
          , 'icon'           : 'order_line_icon.gif'
-         , 'product'        : 'ERP5'
+         , 'product'        : 'ERP5Type'
          , 'factory'        : 'addBusinessTemplate'
          , 'immediate_view' : 'BusinessTemplate_view'
          , 'allow_discussion'     : 1
@@ -326,6 +353,18 @@ Une ligne tarifaire."""
         )
       }
 
+    def getTemplateCatalogMethodIdList(self):
+      """
+      We have to set this method because we want an 
+      ordered list
+      """
+      result = getattr(self,'template_catalog_method_id',())
+      if result != ():
+        result = list(result)
+        result.sort()
+        result = tuple(result)
+      return result
+
 
     def initInstance(self):
       self._object_archive = PersistentMapping()
@@ -358,6 +397,8 @@ Une ligne tarifaire."""
       p = self.getPortalObject()
       if tool_id is not None:
         relative_url = "%s/%s" % (tool_id, relative_url_or_id)
+      else:
+        relative_url = relative_url_or_id
       object = p.unrestrictedTraverse(relative_url)
       if object is not None:
         self._object_archive[(relative_url_or_id, tool_id)] = ObjectTemplateItem(object,