diff --git a/product/ERP5/Tool/SimulationTool.py b/product/ERP5/Tool/SimulationTool.py
index 480b4f97d1d9e90253e96a8cfbb740472503219b..1f0c0082f65fbae32f73a5896e3c0915c993135c 100755
--- a/product/ERP5/Tool/SimulationTool.py
+++ b/product/ERP5/Tool/SimulationTool.py
@@ -200,74 +200,18 @@ class SimulationTool (BaseTool):
 
     #######################################################
     # Stock Management
-    security.declareProtected(Permissions.AccessContentsInformation, 'getInventory')
-    def getInventory(self, from_date=None, to_date=None, at_date=None,
+
+    def _generateSQLKeywordDict(self, from_date=None, to_date=None, at_date=None,
         resource=None, node=None, payment=None,
-          section=None, mirror_section=None,
+        section=None, mirror_section=None,
         resource_category=None, node_category=None, payment_category=None,
-          section_category=None, mirror_section_category=None,
+        section_category=None, mirror_section_category=None,
         simulation_state=None, transit_simulation_state = None, omit_transit=0,
-          input_simulation_state = None, output_simulation_state=None,
+        input_simulation_state = None, output_simulation_state=None,
         variation_text=None, variation_category=None,
-        ignore_variation=0, standardise=0, omit_simulation=0, omit_input=0, omit_output=0,
-        selection_domain=None, selection_report=None, src__=0, **kw) :
+        **kw) :
       """
-      from_date (>=) -
-
-      to_date   (<)  -
-
-      at_date   (<=) - only take rows which date is <= at_date
-
-      resource (only in generic API in simulation)
-
-      node        -  only take rows in stock table which node_uid is equivalent to node
-
-      payment        -  only take rows in stock table which payment_uid is equivalent to payment
-
-      section        -  only take rows in stock table which section_uid is equivalent to section
-
-      mirror_section
-
-      resource_category        -  only take rows in stock table which resource_uid is in resource_category
-
-      node_category        -  only take rows in stock table which node_uid is in section_category
-
-      payment_category        -  only take rows in stock table which payment_uid is in section_category
-
-      section_category        -  only take rows in stock table which section_uid is in section_category
-
-      mirror_section_category
-
-      variation_text - only take rows in stock table with specified variation_text
-                       this needs to be extended with some kind of variation_category ?
-                       XXX this way of implementing variation selection is far from perfect
-
-      variation_category - variation or list of possible variations
-
-      simulation_state - only take rows with specified simulation_state
-
-      transit_simulation_state - take rows with specified transit_simulation_state and quantity < 0
-
-      omit_transit - do not evaluate transit_simulation_state
-
-      input_simulation_state - only take rows with specified input_simulation_state and quantity > 0
-
-      output_simulation_state - only take rows with specified output_simulation_state and quantity < 0
-
-      ignore_variation - do not take into account variation in inventory calculation
-
-      standardise - provide a standard quantity rather than an SKU
-
-      omit_simulation
-
-      omit_input
-
-      omit_output
-
-      selection_domain, selection_report - see ListBox
-
-      **kw  - if we want extended selection with more keywords (but bad performance)
-              check what we can do with buildSqlQuery
+      generates keywork and calls buildSqlQuery
       """
       new_kw = {}
       new_kw.update(kw)
@@ -350,7 +294,7 @@ class SimulationTool (BaseTool):
         for resource_category_item in resource_category :
           resource_category_uid_list.append(self.portal_categories.restrictedTraverse(resource_category_item).getUid())
       if len(resource_category_uid_list) :
-        new_kw['resourceCategory'] = resource_category_uid_list
+        new_kw['stock_resourceCategory'] = resource_category_uid_list
 
       node_category_uid_list = []
       if type(node_category) is type('') :
@@ -359,7 +303,7 @@ class SimulationTool (BaseTool):
         for node_category_item in node_category :
           node_category_uid_list.append(self.portal_categories.restrictedTraverse(node_category_item).getUid())
       if len(node_category_uid_list) :
