diff --git a/product/ERP5/Document/BusinessManager.py b/product/ERP5/Document/BusinessManager.py
index ba1eac7cad6a8ff7f8444f3c0cce1527f5a4c283..6b91657cfcbc1c5d7886cff381f7b060ec4217d3 100644
--- a/product/ERP5/Document/BusinessManager.py
+++ b/product/ERP5/Document/BusinessManager.py
@@ -337,7 +337,9 @@ class BusinessManager(Folder):
   security.declareProtected(Permissions.ManagePortal, 'storeTemplateData')
   def storeTemplateData(self, isBuild=False, **kw):
     """
-    Store data for objects in the ERP5
+    Store data for objects in the ERP5.
+    Create Business Item sub-objects after resolving the paths. Also, add
+    layers to all Business Item objects
     """
     portal = self.getPortalObject()
     LOG('Business Manager', INFO, 'Storing Manager Data')
@@ -507,7 +509,7 @@ class BusinessManager(Folder):
     reduce(BT) = BT
     """
     path_list = list(set([path_item.getBusinessPath() for path_item
-                 in self._path_item_list]))
+                 in self.objectValues()]))
 
     reduced_path_item_list = []
 
@@ -522,11 +524,11 @@ class BusinessManager(Folder):
     # Create an extra dict for values on path which are repeated in the path list
     seen_path_dict = {path: [] for path in seen_path_list}
 
-    for path_item in self._path_item_list:
-      if path_item.path in seen_path_list:
+    for path_item in self.objectValues():
+      if path_item.getProperty('item_path') in seen_path_list:
         # In case the path is repeated keep the path_item in a separate dict
         # for further arithmetic
-        seen_path_dict[path_item.path].append(path_item)
+        seen_path_dict[path_item.getProperty('item_path')].append(path_item)
       else:
         # If the path is unique, add them in the list of reduced Business Item
         reduced_path_item_list.append(path_item)
@@ -535,27 +537,27 @@ class BusinessManager(Folder):
     for path, path_item_list in seen_path_dict.items():
 
       # Create separate list of list items with highest priority
-      higest_priority_layer = max(path_item_list, key=attrgetter('layer')).layer
+      higest_priority_layer = max(path_item_list, key=attrgetter('item_layer')).item_layer
       prioritized_path_item = [path_item for path_item
                                in path_item_list
-                               if path_item.layer == higest_priority_layer]
+                               if path_item.item_layer == higest_priority_layer]
 
       # Separate the positive and negative sign path_item
       if len(prioritized_path_item) > 1:
 
         path_item_list_add = [item for item
                               in prioritized_path_item
-                              if item.sign > 0]
+                              if item.getProperty('item_sign') > 0]
 
         path_item_list_subtract = [item for item
                                    in prioritized_path_item
-                                   if item.sign < 0]
+                                   if item.getProperty('item_sign') < 0]
 
         combined_added_path_item = reduce(lambda x, y: x+y, path_item_list_add)
         combined_subtracted_path_item = reduce(lambda x, y: x+y, path_item_list_subtract)
 
-        added_value = combined_added_path_item.value
-        subtracted_value = combined_subtracted_path_item.value
+        added_value = combined_added_path_item.objectValues()
+        subtracted_value = combined_subtracted_path_item.objectValues()
 
         if added_value != subtracted_value:
           # Append the arithmetically combined path_item objects in the final