diff --git a/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jdbc/JDBCConnector.java b/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jdbc/JDBCConnector.java
index 1fa4e09..b19eb07 100644
--- a/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jdbc/JDBCConnector.java
+++ b/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/jdbc/JDBCConnector.java
@@ -61,6 +61,7 @@ public class JDBCConnector extends org.apache.manifoldcf.crawler.connectors.Base
   protected String rawDriverString = null;
   protected String userName = null;
   protected String password = null;
+  protected boolean releaseConnections = true;
 
   /** Constructor.
   */
@@ -117,6 +118,7 @@ public class JDBCConnector extends org.apache.manifoldcf.crawler.connectors.Base
     rawDriverString = configParams.getParameter(JDBCConstants.driverStringParameter);
     userName= configParams.getParameter(JDBCConstants.databaseUserName);
     password = configParams.getObfuscatedParameter(JDBCConstants.databasePassword);
+    releaseConnections = configParams.getParameter(JDBCConstants.connectionsManagementParameter).equalsIgnoreCase("keepconnections");
   }
 
   /** Check status of connection.
@@ -917,7 +919,7 @@ public class JDBCConnector extends org.apache.manifoldcf.crawler.connectors.Base
     }
     finally
     {
-      result.close();
+    	result.close(releaseConnections);
     }
     
     // Now, go through the original id's, and see which ones are still in the map.  These
@@ -977,6 +979,7 @@ public class JDBCConnector extends org.apache.manifoldcf.crawler.connectors.Base
     tabsArray.add(Messages.getString(locale,"JDBCConnector.DatabaseType"));
     tabsArray.add(Messages.getString(locale,"JDBCConnector.Server"));
     tabsArray.add(Messages.getString(locale,"JDBCConnector.Credentials"));
+    tabsArray.add(Messages.getString(locale,"JDBCConnector.Connections"));
 
     out.print(
 "<script type=\"text/javascript\">\n"+
@@ -1049,6 +1052,10 @@ public class JDBCConnector extends org.apache.manifoldcf.crawler.connectors.Base
       databasePassword = "";
     else
       databasePassword = out.mapPasswordToKey(databasePassword);
+    String connectionsManagement = parameters.getParameter(JDBCConstants.connectionsManagementParameter);
+    if(connectionsManagement == null) {
+      connectionsManagement = "keepconnections";
+    }
 
     // "Database Type" tab
     if (tabName.equals(Messages.getString(locale,"JDBCConnector.DatabaseType")))
@@ -1136,6 +1143,29 @@ public class JDBCConnector extends org.apache.manifoldcf.crawler.connectors.Base
 "<input type=\"hidden\" name=\"password\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(databasePassword)+"\"/>\n"
       );
     }
+    
+    // "Connections option" tab
+    if (tabName.equals(Messages.getString(locale,"JDBCConnector.Connections")))
+    {
+      out.print(
+"<table class=\"displaytable\">\n"+
+"  <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
+"  <tr>\n"+
+"    <td class=\"description\"><nobr>" + Messages.getBodyString(locale,"JDBCConnector.ConnectionsManagement") + "</nobr></td>"
+		+ "<td class=\"value\" colspan=\"2\">"
+				+ "<nobr><input type=\"radio\" name=\"connectionsmanagement\" value=\"keepconnections\" "); if(connectionsManagement.equalsIgnoreCase("keepconnections")) {out.print("checked");} out.print(">" + Messages.getBodyString(locale,"JDBCConnector.ConnectionsManagementKeep") + "</input></nobr><br/>"
+				+ "<nobr><input type=\"radio\" name=\"connectionsmanagement\" value=\"closeconnections\" "); if(connectionsManagement.equalsIgnoreCase("closeconnections")) {out.print("checked");} out.print(">" + Messages.getBodyString(locale,"JDBCConnector.ConnectionsManagementClose") + "</input></nobr><br/>"
+		+ "</td>\n"+
+"  </tr>\n"+
+"</table>\n"
+      );
+    }
+    else
+    {
+      out.print(
+"<input type=\"hidden\" name=\"connectionsmanagement\" value=\""+org.apache.manifoldcf.ui.util.Encoder.attributeEscape(connectionsManagement)+"\"/>\n"
+      );
+    }
   }
   
   /** Process a configuration post.
@@ -1180,6 +1210,11 @@ public class JDBCConnector extends org.apache.manifoldcf.crawler.connectors.Base
     if (password != null)
       parameters.setObfuscatedParameter(JDBCConstants.databasePassword,variableContext.mapKeyToPassword(password));
     
+    String connectionsManagement = variableContext.getParameter("connectionsmanagement");
+    if(connectionsManagement != null) {
+    	parameters.setParameter(JDBCConstants.connectionsManagementParameter,connectionsManagement);
+    }
+    
     return null;
   }
   
diff --git a/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/IDynamicResultSet.java b/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/IDynamicResultSet.java
index 3dbc85d..7708f65 100644
--- a/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/IDynamicResultSet.java
+++ b/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/IDynamicResultSet.java
@@ -40,4 +40,9 @@ public interface IDynamicResultSet
   */
   public void close()
     throws ManifoldCFException, ServiceInterruption;
