diff --git a/content/components/jms/index.html b/content/components/jms/index.html
index 88afa4b..f87df67 100644
--- a/content/components/jms/index.html
+++ b/content/components/jms/index.html
@@ -147,9 +147,9 @@
 
 <ul>
 <li><a href="http://docs.oracle.com/javaee/7/api/javax/jms/package-summary.html">API reference</a></li>
-<li><a href="https://github.com/apache/qpid-jms/tree/0.37.0/qpid-jms-examples">Examples</a></li>
-<li><a href="/releases/qpid-jms-0.37.0/docs/index.html">Configuration</a></li>
-<li><a href="/releases/qpid-jms-0.37.0/building.html">Building Qpid JMS</a></li>
+<li><a href="https://github.com/apache/qpid-jms/tree/0.38.0/qpid-jms-examples">Examples</a></li>
+<li><a href="/releases/qpid-jms-0.38.0/docs/index.html">Configuration</a></li>
+<li><a href="/releases/qpid-jms-0.38.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-0.37.0">Qpid JMS 0.37.0</a></li>
+<li><a href="/releases/qpid-jms-0.38.0">Qpid JMS 0.38.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 594d4c3..43a4acd 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-0.37.0">0.37.0</a></td>
+  <td><a href="/releases/qpid-jms-0.38.0">0.38.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://builds.apache.org/blue/organizations/jenkins/Qpid-JMS-Test-JDK8/activity"><img src="https://builds.apache.org/buildStatus/icon?job=Qpid-JMS-Test-JDK8" height="20"/></a> <a href="https://travis-ci.org/apache/qpid-jms"><img src="https://travis-ci.org/apache/qpid-jms.svg?branch=master" height="20"/></a> <a href="https://builds.apache.org/blue/organizations/jenkins/Qpid-JMS-Test-JDK8-Windows/activity"><img src="https://builds.apache.org/buildStatus/icon?job=Qpid-JMS-Test-JDK8-Windows" height="20"/></a></td>
   <td><a href="https://git-wip-us.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 967c31e..851f52e 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-0.37.0/docs/index.html">Configuration</a></li>
+<li><a href="/releases/qpid-jms-0.38.0/docs/index.html">Configuration</a></li>
 <li><a href="http://docs.oracle.com/javaee/7/api/javax/jms/package-summary.html">API reference</a></li>
-<li><a href="https://github.com/apache/qpid-jms/tree/0.37.0/qpid-jms-examples">Examples</a></li>
+<li><a href="https://github.com/apache/qpid-jms/tree/0.38.0/qpid-jms-examples">Examples</a></li>
 </ul>
 
 </section>
diff --git a/content/download.html b/content/download.html
index 744f9e3..dd6ed90 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> (AMQP 1.0)</td>
-  <td>0.37.0</td>
-  <td><a href="http://www.apache.org/dyn/closer.lua/qpid/jms/0.37.0/apache-qpid-jms-0.37.0-src.tar.gz">Source</a> (<a href="https://www.apache.org/dist/qpid/jms/0.37.0/apache-qpid-jms-0.37.0-src.tar.gz.asc">ASC</a>, <a href="https://www.apache.org/dist/qpid/jms/0.37.0/apache-qpid-jms-0.37.0-src.tar.gz.sha512">SHA512</a>),  <a href="http://www.apache.org/dyn/closer.lua/qpid/jms/0.37.0/apache-qpid-jms-0.37.0-bin.tar.gz">Binary</a>  (<a href="https://www.apache.org/dist/qpid/jms/0.37.0/apache-qpid-jms-0.37.0-bin.tar.gz.asc">ASC</a>, <a href="https://www.apache.org/dist/qpid/jms/0.37.0/apache-qpid-jms-0.37.0-bin.tar.gz.sha512">SHA512</a>)</td>
-  <td><a href="/releases/qpid-jms-0.37.0/index.html">Release Page</a>, <a href="maven.html">Maven</a></td>
+  <td>0.38.0</td>
+  <td><a href="http://www.apache.org/dyn/closer.lua/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-src.tar.gz">Source</a> (<a href="https://www.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-src.tar.gz.asc">ASC</a>, <a href="https://www.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-src.tar.gz.sha512">SHA512</a>),  <a href="http://www.apache.org/dyn/closer.lua/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-bin.tar.gz">Binary</a>  (<a href="https://www.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-bin.tar.gz.asc">ASC</a>, <a href="https://www.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-bin.tar.gz.sha512">SHA512</a>)</td>
+  <td><a href="/releases/qpid-jms-0.38.0/index.html">Release Page</a>, <a href="maven.html">Maven</a></td>
 </tr>
 <tr>
   <td><a href="/components/jms/amqp-0-x.html">Qpid JMS AMQP 0-x</a></td>
