diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java
index d0c4e14d314606f5b3e9d7420fe2933ce234f86a..8e6acbcbb34036014c23f91c32cd1d7b861abf4b 100644
--- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java
+++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java
@@ -30,6 +30,7 @@
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.commons.lang3.StringUtils;
 import org.hibernate.FlushMode;
 import org.hibernate.HibernateException;
 import org.hibernate.Session;
@@ -42,6 +43,7 @@
 import org.hibernate.impl.SessionFactoryImpl;
 import org.hibernate.jdbc.BorrowedConnectionProxy;
 import org.hibernate.jdbc.ConnectionManager;
+import org.hibernate.jdbc.Work;
 import org.hibernate.mapping.Table;
 import org.hibernate.tool.hbm2ddl.DatabaseMetadata;
 import org.slf4j.Logger;
@@ -380,6 +382,12 @@ protected String getSchemaFromWikiName(String wikiName, DatabaseProduct database
         } else {
             // virtual
             schema = wikiName.replace('-', '_');
+
+            // For HSQLDB we only support uppercase schema names. This is because Hibernate doesn't properly generate
+            // quotes around schema names when it qualifies the table name when it generates the update script.
+            if (databaseProduct == DatabaseProduct.HSQLDB) {
+                schema = StringUtils.upperCase(schema);
+            }
         }
 
         // Apply prefix
