diff --git a/product/ERP5/tests/testBusinessTemplate.py b/product/ERP5/tests/testBusinessTemplate.py
index 35773c4439a6ba38135546eb5a79567c2a615533..1de36f3d148e7d1a85bb87826ab7dcaa76ebe2ad 100755
--- a/product/ERP5/tests/testBusinessTemplate.py
+++ b/product/ERP5/tests/testBusinessTemplate.py
@@ -104,6 +104,37 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     self.failIf(core_bt is None)
     sequence.edit(current_bt=core_bt)
 
+
+  def stepCopyCoreBusinessTemplate(self, sequence=None,
+                                  sequence_list=None, **kw):
+    """
+    Copy erp5_core as new Business Template
+    """
+    template_tool = self.getTemplateTool()
+    core_bt = None
+    for bt in template_tool.objectValues(filter={'portal_type':'Business Template'}):
+      if bt.getTitle() == 'erp5_core':
+        core_bt = bt
+        break
+    self.failIf(core_bt is None)
+    # make copy
+    copy_data = template_tool.manage_copyObjects(ids=[core_bt.getId()])
+    ids = template_tool.manage_pasteObjects(copy_data)
+    LOG('id after copy', 0, ids)
+    new_id = ids[0]['new_id']
+    new_bt = template_tool._getOb(new_id)
+    LOG(new_bt, 0, str((new_bt.getTitle(), new_id)))
+    self.assertEqual(new_bt.getTitle(), 'erp5_core')
+    sequence.edit(copy_bt=new_bt)
+
+  def stepUseCopyCoreBusinessTemplate(self, sequence=None,
+                                  sequence_list=None, **kw):
+    """
+    Define erp5_core as current bt
+    """
+    bt = sequence.get('copy_bt')
+    sequence.edit(current_bt=bt, export_bt=bt)
+
   def stepUseExportBusinessTemplate(self, sequence=None,
                                   sequence_list=None, **kw):
     """
@@ -235,6 +266,7 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     pt.manage_addTypeInformation(ERP5TypeInformation.meta_type, id='Geek Module', typeinfo_name='ERP5Type: ERP5 Folder')
     module_type = pt._getOb('Geek Module', None)
     self.failUnless(module_type is not None)
+    module_type.filter_content_types = 1
     module_type.allowed_content_types = ('Geek Object',)
     sequence.edit(module_ptype_id=module_type.getId())
 
@@ -247,8 +279,9 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     ptype_ids = []
     ptype_ids.append(sequence.get('object_ptype_id', ''))
     ptype_ids.append(sequence.get('module_ptype_id', ''))
-    self.assertEqual(len(ptype_ids), 2)
+    self.assertEqual(len(ptype_ids), 2)    
     bt.edit(template_portal_type_id_list=ptype_ids)
+    self.stepFillPortalTypesFields(sequence=sequence, sequence_list=sequence_list, **kw)
     
   def stepRemovePortalType(self, sequence=None, sequence_list=None, **kw):
     """
@@ -287,6 +320,15 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     object_type = pt._getOb(object_id, None)
     self.failUnless(object_type is None)
 
+  def stepFillPortalTypesFields(self, sequence=None, sequence_list=None, **kw):
+    """
+    Fill portal types properties field in business template
+    """
+    bt = sequence.get('current_bt', None)
+    self.failUnless(bt is not None)
+    bt.getPortalTypesProperties()
+    LOG("portal types properties added for", 0, bt.getTitle())
+
   # module
   def stepCreateModuleAndObjects(self, sequence=None, sequence_list=None, **kw):
     """
@@ -869,7 +911,7 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     del catalog.filter_dict[method_id]
     self.failUnless(method_id not in catalog.filter_dict.keys())        
 
-  # Related key, Result key and table
+  # Related key, Result key and table, and others
   def stepCreateKeysAndTable(self, sequence=list, sequence_list=None, **kw):
     """
     Create some keys and tables
@@ -877,6 +919,11 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     related_key = 'fake_id | category/catalog/z_fake_method'
     result_key = 'fake_catalog.uid'
     result_table = 'fake_catalog'
