diff --git a/product/ERP5/Document/SolverProcess.py b/product/ERP5/Document/SolverProcess.py
index 92296a68894ee41e9c6bf1d56919f0670341f222..1f07a395ab23107caf5094fe24fe3b0a4d7e45c7 100644
--- a/product/ERP5/Document/SolverProcess.py
+++ b/product/ERP5/Document/SolverProcess.py
@@ -179,8 +179,16 @@ class SolverProcess(XMLObject, ActiveProcess):
     """
     isTransitionPossible = self.getPortalObject().portal_workflow.isTransitionPossible
     for solver in self.contentValues(portal_type=self.getPortalObject().getPortalTargetSolverTypeList()):
-      if isTransitionPossible(solver, 'start_solving'):
-        solver.startSolving()
+      if solver.isTempObject():
+        solver_type = solver._getPortalTypeValue()
+        solver_type.activate(activate_kw=activate_kw).solve(
+          activate_kw=activate_kw,
+          delivery_list=solver.getDeliveryList(),
+          configuration_dict=solver.getConfigurationPropertyDict()
+          )
+      else:
+        if isTransitionPossible(solver, 'start_solving'):
+          solver.startSolving()
         solver.activate(active_process=self, activate_kw=activate_kw).solve(
           activate_kw=activate_kw)
 
diff --git a/product/ERP5/Document/SolverTypeInformation.py b/product/ERP5/Document/SolverTypeInformation.py
index 48764f1645e26c7589fa2c736009624b1cc405fb..6d935319c2e4c97351e391e46d75f883f642070f 100644
--- a/product/ERP5/Document/SolverTypeInformation.py
+++ b/product/ERP5/Document/SolverTypeInformation.py
@@ -215,3 +215,21 @@ class SolverTypeInformation(Predicate, ERP5TypeInformation):
 
     method = getattr(solver, method_id)
     return method()
+
+  def solve(self, delivery_list=None, configuration_dict=None,
+            activate_kw=None, **kw):
+    if delivery_list is None:
+      return
+    if configuration_dict is None:
+      configuration_dict = {}
+    solver_process_tool = self.getPortalObject().portal_solver_processes
+    solver_process = solver_process_tool.newContent(
+      portal_type='Solver Process',
+      temp_object=True)
+    solver = solver_process.newContent(portal_type=self.getId(),
+                                       delivery_list=delivery_list)
+    solver.updateConfiguration(**configuration_dict)
+    if self.getPortalObject().portal_workflow.isTransitionPossible(
+      solver, 'start_solving'):
+      solver.startSolving()
+    solver.solve(activate_kw=activate_kw)