diff --git a/content/components/jms/index.html b/content/components/jms/index.html
index db7ac75..1287a06 100644
--- a/content/components/jms/index.html
+++ b/content/components/jms/index.html
@@ -125,7 +125,7 @@
 <p>Qpid JMS is an AMQP 1.0 <a href="https://jakarta.ee/specifications/messaging/3.1/jakarta-messaging-spec-3.1.html">Jakarta Messaging 3.1</a>
 client built using <a href="/proton/index.html">Qpid Proton</a>.</p>
 
-<p>For a release using Jakarta Messaging 3.1 (jakarta.jms), see the <a href="/releases/qpid-jms-2.4.0/index.html">2.4.0 release</a>.</p>
+<p>For a release using Jakarta Messaging 3.1 (jakarta.jms), see the <a href="/releases/qpid-jms-2.5.0/index.html">2.5.0 release</a>.</p>
 
 <p>For a release using Jakarta Messaging 2.0 (javax.jms), see the <a href="/releases/qpid-jms-1.11.0/index.html">1.11.0 release</a>.</p>
 
@@ -147,9 +147,9 @@
 
 <ul>
 <li><a href="https://jakarta.ee/specifications/messaging/3.1/apidocs/">API reference</a></li>
-<li><a href="https://github.com/apache/qpid-jms/tree/2.4.0/qpid-jms-examples">Examples</a></li>
-<li><a href="/releases/qpid-jms-2.4.0/docs/index.html">Configuration</a></li>
-<li><a href="/releases/qpid-jms-2.4.0/building.html">Building Qpid JMS</a></li>
+<li><a href="https://github.com/apache/qpid-jms/tree/2.5.0/qpid-jms-examples">Examples</a></li>
+<li><a href="/releases/qpid-jms-2.5.0/docs/index.html">Configuration</a></li>
+<li><a href="/releases/qpid-jms-2.5.0/building.html">Building Qpid JMS</a></li>
 </ul>
 
 </div>
@@ -163,7 +163,7 @@
 <h2 id="releases">Releases</h2>
 
 <ul>
-<li><a href="/releases/qpid-jms-2.4.0">Qpid JMS 2.4.0</a></li>
+<li><a href="/releases/qpid-jms-2.5.0">Qpid JMS 2.5.0</a></li>
 <li><a href="/releases/qpid-jms-1.11.0/index.html">Qpid JMS 1.11.0</a></li>
 <li><a href="/releases/index.html#past-releases">Past releases</a></li>
 </ul>
diff --git a/content/dashboard.html b/content/dashboard.html
index ea912a4..0baa4cb 100644
--- a/content/dashboard.html
+++ b/content/dashboard.html
@@ -169,7 +169,7 @@
 </tr>
 <tr>
   <td><a href="/components/jms/index.html">Qpid JMS</a></td>
-  <td><a href="/releases/qpid-jms-2.4.0">2.4.0</a></td>
+  <td><a href="/releases/qpid-jms-2.5.0">2.5.0</a></td>
   <td><a href="https://issues.apache.org/jira/projects/QPIDJMS">Summary</a> &#x2022; <a href="https://issues.apache.org/jira/issues/?jql=project+%3D+QPIDJMS+and+resolution+is+null">Open issues</a> &#x2022; <a href="https://issues.apache.org/jira/issues/?jql=project+%3D+QPIDJMS">All issues</a> &#x2022; <a href="https://issues.apache.org/jira/secure/CreateIssue!default.jspa?pid=12314524">Create issue</a></td>
   <td><a href="https://github.com/apache/qpid-jms/actions"><img src="https://github.com/apache/qpid-jms/actions/workflows/build.yml/badge.svg?branch=main" height="20"/></a> <a href="https://builds.apache.org/blue/organizations/jenkins/Qpid%2FQpid-JMS-Test-JDK11/activity"><img src="https://builds.apache.org/buildStatus/icon?job=Qpid/Qpid-JMS-Test-JDK11" height="20"/></a> <a href="https://builds.apache.org/blue/organizations/jenkins/Qpid%2FQpid-JMS-Test-JDK11-Windows/activity"><img src="https://builds.apache.org/buildStatus/icon?job=Qpid/Qpid-JMS-Test-JDK11-Windows" height="20"/></a></td>
   <td><a href="https://gitbox.apache.org/repos/asf/qpid-jms.git">Git</a> &#x2022; <a href="https://github.com/apache/qpid-jms">GitHub</a></td>
diff --git a/content/documentation.html b/content/documentation.html
index f27bb24..f6ed41b 100644
--- a/content/documentation.html
+++ b/content/documentation.html
@@ -147,9 +147,9 @@
 
 <ul>
 <li><a href="/components/jms/index.html">Overview</a></li>
-<li><a href="/releases/qpid-jms-2.4.0/docs/index.html">Configuration</a></li>
+<li><a href="/releases/qpid-jms-2.5.0/docs/index.html">Configuration</a></li>
 <li><a href="https://jakarta.ee/specifications/messaging/3.1/apidocs/">API reference</a></li>
-<li><a href="https://github.com/apache/qpid-jms/tree/2.4.0/qpid-jms-examples">Examples</a></li>
+<li><a href="https://github.com/apache/qpid-jms/tree/2.5.0/qpid-jms-examples">Examples</a></li>
 </ul>
 
 </section>
diff --git a/content/download.html b/content/download.html
index 2df4784..ba56283 100644
--- a/content/download.html
+++ b/content/download.html
@@ -147,9 +147,9 @@
 </tr>
 <tr>
   <td><a href="/components/jms/index.html">Qpid JMS</a> (jakarta.jms)</td>
-  <td>2.4.0</td>
-  <td><a href="https://www.apache.org/dyn/closer.lua?filename=qpid/jms/2.4.0/apache-qpid-jms-2.4.0-src.tar.gz&amp;action=download">Source</a> (<a href="https://downloads.apache.org/qpid/jms/2.4.0/apache-qpid-jms-2.4.0-src.tar.gz.asc">ASC</a>, <a href="https://downloads.apache.org/qpid/jms/2.4.0/apache-qpid-jms-2.4.0-src.tar.gz.sha512">SHA512</a>),  <a href="https://www.apache.org/dyn/closer.lua?filename=qpid/jms/2.4.0/apache-qpid-jms-2.4.0-bin.tar.gz&amp;action=download">Binary</a>  (<a href="https://downloads.apache.org/qpid/jms/2.4.0/apache-qpid-jms-2.4.0-bin.tar.gz.asc">ASC</a>, <a href="https://downloads.apache.org/qpid/jms/2.4.0/apache-qpid-jms-2.4.0-bin.tar.gz.sha512">SHA512</a>)</td>
-  <td><a href="/releases/qpid-jms-2.4.0/index.html">Release Page</a>, <a href="maven.html">Maven</a></td>
+  <td>2.5.0</td>
+  <td><a href="https://www.apache.org/dyn/closer.lua?filename=qpid/jms/2.5.0/apache-qpid-jms-2.5.0-src.tar.gz&amp;action=download">Source</a> (<a href="https://downloads.apache.org/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-src.tar.gz.asc">ASC</a>, <a href="https://downloads.apache.org/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-src.tar.gz.sha512">SHA512</a>),  <a href="https://www.apache.org/dyn/closer.lua?filename=qpid/jms/2.5.0/apache-qpid-jms-2.5.0-bin.tar.gz&amp;action=download">Binary</a>  (<a href="https://downloads.apache.org/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-bin.tar.gz.asc">ASC</a>, <a href="https://downloads.apache.org/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-bin.tar.gz.sha512">SHA512</a>)</td>
+  <td><a href="/releases/qpid-jms-2.5.0/index.html">Release Page</a>, <a href="maven.html">Maven</a></td>
 </tr>
 <tr>
   <td><a href="/components/jms/index.html">Qpid JMS</a> (javax.jms)</td>
diff --git a/content/maven.html b/content/maven.html
index 31700b0..f25eb62 100644
--- a/content/maven.html
+++ b/content/maven.html
@@ -126,7 +126,7 @@
 <span class="nt">&lt;dependency&gt;</span>
   <span class="nt">&lt;groupId&gt;</span>org.apache.qpid<span class="nt">&lt;/groupId&gt;</span>
   <span class="nt">&lt;artifactId&gt;</span>qpid-jms-client<span class="nt">&lt;/artifactId&gt;</span>
-  <span class="nt">&lt;version&gt;</span>2.4.0<span class="nt">&lt;/version&gt;</span>
+  <span class="nt">&lt;version&gt;</span>2.5.0<span class="nt">&lt;/version&gt;</span>
 <span class="nt">&lt;/dependency&gt;</span>
 </pre></div>
 
diff --git a/content/releases/index.html b/content/releases/index.html
index fef1e9a..44a3ada 100644
--- a/content/releases/index.html
+++ b/content/releases/index.html
@@ -126,9 +126,9 @@
 <div class="two-column">
 
 <ul>
+<li><a href="qpid-jms-2.5.0/index.html">Qpid JMS 2.5.0</a>, October 2023</li>
 <li><a href="qpid-jms-1.11.0/index.html">Qpid JMS 1.11.0</a>, October 2023</li>
 <li><a href="qpid-protonj2-1.0.0-M17/index.html">Qpid ProtonJ2 1.0.0-M17</a>, July 2023</li>
-<li><a href="qpid-jms-2.4.0/index.html">Qpid JMS 2.4.0</a>, June 2023</li>
 <li><a href="qpid-proton-0.39.0/index.html">Qpid Proton 0.39.0</a>, June 2023</li>
 <li><a href="qpid-proton-dotnet-1.0.0-M9/index.html">Qpid proton-dotnet 1.0.0-M9</a>, May 2023</li>
 <li><a href="qpid-proton-j-0.34.1/index.html">Qpid Proton-J 0.34.1</a>, March 2023</li>
@@ -147,6 +147,7 @@
 <div class="two-column">
 
 <ul>
+<li><a href="qpid-jms-2.4.0/index.html">Qpid JMS 2.4.0</a>, June 2023</li>
 <li><a href="qpid-jms-1.10.0/index.html">Qpid JMS 1.10.0</a>, June 2023</li>
 <li><a href="qpid-protonj2-1.0.0-M16/index.html">Qpid ProtonJ2 1.0.0-M16</a>, June 2023</li>
 <li><a href="qpid-protonj2-1.0.0-M15/index.html">Qpid ProtonJ2 1.0.0-M15</a>, May 2023</li>