diff --git a/content/maven.html b/content/maven.html
index 4d2682f..024e1f7 100644
--- a/content/maven.html
+++ b/content/maven.html
@@ -124,7 +124,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>0.37.0<span class="nt">&lt;/version&gt;</span>
+  <span class="nt">&lt;version&gt;</span>0.38.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 7e1c58f..b1448b1 100644
--- a/content/releases/index.html
+++ b/content/releases/index.html
@@ -126,11 +126,11 @@
 <div class="two-column">
 
 <ul>
+<li><a href="qpid-jms-0.38.0/index.html">Qpid JMS 0.38.0</a>, November 2018</li>
 <li><a href="qpid-proton-j-0.30.0/index.html">Qpid Proton-J 0.30.0</a>, November 2018</li>
 <li><a href="qpid-dispatch-1.4.1/index.html">Qpid Dispatch 1.4.1</a>, October 2018</li>
 <li><a href="qpid-cpp-1.39.0/index.html">Qpid C++ 1.39.0</a>, October 2018</li>
 <li><a href="qpid-proton-0.26.0/index.html">Qpid Proton 0.26.0</a>, October 2018</li>
-<li><a href="qpid-jms-0.37.0/index.html">Qpid JMS 0.37.0</a>, October 2018</li>
 <li><a href="qpid-java-6.1.7/index.html">Qpid for Java 6.1.7</a>, September 2018</li>
 <li><a href="qpid-jms-amqp-0-x-6.3.3/index.html">Qpid JMS AMQP 0-x 6.3.3</a>, August 2018</li>
 <li><a href="qpid-interop-test-0.2.0/index.html">Qpid Interop-test 0.2.0</a>, August 2018</li>
@@ -145,6 +145,7 @@
 <div class="two-column">
 
 <ul>
+<li><a href="qpid-jms-0.37.0/index.html">Qpid JMS 0.37.0</a>, October 2018</li>
 <li><a href="qpid-dispatch-1.4.0/index.html">Qpid Dispatch 1.4.0</a>, October 2018</li>
 <li><a href="qpid-cpp-1.38.0/index.html">Qpid C++ 1.38.0</a>, March 2018</li>
 <li><a href="qpid-proton-0.25.0/index.html">Qpid Proton 0.25.0</a>, September 2018</li>