+    keyword_key = 'fake_keyword'
+    full_text_key = 'fake_full_text'
+    request_key = 'fake_request'
+    multivalue_key = 'fake_multivalue'
+    topic_key = 'fake_topic'
     catalog = self.getCatalogTool().getSQLCatalog()
     self.failUnless(catalog is not None)
     LOG("catalog is", 0, catalog.getId())
@@ -898,7 +945,40 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     sql_search_tables.sort()
     catalog.sql_search_tables = tuple(sql_search_tables)
     self.failUnless(result_table in catalog.sql_search_tables)
-    sequence.edit(related_key=related_key, result_key=result_key, result_table=result_table)
+    # keyword keys
+    sql_catalog_keyword_keys = list(catalog.sql_catalog_keyword_search_keys)
+    sql_catalog_keyword_keys.append(keyword_key)
+    sql_catalog_keyword_keys.sort()
+    catalog.sql_catalog_keyword_search_keys = tuple(sql_catalog_keyword_keys)
+    self.failUnless(keyword_key in catalog.sql_catalog_keyword_search_keys)
+    # full_text keys
+    sql_catalog_full_text_keys = list(catalog.sql_catalog_full_text_search_keys)
+    sql_catalog_full_text_keys.append(full_text_key)
+    sql_catalog_full_text_keys.sort()
+    catalog.sql_catalog_full_text_search_keys = tuple(sql_catalog_full_text_keys)
+    self.failUnless(full_text_key in catalog.sql_catalog_full_text_search_keys)
+    # request
+    sql_catalog_request_keys = list(catalog.sql_catalog_request_keys)
+    sql_catalog_request_keys.append(request_key)
+    sql_catalog_request_keys.sort()
+    catalog.sql_catalog_request_keys = tuple(sql_catalog_request_keys)
+    self.failUnless(request_key in catalog.sql_catalog_request_keys)
+    # multivalue
+    sql_catalog_multivalue_keys = list(catalog.sql_catalog_multivalue_keys)
+    sql_catalog_multivalue_keys.append(multivalue_key)
+    sql_catalog_multivalue_keys.sort()
+    catalog.sql_catalog_multivalue_keys = tuple(sql_catalog_multivalue_keys)
+    self.failUnless(multivalue_key in catalog.sql_catalog_multivalue_keys)
+    # topic keys
+    sql_catalog_topic_keys = list(catalog.sql_catalog_topic_search_keys)
+    sql_catalog_topic_keys.append(topic_key)
+    sql_catalog_topic_keys.sort()
+    catalog.sql_catalog_topic_search_keys = tuple(sql_catalog_topic_keys)
+    self.failUnless(topic_key in catalog.sql_catalog_topic_search_keys)
+
+    sequence.edit(related_key=related_key, result_key=result_key, result_table=result_table, \
+                  keyword_key=keyword_key, full_text_key=full_text_key, request_key=request_key, \
+                  multivalue_key=multivalue_key, topic_key=topic_key)
     
   def stepAddKeysAndTableToBusinessTemplate(self, sequence=None, sequence_list=None, **kw):
     """
@@ -912,9 +992,25 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     self.failUnless(result_key is not None)
     result_table = sequence.get('result_table', None)
     self.failUnless(result_table is not None)
+    keyword_key = sequence.get('keyword_key', None)
+    self.failUnless(keyword_key is not None)
+    full_text_key = sequence.get('full_text_key', None)
+    self.failUnless(full_text_key is not None)
+    request_key = sequence.get('request_key', None)
+    self.failUnless(request_key is not None)
+    multivalue_key = sequence.get('multivalue_key', None)
+    self.failUnless(multivalue_key is not None)
+    topic_key = sequence.get('topic_key', None)
+    self.failUnless(topic_key is not None)
+    
     bt.edit(template_catalog_related_key_list=[related_key],
             template_catalog_result_key_list=[result_key],
-            template_catalog_result_table_list=[result_table]
+            template_catalog_result_table_list=[result_table],
+            template_catalog_keyword_key_list=[keyword_key],
+            template_catalog_full_text_key_list=[full_text_key],
+            template_catalog_request_key_list=[request_key],
+            template_catalog_multivalue_key_list=[multivalue_key],
+            template_catalog_topic_key_list=[topic_key],
             )
 
   def stepRemoveKeysAndTable(self, sequence=list, sequence_list=None, **kw):
@@ -927,8 +1023,19 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     self.failUnless(result_key is not None)
     result_table = sequence.get('result_table', None)
     self.failUnless(result_table is not None)
+    keyword_key = sequence.get('keyword_key', None)
+    self.failUnless(keyword_key is not None)
+    full_text_key = sequence.get('full_text_key', None)
+    self.failUnless(full_text_key is not None)
+    request_key = sequence.get('request_key', None)
+    self.failUnless(request_key is not None)
+    multivalue_key = sequence.get('multivalue_key', None)
+    self.failUnless(multivalue_key is not None)
+    topic_key = sequence.get('topic_key', None)
+    self.failUnless(topic_key is not None)
+
     catalog = self.getCatalogTool().getSQLCatalog()
-    self.failUnless(catalog is not None)
+    self.failUnless(catalog is not None)    
     # result key
     sql_search_result_keys = list(catalog.sql_search_result_keys)
     sql_search_result_keys.remove(result_key)
@@ -947,6 +1054,37 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     sql_search_tables.sort()
     catalog.sql_search_tables = tuple(sql_search_tables)
     self.failUnless(result_table not in catalog.sql_search_tables)
+    # keyword keys
+    sql_catalog_keyword_keys = list(catalog.sql_catalog_keyword_search_keys)
+    sql_catalog_keyword_keys.remove(keyword_key)
+    sql_catalog_keyword_keys.sort()
+    catalog.sql_catalog_keyword_search_keys = tuple(sql_catalog_keyword_keys)
+    self.failUnless(keyword_key not in catalog.sql_catalog_keyword_search_keys)
+    # full_text keys
+    sql_catalog_full_text_keys = list(catalog.sql_catalog_full_text_search_keys)
+    sql_catalog_full_text_keys.remove(full_text_key)
+    sql_catalog_full_text_keys.sort()
+    catalog.sql_catalog_full_text_search_keys = tuple(sql_catalog_full_text_keys)
+    self.failUnless(full_text_key not in catalog.sql_catalog_full_text_search_keys)
+    # request
+    sql_catalog_request_keys = list(catalog.sql_catalog_request_keys)
+    sql_catalog_request_keys.remove(request_key)
+    sql_catalog_request_keys.sort()
+    catalog.sql_catalog_request_keys = tuple(sql_catalog_request_keys)
+    self.failUnless(request_key not in catalog.sql_catalog_request_keys)
+    # multivalue
+    sql_catalog_multivalue_keys = list(catalog.sql_catalog_multivalue_keys)
+    sql_catalog_multivalue_keys.remove(multivalue_key)
+    sql_catalog_multivalue_keys.sort()
+    catalog.sql_catalog_multivalue_keys = tuple(sql_catalog_multivalue_keys)
+    self.failUnless(multivalue_key not in catalog.sql_catalog_multivalue_keys)
+    # topic keys
+    sql_catalog_topic_keys = list(catalog.sql_catalog_topic_search_keys)
+    sql_catalog_topic_keys.remove(topic_key)
+    sql_catalog_topic_keys.sort()
+    catalog.sql_catalog_topic_search_keys = tuple(sql_catalog_topic_keys)
+    self.failUnless(topic_key not in catalog.sql_catalog_topic_search_keys)
+
 
   def stepCheckKeysAndTableExists(self, sequence=list, sequence_list=None, **kw):
     """