-        new_kw['nodeCategory'] = node_category_uid_list
+        new_kw['stock_nodeCategory'] = node_category_uid_list
 
       payment_category_uid_list = []
       if type(payment_category) is type('') :
@@ -368,7 +312,7 @@ class SimulationTool (BaseTool):
         for payment_category_item in payment_category :
           payment_category_uid_list.append(self.portal_categories.restrictedTraverse(payment_category_item).getUid())
       if len(payment_category_uid_list) :
-        new_kw['paymentCategory'] = payment_category_uid_list
+        new_kw['stock_paymentCategory'] = payment_category_uid_list
 
       section_category_uid_list = []
       if type(section_category) is type('') :
@@ -377,7 +321,7 @@ class SimulationTool (BaseTool):
         for section_category_item in section_category :
           section_category_uid_list.append(self.portal_categories.restrictedTraverse(section_category_item).getUid())
       if len(section_category_uid_list) :
-        new_kw['sectionCategory'] = section_category_uid_list
+        new_kw['stock_sectionCategory'] = section_category_uid_list
 
       mirror_section_category_uid_list = []
       if type(mirror_section_category) is type('') :
@@ -386,7 +330,7 @@ class SimulationTool (BaseTool):
         for mirror_section_category_item in mirror_section_category :
           mirror_section_category_uid_list.append(self.portal_categories.restrictedTraverse(mirror_section_category_item).getUid())
       if len(mirror_section_category_uid_list) :
-        new_kw['mirrorSectionCategory'] = mirror_section_category_uid_list
+        new_kw['stock_mirrorSectionCategory'] = mirror_section_category_uid_list
 
       variation_category_uid_list = []
       if type(variation_category) is type('') :
@@ -433,14 +377,80 @@ class SimulationTool (BaseTool):
 
       sql_kw.update(self.portal_catalog.buildSQLQuery(**new_kw))
 
+      return sql_kw
+
+    security.declareProtected(Permissions.AccessContentsInformation, 'getInventory')
+    def getInventory(self, src__=0,
+        ignore_variation=0, standardise=0, omit_simulation=0, omit_input=0, omit_output=0,
+        selection_domain=None, selection_report=None, **kw) :
+      """
+      from_date (>=) -
+
+      to_date   (<)  -
+
+      at_date   (<=) - only take rows which date is <= at_date
+
+      resource (only in generic API in simulation)
+
+      node        -  only take rows in stock table which node_uid is equivalent to node
+
+      payment        -  only take rows in stock table which payment_uid is equivalent to payment
+
+      section        -  only take rows in stock table which section_uid is equivalent to section
+
+      mirror_section
+
+      resource_category        -  only take rows in stock table which resource_uid is in resource_category
+
+      node_category        -  only take rows in stock table which node_uid is in section_category
+
+      payment_category        -  only take rows in stock table which payment_uid is in section_category
+
+      section_category        -  only take rows in stock table which section_uid is in section_category
+
+      mirror_section_category
+
+      variation_text - only take rows in stock table with specified variation_text
+                       this needs to be extended with some kind of variation_category ?
+                       XXX this way of implementing variation selection is far from perfect
+
+      variation_category - variation or list of possible variations
+
+      simulation_state - only take rows with specified simulation_state
+
+      transit_simulation_state - take rows with specified transit_simulation_state and quantity < 0
+
+      omit_transit - do not evaluate transit_simulation_state
+
+      input_simulation_state - only take rows with specified input_simulation_state and quantity > 0
+
+      output_simulation_state - only take rows with specified output_simulation_state and quantity < 0
+
+      ignore_variation - do not take into account variation in inventory calculation
+
+      standardise - provide a standard quantity rather than an SKU
+
+      omit_simulation
+
+      omit_input
+
+      omit_output
+
+      selection_domain, selection_report - see ListBox
+
+      **kw  - if we want extended selection with more keywords (but bad performance)
+              check what we can do with buildSqlQuery
+      """
+      sql_kw = self._generateSQLKeywordDict(**kw)
+
       if src__ :
