diff --git a/product/ERP5/Document/BusinessTemplate.py b/product/ERP5/Document/BusinessTemplate.py
index 36af2510fe58995a4862781fdcc9fe889131a2f6..725cf9f13adc687325c4d48ac6eeab65e63e9471 100644
--- a/product/ERP5/Document/BusinessTemplate.py
+++ b/product/ERP5/Document/BusinessTemplate.py
@@ -87,7 +87,11 @@ catalog_method_list = ('_is_catalog_list_method_archive',
 catalog_method_filter_list = ('_filter_expression_archive',
                               '_filter_expression_instance_archive',
                               '_filter_type_archive',)
-
+                              
+class BusinessTemplateMissingDependency(Exception):
+  """ Exception raised when a dependency is missing
+  """
+  pass
 
 def removeAll(entry):
   '''
@@ -302,8 +306,8 @@ class BaseTemplateItem(Implicit, Persistent):
     self._archive = PersistentMapping()
     self._objects = PersistentMapping()
     for id in id_list:
-      if not id: continue
-      self._archive[id] = None
+      if id is not None and id != '':
+        self._archive[id] = None
 
   def build(self, context, **kw):
     pass
@@ -397,8 +401,9 @@ class ObjectTemplateItem(BaseTemplateItem):
     if tool_id is not None:
       id_list = self._archive.keys()
       self._archive.clear()
-      for id in id_list:
-        self._archive["%s/%s" % (tool_id, id)] = None
+      for id in id_list :
+        if id != '':
+          self._archive["%s/%s" % (tool_id, id)] = None
 
   def export(self, context, bta, **kw):
     if len(self._objects.keys()) == 0:
@@ -4417,6 +4422,31 @@ Business Template is a set of definitions, such as skins, portal types and categ
         item = getattr(self, item_name)
         items_list.extend(item.getKeys())
       return items_list
+    
+    #By christophe Dumez <christophe@nexedi.com>
+    def checkDependencies(self):
+      """
+       Check if all the dependencies of the business template
+       are installed. Raise an exception with the list of
+       missing dependencies if some are missing
+      """
+      missing_dep_list = []
+      dependency_list = self.getDependencyList()
+      if len(dependency_list)!=0:
+        for dependency_couple in dependency_list:
+          dependency_couple_list = dependency_couple.split(' ')
+          dependency = dependency_couple_list[0]
+          version_restriction = None
+          if len(dependency_couple_list) > 1:
+            version_restriction = dependency_couple_list[1][1:-1]
+          installed_bt = self.portal_templates.getInstalledBusinessTemplate(dependency)
+          if (not self.portal_templates.IsOneProviderInstalled(dependency)) \
+             and ((installed_bt is None) \
+                  or (version_restriction is not None and 
+                     (not self.portal_templates.compareVersionStrings(installed_bt.getVersion(), version_restriction)))):
+            missing_dep_list.append((dependency, version_restriction or ''))
+      if len(missing_dep_list) != 0:
+        raise BusinessTemplateMissingDependency, 'Impossible to install, please install the following dependencies before: %s'%repr(missing_dep_list)
 
     def diffObject(self, REQUEST, **kw):
       """