@@ -958,6 +1096,17 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     self.failUnless(result_key is not None)
     result_table = sequence.get('result_table', None)
     self.failUnless(result_table is not None)
+    keyword_key = sequence.get('keyword_key', None)
+    self.failUnless(keyword_key is not None)
+    full_text_key = sequence.get('full_text_key', None)
+    self.failUnless(full_text_key is not None)
+    request_key = sequence.get('request_key', None)
+    self.failUnless(request_key is not None)
+    multivalue_key = sequence.get('multivalue_key', None)
+    self.failUnless(multivalue_key is not None)
+    topic_key = sequence.get('topic_key', None)
+    self.failUnless(topic_key is not None)
+
     catalog = self.getCatalogTool().getSQLCatalog()
     self.failUnless(catalog is not None)
     # result key
@@ -966,6 +1115,16 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     self.failUnless(related_key in catalog.sql_catalog_related_keys)
     # result table
     self.failUnless(result_table in catalog.sql_search_tables)
+    # keyword key
+    self.failUnless(keyword_key in catalog.sql_catalog_keyword_search_keys)
+    # full text key
+    self.failUnless(full_text_key in catalog.sql_catalog_full_text_search_keys)
+    # request key
+    self.failUnless(request_key in catalog.sql_catalog_request_keys)
+    # multivalue key
+    self.failUnless(multivalue_key in catalog.sql_catalog_multivalue_keys)
+    # topic key
+    self.failUnless(topic_key in catalog.sql_catalog_topic_search_keys)
 
   def stepCheckKeysAndTableRemoved(self, sequence=list, sequence_list=None, **kw):
     """
@@ -977,6 +1136,17 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     self.failUnless(result_key is not None)
     result_table = sequence.get('result_table', None)
     self.failUnless(result_table is not None)
+    keyword_key = sequence.get('keyword_key', None)
+    self.failUnless(keyword_key is not None)
+    full_text_key = sequence.get('full_text_key', None)
+    self.failUnless(full_text_key is not None)
+    request_key = sequence.get('request_key', None)
+    self.failUnless(request_key is not None)
+    multivalue_key = sequence.get('multivalue_key', None)
+    self.failUnless(multivalue_key is not None)
+    topic_key = sequence.get('topic_key', None)
+    self.failUnless(topic_key is not None)
+
     catalog = self.getCatalogTool().getSQLCatalog()
     self.failUnless(catalog is not None)
     # result key
@@ -985,6 +1155,16 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     self.failUnless(related_key not in catalog.sql_catalog_related_keys)
     # result table
     self.failUnless(result_table not in catalog.sql_search_tables)
+    # keyword key
+    self.failUnless(keyword_key not in catalog.sql_catalog_keyword_search_keys)
+    # full text key
+    self.failUnless(full_text_key not in catalog.sql_catalog_full_text_search_keys)
+    # request key
+    self.failUnless(request_key not in catalog.sql_catalog_request_keys)
+    # multivalue key
+    self.failUnless(multivalue_key not in catalog.sql_catalog_multivalue_keys)
+    # topic key
+    self.failUnless(topic_key not in catalog.sql_catalog_topic_search_keys)
 
   # Roles
   def stepCreateRole(self, sequence=None, sequence_list=None, **kw):
@@ -1177,6 +1357,26 @@ class TestBusinessTemplate(ERP5TypeTestCase):
           if hasattr(aq_base(data), 'uid'):
             self.failUnless(data.uid is None)
 
+  def stepSetUpdateWorkflowFlagInBusinessTemplate(self, sequence=None, sequence_list=None):
+    """
+    Set flag for update in Business Template    
+    """
+    template_tool = self.getTemplateTool()
+    bt = sequence.get('current_bt')
+    self.assertEqual(bt.getTitle(),'erp5_core')
+    bt.edit(template_update_business_template_workflow=1)
+    self.assertEqual(bt.getTemplateUpdateBusinessTemplateWorkflow(), 1)
+
+  def stepSetUpdateToolFlagInBusinessTemplate(self, sequence=None, sequence_list=None):
+    """
+    Set flag for update in Business Template    
+    """
+    template_tool = self.getTemplateTool()
+    bt = sequence.get('current_bt')
+    self.assertEqual(bt.getTitle(),'erp5_core')
+    bt.edit(template_update_tool=1)
+    self.assertEqual(bt.getTemplateUpdateTool(), 1)
+
   def stepRemoveBusinessTemplate(self, sequence=None, sequence_list=None, **kw):
     """
     Remove current Business Template