-        return self.Resource_zGetInventory(src__=1, ignore_variation=ignore_variation,
-            standardise=standardise, omit_simulation=omit_simulation,
+        return self.Resource_zGetInventory(src__=1,
+            ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
             omit_input=omit_input, omit_output=omit_output,
             selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
 
-      result = self.Resource_zGetInventory(ignore_variation=ignore_variation,
-          standardise=standardise, omit_simulation=omit_simulation,
+      result = self.Resource_zGetInventory(
+          ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
           omit_input=omit_input, omit_output=omit_output,
           selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
       if len(result) > 0:
@@ -469,40 +479,36 @@ class SimulationTool (BaseTool):
       """
       Returns future inventory
       """
+      kw['simulation_state'] = tuple(list(self.getPortalFutureInventoryStateList())
+          + list(self.getPortalReservedInventoryStateList()) + list(self.getPortalCurrentInventoryStateList()))
       return self.getInventory(**kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getInventoryList')
-    def getInventoryList(self, from_date=None, to_date=None, at_date=None,
-        resource=None, node=None, payment=None,
-          section=None, mirror_section=None,
-        resource_category=None, node_category=None, payment_category=None,
-          section_category=None, mirror_section_category=None,
-        simulation_state=None, transit_simulation_state = None, omit_transit=0,
-          input_simulation_state = None, output_simulation_state=None,
-        variation_text=None, variation_category=None,
+    def getInventoryList(self, src__=0,
         ignore_variation=0, standardise=0, omit_simulation=0, omit_input=0, omit_output=0,
-        selection_domain=None, selection_report=None, src__=0, **kw):
+        selection_domain=None, selection_report=None, **kw) :
       """
       Returns list of inventory grouped by section or site
       """
-      if section_category is None:
-        section_category = self.getPortalDefaultSectionCategory()
-      if type(simulation_state) is type(''):
-        simulation_state = [simulation_state]
-      return self.Resource_zGetInventoryList(resource_uid = [self.getUid()],
-                                             resource=None,
-                                             to_date=at_date,
-                                             section=section, node=node, payment=payment,
-                                             node_category=node_category,
-                                             section_category=section_category, payment_category=payment_category,
-                                             simulation_state=simulation_state,
-                                              **kw)
+      sql_kw = self._generateSQLKeywordDict(**kw)
+
+      if src__ :
+        return self.Resource_zGetInventoryList(src__=1,
+            ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+            omit_input=omit_input, omit_output=omit_output,
+            selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
+
+      return self.Resource_zGetInventoryList(
+          ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+          omit_input=omit_input, omit_output=omit_output,
+          selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getCurrentInventoryList')
     def getCurrentInventoryList(self, **kw):
       """
       Returns list of current inventory grouped by section or site
       """
+      kw['simulation_state'] = self.getPortalCurrentInventoryStateList()
       return self.getInventoryList(**kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getFutureInventoryList')
@@ -510,40 +516,36 @@ class SimulationTool (BaseTool):
       """
       Returns list of future inventory grouped by section or site
       """
+      kw['simulation_state'] = tuple(list(self.getPortalFutureInventoryStateList())
+          + list(self.getPortalReservedInventoryStateList()) + list(self.getPortalCurrentInventoryStateList()))
       return self.getInventoryList(**kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getInventoryStat')
-    def getInventoryStat(self, from_date=None, to_date=None, at_date=None,
-        resource=None, node=None, payment=None,
-          section=None, mirror_section=None,
-        resource_category=None, node_category=None, payment_category=None,
-          section_category=None, mirror_section_category=None,
-        simulation_state=None, transit_simulation_state = None, omit_transit=0,
-          input_simulation_state = None, output_simulation_state=None,
-        variation_text=None, variation_category=None,
+    def getInventoryStat(self, src__=0,
         ignore_variation=0, standardise=0, omit_simulation=0, omit_input=0, omit_output=0,
-        selection_domain=None, selection_report=None, src__=0, **kw):
+        selection_domain=None, selection_report=None, **kw) :
       """
       Returns statistics of inventory grouped by section or site
       """
-      if section_category is None:
-        section_category = self.getPortalDefaultSectionCategory()
-      if type(simulation_state) is type(''):
-        simulation_state = [simulation_state]
-      return self.Resource_zGetInventory(resource_uid = [self.getUid()],
-                                             resource=None,
-                                             to_date=at_date,
-                                             section=section, node=node, payment=payment,
-                                             node_category=node_category,
-                                             section_category=section_category, payment_category=payment_category,
-                                             simulation_state=simulation_state,
-                                              **kw)
+      sql_kw = self._generateSQLKeywordDict(**kw)
+
+      if src__ :
+        return self.Resource_zGetInventory(src__=1,
+            ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+            omit_input=omit_input, omit_output=omit_output,
+            selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
+
+      return self.Resource_zGetInventory(
+          ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+          omit_input=omit_input, omit_output=omit_output,
+          selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getCurrentInventoryStat')
     def getCurrentInventoryStat(self, **kw):
       """
       Returns statistics of current inventory grouped by section or site
       """
+      kw['simulation_state'] = self.getPortalCurrentInventoryStateList()
       return self.getInventoryStat(**kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getFutureInventoryStat')
@@ -551,40 +553,27 @@ class SimulationTool (BaseTool):
       """
       Returns statistics of future inventory grouped by section or site
       """
+      kw['simulation_state'] = tuple(list(self.getPortalFutureInventoryStateList())
+          + list(self.getPortalReservedInventoryStateList()) + list(self.getPortalCurrentInventoryStateList()))
       return self.getInventoryStat(**kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getInventoryChart')
-    def getInventoryChart(self, from_date=None, to_date=None, at_date=None,
-        resource=None, node=None, payment=None,
-          section=None, mirror_section=None,
-        resource_category=None, node_category=None, payment_category=None,
-          section_category=None, mirror_section_category=None,
-        simulation_state=None, transit_simulation_state = None, omit_transit=0,
-          input_simulation_state = None, output_simulation_state=None,
-        variation_text=None, variation_category=None,
-        ignore_variation=0, standardise=0, omit_simulation=0, omit_input=0, omit_output=0,
-        selection_domain=None, selection_report=None, src__=0, **kw):
+    def getInventoryChart(self, **kw):
       """
       Returns list of inventory grouped by section or site
       """
-      if section_category is None:
-        section_category = self.getPortalDefaultSectionCategory()
-      if type(simulation_state) is type(''):
-        simulation_state = [simulation_state]
-      return self.Resource_zGetInventoryChart(resource_uid = [self.getUid()],
-                                             resource=None,
-                                             to_date=at_date,
-                                             section=section, node=node, payment=payment,
-                                             node_category=node_category,
-                                             section_category=section_category, payment_category=payment_category,
-                                             simulation_state=simulation_state,
-                                              **kw)
+      if src__ :
+        return self.getInventoryList(src__=1, **kw)
+
+      result = self.getInventoryList(**kw)
+      return map(lambda r: (r.node_title, r.inventory), result)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getCurrentInventoryChart')
     def getCurrentInventoryChart(self, **kw):
       """
       Returns list of current inventory grouped by section or site
       """
+      kw['simulation_state'] = self.getPortalCurrentInventoryStateList()
       return self.getInventoryChart(**kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getFutureInventoryChart')
@@ -592,40 +581,36 @@ class SimulationTool (BaseTool):
       """
       Returns list of future inventory grouped by section or site
       """
+      kw['simulation_state'] = tuple(list(self.getPortalFutureInventoryStateList())
+          + list(self.getPortalReservedInventoryStateList()) + list(self.getPortalCurrentInventoryStateList()))
       return self.getInventoryChart(**kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getInventoryAssetPrice')
-    def getInventoryAssetPrice(self, from_date=None, to_date=None, at_date=None,
-        resource=None, node=None, payment=None,
-          section=None, mirror_section=None,
-        resource_category=None, node_category=None, payment_category=None,
-          section_category=None, mirror_section_category=None,
-        simulation_state=None, transit_simulation_state = None, omit_transit=0,
-          input_simulation_state = None, output_simulation_state=None,
-        variation_text=None, variation_category=None,
+    def getInventoryAssetPrice(self, src__=0,
         ignore_variation=0, standardise=0, omit_simulation=0, omit_input=0, omit_output=0,
-        selection_domain=None, selection_report=None, src__=0, **kw):
+        selection_domain=None, selection_report=None, **kw):
       """
       Returns list of inventory grouped by section or site
       """
-      if section_category is None:
-        section_category = self.getPortalDefaultSectionCategory()
-      if type(simulation_state) is type(''):
-        simulation_state = [simulation_state]
-      return self.Resource_zGetInventoryAssetPrice(resource_uid = [self.getUid()],
-                                             resource=None,
-                                             to_date=at_date,
-                                             section=section, node=node, payment=payment,
-                                             node_category=node_category,
-                                             section_category=section_category, payment_category=payment_category,
-                                             simulation_state=simulation_state,
-                                              **kw)
+      sql_kw = self._generateSQLKeywordDict(**kw)
+
+      if src__ :
+        return self.Resource_zGetInventoryAssetPrice(src__=1,
+            ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+            omit_input=omit_input, omit_output=omit_output,
+            selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
+
+      return self.Resource_zGetInventoryAssetPrice(
+          ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+          omit_input=omit_input, omit_output=omit_output,
+          selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getCurrentInventoryAssetPrice')
     def getCurrentInventoryAssetPrice(self, **kw):
       """
       Returns list of current inventory grouped by section or site
       """
+      kw['simulation_state'] = self.getPortalCurrentInventoryStateList()
       return self.getInventoryAssetPrice(**kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getAvailableInventoryAssetPrice')
@@ -634,6 +619,7 @@ class SimulationTool (BaseTool):
       Returns list of available inventory grouped by section or site
       (current inventory - deliverable)
       """
+      kw['simulation_state'] = self.getPortalCurrentInventoryStateList()
       return self.getInventoryAssetPrice(**kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getFutureInventoryAssetPrice')
@@ -641,159 +627,115 @@ class SimulationTool (BaseTool):
       """
       Returns list of future inventory grouped by section or site
       """
+      kw['simulation_state'] = tuple(list(self.getPortalFutureInventoryStateList())
+          + list(self.getPortalReservedInventoryStateList()) + list(self.getPortalCurrentInventoryStateList()))
       return self.getInventoryAssetPrice(**kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getInventoryHistoryList')
-    def getInventoryHistoryList(self, from_date=None, to_date=None, at_date=None,
-        resource=None, node=None, payment=None,
-          section=None, mirror_section=None,
-        resource_category=None, node_category=None, payment_category=None,
-          section_category=None, mirror_section_category=None,
-        simulation_state=None, transit_simulation_state = None, omit_transit=0,
-          input_simulation_state = None, output_simulation_state=None,
-        variation_text=None, variation_category=None,
+    def getInventoryHistoryList(self, src__=0,
         ignore_variation=0, standardise=0, omit_simulation=0, omit_input=0, omit_output=0,
-        selection_domain=None, selection_report=None, src__=0, **kw):
+        selection_domain=None, selection_report=None, **kw):
       """
       Returns list of inventory grouped by section or site
       """
-      if section_category is None:
-        section_category = self.getPortalDefaultSectionCategory()
-      if type(simulation_state) is type(''):
-        simulation_state = [simulation_state]
-      return self.Resource_getInventoryHistoryList(  resource = self._getMovementResourceList(),
-                                             from_date=from_date,
-                                             to_date=to_date,
-                                             section=section,
-                                             node=node,
-                                             payment=payment,
-                                             node_category=node_category,
-                                             section_category=section_category,
-                                             payment_category=payment_category,
-                                             simulation_state = simulation_state,
-                                              **kw)
+      sql_kw = self._generateSQLKeywordDict(**kw)
+
+      if src__ :
+        return self.Resource_getInventoryHistoryList(src__=1,
+            ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+            omit_input=omit_input, omit_output=omit_output,
+            selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
+
+      return self.Resource_getInventoryHistoryList(
+          ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+          omit_input=omit_input, omit_output=omit_output,
+          selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getInventoryHistoryChart')
-    def getInventoryHistoryChart(self, from_date=None, to_date=None, at_date=None,
-        resource=None, node=None, payment=None,
-          section=None, mirror_section=None,
-        resource_category=None, node_category=None, payment_category=None,
-          section_category=None, mirror_section_category=None,
-        simulation_state=None, transit_simulation_state = None, omit_transit=0,
-          input_simulation_state = None, output_simulation_state=None,
-        variation_text=None, variation_category=None,
+    def getInventoryHistoryChart(self, src__=0,
         ignore_variation=0, standardise=0, omit_simulation=0, omit_input=0, omit_output=0,
-        selection_domain=None, selection_report=None, src__=0, **kw):
+        selection_domain=None, selection_report=None, **kw):
       """
       Returns list of inventory grouped by section or site
       """
-      if section_category is None:
-        section_category = self.getPortalDefaultSectionCategory()
-      if type(simulation_state) is type(''):
-        simulation_state = [simulation_state]
-      return self.Resource_getInventoryHistoryChart(  resource = self._getMovementResourceList(),
-                                             from_date=from_date,
-                                             to_date=to_date,
-                                             section=section,
-                                             node=node,
-                                             payment=payment,
-                                             node_category=node_category,
-                                             section_category=section_category,
-                                             payment_category=payment_category,
-                                             simulation_state = simulation_state,
-                                              **kw)
+      sql_kw = self._generateSQLKeywordDict(**kw)
+
+      if src__ :
+        return self.Resource_getInventoryHistoryChart(src__=1,
+            ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+            omit_input=omit_input, omit_output=omit_output,
+            selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
+
+      return self.Resource_getInventoryHistoryChart(
+          ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+          omit_input=omit_input, omit_output=omit_output,
+          selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getMovementHistoryList')
-    def getMovementHistoryList(self, from_date=None, to_date=None, at_date=None,
-        resource=None, node=None, payment=None,
-          section=None, mirror_section=None,
-        resource_category=None, node_category=None, payment_category=None,
-          section_category=None, mirror_section_category=None,
-        simulation_state=None, transit_simulation_state = None, omit_transit=0,
-          input_simulation_state = None, output_simulation_state=None,
-        variation_text=None, variation_category=None,
+    def getMovementHistoryList(self, src__=0,
         ignore_variation=0, standardise=0, omit_simulation=0, omit_input=0, omit_output=0,
-        selection_domain=None, selection_report=None, src__=0, **kw):
+        selection_domain=None, selection_report=None, **kw):
       """
       Returns list of inventory grouped by section or site
       """
-      if section_category is None:
-        section_category = self.getPortalDefaultSectionCategory()
-      if type(simulation_state) is type(''):
-        simulation_state = [simulation_state]
-      return self.Resource_zGetMovementHistoryList(  resource = self._getMovementResourceList(),
-                                             from_date=from_date,
-                                             to_date=to_date,
-                                             section=section,
-                                             node=node,
-                                             payment=payment,
-                                             node_category=node_category,
-                                             section_category=section_category,
-                                             payment_category=payment_category,
-                                             simulation_state = simulation_state,
-                                              **kw)
+      sql_kw = self._generateSQLKeywordDict(**kw)
+
+      if src__ :
+        return self.Resource_zGetMovementHistoryList(src__=1,
+            ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+            omit_input=omit_input, omit_output=omit_output,
+            selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
+
+      return self.Resource_zGetMovementHistoryList(
+          ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+          omit_input=omit_input, omit_output=omit_output,
+          selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getMovementHistoryStat')
-    def getMovementHistoryStat(self, from_date=None, to_date=None, at_date=None,
-        resource=None, node=None, payment=None,
-          section=None, mirror_section=None,
-        resource_category=None, node_category=None, payment_category=None,
-          section_category=None, mirror_section_category=None,
-        simulation_state=None, transit_simulation_state = None, omit_transit=0,
-          input_simulation_state = None, output_simulation_state=None,
-        variation_text=None, variation_category=None,
+    def getMovementHistoryStat(self, src__=0,
         ignore_variation=0, standardise=0, omit_simulation=0, omit_input=0, omit_output=0,
-        selection_domain=None, selection_report=None, src__=0, **kw):
+        selection_domain=None, selection_report=None, **kw):
       """
       Returns statistics of inventory grouped by section or site
       """
-      if section_category is None:
-        section_category = self.getPortalDefaultSectionCategory()
-      if type(simulation_state) is type(''):
-        simulation_state = [simulation_state]
-      return self.Resource_zGetInventory(  resource = self._getMovementResourceList(),
-                                             from_date=from_date,
-                                             to_date=to_date,
-                                             section=section,
-                                             node=node,
-                                             payment=payment,
-                                             node_category=node_category,
-                                             section_category=section_category,
-                                             payment_category=payment_category,
-                                             simulation_state = simulation_state,
-                                              **kw)
+      sql_kw = self._generateSQLKeywordDict(**kw)
+
+      if src__ :
+        return self.Resource_zGetInventory(src__=1,
+            ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+            omit_input=omit_input, omit_output=omit_output,
+            selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
+
+      return self.Resource_zGetInventory(
+          ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+          omit_input=omit_input, omit_output=omit_output,
+          selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
 
     security.declareProtected(Permissions.AccessContentsInformation, 'getNextNegativeInventoryDate')
-    def getNextNegativeInventoryDate(self, from_date=None, to_date=None, at_date=None,
-        resource=None, node=None, payment=None,
-          section=None, mirror_section=None,
-        resource_category=None, node_category=None, payment_category=None,
-          section_category=None, mirror_section_category=None,
-        simulation_state=None, transit_simulation_state = None, omit_transit=0,
-          input_simulation_state = None, output_simulation_state=None,
-        variation_text=None, variation_category=None,
+    def getNextNegativeInventoryDate(self, src__=0,
         ignore_variation=0, standardise=0, omit_simulation=0, omit_input=0, omit_output=0,
-        selection_domain=None, selection_report=None, src__=0, **kw):
+        selection_domain=None, selection_report=None, **kw):
       """
       Returns statistics of inventory grouped by section or site
       """
-      if section_category is None:
-        section_category = self.getPortalDefaultSectionCategory()
-      if type(simulation_state) is type(''):
-        simulation_state = [simulation_state]
-      if from_date is None:
-        from_date = DateTime()
-      return self.Resource_getInventoryHistoryList(  resource = self._getMovementResourceList(),
-                                             from_date=from_date,
-                                             to_date=to_date,
-                                             section=section,
-                                             node=node,
-                                             payment=payment,
-                                             node_category=node_category,
-                                             section_category=section_category,
-                                             payment_category=payment_category,
-                                             simulation_state = simulation_state,
-                                              **kw)
+      sql_kw = self._generateSQLKeywordDict(**kw)
+
+      if src__ :
+        return self.Resource_getInventoryHistoryList(src__=1,
+            ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+            omit_input=omit_input, omit_output=omit_output,
+            selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
+
+      result = self.Resource_getInventoryHistoryList(
+          ignore_variation=ignore_variation, standardise=standardise, omit_simulation=omit_simulation,
+          omit_input=omit_input, omit_output=omit_output,
+          selection_domain=selection_domain, selection_report=selection_report, **sql_kw)
+
+      for inventory in result:
+        if inventory['inventory'] < 0:
+          return inventory['stop_date']
+
+      return None
 
     #######################################################
     # Movement Group Collection / Delivery Creation