diff --git a/content/releases/qpid-jms-0.10.0/index.html b/content/releases/qpid-jms-0.10.0/index.html
index bc702b6..809de4e 100644
--- a/content/releases/qpid-jms-0.10.0/index.html
+++ b/content/releases/qpid-jms-0.10.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.10.0" === "0.37.0") {
+      if ("0.10.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.11.0/index.html b/content/releases/qpid-jms-0.11.0/index.html
index 585fc55..f9e5cd7 100644
--- a/content/releases/qpid-jms-0.11.0/index.html
+++ b/content/releases/qpid-jms-0.11.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.11.0" === "0.37.0") {
+      if ("0.11.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.11.1/index.html b/content/releases/qpid-jms-0.11.1/index.html
index 7659058..791ce6f 100644
--- a/content/releases/qpid-jms-0.11.1/index.html
+++ b/content/releases/qpid-jms-0.11.1/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.11.1" === "0.37.0") {
+      if ("0.11.1" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.20.0/index.html b/content/releases/qpid-jms-0.20.0/index.html
index 839f15a..1bc4c6f 100644
--- a/content/releases/qpid-jms-0.20.0/index.html
+++ b/content/releases/qpid-jms-0.20.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.20.0" === "0.37.0") {
+      if ("0.20.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.21.0/index.html b/content/releases/qpid-jms-0.21.0/index.html
index 0e88c76..280fd77 100644
--- a/content/releases/qpid-jms-0.21.0/index.html
+++ b/content/releases/qpid-jms-0.21.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.21.0" === "0.37.0") {
+      if ("0.21.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.22.0/index.html b/content/releases/qpid-jms-0.22.0/index.html
index 0004a4f..763d0d8 100644
--- a/content/releases/qpid-jms-0.22.0/index.html
+++ b/content/releases/qpid-jms-0.22.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.22.0" === "0.37.0") {
+      if ("0.22.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.23.0/index.html b/content/releases/qpid-jms-0.23.0/index.html
index 00bc7e8..ae9f7da 100644
--- a/content/releases/qpid-jms-0.23.0/index.html
+++ b/content/releases/qpid-jms-0.23.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.23.0" === "0.37.0") {
+      if ("0.23.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.24.0/index.html b/content/releases/qpid-jms-0.24.0/index.html
index 51a9826..f13802c 100644
--- a/content/releases/qpid-jms-0.24.0/index.html
+++ b/content/releases/qpid-jms-0.24.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.24.0" === "0.37.0") {
+      if ("0.24.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.25.0/index.html b/content/releases/qpid-jms-0.25.0/index.html
index d61f106..c575c54 100644
--- a/content/releases/qpid-jms-0.25.0/index.html
+++ b/content/releases/qpid-jms-0.25.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.25.0" === "0.37.0") {
+      if ("0.25.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.26.0/index.html b/content/releases/qpid-jms-0.26.0/index.html
index 54f443f..86aec6e 100644
--- a/content/releases/qpid-jms-0.26.0/index.html
+++ b/content/releases/qpid-jms-0.26.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.26.0" === "0.37.0") {
+      if ("0.26.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.27.0/index.html b/content/releases/qpid-jms-0.27.0/index.html
index 24d4245..bbed0d0 100644
--- a/content/releases/qpid-jms-0.27.0/index.html
+++ b/content/releases/qpid-jms-0.27.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.27.0" === "0.37.0") {
+      if ("0.27.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.28.0/index.html b/content/releases/qpid-jms-0.28.0/index.html
index 353a3d4..bb30034 100644
--- a/content/releases/qpid-jms-0.28.0/index.html
+++ b/content/releases/qpid-jms-0.28.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.28.0" === "0.37.0") {
+      if ("0.28.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.29.0/index.html b/content/releases/qpid-jms-0.29.0/index.html
index 2e95b09..0c2abd1 100644
--- a/content/releases/qpid-jms-0.29.0/index.html
+++ b/content/releases/qpid-jms-0.29.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.29.0" === "0.37.0") {
+      if ("0.29.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.30.0/index.html b/content/releases/qpid-jms-0.30.0/index.html
index 05d6a44..2dd09b6 100644
--- a/content/releases/qpid-jms-0.30.0/index.html
+++ b/content/releases/qpid-jms-0.30.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.30.0" === "0.37.0") {
+      if ("0.30.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.31.0/index.html b/content/releases/qpid-jms-0.31.0/index.html
index f6896af..8c2f514 100644
--- a/content/releases/qpid-jms-0.31.0/index.html
+++ b/content/releases/qpid-jms-0.31.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.31.0" === "0.37.0") {
+      if ("0.31.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.32.0/index.html b/content/releases/qpid-jms-0.32.0/index.html
index 71ae28a..0f8b774 100644
--- a/content/releases/qpid-jms-0.32.0/index.html
+++ b/content/releases/qpid-jms-0.32.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.32.0" === "0.37.0") {
+      if ("0.32.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.33.0/index.html b/content/releases/qpid-jms-0.33.0/index.html
index b79f9f3..3c1235b 100644
--- a/content/releases/qpid-jms-0.33.0/index.html
+++ b/content/releases/qpid-jms-0.33.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.33.0" === "0.37.0") {
+      if ("0.33.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.34.0/index.html b/content/releases/qpid-jms-0.34.0/index.html
index a242215..6c3d383 100644
--- a/content/releases/qpid-jms-0.34.0/index.html
+++ b/content/releases/qpid-jms-0.34.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.34.0" === "0.37.0") {
+      if ("0.34.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.35.0/index.html b/content/releases/qpid-jms-0.35.0/index.html
index 4518056..955dd51 100644
--- a/content/releases/qpid-jms-0.35.0/index.html
+++ b/content/releases/qpid-jms-0.35.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.35.0" === "0.37.0") {
+      if ("0.35.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.36.0/index.html b/content/releases/qpid-jms-0.36.0/index.html
index 048955d..4cf3cbd 100644
--- a/content/releases/qpid-jms-0.36.0/index.html
+++ b/content/releases/qpid-jms-0.36.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.36.0" === "0.37.0") {
+      if ("0.36.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.37.0/index.html b/content/releases/qpid-jms-0.37.0/index.html
index 8b6d7c7..fca1aa1 100644
--- a/content/releases/qpid-jms-0.37.0/index.html
+++ b/content/releases/qpid-jms-0.37.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.37.0" === "0.37.0") {
+      if ("0.37.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.38.0/building.html b/content/releases/qpid-jms-0.38.0/building.html
new file mode 100644
index 0000000..e8b9a3c
--- /dev/null
+++ b/content/releases/qpid-jms-0.38.0/building.html
@@ -0,0 +1,192 @@
+<!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>QpidJMS - 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://git-wip-us.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-0.38.0/index.html">Qpid JMS 0.38.0</a></li><li>QpidJMS</li></ul>
+
+        <div id="-middle-content">
+          <h1 id="qpidjms">QpidJMS</h1>
+
+<p>The QpidJMS project provides a JMS based client that uses the AMQP v1.0 protocol.</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>There is some basic documentation in the qpid-jms-docs module.</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-0.38.0/docs/index.html b/content/releases/qpid-jms-0.38.0/docs/index.html
new file mode 100644
index 0000000..8e989d1
--- /dev/null
+++ b/content/releases/qpid-jms-0.38.0/docs/index.html
@@ -0,0 +1,533 @@
+<!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://git-wip-us.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-0.38.0/index.html">Qpid JMS 0.38.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.lookupName = URI</em></li>
+<li>To define a Queue, use format: <em>queue.lookupName = queueName</em></li>
+<li>To define a Topic use format: <em>topic.lookupName = topicName</em></li>
+</ul>
+
+<p>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 all asynchronous send conditions and always sends every Message from a MessageProducer synchronously.</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.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>
+</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 whitelist and a blacklist of Java class or package names.</p>
+
+<p><strong>jms.deserializationPolicy.whiteList</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 blackList. 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.blackList</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.</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="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-0.38.0/index.html b/content/releases/qpid-jms-0.38.0/index.html
new file mode 100644
index 0000000..27f9822
--- /dev/null
+++ b/content/releases/qpid-jms-0.38.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 0.38.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://git-wip-us.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 0.38.0</li></ul>
+
+        <div id="-middle-content">
+          <h1 id="qpid-jms-0380">Qpid JMS 0.38.0</h1>
+
+<p>Qpid JMS is a complete <a href="http://en.wikipedia.org/wiki/Java_Message_Service">Java Message Service</a> 2.0 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="http://archive.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-bin.tar.gz">apache-qpid-jms-0.38.0-bin.tar.gz</a></td>
+  <td><a href="https://archive.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-bin.tar.gz.asc">ASC</a>, <a href="https://archive.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-bin.tar.gz.sha512">SHA512</a></td>
+</tr>
+<tr>
+  <td>Qpid JMS source code</td>
+  <td><a href="http://archive.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-src.tar.gz">apache-qpid-jms-0.38.0-src.tar.gz</a></td>
+  <td><a href="https://archive.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-src.tar.gz.asc">ASC</a>, <a href="https://archive.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.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="http://docs.oracle.com/javaee/7/api/javax/jms/package-summary.html">API reference</a></li>
+<li><a href="https://github.com/apache/qpid-jms/tree/0.38.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="http://archive.apache.org/dist/qpid/jms/0.38.0">All release artefacts</a></li>
+<li><a href="https://issues.apache.org/jira/issues/?jql=project+%3D+QPIDJMS+AND+fixVersion+%3D+%270.38.0%27+AND+resolution+%3D+%27fixed%27+ORDER+BY+priority+DESC">Resolved issues in JIRA</a></li>
+<li><a href="https://git-wip-us.apache.org/repos/asf/qpid-jms.git/tree/refs/tags/0.38.0">Source repository tag</a></li>
+</ul>
+
+<script type="text/javascript">
+  _deferredFunctions.push(function() {
+      if ("0.38.0" === "0.38.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-0.38.0/release-notes.html b/content/releases/qpid-jms-0.38.0/release-notes.html
new file mode 100644
index 0000000..12d496e
--- /dev/null
+++ b/content/releases/qpid-jms-0.38.0/release-notes.html
@@ -0,0 +1,177 @@
+<!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 0.38.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://git-wip-us.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-0.38.0/index.html">Qpid JMS 0.38.0</a></li><li>Qpid JMS 0.38.0 Release Notes</li></ul>
+
+        <div id="-middle-content">
+          <h1 id="qpid-jms-0380-release-notes">Qpid JMS 0.38.0 Release Notes</h1>
+
+<p>Qpid JMS is a complete <a href="http://en.wikipedia.org/wiki/Java_Message_Service">Java Message Service</a> 2.0 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="new-features-and-improvements">New features and improvements</h2>
+
+<ul>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-416">QPIDJMS-416</a> - Move protocol processing work into the netty event loop thread</li>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-418">QPIDJMS-418</a> - Clean up the usage of Symbol type and conversion to Symbol from String</li>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-420">QPIDJMS-420</a> - Improve performance of MessageConsumer processing</li>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-421">QPIDJMS-421</a> - Improve performance of MessageProducer by caching common annotation encodings</li>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-423">QPIDJMS-423</a> - Log only connection URI in the connection initialized event handler</li>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-429">QPIDJMS-429</a> - Refactor sender and receive code to use newer proton-j APIs </li>
+</ul>
+
+<h2 id="bugs-fixed">Bugs fixed</h2>
+
+<ul>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-419">QPIDJMS-419</a> - JMS Session is sometimes not recovered on failover reconnect</li>
+</ul>
+
+<h2 id="tasks">Tasks</h2>
+
+<ul>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-415">QPIDJMS-415</a> - update test dependencies</li>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-424">QPIDJMS-424</a> - Update to Netty 4.1.31 (and netty-tcnative 2.0.19 test dep)</li>
+<li><a href="https://issues.apache.org/jira/browse/QPIDJMS-427">QPIDJMS-427</a> - update to proton-j 0.30.0</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/content/releases/qpid-jms-0.8.0/index.html b/content/releases/qpid-jms-0.8.0/index.html
index d27e8c8..03a0a9e 100644
--- a/content/releases/qpid-jms-0.8.0/index.html
+++ b/content/releases/qpid-jms-0.8.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.8.0" === "0.37.0") {
+      if ("0.8.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-0.9.0/index.html b/content/releases/qpid-jms-0.9.0/index.html
index 2226b56..f5dec4e 100644
--- a/content/releases/qpid-jms-0.9.0/index.html
+++ b/content/releases/qpid-jms-0.9.0/index.html
@@ -175,7 +175,7 @@
 
 <script type="text/javascript">
   _deferredFunctions.push(function() {
-      if ("0.9.0" === "0.37.0") {
+      if ("0.9.0" === "0.38.0") {
           _modifyCurrentReleaseLinks();
       }
   });
diff --git a/content/releases/qpid-jms-master/index.html b/content/releases/qpid-jms-master/index.html
index 5885b2f..e6d9c30 100644
--- a/content/releases/qpid-jms-master/index.html
+++ b/content/releases/qpid-jms-master/index.html
@@ -121,7 +121,7 @@
 <h2 id="warning-this-is-a-snapshot-of-work-in-progress">Warning! This is a snapshot of work in progress</h2>
 
 <p>Documentation found here may be incorrect or incomplete.  For a
-smoother experience, see the <a href="/releases/qpid-jms-0.37.0/index.html">current stable
+smoother experience, see the <a href="/releases/qpid-jms-0.38.0/index.html">current stable
 release</a>.</p>
 
 <p>This content was generated at 15:07  on Friday, 22 September 2017.</p>
diff --git a/input/_transom_config.py b/input/_transom_config.py
index 7ed23d5..8faad16 100644
--- a/input/_transom_config.py
+++ b/input/_transom_config.py
@@ -27,7 +27,7 @@
 dispatch_release = _Release(site_url, "Qpid Dispatch", "qpid-dispatch", "1.4.1")
 interop_test_release = _Release(site_url, "Qpid Interop Test", "qpid-interop-test", "0.2.0")
 java_release = _Release(site_url, "Qpid for Java", "qpid-java", "6.1.7")
-jms_release = _Release(site_url, "Qpid JMS", "qpid-jms", "0.37.0")
+jms_release = _Release(site_url, "Qpid JMS", "qpid-jms", "0.38.0")
 jms_amqp_0_x_release = _Release(site_url, "Qpid JMS for AMQP 0-x", "qpid-jms-amqp-0-x", "6.3.3")
 proton_release = _Release(site_url, "Qpid Proton", "qpid-proton", "0.26.0")
 proton_j_release = _Release(site_url, "Qpid Proton-J", "qpid-proton-j", "0.30.0")
diff --git a/input/releases/index.md b/input/releases/index.md
index e74dd3f..59a138a 100644
--- a/input/releases/index.md
+++ b/input/releases/index.md
@@ -27,11 +27,11 @@
 ## Current releases
 
 <div class="two-column" markdown="1">
+ - [Qpid JMS 0.38.0](qpid-jms-0.38.0/index.html), November 2018
  - [Qpid Proton-J 0.30.0](qpid-proton-j-0.30.0/index.html), November 2018
  - [Qpid Dispatch 1.4.1](qpid-dispatch-1.4.1/index.html), October 2018
  - [Qpid C++ 1.39.0](qpid-cpp-1.39.0/index.html), October 2018
  - [Qpid Proton 0.26.0](qpid-proton-0.26.0/index.html), October 2018
- - [Qpid JMS 0.37.0](qpid-jms-0.37.0/index.html), October 2018
  - [Qpid for Java 6.1.7](qpid-java-6.1.7/index.html), September 2018
  - [Qpid JMS AMQP 0-x 6.3.3](qpid-jms-amqp-0-x-6.3.3/index.html), August 2018
  - [Qpid Interop-test 0.2.0](qpid-interop-test-0.2.0/index.html), August 2018
@@ -43,6 +43,7 @@
 ## Past releases
 
 <div class="two-column" markdown="1">
+ - [Qpid JMS 0.37.0](qpid-jms-0.37.0/index.html), October 2018
  - [Qpid Dispatch 1.4.0](qpid-dispatch-1.4.0/index.html), October 2018
  - [Qpid C++ 1.38.0](qpid-cpp-1.38.0/index.html), March 2018
  - [Qpid Proton 0.25.0](qpid-proton-0.25.0/index.html), September 2018
diff --git a/input/releases/qpid-jms-0.38.0/building.md b/input/releases/qpid-jms-0.38.0/building.md
new file mode 100644
index 0000000..2077ec7
--- /dev/null
+++ b/input/releases/qpid-jms-0.38.0/building.md
@@ -0,0 +1,44 @@
+# QpidJMS
+
+The QpidJMS project provides a JMS based client that uses the AMQP v1.0 protocol.
+
+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
+
+There is some basic documentation in the qpid-jms-docs module.
+
+## 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-0.38.0/docs/index.md b/input/releases/qpid-jms-0.38.0/docs/index.md
new file mode 100644
index 0000000..ee51c44
--- /dev/null
+++ b/input/releases/qpid-jms-0.38.0/docs/index.md
@@ -0,0 +1,340 @@
+# 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.lookupName = URI*
++   To define a Queue, use format: *queue.lookupName = queueName*
++   To define a Topic use format: *topic.lookupName = topicName*
+
+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 all asynchronous send conditions and always sends every Message from a MessageProducer synchronously.
++ **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.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.
+
+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 whitelist and a blacklist of Java class or package names.
+
+**jms.deserializationPolicy.whiteList** A comma separated list of class/package names that should be allowed when deserializing the contents of a JMS ObjectMessage, unless overridden by the blackList. 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.blackList** 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.
+
+### 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.
+
+## 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-0.38.0/index.md b/input/releases/qpid-jms-0.38.0/index.md
new file mode 100644
index 0000000..cf19e8f
--- /dev/null
+++ b/input/releases/qpid-jms-0.38.0/index.md
@@ -0,0 +1,68 @@
+;;
+;; 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 0.38.0
+
+Qpid JMS is a complete [Java Message Service][jms] 2.0 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).
+
+[jms]: http://en.wikipedia.org/wiki/Java_Message_Service
+
+## 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-0.38.0-bin.tar.gz](http://archive.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-bin.tar.gz) | [ASC](https://archive.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-bin.tar.gz.asc), [SHA512](https://archive.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-bin.tar.gz.sha512) |
+| Qpid JMS source code | [apache-qpid-jms-0.38.0-src.tar.gz](http://archive.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-src.tar.gz) | [ASC](https://archive.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.0-src.tar.gz.asc), [SHA512](https://archive.apache.org/dist/qpid/jms/0.38.0/apache-qpid-jms-0.38.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](http://docs.oracle.com/javaee/7/api/javax/jms/package-summary.html)
+ - [Examples](https://github.com/apache/qpid-jms/tree/0.38.0/qpid-jms-examples)
+ - [Configuration](docs/index.html)
+ - [Building Qpid JMS](building.html)
+
+</div>
+
+
+## More information
+
+ - [All release artefacts](http://archive.apache.org/dist/qpid/jms/0.38.0)
+ - [Resolved issues in JIRA](https://issues.apache.org/jira/issues/?jql=project+%3D+QPIDJMS+AND+fixVersion+%3D+%270.38.0%27+AND+resolution+%3D+%27fixed%27+ORDER+BY+priority+DESC)
+ - [Source repository tag](https://git-wip-us.apache.org/repos/asf/qpid-jms.git/tree/refs/tags/0.38.0)
+
+<script type="text/javascript">
+  _deferredFunctions.push(function() {
+      if ("0.38.0" === "{{current_jms_release}}") {
+          _modifyCurrentReleaseLinks();
+      }
+  });
+</script>
\ No newline at end of file
diff --git a/input/releases/qpid-jms-0.38.0/release-notes.md b/input/releases/qpid-jms-0.38.0/release-notes.md
new file mode 100644
index 0000000..222975b
--- /dev/null
+++ b/input/releases/qpid-jms-0.38.0/release-notes.md
@@ -0,0 +1,49 @@
+;;
+;; 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 0.38.0 Release Notes
+
+Qpid JMS is a complete [Java Message Service][jms] 2.0 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).
+
+[jms]: http://en.wikipedia.org/wiki/Java_Message_Service
+
+
+## New features and improvements
+
+ - [QPIDJMS-416](https://issues.apache.org/jira/browse/QPIDJMS-416) - Move protocol processing work into the netty event loop thread
+ - [QPIDJMS-418](https://issues.apache.org/jira/browse/QPIDJMS-418) - Clean up the usage of Symbol type and conversion to Symbol from String
+ - [QPIDJMS-420](https://issues.apache.org/jira/browse/QPIDJMS-420) - Improve performance of MessageConsumer processing
+ - [QPIDJMS-421](https://issues.apache.org/jira/browse/QPIDJMS-421) - Improve performance of MessageProducer by caching common annotation encodings
+ - [QPIDJMS-423](https://issues.apache.org/jira/browse/QPIDJMS-423) - Log only connection URI in the connection initialized event handler
+ - [QPIDJMS-429](https://issues.apache.org/jira/browse/QPIDJMS-429) - Refactor sender and receive code to use newer proton-j APIs 
+
+## Bugs fixed
+
+ - [QPIDJMS-419](https://issues.apache.org/jira/browse/QPIDJMS-419) - JMS Session is sometimes not recovered on failover reconnect
+
+## Tasks
+
+ - [QPIDJMS-415](https://issues.apache.org/jira/browse/QPIDJMS-415) - update test dependencies
+ - [QPIDJMS-424](https://issues.apache.org/jira/browse/QPIDJMS-424) - Update to Netty 4.1.31 (and netty-tcnative 2.0.19 test dep)
+ - [QPIDJMS-427](https://issues.apache.org/jira/browse/QPIDJMS-427) - update to proton-j 0.30.0
\ No newline at end of file
