diff --git a/src/org/openbravo/erpCommon/ad_forms/AcctServer.java b/src/org/openbravo/erpCommon/ad_forms/AcctServer.java
--- a/src/org/openbravo/erpCommon/ad_forms/AcctServer.java
+++ b/src/org/openbravo/erpCommon/ad_forms/AcctServer.java
@@ -271,8 +271,9 @@
   public void run(VariablesSecureApp vars) throws IOException, ServletException {
     if (AD_Client_ID.equals(""))
       AD_Client_ID = vars.getClient();
+    
+    Connection con = null;
     try {
-      Connection con = connectionProvider.getTransactionConnection();
       String strIDs = "";
 
       if (log4j.isDebugEnabled()) {
@@ -291,13 +292,13 @@
       }
 
       for (int i = 0; data != null && i < data.length; i++) {
+        con = connectionProvider.getTransactionConnection();
         strIDs += data[i].getField("ID") + ", ";
         if (!post(data[i].getField("ID"), false, vars, connectionProvider, con)) {
           connectionProvider.releaseRollbackConnection(con);
           return;
         } else {
           connectionProvider.releaseCommitConnection(con);
-          con = connectionProvider.getTransactionConnection();
         }
       }
       if (log4j.isDebugEnabled() && data != null)
@@ -307,10 +308,20 @@
     } catch (NoConnectionAvailableException ex) {
       throw new ServletException("@CODE=NoConnectionAvailable", ex);
     } catch (SQLException ex2) {
+      try {
+        connectionProvider.releaseRollbackConnection(con);
+      } catch (SQLException se) {
+        log4j.error("Failed to close connection after an error", se);
+      }
       throw new ServletException("@CODE=" + Integer.toString(ex2.getErrorCode()) + "@"
           + ex2.getMessage(), ex2);
     } catch (Exception ex3) {
-      log4j.error(ex3.getMessage(), ex3);
+      log4j.error("Exception in AcctServer.run", ex3);
+      try {
+        connectionProvider.releaseRollbackConnection(con);
+      } catch (SQLException se) {
+        log4j.error("Failed to close connection after an error", se);
+      }
     }
   }
 