+  
+  /** Close this resultset.
+   */
+   public void close(boolean release) 
+ 	throws ManifoldCFException, ServiceInterruption;
 }
diff --git a/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/JDBCConnection.java b/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/JDBCConnection.java
index fb3547f..b91b213 100644
--- a/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/JDBCConnection.java
+++ b/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/JDBCConnection.java
@@ -981,7 +981,7 @@ public class JDBCConnection
 
     /** Close this resultset.
     */
-    public void close()
+    public void close(final boolean release)
       throws ManifoldCFException, ServiceInterruption
     {
       ManifoldCFException rval = null;
@@ -1039,7 +1039,11 @@ public class JDBCConnection
       {
         try
         {
-          JDBCConnectionFactory.releaseConnection(connection);
+        	if(release) {
+        		JDBCConnectionFactory.releaseConnection(connection);
+        	} else {
+        		JDBCConnectionFactory.closeConnection(connection);
+        	}
         }
         catch (Error e)
         {
@@ -1061,6 +1065,14 @@ public class JDBCConnection
       if (rval != null)
         throw rval;
     }
+    
+    /** Close this resultset.
+     */
+     public void close() 
+    	throws ManifoldCFException, ServiceInterruption
+     {
+    	 close(true);
+     }
 
   }
 
@@ -1248,7 +1260,7 @@ public class JDBCConnection
 
     /** Close this resultset.
     */
-    public void close()
+    public void close(final boolean release)
       throws ManifoldCFException, ServiceInterruption
     {
       ManifoldCFException rval = null;
@@ -1312,7 +1324,11 @@ public class JDBCConnection
       {
         try
         {
-          JDBCConnectionFactory.releaseConnection(connection);
+        	if(release) {
+        		JDBCConnectionFactory.releaseConnection(connection);
+        	} else {
+        		JDBCConnectionFactory.closeConnection(connection);
+        	}
         }
         catch (Error e)
         {
@@ -1359,6 +1375,14 @@ public class JDBCConnection
         throw rval;
 
     }
+    
+    /** Close this resultset.
+     */
+     public void close()
+       throws ManifoldCFException, ServiceInterruption
+     {
+    	 close(true);
+     }
 
   }
 
diff --git a/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/JDBCConnectionFactory.java b/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/JDBCConnectionFactory.java
index 765e90c..f3989c3 100644
--- a/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/JDBCConnectionFactory.java
+++ b/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/JDBCConnectionFactory.java
@@ -180,6 +180,11 @@ public class JDBCConnectionFactory
   {
     c.release();
   }
+  
+  public static void closeConnection(final WrappedConnection c) 
+  {
+	c.close();
+  }
 
 }
 
diff --git a/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/JDBCConstants.java b/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/JDBCConstants.java
index 8b5f50e..ab2e18c 100644
--- a/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/JDBCConstants.java
+++ b/connectors/jdbc/connector/src/main/java/org/apache/manifoldcf/jdbc/JDBCConstants.java
@@ -83,6 +83,9 @@ public class JDBCConstants
   public static String idListVariable = "IDLIST";
   /** The name of token return variable */
   public static String tokenReturnVariable = "TOKENCOLUMN";
+  
+  /** The connections management config parameter */
+  public static String connectionsManagementParameter = "Management of the connections pool";
 
   /** JDBCAuthority */
   /** Query returning user Id parameter name */
diff --git a/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_en_US.properties b/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_en_US.properties
index 24d5580..6b6c70e 100644
--- a/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_en_US.properties
+++ b/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_en_US.properties
@@ -72,3 +72,7 @@ JDBCConnector.Add=Add
 JDBCConnector.AddAttribute=Add attribute
 JDBCConnector.TypeInAnAttributeName=Type in an attribute name
 JDBCConnector.AttributeQueryCannotBeNull=Attribute query must not be null
+JDBCConnector.Connections=Connections Options
+JDBCConnector.ConnectionsManagement=Management of the connections pool
+JDBCConnector.ConnectionsManagementKeep=Keep alive connections between crawling queries
+JDBCConnector.ConnectionsManagementClose=Close connections and create new ones between crawling queries
diff --git a/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_es_ES.properties b/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_es_ES.properties
index ecbd599..1c5ee7e 100644
--- a/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_es_ES.properties
+++ b/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_es_ES.properties
@@ -72,3 +72,7 @@ JDBCConnector.Add=Add
 JDBCConnector.AddAttribute=Add attribute
 JDBCConnector.TypeInAnAttributeName=Type in an attribute name
 JDBCConnector.AttributeQueryCannotBeNull=Attribute query must not be null
+JDBCConnector.Connections=Opciones de Conexiones
+JDBCConnector.ConnectionsManagement=Gestión del conjunto de conexiones
+JDBCConnector.ConnectionsManagementKeep=Mantener conexiones activas entre las consultas de rastreo
+JDBCConnector.ConnectionsManagementClose=Cierre las conexiones y cree nuevas entre las consultas de rastreo
diff --git a/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_ja_JP.properties b/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_ja_JP.properties
index 581017e..b7b4202 100644
--- a/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_ja_JP.properties
+++ b/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_ja_JP.properties
@@ -72,3 +72,7 @@ JDBCConnector.Add=Add
 JDBCConnector.AddAttribute=Add attribute
 JDBCConnector.TypeInAnAttributeName=Type in an attribute name
 JDBCConnector.AttributeQueryCannotBeNull=Attribute query must not be null
+JDBCConnector.Connections=Connections Options
+JDBCConnector.ConnectionsManagement=Management of the connections pool
+JDBCConnector.ConnectionsManagementKeep=Keep alive connections between crawling queries
+JDBCConnector.ConnectionsManagementClose=Close connections and create new ones between crawling queries
diff --git a/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_zh_CN.properties b/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_zh_CN.properties
index 92985e1..01400a9 100644
--- a/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_zh_CN.properties
+++ b/connectors/jdbc/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/jdbc/common_zh_CN.properties
@@ -72,3 +72,7 @@ JDBCConnector.Add=Add
 JDBCConnector.AddAttribute=Add attribute
 JDBCConnector.TypeInAnAttributeName=Type in an attribute name
 JDBCConnector.AttributeQueryCannotBeNull=Attribute query must not be null
+JDBCConnector.Connections=Connections Options
+JDBCConnector.ConnectionsManagement=Management of the connections pool
+JDBCConnector.ConnectionsManagementKeep=Keep alive connections between crawling queries
+JDBCConnector.ConnectionsManagementClose=Close connections and create new ones between crawling queries
diff --git a/framework/core/src/main/java/org/apache/manifoldcf/core/jdbcpool/ConnectionPool.java b/framework/core/src/main/java/org/apache/manifoldcf/core/jdbcpool/ConnectionPool.java
index 408eadc..d24da17 100644
--- a/framework/core/src/main/java/org/apache/manifoldcf/core/jdbcpool/ConnectionPool.java
+++ b/framework/core/src/main/java/org/apache/manifoldcf/core/jdbcpool/ConnectionPool.java
@@ -306,6 +306,35 @@ public class ConnectionPool
     
   }
   