diff --git a/content/releases/qpid-jms-0.54.0/index.html b/content/releases/qpid-jms-0.54.0/index.html
index 5af61e9..14e3f7a 100644
--- a/content/releases/qpid-jms-0.54.0/index.html
+++ b/content/releases/qpid-jms-0.54.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.54.0" === "2.4.0") {
+      if ("0.54.0" === "2.5.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.55.0/index.html b/content/releases/qpid-jms-0.55.0/index.html
index 59e4d7a..28a74fb4 100644
--- a/content/releases/qpid-jms-0.55.0/index.html
+++ b/content/releases/qpid-jms-0.55.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.55.0" === "2.4.0") {
+      if ("0.55.0" === "2.5.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.56.0/index.html b/content/releases/qpid-jms-0.56.0/index.html
index b02767b..112c40f 100644
--- a/content/releases/qpid-jms-0.56.0/index.html
+++ b/content/releases/qpid-jms-0.56.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.56.0" === "2.4.0") {
+      if ("0.56.0" === "2.5.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.57.0/index.html b/content/releases/qpid-jms-0.57.0/index.html
index ea058c34..c4e80dd 100644
--- a/content/releases/qpid-jms-0.57.0/index.html
+++ b/content/releases/qpid-jms-0.57.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.57.0" === "2.4.0") {
+      if ("0.57.0" === "2.5.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.58.0/index.html b/content/releases/qpid-jms-0.58.0/index.html
index d416f38..7920965 100644
--- a/content/releases/qpid-jms-0.58.0/index.html
+++ b/content/releases/qpid-jms-0.58.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.58.0" === "2.4.0") {
+      if ("0.58.0" === "2.5.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.59.0/index.html b/content/releases/qpid-jms-0.59.0/index.html
index f40b07f..606c725 100644
--- a/content/releases/qpid-jms-0.59.0/index.html
+++ b/content/releases/qpid-jms-0.59.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.59.0" === "2.4.0") || "0.59.0" === "1.11.0") {
+      if ("0.59.0" === "2.5.0") || "0.59.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.60.1/index.html b/content/releases/qpid-jms-0.60.1/index.html
index c324d83..36c953a 100644
--- a/content/releases/qpid-jms-0.60.1/index.html
+++ b/content/releases/qpid-jms-0.60.1/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.60.1" === "2.4.0") || "0.60.1" === "1.11.0") {
+      if ("0.60.1" === "2.5.0") || "0.60.1" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.61.0/index.html b/content/releases/qpid-jms-0.61.0/index.html
index 38b67e6..59cd937 100644
--- a/content/releases/qpid-jms-0.61.0/index.html
+++ b/content/releases/qpid-jms-0.61.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.61.0" === "2.4.0" || "0.61.0" === "1.11.0") {
+      if ("0.61.0" === "2.5.0" || "0.61.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-1.0.0/index.html b/content/releases/qpid-jms-1.0.0/index.html
index 113e0b5..fc61dc6 100644
--- a/content/releases/qpid-jms-1.0.0/index.html
+++ b/content/releases/qpid-jms-1.0.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("1.0.0" === "2.4.0") || "1.0.0" === "1.11.0") {
+      if ("1.0.0" === "2.5.0") || "1.0.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-1.1.0/index.html b/content/releases/qpid-jms-1.1.0/index.html
index 4934093..b0a28f1 100644
--- a/content/releases/qpid-jms-1.1.0/index.html
+++ b/content/releases/qpid-jms-1.1.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("1.1.0" === "2.4.0") || "1.1.0" === "1.11.0") {
+      if ("1.1.0" === "2.5.0") || "1.1.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-1.10.0/index.html b/content/releases/qpid-jms-1.10.0/index.html
index 8460515..72417cf 100644
--- a/content/releases/qpid-jms-1.10.0/index.html
+++ b/content/releases/qpid-jms-1.10.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("1.10.0" === "2.4.0" || "1.10.0" === "1.11.0") {
+      if ("1.10.0" === "2.5.0" || "1.10.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-1.11.0/index.html b/content/releases/qpid-jms-1.11.0/index.html
index 0114ff1..a025798 100644
--- a/content/releases/qpid-jms-1.11.0/index.html
+++ b/content/releases/qpid-jms-1.11.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("1.11.0" === "2.4.0" || "1.11.0" === "1.11.0") {
+      if ("1.11.0" === "2.5.0" || "1.11.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-1.2.0/index.html b/content/releases/qpid-jms-1.2.0/index.html
index 15e2c39..ccbccab 100644
--- a/content/releases/qpid-jms-1.2.0/index.html
+++ b/content/releases/qpid-jms-1.2.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("1.2.0" === "2.4.0") || "1.2.0" === "1.11.0") {
+      if ("1.2.0" === "2.5.0") || "1.2.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-1.3.0/index.html b/content/releases/qpid-jms-1.3.0/index.html
index 446dc21..47a7155 100644
--- a/content/releases/qpid-jms-1.3.0/index.html
+++ b/content/releases/qpid-jms-1.3.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("1.3.0" === "2.4.0") || "1.3.0" === "1.11.0") {
+      if ("1.3.0" === "2.5.0") || "1.3.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-1.4.1/index.html b/content/releases/qpid-jms-1.4.1/index.html
index 643c7ba..2043e9a 100644
--- a/content/releases/qpid-jms-1.4.1/index.html
+++ b/content/releases/qpid-jms-1.4.1/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("1.4.1" === "2.4.0") || "1.4.1" === "1.11.0") {
+      if ("1.4.1" === "2.5.0") || "1.4.1" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-1.5.0/index.html b/content/releases/qpid-jms-1.5.0/index.html
index 89853d1..3596318 100644
--- a/content/releases/qpid-jms-1.5.0/index.html
+++ b/content/releases/qpid-jms-1.5.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("1.5.0" === "2.4.0") || "1.5.0" === "1.11.0") {
+      if ("1.5.0" === "2.5.0") || "1.5.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-1.6.0/index.html b/content/releases/qpid-jms-1.6.0/index.html
index 0f2e9ff..952bc63 100644
--- a/content/releases/qpid-jms-1.6.0/index.html
+++ b/content/releases/qpid-jms-1.6.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("1.6.0" === "2.4.0" || "1.6.0" === "1.11.0") {
+      if ("1.6.0" === "2.5.0" || "1.6.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-1.7.0/index.html b/content/releases/qpid-jms-1.7.0/index.html
index d971179..6dc7b1f 100644
--- a/content/releases/qpid-jms-1.7.0/index.html
+++ b/content/releases/qpid-jms-1.7.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("1.7.0" === "2.4.0" || "1.7.0" === "1.11.0") {
+      if ("1.7.0" === "2.5.0" || "1.7.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-1.8.0/index.html b/content/releases/qpid-jms-1.8.0/index.html
index 66c6ef0..8a1e0e5 100644
--- a/content/releases/qpid-jms-1.8.0/index.html
+++ b/content/releases/qpid-jms-1.8.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("1.8.0" === "2.4.0" || "1.8.0" === "1.11.0") {
+      if ("1.8.0" === "2.5.0" || "1.8.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-1.9.0/index.html b/content/releases/qpid-jms-1.9.0/index.html
index d719873..3afe216 100644
--- a/content/releases/qpid-jms-1.9.0/index.html
+++ b/content/releases/qpid-jms-1.9.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("1.9.0" === "2.4.0" || "1.9.0" === "1.11.0") {
+      if ("1.9.0" === "2.5.0" || "1.9.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-2.0.0/index.html b/content/releases/qpid-jms-2.0.0/index.html
index d079d04..43aad64 100644
--- a/content/releases/qpid-jms-2.0.0/index.html
+++ b/content/releases/qpid-jms-2.0.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("2.0.0" === "2.4.0" || "2.0.0" === "1.11.0") {
+      if ("2.0.0" === "2.5.0" || "2.0.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-2.1.0/index.html b/content/releases/qpid-jms-2.1.0/index.html
index d2050d2..582d2b0 100644
--- a/content/releases/qpid-jms-2.1.0/index.html
+++ b/content/releases/qpid-jms-2.1.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("2.1.0" === "2.4.0" || "2.1.0" === "1.11.0") {
+      if ("2.1.0" === "2.5.0" || "2.1.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-2.2.0/index.html b/content/releases/qpid-jms-2.2.0/index.html
index 16650ef..1f2e9c8 100644
--- a/content/releases/qpid-jms-2.2.0/index.html
+++ b/content/releases/qpid-jms-2.2.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("2.2.0" === "2.4.0" || "2.2.0" === "1.11.0") {
+      if ("2.2.0" === "2.5.0" || "2.2.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-2.3.0/index.html b/content/releases/qpid-jms-2.3.0/index.html
index 84c1aa3..6011fee 100644
--- a/content/releases/qpid-jms-2.3.0/index.html
+++ b/content/releases/qpid-jms-2.3.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("2.3.0" === "2.4.0" || "2.3.0" === "1.11.0") {
+      if ("2.3.0" === "2.5.0" || "2.3.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-2.4.0/index.html b/content/releases/qpid-jms-2.4.0/index.html
index 0aab711..54a898f 100644
--- a/content/releases/qpid-jms-2.4.0/index.html
+++ b/content/releases/qpid-jms-2.4.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("2.4.0" === "2.4.0" || "2.4.0" === "1.11.0") {
+      if ("2.4.0" === "2.5.0" || "2.4.0" === "1.11.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-2.5.0/building.html b/content/releases/qpid-jms-2.5.0/building.html
new file mode 100644
index 0000000..c5c2d19
--- /dev/null
+++ b/content/releases/qpid-jms-2.5.0/building.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<!--
+ -
+ - Licensed to the Apache Software Foundation (ASF) under one
+ - or more contributor license agreements.  See the NOTICE file
+ - distributed with this work for additional information
+ - regarding copyright ownership.  The ASF licenses this file
+ - to you under the Apache License, Version 2.0 (the
+ - "License"); you may not use this file except in compliance
+ - with the License.  You may obtain a copy of the License at
+ -
+ -   http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing,
+ - software distributed under the License is distributed on an
+ - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ - KIND, either express or implied.  See the License for the
+ - specific language governing permissions and limitations
+ - under the License.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <title>Qpid JMS - Apache Qpid&#8482;</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+    <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+    <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+    <script type="text/javascript">var _deferredFunctions = [];</script>
+    <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+    <!--[if lte IE 8]>
+      <link rel="stylesheet" href="/ie.css" type="text/css"/>
+      <script type="text/javascript" src="/html5shiv.js"></script>
+    <![endif]-->
+
+    <!-- Redirects for `go get` and godoc.org -->
+    <meta name="go-import"
+          content="qpid.apache.org git https://gitbox.apache.org/repos/asf/qpid-proton.git"/>
+    <meta name="go-source"
+          content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+  </head>
+  <body>
+    <div id="-content">
+      <div id="-top" class="panel">
+        <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+        <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+        <ul id="-global-navigation">
+          <li><a id="-logotype" href="/index.html">Apache Qpid<sup>&#8482;</sup></a></li>
+          <li><a href="/documentation.html">Documentation</a></li>
+          <li><a href="/download.html">Download</a></li>
+          <li><a href="/discussion.html">Discussion</a></li>
+        </ul>
+      </div>
+
+      <div id="-menu" class="panel" style="display: none;">
+        <div class="flex">
+          <section>
+            <h3>Project</h3>
+
+            <ul>
+              <li><a href="/overview.html">Overview</a></li>
+              <li><a href="/components/index.html">Components</a></li>
+              <li><a href="/releases/index.html">Releases</a></li>
+            </ul>
+          </section>
+
+          <section>
+            <h3>Messaging APIs</h3>
+
+            <ul>
+              <li><a href="/proton/index.html">Qpid Proton</a></li>
+              <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+              <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+            </ul>
+          </section>
+
+          <section>
+            <h3>Servers and tools</h3>
+
+            <ul>
+              <li><a href="/components/broker-j/index.html">Broker-J</a></li>
+              <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+              <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+            </ul>
+          </section>
+
+          <section>
+            <h3>Resources</h3>
+
+            <ul>
+              <li><a href="/dashboard.html">Dashboard</a></li>
+              <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+              <li><a href="/resources.html">More resources</a></li>
+            </ul>
+          </section>
+        </div>
+      </div>
+
+      <div id="-search" class="panel" style="display: none;">
+        <form action="http://www.google.com/search" method="get">
+          <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+          <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+          <button type="submit">Search</button>
+          <a href="/search.html">More ways to search</a>
+        </form>
+      </div>
+
+      <div id="-middle" class="panel">
+        <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-jms-2.5.0/index.html">Qpid JMS 2.5.0</a></li><li>Qpid JMS</li></ul>
+
+        <div id="-middle-content">
+          <h1 id="qpid-jms">Qpid JMS</h1>
+
+<p><a href="https://qpid.apache.org/components/jms/">Qpid JMS</a> is a JMS 2.0 client that uses
+the AMQP 1.0 protocol, enabling it to interact with various AMQP 1.0 servers.</p>
+
+<p>Below are some quick pointers you might find useful.</p>
+
+<h2 id="building-the-code">Building the code</h2>
+
+<p>The project requires Maven 3. Some example commands follow.</p>
+
+<p>Clean previous builds output and install all modules to local repository without
+running the tests:</p>
+
+<pre><code>mvn clean install -DskipTests
+</code></pre>
+
+<p>Install all modules to the local repository after running all the tests:</p>
+
+<pre><code>mvn clean install
+</code></pre>
+
+<p>Perform a subset tests on the packaged release artifacts without
+installing:</p>
+
+<pre><code>mvn clean verify -Dtest=TestNamePattern*
+</code></pre>
+
+<p>Execute the tests and produce code coverage report:</p>
+
+<pre><code>mvn clean test jacoco:report
+</code></pre>
+
+<h2 id="examples">Examples</h2>
+
+<p>First build and install all the modules as detailed above (if running against
+a source checkout/release, rather than against released binaries) and then
+consult the README in the qpid-jms-examples module itself.</p>
+
+<h2 id="documentation">Documentation</h2>
+
+<p>Documentation source can be found in the qpid-jms-docs module, with a published
+version available on the <a href="https://qpid.apache.org/components/jms/">website</a>.</p>
+
+<h2 id="distribution-assemblies">Distribution assemblies</h2>
+
+<p>After building the modules, src and binary distribution assemblies can be found at:</p>
+
+<pre><code>apache-qpid-jms/target
+</code></pre>
+
+
+          <hr/>
+
+          <ul id="-apache-navigation">
+            <li><a href="http://www.apache.org/">Apache</a></li>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+            <li><a href="/security.html">Security</a></li>
+            <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+          </ul>
+
+          <p id="-legal">
+            Apache Qpid, Messaging built on AMQP; Copyright &#169; 2015
+            The Apache Software Foundation; Licensed under
+            the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+            License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+            Proton, Apache, the Apache feather logo, and the Apache Qpid
+            project logo are trademarks of The Apache Software
+            Foundation; All other marks mentioned may be trademarks or
+            registered trademarks of their respective owners
+          </p>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/content/releases/qpid-jms-2.5.0/docs/index.html b/content/releases/qpid-jms-2.5.0/docs/index.html
new file mode 100644
index 0000000..846f188
--- /dev/null
+++ b/content/releases/qpid-jms-2.5.0/docs/index.html
@@ -0,0 +1,584 @@
+<!DOCTYPE html>
+<!--
+ -
+ - Licensed to the Apache Software Foundation (ASF) under one
+ - or more contributor license agreements.  See the NOTICE file
+ - distributed with this work for additional information
+ - regarding copyright ownership.  The ASF licenses this file
+ - to you under the Apache License, Version 2.0 (the
+ - "License"); you may not use this file except in compliance
+ - with the License.  You may obtain a copy of the License at
+ -
+ -   http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing,
+ - software distributed under the License is distributed on an
+ - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ - KIND, either express or implied.  See the License for the
+ - specific language governing permissions and limitations
+ - under the License.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <title>Client configuration - Apache Qpid&#8482;</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+    <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+    <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+    <script type="text/javascript">var _deferredFunctions = [];</script>
+    <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+    <!--[if lte IE 8]>
+      <link rel="stylesheet" href="/ie.css" type="text/css"/>
+      <script type="text/javascript" src="/html5shiv.js"></script>
+    <![endif]-->
+
+    <!-- Redirects for `go get` and godoc.org -->
+    <meta name="go-import"
+          content="qpid.apache.org git https://gitbox.apache.org/repos/asf/qpid-proton.git"/>
+    <meta name="go-source"
+          content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+  </head>
+  <body>
+    <div id="-content">
+      <div id="-top" class="panel">
+        <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+        <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+        <ul id="-global-navigation">
+          <li><a id="-logotype" href="/index.html">Apache Qpid<sup>&#8482;</sup></a></li>
+          <li><a href="/documentation.html">Documentation</a></li>
+          <li><a href="/download.html">Download</a></li>
+          <li><a href="/discussion.html">Discussion</a></li>
+        </ul>
+      </div>
+
+      <div id="-menu" class="panel" style="display: none;">
+        <div class="flex">
+          <section>
+            <h3>Project</h3>
+
+            <ul>
+              <li><a href="/overview.html">Overview</a></li>
+              <li><a href="/components/index.html">Components</a></li>
+              <li><a href="/releases/index.html">Releases</a></li>
+            </ul>
+          </section>
+
+          <section>
+            <h3>Messaging APIs</h3>
+
+            <ul>
+              <li><a href="/proton/index.html">Qpid Proton</a></li>
+              <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+              <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+            </ul>
+          </section>
+
+          <section>
+            <h3>Servers and tools</h3>
+
+            <ul>
+              <li><a href="/components/broker-j/index.html">Broker-J</a></li>
+              <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+              <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+            </ul>
+          </section>
+
+          <section>
+            <h3>Resources</h3>
+
+            <ul>
+              <li><a href="/dashboard.html">Dashboard</a></li>
+              <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+              <li><a href="/resources.html">More resources</a></li>
+            </ul>
+          </section>
+        </div>
+      </div>
+
+      <div id="-search" class="panel" style="display: none;">
+        <form action="http://www.google.com/search" method="get">
+          <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+          <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+          <button type="submit">Search</button>
+          <a href="/search.html">More ways to search</a>
+        </form>
+      </div>
+
+      <div id="-middle" class="panel">
+        <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-jms-2.5.0/index.html">Qpid JMS 2.5.0</a></li><li>Client configuration</li></ul>
+
+        <div id="-middle-content">
+          <h1 id="client-configuration">Client configuration</h1>
+
+<p>This file details various configuration options for the client, such as how to configure and create a JNDI InitialContext, the syntax for its related configuration, and various URI options that can be set when defining a ConnectionFactory.</p>
+
+<h2 id="configuring-a-jndi-initialcontext">Configuring a JNDI InitialContext</h2>
+
+<p>Applications use a JNDI InitialContext, itself obtained from an InitialContextFactory, to look up JMS objects such as ConnectionFactory. The Qpid JMS client provides an implementation of the InitialContextFactory in class <em>org.apache.qpid.jms.jndi.JmsInitialContextFactory</em>. This may be configured and used in three main ways:</p>
+
+<ol>
+<li><p>Via jndi.properties file on the Java Classpath.</p>
+
+<p>By including a file named jndi.properties on the Classpath and setting the <em>java.naming.factory.initial</em> property
+to value <em>org.apache.qpid.jms.jndi.JmsInitialContextFactory</em>, the Qpid InitialContextFactory implementation will
+be discovered when instantiating InitialContext object.</p>
+
+<pre><code>javax.naming.Context ctx = new javax.naming.InitialContext();
+</code></pre>
+
+<p>The particular ConnectionFactory, Queue and Topic objects you wish the context to contain are configured using
+properties (the syntax for which is detailed below) either directly within the jndi.properties file,
+or in a separate file which is referenced in jndi.properties using the <em>java.naming.provider.url</em> property.</p></li>
+<li><p>Via system properties.</p>
+
+<p>By setting the <em>java.naming.factory.initial</em> system property to value <em>org.apache.qpid.jms.jndi.JmsInitialContextFactory</em>,
+the Qpid InitialContextFactory implementation will be discovered when instantiating InitialContext object.</p>
+
+<pre><code> javax.naming.Context ctx = new javax.naming.InitialContext();
+</code></pre>
+
+<p>The particular ConnectionFactory, Queue and Topic objects you wish the context to contain are configured as properties in
+a file, which is passed using the <em>java.naming.provider.url</em> system property. The syntax for these properties is detailed
+below.</p></li>
+<li><p>Programmatically using an environment Hashtable.</p>
+
+<p>The InitialContext may also be configured directly by passing an environment during creation:</p>
+
+<pre><code>Hashtable&lt;Object, Object&gt; env = new Hashtable&lt;Object, Object&gt;();
+env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.qpid.jms.jndi.JmsInitialContextFactory");
+javax.naming.Context context = new javax.naming.InitialContext(env);
+</code></pre>
+
+<p>The particular ConnectionFactory, Queue and Topic objects you wish the context to contain are configured as properties
+(the syntax for which is detailed below), either directly within the environment Hashtable, or in a
+separate file which is referenced using the <em>java.naming.provider.url</em> property within the environment Hashtable.</p></li>
+</ol>
+
+<p>The property syntax used in the properties file or environment Hashtable is as follows:</p>
+
+<ul>
+<li>To define a ConnectionFactory, use format: <em>connectionfactory.&lt;lookup-name&gt; = &lt;connection-uri&gt;</em></li>
+<li>To define a Queue, use format: <em>queue.&lt;lookup-name&gt; = &lt;queue-name&gt;</em></li>
+<li>To define a Topic use format: <em>topic.&lt;lookup-name&gt; = &lt;topic-name&gt;</em></li>
+</ul>
+
+<p>The property values which which constitute the connection URI, queue name, or topic name can also utilise simple <em>${variable}</em> or <em>${variable:-default}</em> expansion, with these resolved in order from system properties, environment variables, or the properties file / environment Hashtable. For more details of the Connection URI, see the next section.</p>
+
+<p>As an example, consider the following properties used to define a ConnectionFactory, Queue, and Topic:</p>
+
+<pre><code>connectionfactory.myFactoryLookup = amqp://localhost:5672
+queue.myQueueLookup = queueA
+topic.myTopicLookup = topicA
+</code></pre>
+
+<p>These objects could then be looked up from a Context as follows:</p>
+
+<pre><code>ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup");
+Queue queue = (Queue) context.lookup("myQueueLookup");
+Topic topic = (Topic) context.lookup("myTopicLookup");
+</code></pre>
+
+<h2 id="connection-uri">Connection URI</h2>
+
+<p>The basic format of the clients Connection URI is as follows:</p>
+
+<pre><code>  amqp[s]://hostname:port[?option=value[&amp;option2=value...]]
+</code></pre>
+
+<p>or for WebSocket connections:</p>
+
+<pre><code> amqpws[s]://hostname:port[/path][?option=value[&amp;option2=value...]]
+</code></pre>
+
+<p>Where the <em>amqps</em> and <em>amqpwss</em> scheme is specified to use SSL/TLS, the hostname segment from the URI can be used by the JVM for the
+TLS SNI (Server Name Indication) extension in order to communicate the desired server hostname during a TLS handshake.
+The SNI extension will be automatically included if a Fully Qualified name (e.g myhost.mydomain) is specified, but not
+when an unqualified name (e.g myhost) or bare IP address are used.</p>
+
+<p>The client can be configured with a number of different settings using the URI while defining the ConnectionFactory, these are detailed in the following sections.</p>
+
+<h3 id="jms-configuration-options">JMS Configuration options</h3>
+
+<p>The options apply to the behaviour of the JMS objects such as Connection, Session, MessageConsumer and MessageProducer.</p>
+
+<ul>
+<li><strong>jms.username</strong> User name value used to authenticate the connection</li>
+<li><strong>jms.password</strong> The password value used to authenticate the connection</li>
+<li><strong>jms.clientID</strong> The ClientID value that is applied to the connection.</li>
+<li><strong>jms.forceAsyncSend</strong> Configures whether all Messages sent from a MessageProducer are sent asynchronously or only those Message that qualify such as Messages inside a transaction or non-persistent messages.</li>
+<li><strong>jms.forceSyncSend</strong> Override certain asynchronous send conditions and always send messages from a MessageProducer synchronously. Sends using a CompletionListener are not affected and are implicitly always asynchronous.</li>
+<li><strong>jms.forceAsyncAcks</strong> Causes all Message acknowledgments to be sent asynchronously.</li>
+<li><strong>jms.localMessageExpiry</strong> Controls whether MessageConsumer instances will locally filter expired Messages or deliver them.  By default this value is set to true and expired messages will be filtered.</li>
+<li><strong>jms.localMessagePriority</strong> If enabled prefetched messages are reordered locally based on their given Message priority value. Default is false.</li>
+<li><strong>jms.validatePropertyNames</strong> If message property names should be validated as valid Java identifiers. Default is true.</li>
+<li><strong>jms.validateSelector</strong> Controls whether local validation is performed on consumer message selector strings. Default is true.</li>
+<li><strong>jms.receiveLocalOnly</strong> If enabled receive calls with a timeout will only check a consumers local message buffer, otherwise the remote peer is checked to ensure there are really no messages available if the local timeout expires before a message arrives. Default is false, the remote is checked.</li>
+<li><strong>jms.receiveNoWaitLocalOnly</strong> If enabled receiveNoWait calls will only check a consumers local message buffer, otherwise the remote peer is checked to ensure there are really no messages available. Default is false, the remote is checked.</li>
+<li><strong>jms.queuePrefix</strong> Optional prefix value added to the name of any Queue created from a JMS Session.</li>
+<li><strong>jms.topicPrefix</strong> Optional prefix value added to the name of any Topic created from a JMS Session.</li>
+<li><strong>jms.closeTimeout</strong> Timeout value that controls how long the client waits on resource closure before returning. By default the client waits 60 seconds for a normal close completion event.</li>
+<li><strong>jms.connectTimeout</strong> Timeout value that controls how long the client waits on Connection establishment before returning with an error. By default the client waits 15 seconds for a connection to be established before failing.</li>
+<li><strong>jms.sendTimeout</strong> Timeout value that controls how long the client waits on completion of a synchronous message send before returning an error. By default the client will wait indefinitely for a send to complete.</li>
+<li><strong>jms.requestTimeout</strong> Timeout value that controls how long the client waits on completion of various synchronous interactions, such as opening a producer or consumer, before returning an error. Does not affect synchronous message sends. By default the client will wait indefinitely for a request to complete.</li>
+<li><strong>jms.clientIDPrefix</strong> Optional prefix value that is used for generated Client ID values when a new Connection is created for the JMS ConnectionFactory.  The default prefix is 'ID:'.</li>
+<li><strong>jms.connectionIDPrefix</strong> Optional prefix value that is used for generated Connection ID values when a new Connection is created for the JMS ConnectionFactory.  This connection ID is used when logging some information from the JMS Connection object so a configurable prefix can make breadcrumbing the logs easier.  The default prefix is 'ID:'.</li>
+<li><strong>jms.populateJMSXUserID</strong> Controls whether a MessageProducer will populate the JMSXUserID value for each sent message using the authenticated username from the connection.  This value defaults to false and the JMSXUserID for all sent message will not be populated.</li>
+<li><strong>jms.awaitClientID</strong> Controls whether a Connection with no ClientID configured in the URI will wait for a ClientID being set programatically (or the connection being used otherwise to signal none can be set) before sending the AMQP connection Open. Defaults to true.</li>
+<li><strong>jms.useDaemonThread</strong> Controls whether a Connection will use a daemon thread for its executor. Defaults to false to ensure a non-daemon thread is present by default.</li>
+<li><strong>jms.tracing</strong> Sets the type name of a tracing provider to use for the connection(s) created by the factory. Supported values are "opentracing" and "noop". Default is unset, effectively noop.</li>
+</ul>
+
+<p>The Prefetch Policy controls how many messages the remote peer can send to the client and be held in a prefetch buffer for each consumer instance.</p>
+
+<ul>
+<li><strong>jms.prefetchPolicy.queuePrefetch</strong> defaults to 1000</li>
+<li><strong>jms.prefetchPolicy.topicPrefetch</strong> defaults to 1000</li>
+<li><strong>jms.prefetchPolicy.queueBrowserPrefetch</strong> defaults to 1000</li>
+<li><strong>jms.prefetchPolicy.durableTopicPrefetch</strong> defaults to 1000</li>
+<li><strong>jms.prefetchPolicy.all</strong> used to set all prefetch values at once.</li>
+</ul>
+
+<p>The Redelivery Policy controls how redelivered messages are handled on the client.</p>
+
+<ul>
+<li><strong>jms.redeliveryPolicy.maxRedeliveries</strong> controls when an incoming message is rejected based on the number of times it has been redelivered, the default value is (-1) disabled.  A value of zero would indicate no message redeliveries are accepted, a value of five would allow a message to be redelivered five times, etc.</li>
+<li><strong>jms.redeliveryPolicy.outcome</strong> controls the outcome that is applied to a message that is being rejected due to it having exceeded the configured maxRedeliveries value.  This option is configured on the URI using the following set of outcome options:  ACCEPTED, REJECTED, RELEASED, MODIFIED_FAILED and MODIFIED_FAILED_UNDELIVERABLE. The default outcome value is MODIFIED_FAILED_UNDELIVERABLE.</li>
+</ul>
+
+<p>The MessageID Policy controls the type of the Message ID assigned to messages sent from the client.</p>
+
+<ul>
+<li><strong>jms.messageIDPolicy.messageIDType</strong> By default a generated String value is used for the MessageID on outgoing messages. Other available types are UUID, UUID_STRING, and PREFIXED_UUID_STRING.</li>
+</ul>
+
+<p>The Presettle Policy controls when a producer or consumer instance will be configured to use AMQP presettled messaging semantics.</p>
+
+<ul>
+<li><strong>jms.presettlePolicy.presettleAll</strong> when true all producers and non-transacted consumers created operate in presettled mode, defaults to false.</li>
+<li><strong>jms.presettlePolicy.presettleProducers</strong> when true all producers operate in presettled mode, defaults to false.</li>
+<li><strong>jms.presettlePolicy.presettleTopicProducers</strong> when true any producer that is sending to a Topic or Temporary Topic destination will operate in presettled mode, defaults to false.</li>
+<li><strong>jms.presettlePolicy.presettleQueueProducers</strong> when true any producer that is sending to a Queue or Temporary Queue destination will operate in presettled mode, defaults to false.</li>
+<li><strong>jms.presettlePolicy.presettleTransactedProducers</strong> when true any producer that is created in a transacted Session will operate in presettled mode, defaults to false.</li>
+<li><strong>jms.presettlePolicy.presettleConsumers</strong> when true all consumers operate in presettled mode, defaults to false.</li>
+<li><strong>jms.presettlePolicy.presettleTopicConsumers</strong> when true any consumer that is receiving from a Topic or Temporary Topic destination will operate in presettled mode, defaults to false.</li>
+<li><strong>jms.presettlePolicy.presettleQueueConsumers</strong> when true any consumer that is receiving from a Queue or Temporary Queue destination will operate in presettled mode, defaults to false.</li>
+</ul>
+
+<p>The Deserialization Policy provides a means of controlling which types are trusted to be deserialized from the object stream while retrieving the body from an incoming JMS ObjectMessage composed of serialized Java Object content. By default all types are trusted during attempt to deserialize the body. The default Deserialization Policy object provides URI options that allow specifying a allow list and a deny list of Java class or package names.</p>
+
+<p><strong>jms.deserializationPolicy.allowList</strong> A comma separated list of class/package names that should be allowed when deserializing the contents of a JMS ObjectMessage, unless overridden by the deny list. The names in this list are not pattern values, the exact class or package name must be configured, e.g "java.util.Map" or "java.util". Package matches include sub-packages. Default is to allow all.
+<strong>jms.deserializationPolicy.denyList</strong> A comma separated list of class/package names that should be rejected when deserializing the contents of a JMS ObjectMessage. The names in this list are not pattern values, the exact class or package name must be configured, e.g "java.util.Map" or "java.util". Package matches include sub-packages. Default is to prevent none.</p>
+
+<h3 id="tcp-transport-configuration-options">TCP Transport Configuration options</h3>
+
+<p>When connected to a remote using plain TCP these options configure the behaviour of the underlying socket.  These options are appended to the connection URI along with the other configuration options, for example:</p>
+
+<pre><code>  amqp://localhost:5672?jms.clientID=foo&amp;transport.connectTimeout=30000
+</code></pre>
+
+<p>The complete set of TCP Transport options is listed below:</p>
+
+<ul>
+<li><strong>transport.sendBufferSize</strong> default is 64k</li>
+<li><strong>transport.receiveBufferSize</strong> default is 64k</li>
+<li><strong>transport.trafficClass</strong> default is 0</li>
+<li><strong>transport.connectTimeout</strong> default is 60 seconds</li>
+<li><strong>transport.soTimeout</strong> default is -1</li>
+<li><strong>transport.soLinger</strong> default is -1</li>
+<li><strong>transport.tcpKeepAlive</strong> default is false</li>
+<li><strong>transport.tcpNoDelay</strong> default is true</li>
+<li><strong>transport.useEpoll</strong> When true the transport will use the native Epoll layer when available instead of the NIO layer, which can improve performance. Defaults to true.</li>
+<li><strong>transport.useKQueue</strong> When true the transport will use the native KQueue layer when available instead of the NIO layer, which can improve performance. Defaults to false.</li>
+</ul>
+
+<h3 id="ssl-transport-configuration-options">SSL Transport Configuration options</h3>
+
+<p>The SSL Transport extends the TCP Transport and is enabled using the <em>amqps</em> URI scheme.  Because the SSL Transport extends the functionality of the TCP based Transport all the TCP Transport options are valid on an SSL Transport URI.</p>
+
+<p>A simple SSL/TLS based client URI is shown below:</p>
+
+<pre><code>amqps://myhost.mydomain:5671
+</code></pre>
+
+<p>The complete set of SSL Transport options is listed below:</p>
+
+<ul>
+<li><strong>transport.keyStoreLocation</strong>  default is to read from the system property "javax.net.ssl.keyStore"</li>
+<li><strong>transport.keyStorePassword</strong>  default is to read from the system property "javax.net.ssl.keyStorePassword"</li>
+<li><strong>transport.trustStoreLocation</strong>  default is to read from the system property "javax.net.ssl.trustStore"</li>
+<li><strong>transport.trustStorePassword</strong>  default is to read from the system property "javax.net.ssl.trustStorePassword"</li>
+<li><strong>transport.keyStoreType</strong> The type of keyStore being used. Default is to read from the system property "javax.net.ssl.keyStoreType" If not set then default is "JKS".</li>
+<li><strong>transport.trustStoreType</strong> The type of trustStore being used. Default is to read from the system property "javax.net.ssl.trustStoreType" If not set then default is "JKS".</li>
+<li><strong>transport.storeType</strong> This will set both the keystoreType and trustStoreType to the same value. If not set then the keyStoreType and trustStoreType will default to the values specified above.</li>
+<li><strong>transport.contextProtocol</strong> The protocol argument used when getting an SSLContext. Default is TLS, or TLSv1.2 if using OpenSSL.</li>
+<li><strong>transport.enabledCipherSuites</strong> The cipher suites to enable, comma separated. No default, meaning the context default ciphers are used. Any disabled ciphers are removed from this.</li>
+<li><strong>transport.disabledCipherSuites</strong> The cipher suites to disable, comma separated. Ciphers listed here are removed from the enabled ciphers. No default.</li>
+<li><strong>transport.enabledProtocols</strong> The protocols to enable, comma separated. No default, meaning the context default protocols are used. Any disabled protocols are removed from this.</li>
+<li><strong>transport.disabledProtocols</strong> The protocols to disable, comma separated. Protocols listed here are removed from the enabled protocols. Default is "SSLv2Hello,SSLv3".</li>
+<li><strong>transport.trustAll</strong> Whether to trust the provided server certificate implicitly, regardless of any configured trust store. Defaults to false.</li>
+<li><strong>transport.verifyHost</strong> Whether to verify that the hostname being connected to matches with the provided server certificate. Defaults to true.</li>
+<li><strong>transport.keyAlias</strong> The alias to use when selecting a keypair from the keystore if required to send a client certificate to the server. No default.</li>
+<li><strong>transport.useOpenSSL</strong> When true the transport will attempt to use native OpenSSL libraries for SSL connections if possible based on the SSL configuration and available OpenSSL libraries on the classpath.  Refer to the section <a href="#enabling-openssl-support">Enabling OpenSSL support</a> for more information.</li>
+</ul>
+
+<h3 id="websocket-transport-configuration-options">Websocket Transport Configuration options</h3>
+
+<p>The WebSocket (WS) Transport extends the TCP and SSL Transports to provide both unsecured and secured Websocket connectivity and is enabled using the <em>amqpws</em> and <em>amqpwss</em> URI schemes.  The unsecured WS Transport extends the basic TCP transport which means all the normal TCP Transport configuration options also apply to the WS Transport. Similarly the WSS Transport extends the SSL Transport which means both the TCP and SSL Transport options can be applied to configure it.</p>
+
+<p>A simple WS[S] based client URI is shown below:</p>
+
+<pre><code>amqpws[s]://myhost.mydomain:5671/[optional-path]
+</code></pre>
+
+<p>The WS Transport can be configured to add additional HTTP Headers during the WebSocket upgrade request using URI options for each HTTP header and value to be added, an example is shown below:</p>
+
+<pre><code>amqpws[s]://myhost.mydomain:5671/[optional-path]?transport.ws.httpHeader.&lt;Header&gt;=&lt;Value&gt;
+</code></pre>
+
+<h3 id="amqp-configuration-options">AMQP Configuration options</h3>
+
+<p>These options apply to the behaviour of certain AMQP functionality.</p>
+
+<ul>
+<li><strong>amqp.idleTimeout</strong> The idle timeout in milliseconds after which the connection will be failed if the peer sends no AMQP frames. Default is 60000.</li>
+<li><strong>amqp.vhost</strong> The vhost to connect to. Used to populate the Sasl and Open hostname fields. Default is the main hostname from the Connection URI.</li>
+<li><strong>amqp.saslLayer</strong> Controls whether connections should use a SASL layer or not. Default is true.</li>
+<li><strong>amqp.saslMechanisms</strong> Which SASL mechanism(s) the client should allow selection of, if offered by the server and usable with the configured credentials. Comma separated if specifying more than 1 mechanism. The clients supported mechanisms are currently EXTERNAL, SCRAM-SHA-256, SCRAM-SHA-1, CRAM-MD5, PLAIN, XOAUTH2, ANONYMOUS, and GSSAPI for Kerberos.  Default is to allow selection from all mechanisms except GSSAPI, which must be specified here to enable.</li>
+<li><strong>amqp.maxFrameSize</strong> The connection max-frame-size value in bytes. Default is 1048576.</li>
+<li><strong>amqp.drainTimeout</strong> The time in milliseconds that the client will wait for a response from the remote when a consumer drain request is made. If no response is seen in the allotted timeout period the link will be considered failed and the associated consumer will be closed. Default is 60000.</li>
+<li><strong>amqp.allowNonSecureRedirects</strong> Controls whether an AMQP connection will allow for a redirect to an alternative host over a connection that is not secure when the existing connection is secure, e.g. redirecting an SSL connection to a raw TCP connection.  This value defaults to false.
+<strong>amqp.anonymousFallbackCacheSize</strong> Controls the number of underlying per-destination fallback sending links that are cached for an anonymous producer to improve performance of sending when a peer doesn't offer support for the anonymous relay. By default only one sender link is cached which means that sending to multiple destinations will cause the cached sender to be closed and new sender to be opened each time the destination changes. Increasing the cache size can reduce the amount of times the cache swapping occurs.  Setting the cache size to zero results in the sender links being closed after each send operation.
+<strong>amqp.anonymousFallbackCacheTimeout</strong> Controls how long in milliseconds an underlying per-destination fallback sender link can remain in an anonymous producers cache when inactive before it is automatically closed.  The default is 30000 milliseconds (30 seconds) and can be set to zero to disable the timeouts.</li>
+</ul>
+
+<h3 id="failover-configuration-options">Failover Configuration options</h3>
+
+<p>With failover enabled the client can reconnect to another server automatically when connection to the current server is lost for some reason.  The failover URI is always initiated with the <em>failover</em> prefix and a list of URIs for the server(s) is contained inside a set of parentheses. The "jms." options are applied to the overall failover URI, outside the parentheses, and affect the JMS Connection object for its lifetime.</p>
+
+<p>The URI for failover looks something like the following:</p>
+
+<pre><code>failover:(amqp://host1:5672,amqp://host2:5672)?jms.clientID=foo&amp;failover.maxReconnectAttempts=20
+</code></pre>
+
+<p>The individual broker details within the parentheses can use the "transport." or "amqp." options defined earlier, with these being applied as each host is connected to:</p>
+
+<pre><code>failover:(amqp://host1:5672?amqp.option=value,amqp://host2:5672?transport.option=value)?jms.clientID=foo
+</code></pre>
+
+<p>The complete set of configuration options for failover is listed below:</p>
+
+<ul>
+<li><strong>failover.initialReconnectDelay</strong> The amount of time the client will wait before the first attempt to reconnect to a remote peer.  The default value is zero, meaning the first attempt happens immediately.</li>
+<li><strong>failover.reconnectDelay</strong> Controls the delay between successive reconnection attempts, defaults to 10 milliseconds.  If the backoff option is not enabled this value remains constant.</li>
+<li><strong>failover.maxReconnectDelay</strong> The maximum time that the client will wait before attempting a reconnect.  This value is only used when the backoff feature is enabled to ensure that the delay doesn't not grow too large.  Defaults to 30 seconds as the max time between connect attempts.</li>
+<li><strong>failover.useReconnectBackOff</strong> Controls whether the time between reconnection attempts should grow based on a configured multiplier.  This option defaults to true.</li>
+<li><strong>failover.reconnectBackOffMultiplier</strong> The multiplier used to grow the reconnection delay value, defaults to 2.0d.</li>
+<li><strong>failover.maxReconnectAttempts</strong> The number of reconnection attempts allowed before reporting the connection as failed to the client.  The default is no limit or (-1).</li>
+<li><strong>failover.startupMaxReconnectAttempts</strong> For a client that has never connected to a remote peer before this option control how many attempts are made to connect before reporting the connection as failed.  The default is to use the value of maxReconnectAttempts.</li>
+<li><strong>failover.warnAfterReconnectAttempts</strong> Controls how often the client will log a message indicating that failover reconnection is being attempted.  The default is to log every 10 connection attempts.</li>
+<li><strong>failover.randomize</strong> When true the set of failover URIs is randomly shuffled prior to attempting to connect to one of them.  This can help to distribute client connections more evenly across multiple remote peers.  The default value is false.</li>
+<li><strong>failover.amqpOpenServerListAction</strong> Controls how the failover transport behaves when the connection Open frame from the remote peer provides a list of failover hosts to the client.  This option accepts one of three values; REPLACE, ADD, or IGNORE (default is REPLACE).  If REPLACE is configured then all failover URIs other than the one for the current server are replaced with those provided by the remote peer.  If ADD is configured then the URIs provided by the remote are added to the existing set of failover URIs, with de-duplication.  If IGNORE is configured then any updates from the remote are dropped and no changes are made to the set of failover URIs in use.</li>
+</ul>
+
+<p>The failover URI also supports defining 'nested' options as a means of specifying AMQP and transport option values applicable to all the individual nested broker URI's, which can be useful to avoid repetition. This is accomplished using the same "transport." and "amqp." URI options outlined earlier for a non-failover broker URI but prefixed with <em>failover.nested.</em>. For example, to apply the same value for the <em>amqp.vhost</em> option to every broker connected to you might have a URI like:</p>
+
+<pre><code>failover:(amqp://host1:5672,amqp://host2:5672)?jms.clientID=foo&amp;failover.nested.amqp.vhost=myhost
+</code></pre>
+
+<h3 id="discovery-configuration-options">Discovery Configuration options</h3>
+
+<p>The client has an optional Discovery module, which provides a customised failover layer where the broker URIs to connect to are not given in the initial URI, but discovered as the client operates via associated discovery agents. There are currently two discovery agent implementations, a file watcher that loads URIs from a file, and a multicast listener that works with ActiveMQ 5 brokers which have been configured to broadcast their broker addresses for listening clients.</p>
+
+<p>The general set of failover related options when using discovery are the same as those detailed earlier, with the main prefix updated from <em>failover.</em> to <em>discovery.</em>, and with the 'nested' options prefix used to supply URI options common to all the discovered broker URIs bring updated from <em>failover.nested.</em> to <em>discovery.discovered</em>. For example, without the agent URI details, a general discovery URI might look like:</p>
+
+<pre><code>discovery:(&lt;agent-uri&gt;)?discovery.maxReconnectAttempts=20&amp;discovery.discovered.jms.clientID=foo
+</code></pre>
+
+<p>To use the file watcher discovery agent, utilise an agent URI of the form:</p>
+
+<pre><code>discovery:(file:///path/to/monitored-file?updateInterval=60000)
+</code></pre>
+
+<p>The URI options for the file watcher discovery agent are listed below:</p>
+
+<ul>
+<li><strong>updateInterval</strong> Controls the frequency in milliseconds which the file is inspected for change. The default value is 30000.</li>
+</ul>
+
+<p>To use the multicast discovery agent with an ActiveMQ 5 broker, utilise an agent URI of the form:</p>
+
+<pre><code>discovery:(multicast://default?group=default)
+</code></pre>
+
+<p>Note that the use of <em>default</em> as the host in the multicast agent URI above is a special value (that is substituted by the agent with the default "239.255.2.3:6155"). You may change this to specify the actual IP and port in use with your multicast configuration.</p>
+
+<p>The URI options for the multicast discovery agent are listed below:</p>
+
+<ul>
+<li><strong>group</strong> Controls which multicast group messages are listened for on. The default value is "default".</li>
+</ul>
+
+<h3 id="enabling-openssl-support">Enabling OpenSSL support</h3>
+
+<p>SSL connections can be configured to use a native OpenSSL implementation which can provide increased performance. To use this support the transport <strong><em>useOpenSSL</em></strong> option must be enabled and the OpenSSL support libraries must be configured on the classpath.  The client tests make use of an uber jar containing static libraries for multiple platforms based on Google's boringssl project libraries.  To include this dependency in your own project you might include the maven dependency as follows:</p>
+
+<pre><code>&lt;dependency&gt;
+  &lt;groupId&gt;io.netty&lt;/groupId&gt;
+  &lt;artifactId&gt;netty-tcnative-boringssl-static&lt;/artifactId&gt;
+  &lt;version&gt;${netty-tcnative-version}&lt;/version&gt;
+&lt;/dependency&gt;
+</code></pre>
+
+<p>The Netty project provides other options to choose from when using OpenSSL libraries which are documented on the Netty site.  <a href="https://netty.io/wiki/forked-tomcat-native.html">https://netty.io/wiki/forked-tomcat-native.html</a></p>
+
+<h2 id="logging">Logging</h2>
+
+<p>The client makes use of the SLF4J API, allowing users to select a particular logging implementation based on their needs by supplying a SLF4J 'binding', such as <em>slf4j-log4j</em> in order to use Log4J. More details on SLF4J are available from http://www.slf4j.org/.</p>
+
+<p>The client uses Logger names residing within the <em>org.apache.qpid.jms</em> hierarchy, which you can use to configure a logging implementation based on your needs.</p>
+
+<p>When debugging some issues, it may sometimes be useful to enable additional protocol trace logging from the Qpid Proton AMQP 1.0 library. There are two options to achieve this:</p>
+
+<ul>
+<li>Set the environment variable (not Java system property) <em>PN_TRACE_FRM</em> to <em>true</em>, which will cause Proton to emit frame logging to stdout.</li>
+<li>Add the option <em>amqp.traceFrames=true</em> to your connection URI to have the client add a protocol tracer to Proton, and configure the <em>org.apache.qpid.jms.provider.amqp.FRAMES</em> Logger to <em>TRACE</em> level to include the output in your logs.</li>
+</ul>
+
+<h2 id="tracing">Tracing</h2>
+
+<p>The client can perform distributed tracing of message production and consumption using an <a href="https://opentracing.io/">OpenTracing</a> implementation.</p>
+
+<p>When tracing is enabled, upon producing messages a Span is created for the AMQP delivery process, with the delivery outcome logged on it upon completion. When consuming messages, an active Span is created while the onMessage method of a MessageListener is called. For synchronous receive calls, a Span is created and finished internally while returning a Message. This is also the case for any messages expired before delivery or which exceed the configured redelivery policy.</p>
+
+<p>There are two ways of enabling this support:</p>
+
+<ol>
+<li><p>Configure the client via URI option to utilise the <em>GlobalTracer</em> independently set by the application.</p>
+
+<p>The tracing implementation can be enabled using the <em>jms.tracing</em> URI option:</p>
+
+<pre><code>amqp://localhost:5672?jms.tracing=opentracing
+</code></pre>
+
+<p>The application must create a Tracer and register it as the GlobalTracer. An overview of doing this would be:</p>
+
+<pre><code>io.opentracing.Tracer tracer = ...;
+io.opentracing.util.GlobalTracer.registerIfAbsent(tracer);
+</code></pre>
+
+<p>If no registration is performed, the GlobalTracer acts as a no-op Tracer.</p></li>
+<li><p>Set a JmsTracer instance to use directly on the JmsConnectionFactory object.</p>
+
+<pre><code>io.opentracing.Tracer tracer = ...;
+org.apache.qpid.jms.tracing.JmsTracer jmsTracer =
+        org.apache.qpid.jms.tracing.opentracing.OpenTracingTracerFactory.create(tracer);
+
+JmsConnectionFactory connectionFactory = ...;
+connectionFactory.setTracer(jmsTracer);
+</code></pre>
+
+<p>This method of enabling tracing overrides the URI configuration option if also set.</p></li>
+</ol>
+
+<p>In order to perform tracing a suitable OpenTracing implementation must be provided by the application (along with the io.opentracing:opentracing-api and io.opentracing:opentracing-util dependencies, should the tracing implementation not provide them).</p>
+
+<p>An example distributed tracing system would be <a href="https://www.jaegertracing.io/">Jaeger</a>. The related application dependency to utilise it would be:</p>
+
+<pre><code>&lt;dependency&gt;
+  &lt;groupId&gt;io.jaegertracing&lt;/groupId&gt;
+  &lt;artifactId&gt;jaeger-client&lt;/artifactId&gt;
+  &lt;version&gt;${jaeger-version}&lt;/version&gt;
+&lt;/dependency&gt;
+</code></pre>
+
+<h2 id="extended-session-acknowledgement-modes">Extended Session Acknowledgement modes</h2>
+
+<p>The client supports two additional session acknowledgement modes beyond the standard JMS specification modes.</p>
+
+<h3 id="individual-acknowledge">Individual Acknowledge</h3>
+
+<p>In this mode messages must be acknowledged individually by the application via the Message#acknowledge() method used when the Session is in CLIENT_ACKNOWLEDGE mode.  Unlike with CLIENT_ACKNOWLEDGE mode only the target message will be acknowledged, all other delivered messages remain un-acknowledged.  The integer value used to activate this mode is <em>101</em>.</p>
+
+<pre><code>    connection.createSession(false, 101);
+</code></pre>
+
+<h3 id="no-acknowledge">No Acknowledge</h3>
+
+<p>In this mode messages are accepted at the server before being dispatched to the client, and no acknowledgement is performed by the client.  The client supports two integer values to activate this mode, <em>100</em> and <em>257</em>.</p>
+
+<pre><code>    connection.createSession(false, 100);
+</code></pre>
+
+<h2 id="authenticating-using-kerberos">Authenticating using Kerberos</h2>
+
+<p>The client can be configured to authenticate using Kerberos when used with an appropriately configured server. To do so, you must:</p>
+
+<ol>
+<li><p>Configure the client to use the GSSAPI mechanism for SASL authentication using the <em>amqp.saslMechanisms</em> URI option, e.g:</p>
+
+<pre><code>amqp://myhost:5672?amqp.saslMechanisms=GSSAPI
+failover:(amqp://myhost:5672?amqp.saslMechanisms=GSSAPI)
+</code></pre></li>
+<li><p>Set the <em>java.security.auth.login.config</em> system property to the path of a JAAS Login Configuration file containing appropriate configuration for a Kerberos LoginModule, e.g:</p>
+
+<pre><code>-Djava.security.auth.login.config=/path/to/login.config
+</code></pre>
+
+<p>An example login.config configuration file might look like the following:</p>
+
+<pre><code>amqp-jms-client {
+    com.sun.security.auth.module.Krb5LoginModule required
+    useTicketCache=true;
+};
+</code></pre></li>
+</ol>
+
+<p>The precise configuration used will depend on how you wish the credentials to be established for the connection, and the particular LoginModule in use. For details of the Sun/Oracle Krb5LoginModule, see <a href="https://docs.oracle.com/javase/8/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html">https://docs.oracle.com/javase/8/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html</a>. For details of the IBM Java 8 Krb5LoginModule, see <a href="https://www.ibm.com/support/knowledgecenter/en/SSYKE2_8.0.0/com.ibm.java.security.api.doc/jgss/com/ibm/security/auth/module/Krb5LoginModule.html">https://www.ibm.com/support/knowledgecenter/en/SSYKE2_8.0.0/com.ibm.java.security.api.doc/jgss/com/ibm/security/auth/module/Krb5LoginModule.html</a>.</p>
+
+<p>It is possible to configure the LoginModule to establish the credentials to use for the Kerberos process, such as specifying a Principal and whether to use an existing ticket cache or keytab. If however the LoginModule configuration does not provide means to establish all necessary credentials, it may then request and be passed the username and/or password values from the client Connection object if they were either supplied when creating the Connection using the ConnectionFactory or previously configured via its URI options.</p>
+
+<p>Note that Kerberos is only only supported for authentication purposes. Use SSL/TLS connections for encryption.</p>
+
+<p>The following URI options can be used to influence the Kerberos authentication process:</p>
+
+<ul>
+<li><strong>sasl.options.configScope</strong> The Login Configuration entry name to use when authenticating. Default is "amqp-jms-client".</li>
+<li><strong>sasl.options.protocol</strong> The protocol value used during the GSSAPI SASL process. Default is "amqp".</li>
+<li><strong>sasl.options.serverName</strong> The serverName value used during the GSSAPI SASL process. Default is the server hostname from the connection URI.</li>
+</ul>
+
+<p>Similar to the "amqp." and "transport." options detailed previously, these options must be specified on a per-host basis or as all-host nested options in a failover URI.</p>
+
+
+          <hr/>
+
+          <ul id="-apache-navigation">
+            <li><a href="http://www.apache.org/">Apache</a></li>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+            <li><a href="/security.html">Security</a></li>
+            <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+          </ul>
+
+          <p id="-legal">
+            Apache Qpid, Messaging built on AMQP; Copyright &#169; 2015
+            The Apache Software Foundation; Licensed under
+            the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+            License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+            Proton, Apache, the Apache feather logo, and the Apache Qpid
+            project logo are trademarks of The Apache Software
+            Foundation; All other marks mentioned may be trademarks or
+            registered trademarks of their respective owners
+          </p>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/content/releases/qpid-jms-2.5.0/index.html b/content/releases/qpid-jms-2.5.0/index.html
new file mode 100644
index 0000000..129d105
--- /dev/null
+++ b/content/releases/qpid-jms-2.5.0/index.html
@@ -0,0 +1,210 @@
+<!DOCTYPE html>
+<!--
+ -
+ - Licensed to the Apache Software Foundation (ASF) under one
+ - or more contributor license agreements.  See the NOTICE file
+ - distributed with this work for additional information
+ - regarding copyright ownership.  The ASF licenses this file
+ - to you under the Apache License, Version 2.0 (the
+ - "License"); you may not use this file except in compliance
+ - with the License.  You may obtain a copy of the License at
+ -
+ -   http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing,
+ - software distributed under the License is distributed on an
+ - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ - KIND, either express or implied.  See the License for the
+ - specific language governing permissions and limitations
+ - under the License.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <title>Qpid JMS 2.5.0 - Apache Qpid&#8482;</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+    <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+    <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+    <script type="text/javascript">var _deferredFunctions = [];</script>
+    <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+    <!--[if lte IE 8]>
+      <link rel="stylesheet" href="/ie.css" type="text/css"/>
+      <script type="text/javascript" src="/html5shiv.js"></script>
+    <![endif]-->
+
+    <!-- Redirects for `go get` and godoc.org -->
+    <meta name="go-import"
+          content="qpid.apache.org git https://gitbox.apache.org/repos/asf/qpid-proton.git"/>
+    <meta name="go-source"
+          content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+  </head>
+  <body>
+    <div id="-content">
+      <div id="-top" class="panel">
+        <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+        <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+        <ul id="-global-navigation">
+          <li><a id="-logotype" href="/index.html">Apache Qpid<sup>&#8482;</sup></a></li>
+          <li><a href="/documentation.html">Documentation</a></li>
+          <li><a href="/download.html">Download</a></li>
+          <li><a href="/discussion.html">Discussion</a></li>
+        </ul>
+      </div>
+
+      <div id="-menu" class="panel" style="display: none;">
+        <div class="flex">
+          <section>
+            <h3>Project</h3>
+
+            <ul>
+              <li><a href="/overview.html">Overview</a></li>
+              <li><a href="/components/index.html">Components</a></li>
+              <li><a href="/releases/index.html">Releases</a></li>
+            </ul>
+          </section>
+
+          <section>
+            <h3>Messaging APIs</h3>
+
+            <ul>
+              <li><a href="/proton/index.html">Qpid Proton</a></li>
+              <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+              <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+            </ul>
+          </section>
+
+          <section>
+            <h3>Servers and tools</h3>
+
+            <ul>
+              <li><a href="/components/broker-j/index.html">Broker-J</a></li>
+              <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+              <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+            </ul>
+          </section>
+
+          <section>
+            <h3>Resources</h3>
+
+            <ul>
+              <li><a href="/dashboard.html">Dashboard</a></li>
+              <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+              <li><a href="/resources.html">More resources</a></li>
+            </ul>
+          </section>
+        </div>
+      </div>
+
+      <div id="-search" class="panel" style="display: none;">
+        <form action="http://www.google.com/search" method="get">
+          <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+          <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+          <button type="submit">Search</button>
+          <a href="/search.html">More ways to search</a>
+        </form>
+      </div>
+
+      <div id="-middle" class="panel">
+        <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li>Qpid JMS 2.5.0</li></ul>
+
+        <div id="-middle-content">
+          <h1 id="qpid-jms-250">Qpid JMS 2.5.0</h1>
+
+<p>Qpid JMS is a complete <a href="https://jakarta.ee/specifications/messaging/">Jakarta Messaging</a> 3.1
+client built using the <a href="/proton/index.html">Qpid Proton</a> protocol engine.</p>
+
+<p>For a detailed list of the changes in this release, see the <a href="release-notes.html">release
+notes</a>.</p>
+
+<h2 id="download">Download</h2>
+
+<p>It's important to <a href="/download.html#verify-what-you-download">verify the
+integrity</a> of the
+files you download.</p>
+
+<table>
+<thead>
+<tr>
+  <th>Content</th>
+  <th>Download</th>
+  <th>Verify</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+  <td>Qpid JMS binaries</td>
+  <td><a href="https://archive.apache.org/dist/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-bin.tar.gz">apache-qpid-jms-2.5.0-bin.tar.gz</a></td>
+  <td><a href="https://archive.apache.org/dist/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-bin.tar.gz.asc">ASC</a>, <a href="https://archive.apache.org/dist/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-bin.tar.gz.sha512">SHA512</a></td>
+</tr>
+<tr>
+  <td>Qpid JMS source code</td>
+  <td><a href="https://archive.apache.org/dist/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-src.tar.gz">apache-qpid-jms-2.5.0-src.tar.gz</a></td>
+  <td><a href="https://archive.apache.org/dist/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-src.tar.gz.asc">ASC</a>, <a href="https://archive.apache.org/dist/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-src.tar.gz.sha512">SHA512</a></td>
+</tr>
+</tbody>
+</table>
+
+<p>The client is also available <a href="/maven.html">via Maven</a>.</p>
+
+<h2 id="documentation">Documentation</h2>
+
+<div class="two-column">
+
+<ul>
+<li><a href="https://jakarta.ee/specifications/messaging/3.1/apidocs/">API reference</a></li>
+<li><a href="https://github.com/apache/qpid-jms/tree/2.5.0/qpid-jms-examples">Examples</a></li>
+<li><a href="docs/index.html">Configuration</a></li>
+<li><a href="building.html">Building Qpid JMS</a></li>
+</ul>
+
+</div>
+
+<h2 id="more-information">More information</h2>
+
+<ul>
+<li><a href="https://archive.apache.org/dist/qpid/jms/2.5.0">All release artefacts</a></li>
+<li><a href="https://issues.apache.org/jira/issues/?jql=project+%3D+QPIDJMS+AND+fixVersion+%3D+%272.5.0%27+AND+resolution+%3D+%27fixed%27+ORDER+BY+priority+DESC">Resolved issues in JIRA</a></li>
+<li><a href="https://gitbox.apache.org/repos/asf/qpid-jms.git/tree/refs/tags/2.5.0">Source repository tag</a></li>
+</ul>
+
+<script type="text/javascript">
+  _deferredFunctions.push(function() {
+      if ("2.5.0" === "2.5.0" || "2.5.0" === "1.11.0") {
+          _modifyCurrentReleaseLinks();
+      }
+  });
+</script>
+
+
+          <hr/>
+
+          <ul id="-apache-navigation">
+            <li><a href="http://www.apache.org/">Apache</a></li>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+            <li><a href="/security.html">Security</a></li>
+            <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+          </ul>
+
+          <p id="-legal">
+            Apache Qpid, Messaging built on AMQP; Copyright &#169; 2015
+            The Apache Software Foundation; Licensed under
+            the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+            License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+            Proton, Apache, the Apache feather logo, and the Apache Qpid
+            project logo are trademarks of The Apache Software
+            Foundation; All other marks mentioned may be trademarks or
+            registered trademarks of their respective owners
+          </p>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/content/releases/qpid-jms-2.5.0/release-notes.html b/content/releases/qpid-jms-2.5.0/release-notes.html
new file mode 100644
index 0000000..9fd78a2
--- /dev/null
+++ b/content/releases/qpid-jms-2.5.0/release-notes.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<!--
+ -
+ - Licensed to the Apache Software Foundation (ASF) under one
+ - or more contributor license agreements.  See the NOTICE file
+ - distributed with this work for additional information
+ - regarding copyright ownership.  The ASF licenses this file
+ - to you under the Apache License, Version 2.0 (the
+ - "License"); you may not use this file except in compliance
+ - with the License.  You may obtain a copy of the License at
+ -
+ -   http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing,
+ - software distributed under the License is distributed on an
+ - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ - KIND, either express or implied.  See the License for the
+ - specific language governing permissions and limitations
+ - under the License.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+  <head>
+    <title>Qpid JMS 2.5.0 Release Notes - Apache Qpid&#8482;</title>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+    <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+    <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+    <script type="text/javascript">var _deferredFunctions = [];</script>
+    <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+    <!--[if lte IE 8]>
+      <link rel="stylesheet" href="/ie.css" type="text/css"/>
+      <script type="text/javascript" src="/html5shiv.js"></script>
+    <![endif]-->
+
+    <!-- Redirects for `go get` and godoc.org -->
+    <meta name="go-import"
+          content="qpid.apache.org git https://gitbox.apache.org/repos/asf/qpid-proton.git"/>
+    <meta name="go-source"
+          content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+  </head>
+  <body>
+    <div id="-content">
+      <div id="-top" class="panel">
+        <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+        <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+        <ul id="-global-navigation">
+          <li><a id="-logotype" href="/index.html">Apache Qpid<sup>&#8482;</sup></a></li>
+          <li><a href="/documentation.html">Documentation</a></li>
+          <li><a href="/download.html">Download</a></li>
+          <li><a href="/discussion.html">Discussion</a></li>
+        </ul>
+      </div>
+
+      <div id="-menu" class="panel" style="display: none;">
+        <div class="flex">
+          <section>
+            <h3>Project</h3>
+
+            <ul>
+              <li><a href="/overview.html">Overview</a></li>
+              <li><a href="/components/index.html">Components</a></li>
+              <li><a href="/releases/index.html">Releases</a></li>
+            </ul>
+          </section>
+
+          <section>
+            <h3>Messaging APIs</h3>
+
+            <ul>
+              <li><a href="/proton/index.html">Qpid Proton</a></li>
+              <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+              <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+            </ul>
+          </section>
+
+          <section>
+            <h3>Servers and tools</h3>
+
+            <ul>
+              <li><a href="/components/broker-j/index.html">Broker-J</a></li>
+              <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+              <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+            </ul>
+          </section>
+
+          <section>
+            <h3>Resources</h3>
+
+            <ul>
+              <li><a href="/dashboard.html">Dashboard</a></li>
+              <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+              <li><a href="/resources.html">More resources</a></li>
+            </ul>
+          </section>
+        </div>
+      </div>
+
+      <div id="-search" class="panel" style="display: none;">
+        <form action="http://www.google.com/search" method="get">
+          <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+          <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+          <button type="submit">Search</button>
+          <a href="/search.html">More ways to search</a>
+        </form>
+      </div>
+
+      <div id="-middle" class="panel">
+        <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-jms-2.5.0/index.html">Qpid JMS 2.5.0</a></li><li>Qpid JMS 2.5.0 Release Notes</li></ul>
+
+        <div id="-middle-content">
+          <h1 id="qpid-jms-250-release-notes">Qpid JMS 2.5.0 Release Notes</h1>
+
+<p>Qpid JMS is a complete <a href="https://jakarta.ee/specifications/messaging/">Jakarta Messaging</a> 3.1
+client built using the <a href="/proton/index.html">Qpid Proton</a> protocol engine.</p>
+
+<p>For more information about this release, including download links and
+documentation, see the <a href="index.html">release overview</a>.</p>
+
+<h2 id="tasks">Tasks</h2>
+
+<ul>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-593">QPIDJMS-593</a> - convert the tests to use JUnit 5</li>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-594">QPIDJMS-594</a> - Update to Netty 4.1.100</li>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-595">QPIDJMS-595</a> - update test dependencies</li>
+</ul>
+
+
+          <hr/>
+
+          <ul id="-apache-navigation">
+            <li><a href="http://www.apache.org/">Apache</a></li>
+            <li><a href="http://www.apache.org/licenses/">License</a></li>
+            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+            <li><a href="/security.html">Security</a></li>
+            <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+          </ul>
+
+          <p id="-legal">
+            Apache Qpid, Messaging built on AMQP; Copyright &#169; 2015
+            The Apache Software Foundation; Licensed under
+            the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+            License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+            Proton, Apache, the Apache feather logo, and the Apache Qpid
+            project logo are trademarks of The Apache Software
+            Foundation; All other marks mentioned may be trademarks or
+            registered trademarks of their respective owners
+          </p>
+        </div>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/input/_transom_config.py b/input/_transom_config.py
index 77b825b..eb95bb4 100644
--- a/input/_transom_config.py
+++ b/input/_transom_config.py
@@ -27,7 +27,7 @@
 cpp_release = _Release(site_url, "Qpid C++", "qpid-cpp", "1.39.0")
 dispatch_release = _Release(site_url, "Qpid Dispatch", "qpid-dispatch", "1.19.0")
 interop_test_release = _Release(site_url, "Qpid Interop Test", "qpid-interop-test", "0.3.0")
-jms_release = _Release(site_url, "Qpid JMS", "qpid-jms", "2.4.0")
+jms_release = _Release(site_url, "Qpid JMS", "qpid-jms", "2.5.0")
 other_jms_release = "1.11.0"
 jms_amqp_0_x_release = _Release(site_url, "Qpid JMS for AMQP 0-x", "qpid-jms-amqp-0-x", "6.4.0")
 proton_release = _Release(site_url, "Qpid Proton", "qpid-proton", "0.39.0")
diff --git a/input/releases/index.md b/input/releases/index.md
index 9bb6736..eafd821 100644
--- a/input/releases/index.md
+++ b/input/releases/index.md
@@ -27,9 +27,9 @@
 ## Current releases
 
 <div class="two-column" markdown="1">
+ - [Qpid JMS 2.5.0](qpid-jms-2.5.0/index.html), October 2023
  - [Qpid JMS 1.11.0](qpid-jms-1.11.0/index.html), October 2023
  - [Qpid ProtonJ2 1.0.0-M17](qpid-protonj2-1.0.0-M17/index.html), July 2023
- - [Qpid JMS 2.4.0](qpid-jms-2.4.0/index.html), June 2023
  - [Qpid Proton 0.39.0](qpid-proton-0.39.0/index.html), June 2023
  - [Qpid proton-dotnet 1.0.0-M9](qpid-proton-dotnet-1.0.0-M9/index.html), May 2023
  - [Qpid Proton-J 0.34.1](qpid-proton-j-0.34.1/index.html), March 2023
@@ -44,6 +44,7 @@
 ## Past releases
 
 <div class="two-column" markdown="1">
+ - [Qpid JMS 2.4.0](qpid-jms-2.4.0/index.html), June 2023
  - [Qpid JMS 1.10.0](qpid-jms-1.10.0/index.html), June 2023
  - [Qpid ProtonJ2 1.0.0-M16](qpid-protonj2-1.0.0-M16/index.html), June 2023
  - [Qpid ProtonJ2 1.0.0-M15](qpid-protonj2-1.0.0-M15/index.html), May 2023
diff --git a/input/releases/qpid-jms-2.5.0/building.md b/input/releases/qpid-jms-2.5.0/building.md
new file mode 100644
index 0000000..5503089
--- /dev/null
+++ b/input/releases/qpid-jms-2.5.0/building.md
@@ -0,0 +1,46 @@
+# Qpid JMS
+
+[Qpid JMS](https://qpid.apache.org/components/jms/) is a JMS 2.0 client that uses
+the AMQP 1.0 protocol, enabling it to interact with various AMQP 1.0 servers.
+
+Below are some quick pointers you might find useful.
+
+## Building the code
+
+The project requires Maven 3. Some example commands follow.
+
+Clean previous builds output and install all modules to local repository without
+running the tests:
+
+    mvn clean install -DskipTests
+
+Install all modules to the local repository after running all the tests:
+
+    mvn clean install
+
+Perform a subset tests on the packaged release artifacts without
+installing:
+
+    mvn clean verify -Dtest=TestNamePattern*
+
+Execute the tests and produce code coverage report:
+
+    mvn clean test jacoco:report
+
+## Examples
+
+First build and install all the modules as detailed above (if running against
+a source checkout/release, rather than against released binaries) and then
+consult the README in the qpid-jms-examples module itself.
+
+## Documentation
+
+Documentation source can be found in the qpid-jms-docs module, with a published
+version available on the [website](https://qpid.apache.org/components/jms/).
+
+## Distribution assemblies
+
+After building the modules, src and binary distribution assemblies can be found at:
+
+    apache-qpid-jms/target
+
diff --git a/input/releases/qpid-jms-2.5.0/docs/index.md b/input/releases/qpid-jms-2.5.0/docs/index.md
new file mode 100644
index 0000000..7b31b93
--- /dev/null
+++ b/input/releases/qpid-jms-2.5.0/docs/index.md
@@ -0,0 +1,386 @@
+# Client configuration
+
+This file details various configuration options for the client, such as how to configure and create a JNDI InitialContext, the syntax for its related configuration, and various URI options that can be set when defining a ConnectionFactory.
+
+## Configuring a JNDI InitialContext
+
+Applications use a JNDI InitialContext, itself obtained from an InitialContextFactory, to look up JMS objects such as ConnectionFactory. The Qpid JMS client provides an implementation of the InitialContextFactory in class *org.apache.qpid.jms.jndi.JmsInitialContextFactory*. This may be configured and used in three main ways:
+
+1.  Via jndi.properties file on the Java Classpath.
+
+    By including a file named jndi.properties on the Classpath and setting the *java.naming.factory.initial* property
+    to value *org.apache.qpid.jms.jndi.JmsInitialContextFactory*, the Qpid InitialContextFactory implementation will
+    be discovered when instantiating InitialContext object.
+
+        javax.naming.Context ctx = new javax.naming.InitialContext();
+
+    The particular ConnectionFactory, Queue and Topic objects you wish the context to contain are configured using
+    properties (the syntax for which is detailed below) either directly within the jndi.properties file,
+    or in a separate file which is referenced in jndi.properties using the *java.naming.provider.url* property.
+
+2.  Via system properties.
+
+    By setting the *java.naming.factory.initial* system property to value *org.apache.qpid.jms.jndi.JmsInitialContextFactory*,
+    the Qpid InitialContextFactory implementation will be discovered when instantiating InitialContext object.
+
+         javax.naming.Context ctx = new javax.naming.InitialContext();
+
+    The particular ConnectionFactory, Queue and Topic objects you wish the context to contain are configured as properties in
+    a file, which is passed using the *java.naming.provider.url* system property. The syntax for these properties is detailed
+    below.
+
+3.  Programmatically using an environment Hashtable.
+
+    The InitialContext may also be configured directly by passing an environment during creation:
+
+        Hashtable<Object, Object> env = new Hashtable<Object, Object>();
+        env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.qpid.jms.jndi.JmsInitialContextFactory");
+        javax.naming.Context context = new javax.naming.InitialContext(env);
+
+    The particular ConnectionFactory, Queue and Topic objects you wish the context to contain are configured as properties
+    (the syntax for which is detailed below), either directly within the environment Hashtable, or in a
+    separate file which is referenced using the *java.naming.provider.url* property within the environment Hashtable.
+
+The property syntax used in the properties file or environment Hashtable is as follows:
+
++   To define a ConnectionFactory, use format: *connectionfactory.&lt;lookup-name&gt; = &lt;connection-uri&gt;*
++   To define a Queue, use format: *queue.&lt;lookup-name&gt; = &lt;queue-name&gt;*
++   To define a Topic use format: *topic.&lt;lookup-name&gt; = &lt;topic-name&gt;*
+
+The property values which which constitute the connection URI, queue name, or topic name can also utilise simple *${variable}* or *${variable:-default}* expansion, with these resolved in order from system properties, environment variables, or the properties file / environment Hashtable. For more details of the Connection URI, see the next section.
+
+As an example, consider the following properties used to define a ConnectionFactory, Queue, and Topic:
+
+    connectionfactory.myFactoryLookup = amqp://localhost:5672
+    queue.myQueueLookup = queueA
+    topic.myTopicLookup = topicA
+
+These objects could then be looked up from a Context as follows:
+
+    ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup");
+    Queue queue = (Queue) context.lookup("myQueueLookup");
+    Topic topic = (Topic) context.lookup("myTopicLookup");
+
+## Connection URI
+
+The basic format of the clients Connection URI is as follows:
+
+      amqp[s]://hostname:port[?option=value[&option2=value...]]
+
+or for WebSocket connections:
+
+     amqpws[s]://hostname:port[/path][?option=value[&option2=value...]]
+
+Where the *amqps* and *amqpwss* scheme is specified to use SSL/TLS, the hostname segment from the URI can be used by the JVM for the
+TLS SNI (Server Name Indication) extension in order to communicate the desired server hostname during a TLS handshake.
+The SNI extension will be automatically included if a Fully Qualified name (e.g myhost.mydomain) is specified, but not
+when an unqualified name (e.g myhost) or bare IP address are used.
+
+The client can be configured with a number of different settings using the URI while defining the ConnectionFactory, these are detailed in the following sections.
+
+### JMS Configuration options
+
+The options apply to the behaviour of the JMS objects such as Connection, Session, MessageConsumer and MessageProducer.
+
++ **jms.username** User name value used to authenticate the connection
++ **jms.password** The password value used to authenticate the connection
++ **jms.clientID** The ClientID value that is applied to the connection.
++ **jms.forceAsyncSend** Configures whether all Messages sent from a MessageProducer are sent asynchronously or only those Message that qualify such as Messages inside a transaction or non-persistent messages.
++ **jms.forceSyncSend** Override certain asynchronous send conditions and always send messages from a MessageProducer synchronously. Sends using a CompletionListener are not affected and are implicitly always asynchronous.
++ **jms.forceAsyncAcks** Causes all Message acknowledgments to be sent asynchronously.
++ **jms.localMessageExpiry** Controls whether MessageConsumer instances will locally filter expired Messages or deliver them.  By default this value is set to true and expired messages will be filtered.
++ **jms.localMessagePriority** If enabled prefetched messages are reordered locally based on their given Message priority value. Default is false.
++ **jms.validatePropertyNames** If message property names should be validated as valid Java identifiers. Default is true.
++ **jms.validateSelector** Controls whether local validation is performed on consumer message selector strings. Default is true.
++ **jms.receiveLocalOnly** If enabled receive calls with a timeout will only check a consumers local message buffer, otherwise the remote peer is checked to ensure there are really no messages available if the local timeout expires before a message arrives. Default is false, the remote is checked.
++ **jms.receiveNoWaitLocalOnly** If enabled receiveNoWait calls will only check a consumers local message buffer, otherwise the remote peer is checked to ensure there are really no messages available. Default is false, the remote is checked.
++ **jms.queuePrefix** Optional prefix value added to the name of any Queue created from a JMS Session.
++ **jms.topicPrefix** Optional prefix value added to the name of any Topic created from a JMS Session.
++ **jms.closeTimeout** Timeout value that controls how long the client waits on resource closure before returning. By default the client waits 60 seconds for a normal close completion event.
++ **jms.connectTimeout** Timeout value that controls how long the client waits on Connection establishment before returning with an error. By default the client waits 15 seconds for a connection to be established before failing.
++ **jms.sendTimeout** Timeout value that controls how long the client waits on completion of a synchronous message send before returning an error. By default the client will wait indefinitely for a send to complete.
++ **jms.requestTimeout** Timeout value that controls how long the client waits on completion of various synchronous interactions, such as opening a producer or consumer, before returning an error. Does not affect synchronous message sends. By default the client will wait indefinitely for a request to complete.
++ **jms.clientIDPrefix** Optional prefix value that is used for generated Client ID values when a new Connection is created for the JMS ConnectionFactory.  The default prefix is 'ID:'.
++ **jms.connectionIDPrefix** Optional prefix value that is used for generated Connection ID values when a new Connection is created for the JMS ConnectionFactory.  This connection ID is used when logging some information from the JMS Connection object so a configurable prefix can make breadcrumbing the logs easier.  The default prefix is 'ID:'.
++ **jms.populateJMSXUserID** Controls whether a MessageProducer will populate the JMSXUserID value for each sent message using the authenticated username from the connection.  This value defaults to false and the JMSXUserID for all sent message will not be populated.
++ **jms.awaitClientID** Controls whether a Connection with no ClientID configured in the URI will wait for a ClientID being set programatically (or the connection being used otherwise to signal none can be set) before sending the AMQP connection Open. Defaults to true.
++ **jms.useDaemonThread** Controls whether a Connection will use a daemon thread for its executor. Defaults to false to ensure a non-daemon thread is present by default.
++ **jms.tracing** Sets the type name of a tracing provider to use for the connection(s) created by the factory. Supported values are "opentracing" and "noop". Default is unset, effectively noop.
+
+The Prefetch Policy controls how many messages the remote peer can send to the client and be held in a prefetch buffer for each consumer instance.
+
++ **jms.prefetchPolicy.queuePrefetch** defaults to 1000
++ **jms.prefetchPolicy.topicPrefetch** defaults to 1000
++ **jms.prefetchPolicy.queueBrowserPrefetch** defaults to 1000
++ **jms.prefetchPolicy.durableTopicPrefetch** defaults to 1000
++ **jms.prefetchPolicy.all** used to set all prefetch values at once.
+
+The Redelivery Policy controls how redelivered messages are handled on the client.
+
++ **jms.redeliveryPolicy.maxRedeliveries** controls when an incoming message is rejected based on the number of times it has been redelivered, the default value is (-1) disabled.  A value of zero would indicate no message redeliveries are accepted, a value of five would allow a message to be redelivered five times, etc.
++ **jms.redeliveryPolicy.outcome** controls the outcome that is applied to a message that is being rejected due to it having exceeded the configured maxRedeliveries value.  This option is configured on the URI using the following set of outcome options:  ACCEPTED, REJECTED, RELEASED, MODIFIED_FAILED and MODIFIED_FAILED_UNDELIVERABLE. The default outcome value is MODIFIED_FAILED_UNDELIVERABLE.
+
+The MessageID Policy controls the type of the Message ID assigned to messages sent from the client.
+
++ **jms.messageIDPolicy.messageIDType** By default a generated String value is used for the MessageID on outgoing messages. Other available types are UUID, UUID_STRING, and PREFIXED_UUID_STRING.
+
+The Presettle Policy controls when a producer or consumer instance will be configured to use AMQP presettled messaging semantics.
+
++ **jms.presettlePolicy.presettleAll** when true all producers and non-transacted consumers created operate in presettled mode, defaults to false.
++ **jms.presettlePolicy.presettleProducers** when true all producers operate in presettled mode, defaults to false.
++ **jms.presettlePolicy.presettleTopicProducers** when true any producer that is sending to a Topic or Temporary Topic destination will operate in presettled mode, defaults to false.
++ **jms.presettlePolicy.presettleQueueProducers** when true any producer that is sending to a Queue or Temporary Queue destination will operate in presettled mode, defaults to false.
++ **jms.presettlePolicy.presettleTransactedProducers** when true any producer that is created in a transacted Session will operate in presettled mode, defaults to false.
++ **jms.presettlePolicy.presettleConsumers** when true all consumers operate in presettled mode, defaults to false.
++ **jms.presettlePolicy.presettleTopicConsumers** when true any consumer that is receiving from a Topic or Temporary Topic destination will operate in presettled mode, defaults to false.
++ **jms.presettlePolicy.presettleQueueConsumers** when true any consumer that is receiving from a Queue or Temporary Queue destination will operate in presettled mode, defaults to false.
+
+The Deserialization Policy provides a means of controlling which types are trusted to be deserialized from the object stream while retrieving the body from an incoming JMS ObjectMessage composed of serialized Java Object content. By default all types are trusted during attempt to deserialize the body. The default Deserialization Policy object provides URI options that allow specifying a allow list and a deny list of Java class or package names.
+
+**jms.deserializationPolicy.allowList** A comma separated list of class/package names that should be allowed when deserializing the contents of a JMS ObjectMessage, unless overridden by the deny list. The names in this list are not pattern values, the exact class or package name must be configured, e.g "java.util.Map" or "java.util". Package matches include sub-packages. Default is to allow all.
+**jms.deserializationPolicy.denyList** A comma separated list of class/package names that should be rejected when deserializing the contents of a JMS ObjectMessage. The names in this list are not pattern values, the exact class or package name must be configured, e.g "java.util.Map" or "java.util". Package matches include sub-packages. Default is to prevent none.
+
+### TCP Transport Configuration options
+
+When connected to a remote using plain TCP these options configure the behaviour of the underlying socket.  These options are appended to the connection URI along with the other configuration options, for example:
+
+      amqp://localhost:5672?jms.clientID=foo&transport.connectTimeout=30000
+
+The complete set of TCP Transport options is listed below:
+
++ **transport.sendBufferSize** default is 64k
++ **transport.receiveBufferSize** default is 64k
++ **transport.trafficClass** default is 0
++ **transport.connectTimeout** default is 60 seconds
++ **transport.soTimeout** default is -1
++ **transport.soLinger** default is -1
++ **transport.tcpKeepAlive** default is false
++ **transport.tcpNoDelay** default is true
++ **transport.useEpoll** When true the transport will use the native Epoll layer when available instead of the NIO layer, which can improve performance. Defaults to true.
++ **transport.useKQueue** When true the transport will use the native KQueue layer when available instead of the NIO layer, which can improve performance. Defaults to false.
+
+### SSL Transport Configuration options
+
+The SSL Transport extends the TCP Transport and is enabled using the *amqps* URI scheme.  Because the SSL Transport extends the functionality of the TCP based Transport all the TCP Transport options are valid on an SSL Transport URI.
+
+A simple SSL/TLS based client URI is shown below:
+
+    amqps://myhost.mydomain:5671
+
+
+The complete set of SSL Transport options is listed below:
+
++ **transport.keyStoreLocation**  default is to read from the system property "javax.net.ssl.keyStore"
++ **transport.keyStorePassword**  default is to read from the system property "javax.net.ssl.keyStorePassword"
++ **transport.trustStoreLocation**  default is to read from the system property "javax.net.ssl.trustStore"
++ **transport.trustStorePassword**  default is to read from the system property "javax.net.ssl.trustStorePassword"
++ **transport.keyStoreType** The type of keyStore being used. Default is to read from the system property "javax.net.ssl.keyStoreType" If not set then default is "JKS".
++ **transport.trustStoreType** The type of trustStore being used. Default is to read from the system property "javax.net.ssl.trustStoreType" If not set then default is "JKS".
++ **transport.storeType** This will set both the keystoreType and trustStoreType to the same value. If not set then the keyStoreType and trustStoreType will default to the values specified above.
++ **transport.contextProtocol** The protocol argument used when getting an SSLContext. Default is TLS, or TLSv1.2 if using OpenSSL.
++ **transport.enabledCipherSuites** The cipher suites to enable, comma separated. No default, meaning the context default ciphers are used. Any disabled ciphers are removed from this.
++ **transport.disabledCipherSuites** The cipher suites to disable, comma separated. Ciphers listed here are removed from the enabled ciphers. No default.
++ **transport.enabledProtocols** The protocols to enable, comma separated. No default, meaning the context default protocols are used. Any disabled protocols are removed from this.
++ **transport.disabledProtocols** The protocols to disable, comma separated. Protocols listed here are removed from the enabled protocols. Default is "SSLv2Hello,SSLv3".
++ **transport.trustAll** Whether to trust the provided server certificate implicitly, regardless of any configured trust store. Defaults to false.
++ **transport.verifyHost** Whether to verify that the hostname being connected to matches with the provided server certificate. Defaults to true.
++ **transport.keyAlias** The alias to use when selecting a keypair from the keystore if required to send a client certificate to the server. No default.
++ **transport.useOpenSSL** When true the transport will attempt to use native OpenSSL libraries for SSL connections if possible based on the SSL configuration and available OpenSSL libraries on the classpath.  Refer to the section [Enabling OpenSSL support](#enabling-openssl-support) for more information.
+
+### Websocket Transport Configuration options
+
+The WebSocket (WS) Transport extends the TCP and SSL Transports to provide both unsecured and secured Websocket connectivity and is enabled using the *amqpws* and *amqpwss* URI schemes.  The unsecured WS Transport extends the basic TCP transport which means all the normal TCP Transport configuration options also apply to the WS Transport. Similarly the WSS Transport extends the SSL Transport which means both the TCP and SSL Transport options can be applied to configure it.
+
+A simple WS[S] based client URI is shown below:
+
+    amqpws[s]://myhost.mydomain:5671/[optional-path]
+
+The WS Transport can be configured to add additional HTTP Headers during the WebSocket upgrade request using URI options for each HTTP header and value to be added, an example is shown below:
+
+    amqpws[s]://myhost.mydomain:5671/[optional-path]?transport.ws.httpHeader.<Header>=<Value>
+
+### AMQP Configuration options
+
+These options apply to the behaviour of certain AMQP functionality.
+
++ **amqp.idleTimeout** The idle timeout in milliseconds after which the connection will be failed if the peer sends no AMQP frames. Default is 60000.
++ **amqp.vhost** The vhost to connect to. Used to populate the Sasl and Open hostname fields. Default is the main hostname from the Connection URI.
++ **amqp.saslLayer** Controls whether connections should use a SASL layer or not. Default is true.
++ **amqp.saslMechanisms** Which SASL mechanism(s) the client should allow selection of, if offered by the server and usable with the configured credentials. Comma separated if specifying more than 1 mechanism. The clients supported mechanisms are currently EXTERNAL, SCRAM-SHA-256, SCRAM-SHA-1, CRAM-MD5, PLAIN, XOAUTH2, ANONYMOUS, and GSSAPI for Kerberos.  Default is to allow selection from all mechanisms except GSSAPI, which must be specified here to enable.
++ **amqp.maxFrameSize** The connection max-frame-size value in bytes. Default is 1048576.
++ **amqp.drainTimeout** The time in milliseconds that the client will wait for a response from the remote when a consumer drain request is made. If no response is seen in the allotted timeout period the link will be considered failed and the associated consumer will be closed. Default is 60000.
++ **amqp.allowNonSecureRedirects** Controls whether an AMQP connection will allow for a redirect to an alternative host over a connection that is not secure when the existing connection is secure, e.g. redirecting an SSL connection to a raw TCP connection.  This value defaults to false.
+**amqp.anonymousFallbackCacheSize** Controls the number of underlying per-destination fallback sending links that are cached for an anonymous producer to improve performance of sending when a peer doesn't offer support for the anonymous relay. By default only one sender link is cached which means that sending to multiple destinations will cause the cached sender to be closed and new sender to be opened each time the destination changes. Increasing the cache size can reduce the amount of times the cache swapping occurs.  Setting the cache size to zero results in the sender links being closed after each send operation.
+**amqp.anonymousFallbackCacheTimeout** Controls how long in milliseconds an underlying per-destination fallback sender link can remain in an anonymous producers cache when inactive before it is automatically closed.  The default is 30000 milliseconds (30 seconds) and can be set to zero to disable the timeouts.
+
+### Failover Configuration options
+
+With failover enabled the client can reconnect to another server automatically when connection to the current server is lost for some reason.  The failover URI is always initiated with the *failover* prefix and a list of URIs for the server(s) is contained inside a set of parentheses. The "jms." options are applied to the overall failover URI, outside the parentheses, and affect the JMS Connection object for its lifetime.
+
+The URI for failover looks something like the following:
+
+    failover:(amqp://host1:5672,amqp://host2:5672)?jms.clientID=foo&failover.maxReconnectAttempts=20
+
+The individual broker details within the parentheses can use the "transport." or "amqp." options defined earlier, with these being applied as each host is connected to:
+
+    failover:(amqp://host1:5672?amqp.option=value,amqp://host2:5672?transport.option=value)?jms.clientID=foo
+
+The complete set of configuration options for failover is listed below:
+
++ **failover.initialReconnectDelay** The amount of time the client will wait before the first attempt to reconnect to a remote peer.  The default value is zero, meaning the first attempt happens immediately.
++ **failover.reconnectDelay** Controls the delay between successive reconnection attempts, defaults to 10 milliseconds.  If the backoff option is not enabled this value remains constant.
++ **failover.maxReconnectDelay** The maximum time that the client will wait before attempting a reconnect.  This value is only used when the backoff feature is enabled to ensure that the delay doesn't not grow too large.  Defaults to 30 seconds as the max time between connect attempts.
++ **failover.useReconnectBackOff** Controls whether the time between reconnection attempts should grow based on a configured multiplier.  This option defaults to true.
++ **failover.reconnectBackOffMultiplier** The multiplier used to grow the reconnection delay value, defaults to 2.0d.
++ **failover.maxReconnectAttempts** The number of reconnection attempts allowed before reporting the connection as failed to the client.  The default is no limit or (-1).
++ **failover.startupMaxReconnectAttempts** For a client that has never connected to a remote peer before this option control how many attempts are made to connect before reporting the connection as failed.  The default is to use the value of maxReconnectAttempts.
++ **failover.warnAfterReconnectAttempts** Controls how often the client will log a message indicating that failover reconnection is being attempted.  The default is to log every 10 connection attempts.
++ **failover.randomize** When true the set of failover URIs is randomly shuffled prior to attempting to connect to one of them.  This can help to distribute client connections more evenly across multiple remote peers.  The default value is false.
++ **failover.amqpOpenServerListAction** Controls how the failover transport behaves when the connection Open frame from the remote peer provides a list of failover hosts to the client.  This option accepts one of three values; REPLACE, ADD, or IGNORE (default is REPLACE).  If REPLACE is configured then all failover URIs other than the one for the current server are replaced with those provided by the remote peer.  If ADD is configured then the URIs provided by the remote are added to the existing set of failover URIs, with de-duplication.  If IGNORE is configured then any updates from the remote are dropped and no changes are made to the set of failover URIs in use.
+
+The failover URI also supports defining 'nested' options as a means of specifying AMQP and transport option values applicable to all the individual nested broker URI's, which can be useful to avoid repetition. This is accomplished using the same "transport." and "amqp." URI options outlined earlier for a non-failover broker URI but prefixed with *failover.nested.*. For example, to apply the same value for the *amqp.vhost* option to every broker connected to you might have a URI like:
+
+    failover:(amqp://host1:5672,amqp://host2:5672)?jms.clientID=foo&failover.nested.amqp.vhost=myhost
+
+
+### Discovery Configuration options
+
+The client has an optional Discovery module, which provides a customised failover layer where the broker URIs to connect to are not given in the initial URI, but discovered as the client operates via associated discovery agents. There are currently two discovery agent implementations, a file watcher that loads URIs from a file, and a multicast listener that works with ActiveMQ 5 brokers which have been configured to broadcast their broker addresses for listening clients.
+
+The general set of failover related options when using discovery are the same as those detailed earlier, with the main prefix updated from *failover.* to *discovery.*, and with the 'nested' options prefix used to supply URI options common to all the discovered broker URIs bring updated from *failover.nested.* to *discovery.discovered*. For example, without the agent URI details, a general discovery URI might look like:
+
+    discovery:(<agent-uri>)?discovery.maxReconnectAttempts=20&discovery.discovered.jms.clientID=foo
+
+To use the file watcher discovery agent, utilise an agent URI of the form:
+
+    discovery:(file:///path/to/monitored-file?updateInterval=60000)
+
+The URI options for the file watcher discovery agent are listed below:
+
++ **updateInterval** Controls the frequency in milliseconds which the file is inspected for change. The default value is 30000.
+
+
+To use the multicast discovery agent with an ActiveMQ 5 broker, utilise an agent URI of the form:
+
+    discovery:(multicast://default?group=default)
+
+Note that the use of *default* as the host in the multicast agent URI above is a special value (that is substituted by the agent with the default "239.255.2.3:6155"). You may change this to specify the actual IP and port in use with your multicast configuration.
+
+The URI options for the multicast discovery agent are listed below:
+
++ **group** Controls which multicast group messages are listened for on. The default value is "default".
+
+### Enabling OpenSSL support
+
+SSL connections can be configured to use a native OpenSSL implementation which can provide increased performance. To use this support the transport ***useOpenSSL*** option must be enabled and the OpenSSL support libraries must be configured on the classpath.  The client tests make use of an uber jar containing static libraries for multiple platforms based on Google's boringssl project libraries.  To include this dependency in your own project you might include the maven dependency as follows:
+
+    <dependency>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-tcnative-boringssl-static</artifactId>
+      <version>${netty-tcnative-version}</version>
+    </dependency>
+
+The Netty project provides other options to choose from when using OpenSSL libraries which are documented on the Netty site.  [https://netty.io/wiki/forked-tomcat-native.html](https://netty.io/wiki/forked-tomcat-native.html)
+
+## Logging
+
+The client makes use of the SLF4J API, allowing users to select a particular logging implementation based on their needs by supplying a SLF4J 'binding', such as *slf4j-log4j* in order to use Log4J. More details on SLF4J are available from http://www.slf4j.org/.
+
+The client uses Logger names residing within the *org.apache.qpid.jms* hierarchy, which you can use to configure a logging implementation based on your needs.
+
+When debugging some issues, it may sometimes be useful to enable additional protocol trace logging from the Qpid Proton AMQP 1.0 library. There are two options to achieve this:
+
++ Set the environment variable (not Java system property) *PN_TRACE_FRM* to *true*, which will cause Proton to emit frame logging to stdout.
++ Add the option *amqp.traceFrames=true* to your connection URI to have the client add a protocol tracer to Proton, and configure the *org.apache.qpid.jms.provider.amqp.FRAMES* Logger to *TRACE* level to include the output in your logs.
+
+## Tracing
+
+The client can perform distributed tracing of message production and consumption using an [OpenTracing](https://opentracing.io/) implementation.
+
+When tracing is enabled, upon producing messages a Span is created for the AMQP delivery process, with the delivery outcome logged on it upon completion. When consuming messages, an active Span is created while the onMessage method of a MessageListener is called. For synchronous receive calls, a Span is created and finished internally while returning a Message. This is also the case for any messages expired before delivery or which exceed the configured redelivery policy.
+
+There are two ways of enabling this support:
+
+1.  Configure the client via URI option to utilise the *GlobalTracer* independently set by the application.
+
+    The tracing implementation can be enabled using the *jms.tracing* URI option:
+
+        amqp://localhost:5672?jms.tracing=opentracing
+
+    The application must create a Tracer and register it as the GlobalTracer. An overview of doing this would be:
+
+        io.opentracing.Tracer tracer = ...;
+        io.opentracing.util.GlobalTracer.registerIfAbsent(tracer);
+
+    If no registration is performed, the GlobalTracer acts as a no-op Tracer.
+
+2.  Set a JmsTracer instance to use directly on the JmsConnectionFactory object.
+
+        io.opentracing.Tracer tracer = ...;
+        org.apache.qpid.jms.tracing.JmsTracer jmsTracer =
+                org.apache.qpid.jms.tracing.opentracing.OpenTracingTracerFactory.create(tracer);
+
+        JmsConnectionFactory connectionFactory = ...;
+        connectionFactory.setTracer(jmsTracer);
+
+    This method of enabling tracing overrides the URI configuration option if also set.
+
+In order to perform tracing a suitable OpenTracing implementation must be provided by the application (along with the io.opentracing:opentracing-api and io.opentracing:opentracing-util dependencies, should the tracing implementation not provide them).
+
+An example distributed tracing system would be [Jaeger](https://www.jaegertracing.io/). The related application dependency to utilise it would be:
+
+    <dependency>
+      <groupId>io.jaegertracing</groupId>
+      <artifactId>jaeger-client</artifactId>
+      <version>${jaeger-version}</version>
+    </dependency>
+
+## Extended Session Acknowledgement modes
+
+The client supports two additional session acknowledgement modes beyond the standard JMS specification modes.
+
+### Individual Acknowledge
+
+In this mode messages must be acknowledged individually by the application via the Message#acknowledge() method used when the Session is in CLIENT_ACKNOWLEDGE mode.  Unlike with CLIENT_ACKNOWLEDGE mode only the target message will be acknowledged, all other delivered messages remain un-acknowledged.  The integer value used to activate this mode is *101*.
+
+        connection.createSession(false, 101);
+
+### No Acknowledge
+
+In this mode messages are accepted at the server before being dispatched to the client, and no acknowledgement is performed by the client.  The client supports two integer values to activate this mode, *100* and *257*.
+
+        connection.createSession(false, 100);
+
+## Authenticating using Kerberos
+
+The client can be configured to authenticate using Kerberos when used with an appropriately configured server. To do so, you must:
+
+1.  Configure the client to use the GSSAPI mechanism for SASL authentication using the *amqp.saslMechanisms* URI option, e.g:
+
+        amqp://myhost:5672?amqp.saslMechanisms=GSSAPI
+        failover:(amqp://myhost:5672?amqp.saslMechanisms=GSSAPI)
+
+2.  Set the *java.security.auth.login.config* system property to the path of a JAAS Login Configuration file containing appropriate configuration for a Kerberos LoginModule, e.g:
+
+        -Djava.security.auth.login.config=/path/to/login.config
+
+    An example login.config configuration file might look like the following:
+
+        amqp-jms-client {
+            com.sun.security.auth.module.Krb5LoginModule required
+            useTicketCache=true;
+        };
+
+The precise configuration used will depend on how you wish the credentials to be established for the connection, and the particular LoginModule in use. For details of the Sun/Oracle Krb5LoginModule, see [https://docs.oracle.com/javase/8/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html](https://docs.oracle.com/javase/8/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html). For details of the IBM Java 8 Krb5LoginModule, see [https://www.ibm.com/support/knowledgecenter/en/SSYKE2_8.0.0/com.ibm.java.security.api.doc/jgss/com/ibm/security/auth/module/Krb5LoginModule.html](https://www.ibm.com/support/knowledgecenter/en/SSYKE2_8.0.0/com.ibm.java.security.api.doc/jgss/com/ibm/security/auth/module/Krb5LoginModule.html).
+
+It is possible to configure the LoginModule to establish the credentials to use for the Kerberos process, such as specifying a Principal and whether to use an existing ticket cache or keytab. If however the LoginModule configuration does not provide means to establish all necessary credentials, it may then request and be passed the username and/or password values from the client Connection object if they were either supplied when creating the Connection using the ConnectionFactory or previously configured via its URI options.
+
+Note that Kerberos is only only supported for authentication purposes. Use SSL/TLS connections for encryption.
+
+The following URI options can be used to influence the Kerberos authentication process:
+
++ **sasl.options.configScope** The Login Configuration entry name to use when authenticating. Default is "amqp-jms-client".
++ **sasl.options.protocol** The protocol value used during the GSSAPI SASL process. Default is "amqp".
++ **sasl.options.serverName** The serverName value used during the GSSAPI SASL process. Default is the server hostname from the connection URI.
+
+Similar to the "amqp." and "transport." options detailed previously, these options must be specified on a per-host basis or as all-host nested options in a failover URI.
diff --git a/input/releases/qpid-jms-2.5.0/index.md b/input/releases/qpid-jms-2.5.0/index.md
new file mode 100644
index 0000000..50aeeb6
--- /dev/null
+++ b/input/releases/qpid-jms-2.5.0/index.md
@@ -0,0 +1,66 @@
+;;
+;; Licensed to the Apache Software Foundation (ASF) under one
+;; or more contributor license agreements.  See the NOTICE file
+;; distributed with this work for additional information
+;; regarding copyright ownership.  The ASF licenses this file
+;; to you under the Apache License, Version 2.0 (the
+;; "License"); you may not use this file except in compliance
+;; with the License.  You may obtain a copy of the License at
+;;
+;;   http://www.apache.org/licenses/LICENSE-2.0
+;;
+;; Unless required by applicable law or agreed to in writing,
+;; software distributed under the License is distributed on an
+;; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+;; KIND, either express or implied.  See the License for the
+;; specific language governing permissions and limitations
+;; under the License.
+;;
+
+# Qpid JMS 2.5.0
+
+Qpid JMS is a complete [Jakarta Messaging](https://jakarta.ee/specifications/messaging/) 3.1
+client built using the [Qpid Proton]({{site_url}}/proton/index.html) protocol engine.
+
+For a detailed list of the changes in this release, see the [release
+notes](release-notes.html).
+
+## Download
+
+It's important to [verify the
+integrity]({{site_url}}/download.html#verify-what-you-download) of the
+files you download.
+
+| Content | Download | Verify |
+|---------|----------|--------|
+| Qpid JMS binaries | [apache-qpid-jms-2.5.0-bin.tar.gz](https://archive.apache.org/dist/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-bin.tar.gz) | [ASC](https://archive.apache.org/dist/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-bin.tar.gz.asc), [SHA512](https://archive.apache.org/dist/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-bin.tar.gz.sha512) |
+| Qpid JMS source code | [apache-qpid-jms-2.5.0-src.tar.gz](https://archive.apache.org/dist/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-src.tar.gz) | [ASC](https://archive.apache.org/dist/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-src.tar.gz.asc), [SHA512](https://archive.apache.org/dist/qpid/jms/2.5.0/apache-qpid-jms-2.5.0-src.tar.gz.sha512) |
+
+The client is also available [via Maven]({{site_url}}/maven.html).
+
+## Documentation
+
+
+<div class="two-column" markdown="1">
+
+ - [API reference](https://jakarta.ee/specifications/messaging/3.1/apidocs/)
+ - [Examples](https://github.com/apache/qpid-jms/tree/2.5.0/qpid-jms-examples)
+ - [Configuration](docs/index.html)
+ - [Building Qpid JMS](building.html)
+
+</div>
+
+
+## More information
+
+ - [All release artefacts](https://archive.apache.org/dist/qpid/jms/2.5.0)
+ - [Resolved issues in JIRA](https://issues.apache.org/jira/issues/?jql=project+%3D+QPIDJMS+AND+fixVersion+%3D+%272.5.0%27+AND+resolution+%3D+%27fixed%27+ORDER+BY+priority+DESC)
+ - [Source repository tag](https://gitbox.apache.org/repos/asf/qpid-jms.git/tree/refs/tags/2.5.0)
+
+<script type="text/javascript">
+  _deferredFunctions.push(function() {
+      if ("2.5.0" === "{{current_jms_release}}" || "2.5.0" === "{{other_jms_release}}") {
+          _modifyCurrentReleaseLinks();
+      }
+  });
+</script>
\ No newline at end of file
diff --git a/input/releases/qpid-jms-2.5.0/release-notes.md b/input/releases/qpid-jms-2.5.0/release-notes.md
new file mode 100644
index 0000000..154f3c5
--- /dev/null
+++ b/input/releases/qpid-jms-2.5.0/release-notes.md
@@ -0,0 +1,33 @@
+;;
+;; Licensed to the Apache Software Foundation (ASF) under one
+;; or more contributor license agreements.  See the NOTICE file
+;; distributed with this work for additional information
+;; regarding copyright ownership.  The ASF licenses this file
+;; to you under the Apache License, Version 2.0 (the
+;; "License"); you may not use this file except in compliance
+;; with the License.  You may obtain a copy of the License at
+;; 
+;;   http://www.apache.org/licenses/LICENSE-2.0
+;; 
+;; Unless required by applicable law or agreed to in writing,
+;; software distributed under the License is distributed on an
+;; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+;; KIND, either express or implied.  See the License for the
+;; specific language governing permissions and limitations
+;; under the License.
+;;
+
+# Qpid JMS 2.5.0 Release Notes
+
+Qpid JMS is a complete [Jakarta Messaging](https://jakarta.ee/specifications/messaging/) 3.1
+client built using the [Qpid Proton]({{site_url}}/proton/index.html) protocol engine.
+
+For more information about this release, including download links and
+documentation, see the [release overview](index.html).
+
+
+## Tasks
+
+ - [QPIDJMS-593](https://issues.apache.org/jira/browse/QPIDJMS-593) - convert the tests to use JUnit 5
+ - [QPIDJMS-594](https://issues.apache.org/jira/browse/QPIDJMS-594) - Update to Netty 4.1.100
+ - [QPIDJMS-595](https://issues.apache.org/jira/browse/QPIDJMS-595) - update test dependencies
\ No newline at end of file