@@ -454,7 +462,7 @@ public String[] getSchemaUpdateScript(Configuration config, XWikiContext context
 
             String contextSchema = getSchemaFromWikiName(context);
 
-            DatabaseProduct databaseProduct = getDatabaseProductName(context);
+            DatabaseProduct databaseProduct = getDatabaseProductName();
             if (databaseProduct == DatabaseProduct.ORACLE || databaseProduct == DatabaseProduct.HSQLDB
                 || databaseProduct == DatabaseProduct.DERBY || databaseProduct == DatabaseProduct.DB2) {
                 dschema = config.getProperty(Environment.DEFAULT_SCHEMA);
@@ -625,32 +633,11 @@ public void setDatabase(Session session, XWikiContext context) throws XWikiExcep
 
                     DatabaseProduct databaseProduct = getDatabaseProductName(context);
                     if (DatabaseProduct.ORACLE == databaseProduct) {
-                        Statement stmt = null;
-                        try {
-                            stmt = session.connection().createStatement();
-                            stmt.execute("alter session set current_schema = " + escapedSchemaName);
-                        } finally {
-                            try {
-                                if (stmt != null) {
-                                    stmt.close();
-                                }
-                            } catch (Exception e) {
-                            }
-                        }
+                        executeSQL("alter session set current_schema = " + escapedSchemaName, session);
                     } else if (DatabaseProduct.DERBY == databaseProduct || DatabaseProduct.HSQLDB == databaseProduct
-                        || DatabaseProduct.DB2 == databaseProduct) {
-                        Statement stmt = null;
-                        try {
-                            stmt = session.connection().createStatement();
-                            stmt.execute("SET SCHEMA " + escapedSchemaName);
-                        } finally {
-                            try {
-                                if (stmt != null) {
-                                    stmt.close();
-                                }
-                            } catch (Exception e) {
-                            }
-                        }
+                        || DatabaseProduct.DB2 == databaseProduct)
+                    {
+                        executeSQL("SET SCHEMA " + schemaName, session);
                     } else {
                         String catalog = session.connection().getCatalog();
                         catalog = (catalog == null) ? null : catalog.replace('_', '-');
@@ -672,6 +659,33 @@ public void setDatabase(Session session, XWikiContext context) throws XWikiExcep
         }
     }
 
+    /**
+     * Execute an SQL statement using Hibernate.
+     *
+     * @param sql the SQL statement to execute
+     * @param session the Hibernate Session in which to execute the statement
+     */
+    private void executeSQL(final String sql, Session session)
+    {
+        session.doWork(new Work() {
+            public void execute(Connection connection) throws SQLException
+            {
+                Statement stmt = null;
+                try {
+                    stmt = connection.createStatement();
+                    stmt.execute(sql);
+                } finally {
+                    try {
+                        if (stmt != null) {
+                            stmt.close();
+                        }
+                    } catch (Exception e) {
+                    }
+                }
+            }
+        });
+    }
+
     /**
      * Escape schema name depending of the database engine.
      * 
diff --git a/xwiki-platform-tools/xwiki-platform-tool-configuration-resources/src/main/resources/hibernate.cfg.xml.vm b/xwiki-platform-tools/xwiki-platform-tool-configuration-resources/src/main/resources/hibernate.cfg.xml.vm
index f78734f4b5ba347f3385c5397a597c07cb25c377..b0e5cbf1a5eb350a27e71cf5259379bea62debed 100644
--- a/xwiki-platform-tools/xwiki-platform-tool-configuration-resources/src/main/resources/hibernate.cfg.xml.vm
+++ b/xwiki-platform-tools/xwiki-platform-tool-configuration-resources/src/main/resources/hibernate.cfg.xml.vm
@@ -32,7 +32,7 @@
          http://platform.xwiki.org/xwiki/bin/view/AdminGuide/Installation for configuring your
          database. You'll need to do 2 things:
          1) Copy your database driver JAR in WEB-INF/lib or in some shared lib directory
-         2) Uncomment the properties below for your specific DB (and comment the default 
+         2) Uncomment the properties below for your specific DB (and comment the default
             database configuration if it doesn't match your DB)
     -->
 
@@ -50,6 +50,19 @@
     <property name="dbcp.ps.maxActive">20</property>
     <property name="dbcp.ps.maxWait">120000</property>
     <property name="dbcp.ps.maxIdle">20</property>
+
+    <!-- Uncomment to use BoneCP Connection Pooling -->
+    <!--
+    <property name="bonecp.idleMaxAgeInMinutes">240</property>
+    <property name="bonecp.idleConnectionTestPeriodInMinutes">60</property>
+    <property name="bonecp.partitionCount">3</property>
+    <property name="bonecp.acquireIncrement">10</property>
+    <property name="bonecp.maxConnectionsPerPartition">60</property>
+    <property name="bonecp.minConnectionsPerPartition">20</property>
+    <property name="bonecp.statementsCacheSize">50</property>
+    <property name="bonecp.releaseHelperThreads">3</property>
+    -->
+
     <!-- Without it, some queries fail in MS SQL. XWiki doesn't need scrollable result sets, anyway. -->
     <property name="jdbc.use_scrollable_resultset">false</property>
 
@@ -58,13 +71,16 @@
          Note that the database tables will be created automatically if they don't already exist.
     -->
 ## Only use a default configuration if the $xwikiDbConnectionUrl field equal to "none". I would
-## have preferred to use an empty value but I couldn't make that work with Maven. 
+## have preferred to use an empty value but I couldn't make that work with Maven.
 #if ($xwikiDbConnectionUrl != "none")
     <property name="connection.url">$xwikiDbConnectionUrl</property>
     <property name="connection.username">$!xwikiDbConnectionUsername</property>
     <property name="connection.password">$!xwikiDbConnectionPassword</property>
     <property name="connection.driver_class">$xwikiDbConnectionDriverClass</property>
     <property name="dialect">$xwikiDbDialect</property>
+    <!-- Uncomment to use BoneCP Connection Pooling. You'll also need to comment out the DBCP property of the same name
+         below since there can be only one such property. -->
+    <!--property name="connection.provider_class">com.xpn.xwiki.store.DBCPConnectionProvider</property-->
     <property name="connection.provider_class">com.xpn.xwiki.store.DBCPConnectionProvider</property>
     <property name="connection.pool_size">2</property>
     <property name="statement_cache.size">2</property>