diff --git a/product/ERP5/Document/BusinessProcess.py b/product/ERP5/Document/BusinessProcess.py
index 84be23c8df4d872d2e33420c3f1b914442ba08dc..d0fc4524047cd35dfee34f6cd868f4deaa6023a6 100644
--- a/product/ERP5/Document/BusinessProcess.py
+++ b/product/ERP5/Document/BusinessProcess.py
@@ -133,9 +133,8 @@ class BusinessProcess(Path, XMLObject):
     if trade_phase is not None:
       if isinstance(trade_phase, basestring):
         trade_phase = (trade_phase,)
-      trade_phase = set([x.split('trade_phase/', 1)[-1] \
-                        for x in trade_phase])
-    result = []
+      trade_phase = set(x.split('trade_phase/', 1)[-1]
+                        for x in trade_phase)
     if kw.get('portal_type', None) is None:
       kw['portal_type'] = self.getPortalTradeModelPathTypeList()
     if kw.get('sort_on', None) is None:
@@ -152,16 +151,15 @@ class BusinessProcess(Path, XMLObject):
     # First, collect trade model paths which can be applicable to a given context.
     path_list = []
     for path in original_path_list:
-      accept_path = True
-      if trade_phase is not None and not trade_phase.intersection(path.getTradePhaseList()):
-        accept_path = False # Filter our business path which trade phase does not match
-      if accept_path:
+      # Filter our business path which trade phase does not match
+      if trade_phase is None or trade_phase.intersection(path.getTradePhaseList()):
         path_list.append(path)
     LOG('path_list', 0, path_list)
     # Then, filter trade model paths by Predicate API.
     # FIXME: Ideally, we should use the Domain Tool to search business paths,
     # and avoid using the low level Predicate API. But the Domain Tool does
     # support the condition above without scripting?
+    result = []
     for path in path_list:
       if path.test(context):
         result.append(path)
@@ -231,11 +229,10 @@ class BusinessProcess(Path, XMLObject):
     **kw -- same arguments as those passed to searchValues / contentValues
     """
     if trade_phase is not None:
-      if not isinstance(trade_phase, (list, tuple)):
+      if isinstance(trade_phase, basestring):
         trade_phase = set((trade_phase,))
       else:
         trade_phase = set(trade_phase)
-    result = []
     if kw.get('portal_type', None) is None:
       kw['portal_type'] = self.getPortalBusinessLinkTypeList()
     if kw.get('sort_on', None) is None:
@@ -246,15 +243,13 @@ class BusinessProcess(Path, XMLObject):
     # First, collect business links which can be applicable to a given context.
     business_link_list = []
     for business_link in original_business_link_list:
-      accept_link = True
       if predecessor is not None and business_link.getPredecessor() != predecessor:
-        accept_link = False # Filter our business link which predecessor does not match
+        continue # Filter our business link which predecessor does not match
       if successor is not None and business_link.getSuccessor() != successor:
-        accept_link = False # Filter our business link which predecessor does not match
+        continue # Filter our business link which successor does not match
       if trade_phase is not None and not trade_phase.intersection(business_link.getTradePhaseList()):
-        accept_link = False # Filter our business link which trade phase does not match
-      if accept_link:
-        business_link_list.append(business_link)
+        continue # Filter our business link which trade phase does not match
+      business_link_list.append(business_link)
     # Then, filter business links by Predicate API.
     # FIXME: Ideally, we should use the Domain Tool to search business links,
     # and avoid using the low level Predicate API. But the Domain Tool does
@@ -263,6 +258,7 @@ class BusinessProcess(Path, XMLObject):
     if context is None:
       LOG('context is None', 0, repr(business_link_list))
       return business_link_list
+    result = []
     for business_link in business_link_list:
       if business_link.test(context):
         result.append(business_link)