+  public void closeConnection(final WrappedConnection connection) {
+
+	  if (debug) {
+		  synchronized (outstandingConnections) {
+			  if (!outstandingConnections.contains(connection)) {
+				  Logging.db.warn("Closed a connection that wasn't tracked!!");
+			  }
+			  outstandingConnections.remove(connection);
+		  }
+	  }
+	  close(connection.getConnection());
+  }
+
+
+
+  protected void close(final Connection c) {
+	  synchronized (this) {
+		  try {
+			  c.close();
+			  activeConnections--;
+			  notifyAll();
+		  } catch (final SQLException e) {
+			  Logging.db.warn("Error closing pooled connection: " + e.getMessage(), e);
+		  }
+
+	  }
+
+  }
+  
 }
 
 
diff --git a/framework/core/src/main/java/org/apache/manifoldcf/core/jdbcpool/WrappedConnection.java b/framework/core/src/main/java/org/apache/manifoldcf/core/jdbcpool/WrappedConnection.java
index ac7f01b..d0f869f 100644
--- a/framework/core/src/main/java/org/apache/manifoldcf/core/jdbcpool/WrappedConnection.java
+++ b/framework/core/src/main/java/org/apache/manifoldcf/core/jdbcpool/WrappedConnection.java
@@ -68,6 +68,14 @@ public class WrappedConnection
     return instantiationException;
   }
   
+  /** Close the JDBC connection object.
+   */
+   public void close() 
+   {
+ 	owner.closeConnection(this);
+ 	this.connection = null;
+   }
+  
 }
 
 