@@ -1211,7 +1411,7 @@ class TestBusinessTemplate(ERP5TypeTestCase):
                        CheckNoTrashBin \
                        '
     sequence_list.addSequenceString(sequence_string)
-    sequence_list.play(self)    
+    sequence_list.play(self)      
 
   # test of portal types
   def test_02_BusinessTemplateWithPortalTypes(self, quiet=0, run=run_all_test):
@@ -1981,9 +2181,6 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     sequence_list.addSequenceString(sequence_string)
     sequence_list.play(self)
 
-
-
-
   def test_17_upgradeBusinessTemplateWithAllItems(self, quiet=0, run=run_all_test):
     if not run: return
     if not quiet:
@@ -2088,6 +2285,81 @@ class TestBusinessTemplate(ERP5TypeTestCase):
     sequence_list.addSequenceString(sequence_string)
     sequence_list.play(self)    
 
+
+  # test specific to erp5_core
+  def test_18_checkUpdateBusinessTemplateWorkflow(self, quiet=0, run=run_all_test):
+    if not run: return
+    if not quiet:
+      message = 'Test Check Update of Business Template Workflows is working'
+      ZopeTestCase._print('\n%s ' % message)
+      LOG('Testing... ', 0, message)
+    sequence_list = SequenceList()
+    sequence_string = '\
+                       CopyCoreBusinessTemplate \
+                       UseCopyCoreBusinessTemplate  \
+                       SetUpdateWorkflowFlagInBusinessTemplate \
+                       FillPortalTypesFields \
+                       CheckModifiedBuildingState \
+                       CheckNotInstalledInstallationState \
+                       BuildBusinessTemplate \
+                       CheckBuiltBuildingState \
+                       CheckNotInstalledInstallationState \
+                       CheckObjectPropertiesInBusinessTemplate \
+                       SaveBusinessTemplate \
+                       CheckBuiltBuildingState \
+                       CheckNotInstalledInstallationState \
+                       RemoveAllTrashBins \
+                       ImportBusinessTemplate \
+                       UseImportBusinessTemplate \
+                       CheckBuiltBuildingState \
+                       CheckNotInstalledInstallationState \
+                       InstallBusinessTemplate \
+                       Tic \
+                       CheckInstalledInstallationState \
+                       CheckBuiltBuildingState \
+                       CheckTrashBin \
+                       CheckSkinsLayers \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)      
+
+
+  def test_19_checkUpdateTool(self, quiet=0, run=run_all_test):
+    if not run: return
+    if not quiet:
+      message = 'Test Check Update of Tool is working'
+      ZopeTestCase._print('\n%s ' % message)
+      LOG('Testing... ', 0, message)
+    sequence_list = SequenceList()
+    sequence_string = '\
+                       CopyCoreBusinessTemplate \
+                       UseCopyCoreBusinessTemplate  \
+                       SetUpdateToolFlagInBusinessTemplate \
+                       FillPortalTypesFields \
+                       CheckModifiedBuildingState \
+                       CheckNotInstalledInstallationState \
+                       BuildBusinessTemplate \
+                       CheckBuiltBuildingState \
+                       CheckNotInstalledInstallationState \
+                       CheckObjectPropertiesInBusinessTemplate \
+                       SaveBusinessTemplate \
+                       CheckBuiltBuildingState \
+                       CheckNotInstalledInstallationState \
+                       RemoveAllTrashBins \
+                       ImportBusinessTemplate \
+                       UseImportBusinessTemplate \
+                       CheckBuiltBuildingState \
+                       CheckNotInstalledInstallationState \
+                       InstallBusinessTemplate \
+                       Tic \
+                       CheckInstalledInstallationState \
+                       CheckBuiltBuildingState \
+                       CheckTrashBin \
+                       CheckSkinsLayers \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)      
+
 if __name__ == '__main__':
   framework()
 else: