diff --git a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/utility/FIN_BankStatementImport.java b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/utility/FIN_BankStatementImport.java
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/utility/FIN_BankStatementImport.java
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/utility/FIN_BankStatementImport.java
@@ -31,8 +31,7 @@
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
-import org.hibernate.ScrollMode;
-import org.hibernate.ScrollableResults;
+import org.hibernate.Query;
 import org.hibernate.criterion.Restrictions;
 import org.openbravo.advpaymentmngt.dao.AdvPaymentMngtDao;
 import org.openbravo.advpaymentmngt.process.FIN_AddPayment;
@@ -257,6 +256,7 @@
       } else {
         OBDal.getInstance().remove(bankStatementLine);
       }
+
     }
     OBDal.getInstance().flush();
     return counter;
@@ -397,30 +397,38 @@
     List<Object> parameters = new ArrayList<Object>();
     OBContext.setAdminMode();
     try {
-      whereClause.append(" as b ");
+      whereClause.append("select b.id as id, b.name as name from ");
+      whereClause.append(" BusinessPartner b ");
       whereClause.append(" where (");
       for (String token : list) {
-        whereClause.append(" lower(b." + BusinessPartner.PROPERTY_NAME + ") like lower(?) or ");
-        parameters.add("%" + token + "%");
+        whereClause.append(" lower(b." + BusinessPartner.PROPERTY_NAME + ") like lower('%" + token
+            + "%') or ");
       }
       whereClause.delete(whereClause.length() - 3, whereClause.length()).append(")");
       whereClause.append(" and b." + BusinessPartner.PROPERTY_ORGANIZATION + ".id in (");
       whereClause.append(Utility.getInStrSet(new OrganizationStructureProvider()
           .getNaturalTree(organization.getId())) + ") ");
-      final OBQuery<BusinessPartner> bl = OBDal.getInstance().createQuery(BusinessPartner.class,
-          whereClause.toString(), parameters);
-      bl.setFilterOnReadableOrganization(false);
+      final Query bl = OBDal.getInstance().getSession().createQuery(whereClause.toString());
 
-      final ScrollableResults businessPartnersScroll = bl.scroll(ScrollMode.SCROLL_SENSITIVE);
-      int countBp = bl.count();
+      final List<Object[]> listPartners = bl.list();
+      int countBp = listPartners.size();
       if (countBp == 0) {
         return null;
       } else if (countBp == 1) {
-        businessPartnersScroll.next();
-        return (BusinessPartner) businessPartnersScroll.get(0);
+        String strParnterId = "";
+        String strPartner = "";
+        final Object[] resultObject = (Object[]) listPartners.get(0);
+        if (resultObject.getClass().isArray()) {
+          final Object[] values = (Object[]) resultObject;
+          strParnterId = (String) values[0];
+          strPartner = (String) values[1];
+        }
+        BusinessPartner bp = OBDal.getInstance().get(BusinessPartner.class, strParnterId);
+        return bp;
       } else {
-        BusinessPartner closest = closest(businessPartnersScroll, partnername);
+        String closestId = closest(listPartners, partnername);
 
+        BusinessPartner closest = OBDal.getInstance().get(BusinessPartner.class, closestId);
         return closest;
       }
 
@@ -429,38 +437,58 @@
     }
   }
 
-  private BusinessPartner closest(ScrollableResults businessPartners, String partnername) {
-    businessPartners.next();
-    BusinessPartner targetBusinessPartner = (BusinessPartner) businessPartners.get(0);
-    businessPartners.beforeFirst();
-    int distance = StringUtils.getLevenshteinDistance(partnername, targetBusinessPartner.getName());
-    String parsedPartnername = partnername.toLowerCase();
-    // Remove exceptions
-    for (String eliminate : stringExceptions) {
-      parsedPartnername = parsedPartnername.replaceAll(eliminate.toLowerCase(), "");
+  private String closest(List<Object[]> businessPartners, String partnername) {
+    String targetBusinessPartnerId = "";
+    try {
+      final Object[] resultObject = (Object[]) businessPartners.get(0);
+
+      String targetBusinessPartnerName = "";
+      if (resultObject.getClass().isArray()) {
+        final Object[] values = (Object[]) resultObject;
+        targetBusinessPartnerId = (String) values[0];
+        targetBusinessPartnerName = (String) values[1];
+      }
+
+      int distance = StringUtils.getLevenshteinDistance(partnername, targetBusinessPartnerName);
+      String parsedPartnername = partnername.toLowerCase();
+      // Remove exceptions
+      for (String eliminate : stringExceptions) {
+        parsedPartnername = parsedPartnername.replaceAll(eliminate.toLowerCase(), "");
+      }
+
+      // Remove Numeric characters
+      char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
+      for (char character : digits) {
+        parsedPartnername = parsedPartnername.replace(character, ' ');
+        parsedPartnername = parsedPartnername.trim();
+      }
+
+      for (Object obj : businessPartners) {
+        String bpId = "";
+        String bpName = "";
+        if (obj.getClass().isArray()) {
+          final Object[] values = (Object[]) obj;
+          bpId = (String) values[0];
+          bpName = (String) values[1];
+        }
+        // Calculates distance between two strings meaning number of changes required for a string
+        // to
+        // convert in another string
+        int bpDistance = StringUtils
+            .getLevenshteinDistance(parsedPartnername, bpName.toLowerCase());
+        if (bpDistance < distance) {
+          distance = bpDistance;
+          targetBusinessPartnerId = bpId;
+        }
+        // The clear is not done because the evict is being done previously
+      }
+      return targetBusinessPartnerId;
+    } catch (Exception e) {
+      log4j.error(e.getStackTrace());
+    } finally {
+      return targetBusinessPartnerId;
     }
-    // Remove Numeric characters
-    char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
-    for (char character : digits) {
-      parsedPartnername = parsedPartnername.replace(character, ' ');
-      parsedPartnername = parsedPartnername.trim();
-    }
-    while (businessPartners.next()) {
-      BusinessPartner bp = (BusinessPartner) businessPartners.get(0);
-      // Calculates distance between two strings meaning number of changes required for a string to
-      // convert in another string
-      int bpDistance = StringUtils.getLevenshteinDistance(parsedPartnername, bp.getName()
-          .toLowerCase());
-      if (bpDistance < distance) {
-        distance = bpDistance;
-        OBDal.getInstance().getSession().evict(targetBusinessPartner);
-        targetBusinessPartner = bp;
-      } else {
-        OBDal.getInstance().getSession().evict(bp);
-      }
-      // The clear is not done because the evict is being done previously
-    }
-    return targetBusinessPartner;
+
   }
 
   private BankFileFormat getBankFileFormat() {
