diff --git a/VERSION.txt b/VERSION.txt
index 4da151f..64c6a8e 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1,5 +1,18 @@
-jetty-9.0.2-SNAPSHOT
+jetty-9.0.3-SNAPSHOT
 
+jetty-9.0.2.v20130417 - 17 April 2013
+ + 364921 FIN WAIT sockets
+ + 402885 reuse Deflaters in GzipFilter
+ + 403591 do not use the ConcurrentArrayBlockingQueue for thread pool, selector
+   and async request log
+ + 404511 fixed poor methods in ArrayTernaryTrie
+ + 405119 Tidy up comments and code formatting for osgi
+ + 405352 Servlet init-param always overridden by WebServlet annotation
+ + 405364 spdy imeplement MAX_CONCURRENT_STREAMS
+ + 405449 spdy improve handling of duplicate stream Ids
+ + 405540 ServletContextListeners call in reverse in doStop
+ + 405551 InputStreamResponseListener.await returns null when request fails.
+ + 405679 example other server for documentation
 
 jetty-9.0.1.v20130408 - 08 April 2013
  + 384552 add comment to jetty-https.xml describing keymanager password
diff --git a/aggregates/jetty-all/pom.xml b/aggregates/jetty-all/pom.xml
index 6ad817d..104e6c4 100644
--- a/aggregates/jetty-all/pom.xml
+++ b/aggregates/jetty-all/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/examples/async-rest/async-rest-jar/pom.xml b/examples/async-rest/async-rest-jar/pom.xml
index 6defdb5..7353987 100644
--- a/examples/async-rest/async-rest-jar/pom.xml
+++ b/examples/async-rest/async-rest-jar/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>example-async-rest</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>  
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.eclipse.jetty.example-async-rest</groupId>
diff --git a/examples/async-rest/async-rest-webapp/pom.xml b/examples/async-rest/async-rest-webapp/pom.xml
index 0cb4940..df2b793 100644
--- a/examples/async-rest/async-rest-webapp/pom.xml
+++ b/examples/async-rest/async-rest-webapp/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>example-async-rest</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>  
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.eclipse.jetty.example-async-rest</groupId>
diff --git a/examples/async-rest/pom.xml b/examples/async-rest/pom.xml
index 082de5c..640f748 100644
--- a/examples/async-rest/pom.xml
+++ b/examples/async-rest/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty.examples</groupId>
     <artifactId>examples-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>  
   <modelVersion>4.0.0</modelVersion>
diff --git a/examples/embedded/pom.xml b/examples/embedded/pom.xml
index 498e11d..0b32a4c 100644
--- a/examples/embedded/pom.xml
+++ b/examples/embedded/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty.examples</groupId>
     <artifactId>examples-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java
index c8b5f94..92f5ddb 100644
--- a/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java
+++ b/examples/embedded/src/main/java/org/eclipse/jetty/embedded/ManyConnectors.java
@@ -67,6 +67,7 @@
             new SslConnectionFactory(sslContextFactory,"http/1.1"),
             new HttpConnectionFactory(https_config));
         https.setPort(8443);
+        https.setIdleTimeout(500000);
 
         // Set the connectors
         server.setConnectors(new Connector[] { http, https });
diff --git a/examples/embedded/src/main/resources/jetty-logging.properties b/examples/embedded/src/main/resources/jetty-logging.properties
index f912160..73456ad 100644
--- a/examples/embedded/src/main/resources/jetty-logging.properties
+++ b/examples/embedded/src/main/resources/jetty-logging.properties
@@ -5,5 +5,6 @@
 #org.eclipse.jetty.STACKS=false
 #org.eclipse.jetty.spdy.LEVEL=DEBUG
 #org.eclipse.jetty.server.LEVEL=DEBUG
-#org.eclipse.jetty.io.ssl.LEVEL=DEBUG
+org.eclipse.jetty.io.LEVEL=DEBUG
+org.eclipse.jetty.io.ssl.LEVEL=DEBUG
 #org.eclipse.jetty.spdy.server.LEVEL=DEBUG
diff --git a/examples/embedded/src/main/resources/jetty-otherserver.xml b/examples/embedded/src/main/resources/jetty-otherserver.xml
new file mode 100644
index 0000000..04e3358
--- /dev/null
+++ b/examples/embedded/src/main/resources/jetty-otherserver.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
+
+<Configure id="OtherServer" class="org.eclipse.jetty.server.Server">
+    <Set name="handler">
+      <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
+        <Set name="handlers">
+         <Array type="org.eclipse.jetty.server.Handler">
+           <Item>
+             <New id="OtherContexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
+           </Item>
+           <Item>
+             <New class="org.eclipse.jetty.server.handler.DefaultHandler"/>
+           </Item>
+         </Array>
+        </Set>
+      </New>
+    </Set>
+
+  <Call name="addConnector">
+    <Arg>
+      <New class="org.eclipse.jetty.server.ServerConnector">
+        <Arg name="server"><Ref refid="OtherServer" /></Arg>
+        <Set name="port">8888</Set>
+      </New>
+    </Arg>
+  </Call>
+
+  <Call name="addBean">
+    <Arg>
+      <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
+        <Set name="contexts">
+          <Ref refid="OtherContexts" />
+        </Set>
+
+        <Call id="webappprovider" name="addAppProvider">
+          <Arg>
+            <New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
+              <Set name="monitoredDirName"><Property name="jetty.home" default="." />/other-webapps</Set>
+              <Set name="defaultsDescriptor"><Property name="jetty.home" default="." />/etc/webdefault.xml</Set>
+              <Set name="configurationManager">
+                <New class="org.eclipse.jetty.deploy.PropertiesConfigurationManager"/>
+              </Set>
+            </New>
+          </Arg>
+        </Call>
+      </New>
+    </Arg>
+  </Call>
+</Configure>
diff --git a/examples/pom.xml b/examples/pom.xml
index a5d95ba..bd2e62b 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <groupId>org.eclipse.jetty.examples</groupId>
diff --git a/jetty-annotations/pom.xml b/jetty-annotations/pom.xml
index 32bb8c6..8661a35 100644
--- a/jetty-annotations/pom.xml
+++ b/jetty-annotations/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-annotations</artifactId>
diff --git a/jetty-ant/pom.xml b/jetty-ant/pom.xml
index 80f05c5..cb26c36 100755
--- a/jetty-ant/pom.xml
+++ b/jetty-ant/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-ant</artifactId>
diff --git a/jetty-client/pom.xml b/jetty-client/pom.xml
index c1236c3..331f400 100644
--- a/jetty-client/pom.xml
+++ b/jetty-client/pom.xml
@@ -2,7 +2,7 @@
     <parent>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-project</artifactId>
-        <version>9.0.2-SNAPSHOT</version>
+        <version>9.0.3-SNAPSHOT</version>
     </parent>
 
     <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/util/InputStreamResponseListener.java b/jetty-client/src/main/java/org/eclipse/jetty/client/util/InputStreamResponseListener.java
index 644326a..6ac55e6 100644
--- a/jetty-client/src/main/java/org/eclipse/jetty/client/util/InputStreamResponseListener.java
+++ b/jetty-client/src/main/java/org/eclipse/jetty/client/util/InputStreamResponseListener.java
@@ -130,28 +130,23 @@
     }
 
     @Override
-    public void onFailure(Response response, Throwable failure)
-    {
-        LOG.debug("Queuing failure {} {}", FAILURE, failure);
-        queue.offer(FAILURE);
-        responseLatch.countDown();
-        resultLatch.countDown();
-        this.failure = failure;
-        signal();
-    }
-
-    @Override
-    public void onSuccess(Response response)
-    {
-        LOG.debug("Queuing end of content {}{}", EOF, "");
-        queue.offer(EOF);
-    }
-
-    @Override
     public void onComplete(Result result)
     {
         this.result = result;
+        if (result.isSucceeded())
+        {
+            LOG.debug("Queuing end of content {}{}", EOF, "");
+            queue.offer(EOF);
+        }
+        else
+        {
+            LOG.debug("Queuing failure {} {}", FAILURE, failure);
+            queue.offer(FAILURE);
+            this.failure = result.getFailure();
+            responseLatch.countDown();
+        }
         resultLatch.countDown();
+        signal();
     }
 
     protected boolean await()
@@ -176,7 +171,7 @@
     {
         synchronized (this)
         {
-            notify();
+            notifyAll();
         }
     }
 
diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientStreamTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientStreamTest.java
index 218f0e0..5a800af 100644
--- a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientStreamTest.java
+++ b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientStreamTest.java
@@ -445,6 +445,20 @@
         Assert.assertNull(failure.get());
     }
 
+    @Test
+    public void testInputStreamResponseListenerFailedBeforeResponse() throws Exception
+    {
+        start(new EmptyServerHandler());
+
+        InputStreamResponseListener listener = new InputStreamResponseListener();
+        // Connect to the wrong port
+        client.newRequest("localhost", 0)
+                .scheme(scheme)
+                .send(listener);
+        Result result = listener.await(5, TimeUnit.SECONDS);
+        Assert.assertNotNull(result);
+    }
+
     @Test(expected = ExecutionException.class)
     public void testInputStreamContentProviderThrowingWhileReading() throws Exception
     {
diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesClientTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesClientTest.java
index 67c9931..c7a685c 100644
--- a/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesClientTest.java
+++ b/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesClientTest.java
@@ -357,12 +357,7 @@
         proxy.flushToClient(record);
 
         record = proxy.readFromClient();
-        Assert.assertEquals(TLSRecord.Type.ALERT, record.getType());
-        proxy.flushToServer(record);
-
-        record = proxy.readFromClient();
         Assert.assertNull(record);
-        proxy.flushToServer(record);
 
         server.close();
     }
diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesServerTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesServerTest.java
index 1faca02..e0130dd 100644
--- a/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesServerTest.java
+++ b/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesServerTest.java
@@ -72,7 +72,6 @@
 import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 
 public class SslBytesServerTest extends SslBytesTest
@@ -87,6 +86,7 @@
     private SslContextFactory sslContextFactory;
     private SSLContext sslContext;
     private SimpleProxy proxy;
+    private Runnable idleHook;
 
     @Before
     public void init() throws Exception
@@ -119,6 +119,15 @@
                             }
                         };
                     }
+
+                    @Override
+                    protected boolean onReadTimeout()
+                    {
+                        final Runnable idleHook = SslBytesServerTest.this.idleHook;
+                        if (idleHook != null)
+                            idleHook.run();
+                        return super.onReadTimeout();
+                    }
                 }, connector, endPoint);
             }
         };
@@ -165,7 +174,6 @@
             }
         };
         connector.setIdleTimeout(idleTimeout);
-//        connector.setPort(5870);
         connector.setPort(0);
 
         server.addConnector(connector);
@@ -209,7 +217,7 @@
 
         proxy = new SimpleProxy(threadPool, "localhost", serverPort);
         proxy.start();
-        logger.debug(":{} <==> :{}", proxy.getPort(), serverPort);
+        logger.info("proxy:{} <==> server:{}", proxy.getPort(), serverPort);
     }
 
     @After
@@ -377,13 +385,9 @@
         Assert.assertNull(String.valueOf(record), record);
         proxy.flushToServer(record);
 
-        // Close Alert
-        record = proxy.readFromServer();
-        proxy.flushToClient(record);
         // Socket close
         record = proxy.readFromServer();
         Assert.assertNull(String.valueOf(record), record);
-        proxy.flushToClient(record);
     }
 
     @Test
@@ -669,13 +673,9 @@
         Assert.assertNull(String.valueOf(record), record);
         proxy.flushToServer(record);
 
-        // Close Alert
-        record = proxy.readFromServer();
-        proxy.flushToClient(record);
         // Socket close
         record = proxy.readFromServer();
         Assert.assertNull(String.valueOf(record), record);
-        proxy.flushToClient(record);
     }
 
     @Test
@@ -728,22 +728,15 @@
         Assert.assertEquals(TLSRecord.Type.APPLICATION, record.getType());
         proxy.flushToClient(record);
 
-        // Close Alert
+        // Socket close
         record = proxy.readFromServer();
-        Assert.assertNotNull(record);
-        Assert.assertEquals(TLSRecord.Type.ALERT, record.getType());
-        // We can't forward to the client, its socket is already closed
+        Assert.assertNull(record);
 
         // Check that we did not spin
         TimeUnit.MILLISECONDS.sleep(500);
         Assert.assertThat(sslFills.get(), Matchers.lessThan(20));
         Assert.assertThat(sslFlushes.get(), Matchers.lessThan(20));
         Assert.assertThat(httpParses.get(), Matchers.lessThan(20));
-
-        // Socket close
-        record = proxy.readFromServer();
-        Assert.assertNull(String.valueOf(record), record);
-        proxy.flushToClient(record);
     }
 
     @Test
@@ -803,11 +796,9 @@
         Assert.assertEquals(TLSRecord.Type.APPLICATION, record.getType());
         proxy.flushToClient(record);
 
-        // Close Alert
+        // Socket close
         record = proxy.readFromServer();
-        Assert.assertNotNull(record);
-        Assert.assertEquals(TLSRecord.Type.ALERT, record.getType());
-        // We can't forward to the client, its socket is already closed
+        Assert.assertNull(String.valueOf(record), record);
 
         // Check that we did not spin
         TimeUnit.MILLISECONDS.sleep(500);
@@ -819,11 +810,6 @@
         record = proxy.readFromClient();
         Assert.assertNull(String.valueOf(record), record);
         proxy.flushToServer(record);
-
-        // Socket close
-        record = proxy.readFromServer();
-        Assert.assertNull(String.valueOf(record), record);
-        proxy.flushToClient(record);
     }
 
     @Test
@@ -864,12 +850,9 @@
         // Close the raw socket, this generates a truncation attack
         proxy.flushToServer(null);
 
-        // Expect alert + raw close from server
-        record = proxy.readFromServer();
-        Assert.assertEquals(TLSRecord.Type.ALERT, record.getType());
+        // Expect raw close from server
         record = proxy.readFromServer();
         Assert.assertNull(String.valueOf(record), record);
-        proxy.flushToClient(record);
 
         // Check that we did not spin
         TimeUnit.MILLISECONDS.sleep(500);
@@ -917,12 +900,9 @@
         Assert.assertEquals(TLSRecord.Type.APPLICATION, record.getType());
         proxy.flushToClient(record);
 
-        // Expect alert + raw close from server
-        record = proxy.readFromServer();
-        Assert.assertEquals(TLSRecord.Type.ALERT, record.getType());
+        // Expect raw close from server
         record = proxy.readFromServer();
         Assert.assertNull(String.valueOf(record), record);
-        proxy.flushToClient(record);
 
         // Check that we did not spin
         TimeUnit.MILLISECONDS.sleep(500);
@@ -1099,6 +1079,7 @@
         System.arraycopy(closeBytes, 0, bytes, dataBytes.length, closeBytes.length / 2);
         proxy.flushToServer(100, bytes);
 
+        // Send the other half of the close alert bytes
         bytes = new byte[closeBytes.length - closeBytes.length / 2];
         System.arraycopy(closeBytes, closeBytes.length / 2, bytes, 0, bytes.length);
         proxy.flushToServer(100, bytes);
@@ -1113,27 +1094,15 @@
         Assert.assertEquals(TLSRecord.Type.APPLICATION, record.getType());
         proxy.flushToClient(record);
 
-        // Close Alert
+        // Socket close
         record = proxy.readFromServer();
-        Assert.assertNotNull(record);
-        Assert.assertEquals(TLSRecord.Type.ALERT, record.getType());
-        // We can't forward to the client, its socket is already closed
+        Assert.assertNull(record);
 
         // Check that we did not spin
         TimeUnit.MILLISECONDS.sleep(500);
         Assert.assertThat(sslFills.get(), Matchers.lessThan(20));
         Assert.assertThat(sslFlushes.get(), Matchers.lessThan(20));
         Assert.assertThat(httpParses.get(), Matchers.lessThan(20));
-
-        // Socket close
-        record = proxy.readFromClient();
-        Assert.assertNull(String.valueOf(record), record);
-        proxy.flushToServer(record);
-
-        // Socket close
-        record = proxy.readFromServer();
-        Assert.assertNull(String.valueOf(record), record);
-        proxy.flushToClient(record);
     }
 
     @Test
@@ -1749,13 +1718,37 @@
         client.close();
     }
 
-    @Ignore
     @Test
     public void testRequestConcurrentWithIdleExpiration() throws Exception
     {
         final SSLSocket client = newClient();
+        final OutputStream clientOutput = client.getOutputStream();
         final CountDownLatch latch = new CountDownLatch(1);
 
+        idleHook = new Runnable()
+        {
+            public void run()
+            {
+                if (latch.getCount()==0)
+                    return;
+                try
+                {
+                    // Send request
+                    clientOutput.write(("" +
+                            "GET / HTTP/1.1\r\n" +
+                            "Host: localhost\r\n" +
+                            "\r\n").getBytes("UTF-8"));
+                    clientOutput.flush();
+                    latch.countDown();
+                }
+                catch (Exception x)
+                {
+                    // Latch won't trigger and test will fail
+                    x.printStackTrace();
+                }
+            }
+        };
+
         SimpleProxy.AutomaticFlow automaticProxyFlow = proxy.startAutomaticFlow();
         client.startHandshake();
         Assert.assertTrue(automaticProxyFlow.stop(5, TimeUnit.SECONDS));
@@ -1779,86 +1772,13 @@
         Assert.assertThat(sslFlushes.get(), Matchers.lessThan(20));
         Assert.assertThat(httpParses.get(), Matchers.lessThan(50));
 
-        completeClose(client);
+        record = proxy.readFromServer();
+        Assert.assertNull(record);
 
         TimeUnit.MILLISECONDS.sleep(200);
-        //System.err.println(((Dumpable)server.getConnectors()[0]).dump());
         Assert.assertThat(((Dumpable)server.getConnectors()[0]).dump(), Matchers.not(Matchers.containsString("SCEP@")));
-
     }
 
-    /*
-        @Test
-        public void testRequestWriteBlockedWithPipelinedRequest() throws Exception
-        {
-            final SSLSocket client = newClient();
-            final OutputStream clientOutput = client.getOutputStream();
-
-            SimpleProxy.AutomaticFlow automaticProxyFlow = proxy.startAutomaticFlow();
-            client.startHandshake();
-            Assert.assertTrue(automaticProxyFlow.stop(5, TimeUnit.SECONDS));
-
-            byte[] data = new byte[128 * 1024];
-            Arrays.fill(data, (byte)'X');
-            final String content = new String(data, "UTF-8");
-            Future<Object> request = threadPool.submit(new Callable<Object>()
-            {
-                public Object call() throws Exception
-                {
-                    clientOutput.write(("" +
-                            "POST /echo HTTP/1.1\r\n" +
-                            "Host: localhost\r\n" +
-                            "Content-Length: " + content.length() + "\r\n" +
-                            "\r\n" +
-                            content).getBytes("UTF-8"));
-                    clientOutput.flush();
-                    return null;
-                }
-            });
-
-            // Nine TLSRecords will be generated for the request
-            for (int i = 0; i < 9; ++i)
-            {
-                // Application data
-                TLSRecord record = proxy.readFromClient();
-                Assert.assertEquals(TLSRecord.Type.APPLICATION, record.getType());
-                proxy.flushToServer(record, 0);
-            }
-            Assert.assertNull(request.get(5, TimeUnit.SECONDS));
-
-            // We do not read the big request to cause a write blocked on the server
-            TimeUnit.MILLISECONDS.sleep(500);
-
-            // Now send the pipelined request
-            Future<Object> pipelined = threadPool.submit(new Callable<Object>()
-            {
-                public Object call() throws Exception
-                {
-                    clientOutput.write(("" +
-                            "GET /pipelined HTTP/1.1\r\n" +
-                            "Host: localhost\r\n" +
-                            "\r\n").getBytes("UTF-8"));
-                    clientOutput.flush();
-                    return null;
-                }
-            });
-
-            TLSRecord record = proxy.readFromClient();
-            Assert.assertEquals(TLSRecord.Type.APPLICATION, record.getType());
-            proxy.flushToServer(record, 0);
-            Assert.assertNull(pipelined.get(5, TimeUnit.SECONDS));
-
-            // Check that we did not spin
-            TimeUnit.MILLISECONDS.sleep(500);
-            Assert.assertThat(sslFills.get(), lessThan(20));
-            Assert.assertThat(sslFlushes.get(), lessThan(20));
-            Assert.assertThat(httpParses.get(), lessThan(50));
-
-            Thread.sleep(5000);
-
-    //        closeClient(client);
-        }
-    */
     private void assumeJavaVersionSupportsTLSRenegotiations()
     {
         // Due to a security bug, TLS renegotiations were disabled in JDK 1.6.0_19-21
@@ -1893,31 +1813,8 @@
         Assert.assertNull(String.valueOf(record), record);
         proxy.flushToServer(record);
 
-        // Close Alert
-        record = proxy.readFromServer();
-        proxy.flushToClient(record);
-
         // Socket close
         record = proxy.readFromServer();
         Assert.assertNull(String.valueOf(record), record);
-        proxy.flushToClient(record);
-    }
-
-    private void completeClose(SSLSocket client) throws Exception
-    {
-        client.close();
-
-        // Close Alert
-        TLSRecord record = proxy.readFromClient();
-        proxy.flushToServer(record);
-        // Socket close
-        record = proxy.readFromClient();
-        Assert.assertNull(String.valueOf(record), record);
-        proxy.flushToServer(record);
-
-        // Close Alert
-        record = proxy.readFromServer();
-        proxy.flushToClient(record);
-
     }
 }
diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesTest.java
index c7fe744..b0f5769 100644
--- a/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesTest.java
+++ b/jetty-client/src/test/java/org/eclipse/jetty/client/ssl/SslBytesTest.java
@@ -34,12 +34,17 @@
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
+import org.eclipse.jetty.toolchain.test.TestTracker;
 import org.eclipse.jetty.util.log.Log;
 import org.eclipse.jetty.util.log.Logger;
 import org.junit.Assert;
+import org.junit.Rule;
 
 public abstract class SslBytesTest
 {
+    @Rule
+    public TestTracker tracker = new TestTracker();
+
     protected final Logger logger = Log.getLogger(getClass());
 
     public static class TLSRecord
@@ -115,8 +120,7 @@
 
         public void start() throws Exception
         {
-            serverSocket = new ServerSocket(47009);
-//            serverSocket = new ServerSocket(0);
+            serverSocket = new ServerSocket(0);
             Thread acceptor = new Thread(this);
             acceptor.start();
             server = new Socket(serverHost, serverPort);
diff --git a/jetty-continuation/pom.xml b/jetty-continuation/pom.xml
index e146ba8..e339635 100644
--- a/jetty-continuation/pom.xml
+++ b/jetty-continuation/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-continuation</artifactId>
diff --git a/jetty-deploy/pom.xml b/jetty-deploy/pom.xml
index 55848f5..5d25eef 100644
--- a/jetty-deploy/pom.xml
+++ b/jetty-deploy/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-deploy</artifactId>
diff --git a/jetty-distribution/pom.xml b/jetty-distribution/pom.xml
index dfe828f..2189d3b 100644
--- a/jetty-distribution/pom.xml
+++ b/jetty-distribution/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <artifactId>jetty-distribution</artifactId>
   <name>Jetty :: Distribution Assemblies</name>
diff --git a/jetty-http/pom.xml b/jetty-http/pom.xml
index 1403df1..f13379c 100644
--- a/jetty-http/pom.xml
+++ b/jetty-http/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>jetty-project</artifactId>
     <groupId>org.eclipse.jetty</groupId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-http</artifactId>
diff --git a/jetty-io/pom.xml b/jetty-io/pom.xml
index 24eedb6..6af3a28 100644
--- a/jetty-io/pom.xml
+++ b/jetty-io/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <artifactId>jetty-project</artifactId>
     <groupId>org.eclipse.jetty</groupId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-io</artifactId>
diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java
index 4fca18f..19b6548 100644
--- a/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java
+++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java
@@ -190,6 +190,10 @@
         if (DEBUG)
             LOG.debug("onFillable enter {}", getEndPoint());
 
+        // We have received a close handshake, close the end point to send FIN.
+        if (_decryptedEndPoint.isInputShutdown())
+            getEndPoint().close();
+            
         // wake up whoever is doing the fill or the flush so they can
         // do all the filling, unwrapping, wrapping and flushing
         _decryptedEndPoint.getFillInterest().fillable();
@@ -612,8 +616,11 @@
                                         // maybe we will fill some more on a retry
                                         continue;
                                     }
-                                    // we need to wait for more net data
-                                    return 0;
+                                    else
+                                    {
+                                        // we need to wait for more net data
+                                        return 0;
+                                    }
 
                                 case FINISHED:
                                     throw new IllegalStateException();
@@ -726,6 +733,7 @@
                             {
                                 _cannotAcceptMoreAppDataToFlush = true;
                                 getEndPoint().flush(_encryptedOutput);
+                                getEndPoint().shutdownOutput();
                                 // If we failed to flush the close handshake then we will just pretend that
                                 // the write has progressed normally and let a subsequent call to flush
                                 // (or WriteFlusher#onIncompleteFlushed) to finish writing the close handshake.
@@ -733,8 +741,11 @@
                                 if (BufferUtil.hasContent(_encryptedOutput))
                                     return false;
                             }
-
                             // otherwise we have written, and the caller will close the underlying connection
+                            else
+                            {
+                                getEndPoint().shutdownOutput();
+                            }
                             return allConsumed;
 
                         case BUFFER_UNDERFLOW:
@@ -823,24 +834,37 @@
             {
                 _bufferPool.release(_encryptedOutput);
                 _encryptedOutput = null;
-                if (_sslEngine.isOutboundDone())
-                    getEndPoint().shutdownOutput();
             }
         }
 
         @Override
         public void shutdownOutput()
         {
-            _sslEngine.closeOutbound();
-            try
+            boolean ishut = isInputShutdown();
+            if (DEBUG)
+                LOG.debug("{} shutdownOutput: oshut={}, ishut={}", SslConnection.this, isOutputShutdown(), ishut);
+            if (ishut)
             {
-                flush(BufferUtil.EMPTY_BUFFER);
-            }
-            catch (IOException e)
-            {
-                LOG.ignore(e);
+                // Aggressively close, since inbound close alert has already been processed
+                // and the TLS specification allows to close the connection directly, which
+                // is what most other implementations expect: a FIN rather than a TLS close
+                // reply. If a TLS close reply is sent, most implementation send a RST.
                 getEndPoint().close();
             }
+            else
+            {
+                try
+                {
+                    _sslEngine.closeOutbound();
+                    flush(BufferUtil.EMPTY_BUFFER); // Send close handshake
+                    SslConnection.this.fillInterested(); // seek reply FIN or RST or close handshake
+                }
+                catch (Exception e)
+                {
+                    LOG.ignore(e);
+                    getEndPoint().close();
+                }
+            }
         }
 
         @Override
diff --git a/jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointSslTest.java b/jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointSslTest.java
index 77aea8b..7bd0596 100644
--- a/jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointSslTest.java
+++ b/jetty-io/src/test/java/org/eclipse/jetty/io/SelectChannelEndPointSslTest.java
@@ -202,16 +202,21 @@
 
         filled=client.read(sslIn);
         if (debug) System.err.println("in="+filled);
-        sslIn.flip();
-        try
+        
+        if (filled>=0)
         {
-            // Since the client closed abruptly, the server is sending a close alert with a failure
-            engine.unwrap(sslIn, appIn);
-            Assert.fail();
-        }
-        catch (SSLException x)
-        {
-            // Expected
+            // this is the old behaviour. 
+            sslIn.flip();
+            try
+            {
+                // Since the client closed abruptly, the server is sending a close alert with a failure
+                engine.unwrap(sslIn, appIn);
+                Assert.fail();
+            }
+            catch (SSLException x)
+            {
+                // Expected
+            }
         }
 
         sslIn.clear();
diff --git a/jetty-jaas/pom.xml b/jetty-jaas/pom.xml
index 974d960..a719a7b 100644
--- a/jetty-jaas/pom.xml
+++ b/jetty-jaas/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-jaas</artifactId>
diff --git a/jetty-jaspi/pom.xml b/jetty-jaspi/pom.xml
index 4ed1f95..d77e5e8 100644
--- a/jetty-jaspi/pom.xml
+++ b/jetty-jaspi/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-jaspi</artifactId>
diff --git a/jetty-jmx/pom.xml b/jetty-jmx/pom.xml
index dd2813f..d2148b0 100644
--- a/jetty-jmx/pom.xml
+++ b/jetty-jmx/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-jmx</artifactId>
diff --git a/jetty-jndi/pom.xml b/jetty-jndi/pom.xml
index e58d8f6..29575ba 100644
--- a/jetty-jndi/pom.xml
+++ b/jetty-jndi/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-jndi</artifactId>
diff --git a/jetty-jsp/pom.xml b/jetty-jsp/pom.xml
index b010b81..ec6c3bc 100644
--- a/jetty-jsp/pom.xml
+++ b/jetty-jsp/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-jsp</artifactId>
diff --git a/jetty-jspc-maven-plugin/pom.xml b/jetty-jspc-maven-plugin/pom.xml
index 2d2ae6b..0b046e8 100644
--- a/jetty-jspc-maven-plugin/pom.xml
+++ b/jetty-jspc-maven-plugin/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-jspc-maven-plugin</artifactId>
diff --git a/jetty-maven-plugin/pom.xml b/jetty-maven-plugin/pom.xml
index 1cc716c..9461c3b 100644
--- a/jetty-maven-plugin/pom.xml
+++ b/jetty-maven-plugin/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-maven-plugin</artifactId>
diff --git a/jetty-monitor/pom.xml b/jetty-monitor/pom.xml
index 2704f7e..684ebd6 100644
--- a/jetty-monitor/pom.xml
+++ b/jetty-monitor/pom.xml
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-monitor</artifactId>
diff --git a/jetty-nosql/pom.xml b/jetty-nosql/pom.xml
index cf8ca80..8aa82cc 100644
--- a/jetty-nosql/pom.xml
+++ b/jetty-nosql/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-nosql</artifactId>
diff --git a/jetty-osgi/jetty-osgi-boot-jsp/pom.xml b/jetty-osgi/jetty-osgi-boot-jsp/pom.xml
index a7e5645..1060112 100644
--- a/jetty-osgi/jetty-osgi-boot-jsp/pom.xml
+++ b/jetty-osgi/jetty-osgi-boot-jsp/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty.osgi</groupId>
     <artifactId>jetty-osgi-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-osgi-boot-jsp</artifactId>
diff --git a/jetty-osgi/jetty-osgi-boot-warurl/pom.xml b/jetty-osgi/jetty-osgi-boot-warurl/pom.xml
index 5927ad5..62971f7 100644
--- a/jetty-osgi/jetty-osgi-boot-warurl/pom.xml
+++ b/jetty-osgi/jetty-osgi-boot-warurl/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty.osgi</groupId>
     <artifactId>jetty-osgi-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-osgi/jetty-osgi-boot/pom.xml b/jetty-osgi/jetty-osgi-boot/pom.xml
index a630b1f..ba5baef 100644
--- a/jetty-osgi/jetty-osgi-boot/pom.xml
+++ b/jetty-osgi/jetty-osgi-boot/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty.osgi</groupId>
     <artifactId>jetty-osgi-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-osgi-boot</artifactId>
diff --git a/jetty-osgi/jetty-osgi-httpservice/pom.xml b/jetty-osgi/jetty-osgi-httpservice/pom.xml
index db9872a..1d68a56 100644
--- a/jetty-osgi/jetty-osgi-httpservice/pom.xml
+++ b/jetty-osgi/jetty-osgi-httpservice/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty.osgi</groupId>
     <artifactId>jetty-osgi-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-httpservice</artifactId>
diff --git a/jetty-osgi/jetty-osgi-npn/pom.xml b/jetty-osgi/jetty-osgi-npn/pom.xml
index 0515eaa..20a2b34 100644
--- a/jetty-osgi/jetty-osgi-npn/pom.xml
+++ b/jetty-osgi/jetty-osgi-npn/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty.osgi</groupId>
     <artifactId>jetty-osgi-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-osgi-npn</artifactId>
diff --git a/jetty-osgi/pom.xml b/jetty-osgi/pom.xml
index cf27138..13092a4 100644
--- a/jetty-osgi/pom.xml
+++ b/jetty-osgi/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <groupId>org.eclipse.jetty.osgi</groupId>
   <artifactId>jetty-osgi-project</artifactId>
diff --git a/jetty-osgi/test-jetty-osgi-context/pom.xml b/jetty-osgi/test-jetty-osgi-context/pom.xml
index 03634fd..d6cad44 100644
--- a/jetty-osgi/test-jetty-osgi-context/pom.xml
+++ b/jetty-osgi/test-jetty-osgi-context/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty.osgi</groupId>
     <artifactId>jetty-osgi-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>test-jetty-osgi-context</artifactId>
diff --git a/jetty-osgi/test-jetty-osgi-webapp/pom.xml b/jetty-osgi/test-jetty-osgi-webapp/pom.xml
index 444840f..18b13fb 100644
--- a/jetty-osgi/test-jetty-osgi-webapp/pom.xml
+++ b/jetty-osgi/test-jetty-osgi-webapp/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty.osgi</groupId>
     <artifactId>jetty-osgi-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-osgi/test-jetty-osgi/pom.xml b/jetty-osgi/test-jetty-osgi/pom.xml
index 85d0989..19ef69b 100644
--- a/jetty-osgi/test-jetty-osgi/pom.xml
+++ b/jetty-osgi/test-jetty-osgi/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty.osgi</groupId>
     <artifactId>jetty-osgi-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-plus/pom.xml b/jetty-plus/pom.xml
index d1bacea..e3a3a49 100644
--- a/jetty-plus/pom.xml
+++ b/jetty-plus/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-plus</artifactId>
diff --git a/jetty-proxy/pom.xml b/jetty-proxy/pom.xml
index 27353e1..031e1f4 100644
--- a/jetty-proxy/pom.xml
+++ b/jetty-proxy/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-proxy</artifactId>
diff --git a/jetty-rewrite/pom.xml b/jetty-rewrite/pom.xml
index cdbf469..011a764 100644
--- a/jetty-rewrite/pom.xml
+++ b/jetty-rewrite/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-rewrite</artifactId>
diff --git a/jetty-runner/pom.xml b/jetty-runner/pom.xml
index ec57a92..0f6dff6 100644
--- a/jetty-runner/pom.xml
+++ b/jetty-runner/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.eclipse.jetty</groupId>
diff --git a/jetty-security/pom.xml b/jetty-security/pom.xml
index 9aa83c7..2e91241 100644
--- a/jetty-security/pom.xml
+++ b/jetty-security/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-security</artifactId>
diff --git a/jetty-server/pom.xml b/jetty-server/pom.xml
index 04c86c6..439f48a 100644
--- a/jetty-server/pom.xml
+++ b/jetty-server/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-server</artifactId>
diff --git a/jetty-server/src/main/config/etc/jetty.xml b/jetty-server/src/main/config/etc/jetty.xml
index 2d9b859..668980e 100644
--- a/jetty-server/src/main/config/etc/jetty.xml
+++ b/jetty-server/src/main/config/etc/jetty.xml
@@ -47,11 +47,6 @@
         <Arg name="minThreads" type="int">10</Arg>
         <Arg name="maxThreads" type="int">200</Arg>
         <Arg name="idleTimeout" type="int">60000</Arg>
-        <!-- Arg >
-          <New class="org.eclipse.jetty.util.ConcurrentArrayBlockingQueue$Unbounded">
-            <Arg type='int'>32</Arg>
-          </New>
-        </Arg --> 
         <Set name="detailedDump">false</Set>
       </New>
     </Arg>
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/AsyncNCSARequestLog.java b/jetty-server/src/main/java/org/eclipse/jetty/server/AsyncNCSARequestLog.java
index 300d23c..9c5d461 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/AsyncNCSARequestLog.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/AsyncNCSARequestLog.java
@@ -22,7 +22,7 @@
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.TimeUnit;
 
-import org.eclipse.jetty.util.ConcurrentArrayBlockingQueue;
+import org.eclipse.jetty.util.BlockingArrayQueue;
 import org.eclipse.jetty.util.log.Log;
 import org.eclipse.jetty.util.log.Logger;
 
@@ -42,7 +42,7 @@
     {
         this(null,null);
     }
-    
+
     public AsyncNCSARequestLog(BlockingQueue<String> queue)
     {
         this(null,queue);
@@ -52,12 +52,12 @@
     {
         this(filename,null);
     }
-    
+
     public AsyncNCSARequestLog(String filename,BlockingQueue<String> queue)
     {
         super(filename);
         if (queue==null)
-            queue=new ConcurrentArrayBlockingQueue.Unbounded<String>();
+            queue=new BlockingArrayQueue<>(1024);
         _queue=queue;
     }
 
@@ -67,7 +67,7 @@
         {
             setName("AsyncNCSARequestLog@"+Integer.toString(AsyncNCSARequestLog.this.hashCode(),16));
         }
-        
+
         @Override
         public void run()
         {
@@ -78,7 +78,7 @@
                     String log = _queue.poll(10,TimeUnit.SECONDS);
                     if (log!=null)
                         AsyncNCSARequestLog.super.write(log);
-                    
+
                     while(!_queue.isEmpty())
                     {
                         log=_queue.poll();
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java
index 6d913fb..72d6ee3 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java
@@ -303,7 +303,8 @@
      *
      * @param virtualHosts
      *            Array of virtual hosts that this context responds to. A null host name or null/empty array means any hostname is acceptable. Host names may be
-     *            String representation of IP addresses. Host names may start with '*.' to wildcard one level of names.
+     *            String representation of IP addresses. Host names may start with '*.' to wildcard one level of names. Host names may start with '@', in which case they
+     *            will match the {@link Connector#getName()} for the request.
      */
     public void addVirtualHosts(String[] virtualHosts)
     {
@@ -817,8 +818,8 @@
             if (!_contextListeners.isEmpty())
             {
                 ServletContextEvent event = new ServletContextEvent(_scontext);
-                for (ServletContextListener listener : _contextListeners)
-                    callContextDestroyed(listener,event);
+                for (int i = _contextListeners.size(); i-->0;) 
+                    callContextDestroyed(_contextListeners.get(i),event);
             }
 
             if (_errorHandler != null)
@@ -1093,20 +1094,15 @@
                 if (!_requestListeners.isEmpty())
                 {
                     final ServletRequestEvent sre = new ServletRequestEvent(_scontext,request);
-                    ListIterator<ServletRequestListener> iter = _requestListeners.listIterator(_requestListeners.size());
-                    while (iter.hasNext())
-                        iter.next();
-                    while (iter.hasPrevious())
-                        iter.previous().requestDestroyed(sre);
+                    for (int i=_requestListeners.size();i-->0;)
+                        _requestListeners.get(i).requestDestroyed(sre);
                 }
 
                 if (!_requestAttributeListeners.isEmpty())
                 {
                     ListIterator<ServletRequestAttributeListener> iter = _requestAttributeListeners.listIterator(_requestAttributeListeners.size());
-                    while(iter.hasNext())
-                        iter.next();
-                    while(iter.hasPrevious())
-                        baseRequest.removeEventListener(iter.previous());
+                    for (int i=_requestAttributeListeners.size();i-->0;)
+                        baseRequest.removeEventListener(_requestAttributeListeners.get(i));
                 }
             }
         }
diff --git a/jetty-servlet/pom.xml b/jetty-servlet/pom.xml
index 552e4b2..aa46b77 100644
--- a/jetty-servlet/pom.xml
+++ b/jetty-servlet/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>jetty-project</artifactId>
     <groupId>org.eclipse.jetty</groupId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-servlet</artifactId>
diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java
index 9baefac..4aa3b5d 100644
--- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java
+++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java
@@ -208,6 +208,9 @@
         _filterNameMappings=null;
 
         _servletPathMap=null;
+        
+        _matchBeforeIndex=-1;
+        _matchAfterIndex=-1;
     }
 
     /* ------------------------------------------------------------ */
@@ -1053,7 +1056,7 @@
     public void addFilterMapping (FilterMapping mapping)
     {
         if (mapping != null)
-        { 
+        {
             Source source = (mapping.getFilterHolder()==null?null:mapping.getFilterHolder().getSource());
             FilterMapping[] mappings =getFilterMappings();
             if (mappings==null || mappings.length==0)
diff --git a/jetty-servlets/pom.xml b/jetty-servlets/pom.xml
index 0e0f464..606a020 100644
--- a/jetty-servlets/pom.xml
+++ b/jetty-servlets/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>jetty-project</artifactId>
     <groupId>org.eclipse.jetty</groupId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-servlets</artifactId>
diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java
index bd5a21b..03752cb 100644
--- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java
+++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/GzipFilter.java
@@ -26,26 +26,22 @@
 import java.util.regex.Pattern;
 import java.util.zip.Deflater;
 import java.util.zip.DeflaterOutputStream;
-import java.util.zip.GZIPOutputStream;
 
+import javax.servlet.AsyncEvent;
+import javax.servlet.AsyncListener;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
-import javax.servlet.ServletResponseWrapper;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
 
-import org.eclipse.jetty.continuation.Continuation;
-import org.eclipse.jetty.continuation.ContinuationListener;
-import org.eclipse.jetty.continuation.ContinuationSupport;
 import org.eclipse.jetty.http.HttpMethod;
 import org.eclipse.jetty.servlets.gzip.AbstractCompressedStream;
 import org.eclipse.jetty.servlets.gzip.CompressedResponseWrapper;
-import org.eclipse.jetty.util.StringUtil;
+import org.eclipse.jetty.servlets.gzip.GzipOutputStream;
 import org.eclipse.jetty.util.log.Log;
 import org.eclipse.jetty.util.log.Logger;
 
@@ -129,6 +125,9 @@
     protected int _minGzipSize=256;
     protected int _deflateCompressionLevel=Deflater.DEFAULT_COMPRESSION;
     protected boolean _deflateNoWrap = true;
+    
+    // non-static, as other GzipFilter instances may have different configurations
+    protected final ThreadLocal<Deflater> _deflater = new ThreadLocal<Deflater>();
 
     protected final Set<String> _methods=new HashSet<String>();
     protected Set<String> _excludedAgents;
@@ -296,10 +295,10 @@
         }
         finally
         {
-            Continuation continuation = ContinuationSupport.getContinuation(request);
-                if (continuation.isSuspended() && continuation.isResponseWrapped())
+            if (request.isAsyncStarted())
             {
-                continuation.addContinuationListener(new ContinuationListenerWaitingForWrappedResponseToFinish(wrappedResponse));
+                 
+                request.getAsyncContext().addListener(new FinishOnCompleteListener(wrappedResponse));
             }
             else if (exceptional && !response.isCommitted())
             {
@@ -403,64 +402,55 @@
     protected CompressedResponseWrapper createWrappedResponse(HttpServletRequest request, HttpServletResponse response, final String compressionType)
     {
         CompressedResponseWrapper wrappedResponse = null;
-        if (compressionType==null)
+        wrappedResponse = new CompressedResponseWrapper(request,response)
         {
-            wrappedResponse = new CompressedResponseWrapper(request,response)
+            @Override
+            protected AbstractCompressedStream newCompressedStream(HttpServletRequest request, HttpServletResponse response) throws IOException
             {
-                @Override
-                protected AbstractCompressedStream newCompressedStream(HttpServletRequest request,HttpServletResponse response) throws IOException
+                return new AbstractCompressedStream(compressionType,request,this,_vary)
                 {
-                    return new AbstractCompressedStream(null,request,this,_vary)
+                    private Deflater _allocatedDeflater;
+
+                    @Override
+                    protected DeflaterOutputStream createStream() throws IOException
                     {
-                        @Override
-                        protected DeflaterOutputStream createStream() throws IOException
+                        if (compressionType == null)
                         {
                             return null;
                         }
-                    };
-                }
-            };
-        }
-        else if (compressionType.equals(GZIP))
-        {
-            wrappedResponse = new CompressedResponseWrapper(request,response)
-            {
-                @Override
-                protected AbstractCompressedStream newCompressedStream(HttpServletRequest request,HttpServletResponse response) throws IOException
-                {
-                    return new AbstractCompressedStream(compressionType,request,this,_vary)
-                    {
-                        @Override
-                        protected DeflaterOutputStream createStream() throws IOException
+                        
+                        // acquire deflater instance
+                        _allocatedDeflater = _deflater.get();   
+                        if (_allocatedDeflater==null)
+                            _allocatedDeflater = new Deflater(_deflateCompressionLevel,_deflateNoWrap);
+                        else
                         {
-                            return new GZIPOutputStream(_response.getOutputStream(),_bufferSize);
+                            _deflater.remove();
+                            _allocatedDeflater.reset();
                         }
-                    };
-                }
-            };
-        }
-        else if (compressionType.equals(DEFLATE))
-        {
-            wrappedResponse = new CompressedResponseWrapper(request,response)
-            {
-                @Override
-                protected AbstractCompressedStream newCompressedStream(HttpServletRequest request,HttpServletResponse response) throws IOException
-                {
-                    return new AbstractCompressedStream(compressionType,request,this,_vary)
-                    {
-                        @Override
-                        protected DeflaterOutputStream createStream() throws IOException
+                        
+                        switch (compressionType)
                         {
-                            return new DeflaterOutputStream(_response.getOutputStream(),new Deflater(_deflateCompressionLevel,_deflateNoWrap));
+                            case GZIP:
+                                return new GzipOutputStream(_response.getOutputStream(),_allocatedDeflater,_bufferSize);
+                            case DEFLATE:
+                                return new DeflaterOutputStream(_response.getOutputStream(),_allocatedDeflater,_bufferSize);
                         }
-                    };
-                }
-            };
-        } 
-        else
-        {
-            throw new IllegalStateException(compressionType + " not supported");
-        }
+                        throw new IllegalStateException(compressionType + " not supported");
+                    }
+
+                    @Override
+                    public void finish() throws IOException
+                    {
+                        super.finish();
+                        if (_allocatedDeflater != null && _deflater.get() == null)
+                        {
+                            _deflater.set(_allocatedDeflater);
+                        }
+                    }
+                };
+            }
+        };
         configureWrappedResponse(wrappedResponse);
         return wrappedResponse;
     }
@@ -472,18 +462,18 @@
         wrappedResponse.setMinCompressSize(_minGzipSize);
     }
 
-    private class ContinuationListenerWaitingForWrappedResponseToFinish implements ContinuationListener
+    private class FinishOnCompleteListener implements AsyncListener
     {    
         private CompressedResponseWrapper wrappedResponse;
 
-        public ContinuationListenerWaitingForWrappedResponseToFinish(CompressedResponseWrapper wrappedResponse)
+        public FinishOnCompleteListener(CompressedResponseWrapper wrappedResponse)
         {
             this.wrappedResponse = wrappedResponse;
         }
 
         @Override
-        public void onComplete(Continuation continuation)
-        {
+        public void onComplete(AsyncEvent event) throws IOException
+        {          
             try
             {
                 wrappedResponse.finish();
@@ -495,7 +485,17 @@
         }
 
         @Override
-        public void onTimeout(Continuation continuation)
+        public void onTimeout(AsyncEvent event) throws IOException
+        {
+        }
+
+        @Override
+        public void onError(AsyncEvent event) throws IOException
+        {
+        }
+
+        @Override
+        public void onStartAsync(AsyncEvent event) throws IOException
         {
         }
     }
diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/gzip/GzipHandler.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/gzip/GzipHandler.java
index 3ea1c2a..ec125b9 100644
--- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/gzip/GzipHandler.java
+++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/gzip/GzipHandler.java
@@ -29,13 +29,12 @@
 import java.util.zip.DeflaterOutputStream;
 import java.util.zip.GZIPOutputStream;
 
+import javax.servlet.AsyncEvent;
+import javax.servlet.AsyncListener;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.eclipse.jetty.continuation.Continuation;
-import org.eclipse.jetty.continuation.ContinuationListener;
-import org.eclipse.jetty.continuation.ContinuationSupport;
 import org.eclipse.jetty.http.HttpMethod;
 import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.handler.HandlerWrapper;
@@ -265,12 +264,28 @@
                 }
                 finally
                 {
-                    Continuation continuation = ContinuationSupport.getContinuation(request);
-                    if (continuation.isSuspended() && continuation.isResponseWrapped())
+                    if (request.isAsyncStarted())
                     {
-                        continuation.addContinuationListener(new ContinuationListener()
+                        request.getAsyncContext().addListener(new AsyncListener()
                         {
-                            public void onComplete(Continuation continuation)
+                            
+                            @Override
+                            public void onTimeout(AsyncEvent event) throws IOException
+                            {
+                            }
+                            
+                            @Override
+                            public void onStartAsync(AsyncEvent event) throws IOException
+                            {
+                            }
+                            
+                            @Override
+                            public void onError(AsyncEvent event) throws IOException
+                            {
+                            }
+                            
+                            @Override
+                            public void onComplete(AsyncEvent event) throws IOException
                             {
                                 try
                                 {
@@ -281,9 +296,6 @@
                                     LOG.warn(e);
                                 }
                             }
-
-                            public void onTimeout(Continuation continuation)
-                            {}
                         });
                     }
                     else if (exceptional && !response.isCommitted())
diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/gzip/GzipOutputStream.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/gzip/GzipOutputStream.java
new file mode 100644
index 0000000..8f20c2f
--- /dev/null
+++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/gzip/GzipOutputStream.java
@@ -0,0 +1,71 @@
+//
+//  ========================================================================
+//  Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd.
+//  ------------------------------------------------------------------------
+//  All rights reserved. This program and the accompanying materials
+//  are made available under the terms of the Eclipse Public License v1.0
+//  and Apache License v2.0 which accompanies this distribution.
+//
+//      The Eclipse Public License is available at
+//      http://www.eclipse.org/legal/epl-v10.html
+//
+//      The Apache License v2.0 is available at
+//      http://www.opensource.org/licenses/apache2.0.php
+//
+//  You may elect to redistribute this code under either of these licenses.
+//  ========================================================================
+//
+
+package org.eclipse.jetty.servlets.gzip;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.zip.CRC32;
+import java.util.zip.Deflater;
+import java.util.zip.DeflaterOutputStream;
+
+/**
+ * Reimplementation of {@link java.util.zip.GZIPOutputStream} that supports reusing a {@link Deflater} instance.
+ */
+public class GzipOutputStream extends DeflaterOutputStream
+{
+
+    private final static byte[] GZIP_HEADER = new byte[]
+    { (byte)0x1f, (byte)0x8b, Deflater.DEFLATED, 0, 0, 0, 0, 0, 0, 0 };
+
+    private final CRC32 _crc = new CRC32();
+
+    public GzipOutputStream(OutputStream out, Deflater deflater, int size) throws IOException
+    {
+        super(out,deflater,size);
+        out.write(GZIP_HEADER);
+    }
+
+    public synchronized void write(byte[] buf, int off, int len) throws IOException
+    {
+        super.write(buf,off,len);
+        _crc.update(buf,off,len);
+    }
+
+    public void finish() throws IOException
+    {
+        if (!def.finished())
+        {
+            super.finish();
+            byte[] trailer = new byte[8];
+            writeInt((int)_crc.getValue(),trailer,0);
+            writeInt(def.getTotalIn(),trailer,4);
+            out.write(trailer);
+        }
+    }
+
+    private void writeInt(int i, byte[] buf, int offset)
+    {
+        int o = offset;
+        buf[o++] = (byte)(i & 0xFF);
+        buf[o++] = (byte)((i >>> 8) & 0xFF);
+        buf[o++] = (byte)((i >>> 16) & 0xFF);
+        buf[o++] = (byte)((i >>> 24) & 0xFF);
+    }
+
+}
diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/PipelineHelper.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/PipelineHelper.java
index 8e2fea7..95f0a23 100644
--- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/PipelineHelper.java
+++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/PipelineHelper.java
@@ -219,8 +219,8 @@
             int val = inputStream.read();
             try
             {
-                if (left % 10 == 0)
-                    Thread.sleep(1);
+                if (left % 1000 == 0)
+                    Thread.sleep(10);
             }
             catch (InterruptedException e)
             {
diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/QoSFilterTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/QoSFilterTest.java
index f9296ce..61ff30a 100644
--- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/QoSFilterTest.java
+++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/QoSFilterTest.java
@@ -18,7 +18,6 @@
 
 package org.eclipse.jetty.servlets;
 
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
@@ -42,7 +41,9 @@
 import org.eclipse.jetty.util.BufferUtil;
 import org.eclipse.jetty.util.log.Log;
 import org.eclipse.jetty.util.log.Logger;
+import org.hamcrest.Matchers;
 import org.junit.After;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -91,8 +92,10 @@
 
         _doneRequests.await(10,TimeUnit.SECONDS);
 
-        assertFalse("TEST WAS NOT PARALLEL ENOUGH!",TestServlet.__maxSleepers<=MAX_QOS);
-        assertTrue(TestServlet.__maxSleepers<=NUM_CONNECTIONS);
+        if (TestServlet.__maxSleepers<=MAX_QOS)
+            LOG.warn("TEST WAS NOT PARALLEL ENOUGH!");
+        else
+            Assert.assertThat(TestServlet.__maxSleepers,Matchers.lessThanOrEqualTo(NUM_CONNECTIONS));
     }
 
     @Test
@@ -109,8 +112,10 @@
         }
 
         _doneRequests.await(10,TimeUnit.SECONDS);
-        assertFalse("TEST WAS NOT PARALLEL ENOUGH!",TestServlet.__maxSleepers<MAX_QOS);
-        assertTrue(TestServlet.__maxSleepers==MAX_QOS);
+        if (TestServlet.__maxSleepers<MAX_QOS)
+            LOG.warn("TEST WAS NOT PARALLEL ENOUGH!");
+        else
+            Assert.assertEquals(TestServlet.__maxSleepers,MAX_QOS);
     }
 
     @Test
@@ -126,8 +131,10 @@
         }
 
         _doneRequests.await(20,TimeUnit.SECONDS);
-        assertFalse("TEST WAS NOT PARALLEL ENOUGH!",TestServlet.__maxSleepers<MAX_QOS);
-        assertTrue(TestServlet.__maxSleepers<=MAX_QOS);
+        if (TestServlet.__maxSleepers<MAX_QOS)
+            LOG.warn("TEST WAS NOT PARALLEL ENOUGH!");
+        else
+            Assert.assertEquals(TestServlet.__maxSleepers,MAX_QOS);
     }
 
     class Worker implements Runnable {
@@ -137,6 +144,7 @@
             _num = num;
         }
 
+        @Override
         public void run()
         {
             for (int i=0;i<NUM_LOOPS;i++)
@@ -170,6 +178,7 @@
             _num = num;
         }
 
+        @Override
         public void run()
         {
             URL url=null;
@@ -198,6 +207,7 @@
         private static int __sleepers;
         private static int __maxSleepers;
 
+        @Override
         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
         {
             try
@@ -232,6 +242,7 @@
 
     public static class QoSFilter2 extends QoSFilter
     {
+        @Override
         public int getPriority(ServletRequest request)
         {
             String p = request.getParameter("priority");
diff --git a/jetty-spdy/pom.xml b/jetty-spdy/pom.xml
index 7b3020b..8b3fa2d 100644
--- a/jetty-spdy/pom.xml
+++ b/jetty-spdy/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-project</artifactId>
-        <version>9.0.2-SNAPSHOT</version>
+        <version>9.0.3-SNAPSHOT</version>
     </parent>
 
     <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-spdy/spdy-client/pom.xml b/jetty-spdy/spdy-client/pom.xml
index 9bb89ae..4c70d34 100644
--- a/jetty-spdy/spdy-client/pom.xml
+++ b/jetty-spdy/spdy-client/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.eclipse.jetty.spdy</groupId>
         <artifactId>spdy-parent</artifactId>
-        <version>9.0.2-SNAPSHOT</version>
+        <version>9.0.3-SNAPSHOT</version>
     </parent>
 
     <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-spdy/spdy-core/pom.xml b/jetty-spdy/spdy-core/pom.xml
index 3bd7e71..423f327 100644
--- a/jetty-spdy/spdy-core/pom.xml
+++ b/jetty-spdy/spdy-core/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.eclipse.jetty.spdy</groupId>
         <artifactId>spdy-parent</artifactId>
-        <version>9.0.2-SNAPSHOT</version>
+        <version>9.0.3-SNAPSHOT</version>
     </parent>
 
     <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-spdy/spdy-core/src/main/java/org/eclipse/jetty/spdy/StandardSession.java b/jetty-spdy/spdy-core/src/main/java/org/eclipse/jetty/spdy/StandardSession.java
index a0bda51..30dc870 100644
--- a/jetty-spdy/spdy-core/src/main/java/org/eclipse/jetty/spdy/StandardSession.java
+++ b/jetty-spdy/spdy-core/src/main/java/org/eclipse/jetty/spdy/StandardSession.java
@@ -244,7 +244,6 @@
     @Override
     public PingResultInfo ping(PingInfo pingInfo) throws ExecutionException, InterruptedException, TimeoutException
     {
-        //TODO: find a better name for PingResultInfo
         FuturePromise<PingResultInfo> result = new FuturePromise<>();
         ping(pingInfo, result);
         if (pingInfo.getTimeout() > 0)
@@ -548,10 +547,10 @@
                 int maxConcurrentStreams = maxConcurrentLocalStreams;
                 if (maxConcurrentStreams > -1 && oldStreamCountValue >= maxConcurrentStreams)
                 {
-                    String msg = String.format("Max concurrent local streams (%d) exceeded.",
+                    String message = String.format("Max concurrent local streams (%d) exceeded.",
                             maxConcurrentStreams);
-                    LOG.debug(msg);
-                    promise.failed(new SPDYException(msg));
+                    LOG.debug(message);
+                    promise.failed(new SPDYException(message));
                     return null;
                 }
                 if (localStreamCount.compareAndSet(oldStreamCountValue, oldStreamCountValue + 1))
@@ -561,22 +560,17 @@
 
         if (streams.putIfAbsent(streamId, stream) != null)
         {
-            //TODO: fail promise
+            String message = "Duplicate stream id " + streamId;
+            IllegalStateException duplicateIdException = new IllegalStateException(message);
+            promise.failed(duplicateIdException);
             if (local)
             {
                 localStreamCount.decrementAndGet();
-                throw new IllegalStateException("Duplicate stream id " + streamId);
+                throw duplicateIdException;
             }
             RstInfo rstInfo = new RstInfo(streamId, StreamStatus.PROTOCOL_ERROR);
             LOG.debug("Duplicate stream, {}", rstInfo);
-            try
-            {
-                rst(rstInfo); //TODO: non blocking reset or find the reason why blocking is used
-            }
-            catch (InterruptedException | ExecutionException | TimeoutException e)
-            {
-                e.printStackTrace(); // TODO: really catch???
-            }
+            rst(rstInfo, new Callback.Adapter()); // We don't care (too much) if the reset fails.
             return null;
         }
         else
diff --git a/jetty-spdy/spdy-example-webapp/pom.xml b/jetty-spdy/spdy-example-webapp/pom.xml
index 37830b2..1045409 100644
--- a/jetty-spdy/spdy-example-webapp/pom.xml
+++ b/jetty-spdy/spdy-example-webapp/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.eclipse.jetty.spdy</groupId>
         <artifactId>spdy-parent</artifactId>
-        <version>9.0.2-SNAPSHOT</version>
+        <version>9.0.3-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>spdy-example-webapp</artifactId>
diff --git a/jetty-spdy/spdy-http-server/pom.xml b/jetty-spdy/spdy-http-server/pom.xml
index c3ec31e..5be0935 100644
--- a/jetty-spdy/spdy-http-server/pom.xml
+++ b/jetty-spdy/spdy-http-server/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.eclipse.jetty.spdy</groupId>
         <artifactId>spdy-parent</artifactId>
-        <version>9.0.2-SNAPSHOT</version>
+        <version>9.0.3-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <artifactId>spdy-http-server</artifactId>
diff --git a/jetty-spdy/spdy-server/pom.xml b/jetty-spdy/spdy-server/pom.xml
index 0bd4ca8..d489447 100644
--- a/jetty-spdy/spdy-server/pom.xml
+++ b/jetty-spdy/spdy-server/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.eclipse.jetty.spdy</groupId>
         <artifactId>spdy-parent</artifactId>
-        <version>9.0.2-SNAPSHOT</version>
+        <version>9.0.3-SNAPSHOT</version>
     </parent>
 
     <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-spring/pom.xml b/jetty-spring/pom.xml
index 97e3aa4..a6f68be 100644
--- a/jetty-spring/pom.xml
+++ b/jetty-spring/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-spring</artifactId>
diff --git a/jetty-start/pom.xml b/jetty-start/pom.xml
index 240d08c..ea93a42 100644
--- a/jetty-start/pom.xml
+++ b/jetty-start/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-start</artifactId>
diff --git a/jetty-util-ajax/pom.xml b/jetty-util-ajax/pom.xml
index 247bfd2..073591a 100644
--- a/jetty-util-ajax/pom.xml
+++ b/jetty-util-ajax/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-util-ajax</artifactId>
diff --git a/jetty-util/pom.xml b/jetty-util/pom.xml
index 01bf1fb..0ea0ce3 100644
--- a/jetty-util/pom.xml
+++ b/jetty-util/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-util</artifactId>
diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/thread/QueuedThreadPool.java b/jetty-util/src/main/java/org/eclipse/jetty/util/thread/QueuedThreadPool.java
index 4ffc802..6aa3287 100644
--- a/jetty-util/src/main/java/org/eclipse/jetty/util/thread/QueuedThreadPool.java
+++ b/jetty-util/src/main/java/org/eclipse/jetty/util/thread/QueuedThreadPool.java
@@ -31,7 +31,6 @@
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.eclipse.jetty.util.BlockingArrayQueue;
-import org.eclipse.jetty.util.ConcurrentArrayBlockingQueue;
 import org.eclipse.jetty.util.StringUtil;
 import org.eclipse.jetty.util.annotation.ManagedAttribute;
 import org.eclipse.jetty.util.annotation.ManagedObject;
@@ -90,9 +89,9 @@
         setMaxThreads(maxThreads);
         setIdleTimeout(idleTimeout);
         setStopTimeout(5000);
-        
+
         if (queue==null)
-            queue=new ConcurrentArrayBlockingQueue.Unbounded<Runnable>();
+            queue=new BlockingArrayQueue<>(_minThreads, _minThreads);
         _jobs=queue;
 
     }
diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/QueueBenchmarkTest.java b/jetty-util/src/test/java/org/eclipse/jetty/util/QueueBenchmarkTest.java
index 8990102..750c288 100644
--- a/jetty-util/src/test/java/org/eclipse/jetty/util/QueueBenchmarkTest.java
+++ b/jetty-util/src/test/java/org/eclipse/jetty/util/QueueBenchmarkTest.java
@@ -29,15 +29,13 @@
 import java.util.concurrent.TimeUnit;
 
 import org.eclipse.jetty.toolchain.test.AdvancedRunner;
-import org.eclipse.jetty.toolchain.test.annotation.Slow;
+import org.eclipse.jetty.toolchain.test.annotation.Stress;
 import org.eclipse.jetty.util.log.Log;
 import org.eclipse.jetty.util.log.Logger;
 import org.junit.Assume;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-@Ignore
 @RunWith(AdvancedRunner.class)
 public class QueueBenchmarkTest
 {
@@ -57,7 +55,7 @@
         }
     };
 
-    @Slow
+    @Stress("High CPU")
     @Test
     public void testQueues() throws Exception
     {
@@ -77,7 +75,7 @@
         testQueues(readers, writers, iterations, queues, false);
     }
 
-    @Slow
+    @Stress("High CPU")
     @Test
     public void testBlockingQueues() throws Exception
     {
diff --git a/jetty-webapp/pom.xml b/jetty-webapp/pom.xml
index f397e92..0f9acf2 100644
--- a/jetty-webapp/pom.xml
+++ b/jetty-webapp/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-webapp</artifactId>
diff --git a/jetty-websocket/pom.xml b/jetty-websocket/pom.xml
index 8633efc..0f43381 100644
--- a/jetty-websocket/pom.xml
+++ b/jetty-websocket/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <artifactId>jetty-project</artifactId>
         <groupId>org.eclipse.jetty</groupId>
-        <version>9.0.2-SNAPSHOT</version>
+        <version>9.0.3-SNAPSHOT</version>
     </parent>
 
     <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-websocket/websocket-api/pom.xml b/jetty-websocket/websocket-api/pom.xml
index f850046..dc96e78 100644
--- a/jetty-websocket/websocket-api/pom.xml
+++ b/jetty-websocket/websocket-api/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.eclipse.jetty.websocket</groupId>
         <artifactId>websocket-parent</artifactId>
-        <version>9.0.2-SNAPSHOT</version>
+        <version>9.0.3-SNAPSHOT</version>
     </parent>
 
     <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-websocket/websocket-client/pom.xml b/jetty-websocket/websocket-client/pom.xml
index ae00946..955cd56 100644
--- a/jetty-websocket/websocket-client/pom.xml
+++ b/jetty-websocket/websocket-client/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.eclipse.jetty.websocket</groupId>
         <artifactId>websocket-parent</artifactId>
-        <version>9.0.2-SNAPSHOT</version>
+        <version>9.0.3-SNAPSHOT</version>
     </parent>
 
     <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-websocket/websocket-common/pom.xml b/jetty-websocket/websocket-common/pom.xml
index eb05238..21e74f2 100644
--- a/jetty-websocket/websocket-common/pom.xml
+++ b/jetty-websocket/websocket-common/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <groupId>org.eclipse.jetty.websocket</groupId>
     <artifactId>websocket-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/ExtensionStack.java b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/ExtensionStack.java
index c3e266e..29450cf 100644
--- a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/ExtensionStack.java
+++ b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/ExtensionStack.java
@@ -251,19 +251,35 @@
     {
         StringBuilder s = new StringBuilder();
         s.append("ExtensionStack[");
-        s.append("extensions=[");
-        boolean delim = false;
-        for (Extension ext : extensions)
+        s.append("extensions=");
+        if (extensions == null)
         {
-            if (delim)
-            {
-                s.append(',');
-            }
-            s.append(ext.getName());
-            delim = true;
+            s.append("<null>");
         }
-        s.append("],incoming=").append(this.nextIncoming.getClass().getName());
-        s.append(",outgoing=").append(this.nextOutgoing.getClass().getName());
+        else
+        {
+            s.append('[');
+            boolean delim = false;
+            for (Extension ext : extensions)
+            {
+                if (delim)
+                {
+                    s.append(',');
+                }
+                if (ext == null)
+                {
+                    s.append("<null>");
+                }
+                else
+                {
+                    s.append(ext.getName());
+                }
+                delim = true;
+            }
+            s.append(']');
+        }
+        s.append(",incoming=").append((this.nextIncoming == null)?"<null>":this.nextIncoming.getClass().getName());
+        s.append(",outgoing=").append((this.nextOutgoing == null)?"<null>":this.nextOutgoing.getClass().getName());
         s.append("]");
         return s.toString();
     }
diff --git a/jetty-websocket/websocket-common/src/test/java/org/eclipse/jetty/websocket/common/extensions/ExtensionStackTest.java b/jetty-websocket/websocket-common/src/test/java/org/eclipse/jetty/websocket/common/extensions/ExtensionStackTest.java
index 8b2825a..096dc82 100644
--- a/jetty-websocket/websocket-common/src/test/java/org/eclipse/jetty/websocket/common/extensions/ExtensionStackTest.java
+++ b/jetty-websocket/websocket-common/src/test/java/org/eclipse/jetty/websocket/common/extensions/ExtensionStackTest.java
@@ -160,4 +160,12 @@
             stack.stop();
         }
     }
+
+    @Test
+    public void testToString()
+    {
+        ExtensionStack stack = createExtensionStack();
+        // Shouldn't cause a NPE.
+        LOG.debug("Shouldn't cause a NPE: {}",stack.toString());
+    }
 }
diff --git a/jetty-websocket/websocket-server/pom.xml b/jetty-websocket/websocket-server/pom.xml
index 25b9506..a17191e 100644
--- a/jetty-websocket/websocket-server/pom.xml
+++ b/jetty-websocket/websocket-server/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.eclipse.jetty.websocket</groupId>
         <artifactId>websocket-parent</artifactId>
-        <version>9.0.2-SNAPSHOT</version>
+        <version>9.0.3-SNAPSHOT</version>
     </parent>
 
     <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-websocket/websocket-servlet/pom.xml b/jetty-websocket/websocket-servlet/pom.xml
index abe6ee6..9c5f225 100644
--- a/jetty-websocket/websocket-servlet/pom.xml
+++ b/jetty-websocket/websocket-servlet/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>org.eclipse.jetty.websocket</groupId>
         <artifactId>websocket-parent</artifactId>
-        <version>9.0.2-SNAPSHOT</version>
+        <version>9.0.3-SNAPSHOT</version>
     </parent>
 
     <modelVersion>4.0.0</modelVersion>
diff --git a/jetty-xml/pom.xml b/jetty-xml/pom.xml
index d8a39e8..b3e283d 100644
--- a/jetty-xml/pom.xml
+++ b/jetty-xml/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>jetty-xml</artifactId>
diff --git a/pom.xml b/pom.xml
index 91afeb5..33384ea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
     <version>20</version>
   </parent>
   <artifactId>jetty-project</artifactId>
-  <version>9.0.2-SNAPSHOT</version>
+  <version>9.0.3-SNAPSHOT</version>
   <name>Jetty :: Project</name>
   <url>${jetty.url}</url>
   <packaging>pom</packaging>
diff --git a/tests/pom.xml b/tests/pom.xml
index 707898b..44f156e 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.eclipse.jetty</groupId>
     <artifactId>jetty-project</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <groupId>org.eclipse.jetty.tests</groupId>
diff --git a/tests/test-continuation/pom.xml b/tests/test-continuation/pom.xml
index e0da1c4..d9b484d 100644
--- a/tests/test-continuation/pom.xml
+++ b/tests/test-continuation/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>tests-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/tests/test-loginservice/pom.xml b/tests/test-loginservice/pom.xml
index 99e5b6d..cf0e34c 100644
--- a/tests/test-loginservice/pom.xml
+++ b/tests/test-loginservice/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>tests-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <artifactId>test-loginservice</artifactId>
   <name>Jetty Tests :: Login Service</name>
diff --git a/tests/test-sessions/pom.xml b/tests/test-sessions/pom.xml
index dac1976..1d59cd9 100644
--- a/tests/test-sessions/pom.xml
+++ b/tests/test-sessions/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>tests-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <artifactId>test-sessions-parent</artifactId>
   <name>Jetty Tests :: Sessions :: Parent</name>
diff --git a/tests/test-sessions/test-hash-sessions/pom.xml b/tests/test-sessions/test-hash-sessions/pom.xml
index 5a52c04..446da47 100644
--- a/tests/test-sessions/test-hash-sessions/pom.xml
+++ b/tests/test-sessions/test-hash-sessions/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-sessions-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <artifactId>test-hash-sessions</artifactId>
   <name>Jetty Tests :: Sessions :: Hash</name>
diff --git a/tests/test-sessions/test-jdbc-sessions/pom.xml b/tests/test-sessions/test-jdbc-sessions/pom.xml
index 46e03ba..1337d07 100644
--- a/tests/test-sessions/test-jdbc-sessions/pom.xml
+++ b/tests/test-sessions/test-jdbc-sessions/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-sessions-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <artifactId>test-jdbc-sessions</artifactId>
   <name>Jetty Tests :: Sessions :: JDBC</name>
diff --git a/tests/test-sessions/test-sessions-common/pom.xml b/tests/test-sessions/test-sessions-common/pom.xml
index 7c7a8b6..f32cfbc 100644
--- a/tests/test-sessions/test-sessions-common/pom.xml
+++ b/tests/test-sessions/test-sessions-common/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-sessions-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <artifactId>test-sessions-common</artifactId>
   <name>Jetty Tests :: Sessions :: Common</name>
diff --git a/tests/test-webapps/pom.xml b/tests/test-webapps/pom.xml
index f6ae886..60cd972 100644
--- a/tests/test-webapps/pom.xml
+++ b/tests/test-webapps/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>tests-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <artifactId>test-webapps-parent</artifactId>
diff --git a/tests/test-webapps/test-jaas-webapp/pom.xml b/tests/test-webapps/test-jaas-webapp/pom.xml
index fbffd7d..a743267 100644
--- a/tests/test-webapps/test-jaas-webapp/pom.xml
+++ b/tests/test-webapps/test-jaas-webapp/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-webapps-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <artifactId>test-jaas-webapp</artifactId>
   <name>Jetty Tests :: WebApp :: JAAS</name>
diff --git a/tests/test-webapps/test-jetty-webapp/pom.xml b/tests/test-webapps/test-jetty-webapp/pom.xml
index 6aae466..9da9751 100644
--- a/tests/test-webapps/test-jetty-webapp/pom.xml
+++ b/tests/test-webapps/test-jetty-webapp/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-webapps-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/tests/test-webapps/test-jetty-webapp/src/main/config/webapps/test.xml b/tests/test-webapps/test-jetty-webapp/src/main/config/webapps/test.xml
index 1bef8ab..ff7eb6b 100644
--- a/tests/test-webapps/test-jetty-webapp/src/main/config/webapps/test.xml
+++ b/tests/test-webapps/test-jetty-webapp/src/main/config/webapps/test.xml
@@ -45,7 +45,10 @@
   <!-- virtual hosts
   <Set name="virtualHosts">
     <Array type="String">
-      <Item>www.myVirtualDomain.com</Item>
+      <Item>www.MyVirtualDomain.com</Item>
+      <Item>m.MyVirtualDomain.com</Item>
+      <Item>*.OtherVirtualDomain.com</Item>
+      <Item>@ConnectorName</Item>
       <Item>localhost</Item>
       <Item>127.0.0.1</Item>
     </Array>
diff --git a/tests/test-webapps/test-jndi-webapp/pom.xml b/tests/test-webapps/test-jndi-webapp/pom.xml
index dd1a649..f6a62de 100644
--- a/tests/test-webapps/test-jndi-webapp/pom.xml
+++ b/tests/test-webapps/test-jndi-webapp/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-webapps-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <artifactId>test-jndi-webapp</artifactId>
   <name>Jetty Tests :: WebApp :: JNDI</name>
diff --git a/tests/test-webapps/test-mock-resources/pom.xml b/tests/test-webapps/test-mock-resources/pom.xml
index 010dd00..6714ae3 100644
--- a/tests/test-webapps/test-mock-resources/pom.xml
+++ b/tests/test-webapps/test-mock-resources/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-webapps-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <name>Jetty Tests :: WebApp :: Mock Resources</name>
   <artifactId>test-mock-resources</artifactId>
diff --git a/tests/test-webapps/test-proxy-webapp/pom.xml b/tests/test-webapps/test-proxy-webapp/pom.xml
index 9aaf34d..8facf19 100644
--- a/tests/test-webapps/test-proxy-webapp/pom.xml
+++ b/tests/test-webapps/test-proxy-webapp/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-webapps-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/tests/test-webapps/test-servlet-spec/pom.xml b/tests/test-webapps/test-servlet-spec/pom.xml
index 6c61e57..b36590c 100644
--- a/tests/test-webapps/test-servlet-spec/pom.xml
+++ b/tests/test-webapps/test-servlet-spec/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-webapps-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <artifactId>test-servlet-spec-parent</artifactId>
   <name>Jetty Tests :: Spec Test WebApp :: Parent</name>
diff --git a/tests/test-webapps/test-servlet-spec/test-container-initializer/pom.xml b/tests/test-webapps/test-servlet-spec/test-container-initializer/pom.xml
index fe27436..603cdbe 100644
--- a/tests/test-webapps/test-servlet-spec/test-container-initializer/pom.xml
+++ b/tests/test-webapps/test-servlet-spec/test-container-initializer/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-servlet-spec-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <artifactId>test-container-initializer</artifactId>
   <packaging>jar</packaging>
diff --git a/tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml b/tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml
index 3ae3cc3..2572855 100644
--- a/tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml
+++ b/tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-servlet-spec-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <name>Jetty Tests :: Webapps :: Spec Webapp</name>
   <artifactId>test-spec-webapp</artifactId>
diff --git a/tests/test-webapps/test-servlet-spec/test-web-fragment/pom.xml b/tests/test-webapps/test-servlet-spec/test-web-fragment/pom.xml
index 3206a0b..ce89abd 100644
--- a/tests/test-webapps/test-servlet-spec/test-web-fragment/pom.xml
+++ b/tests/test-webapps/test-servlet-spec/test-web-fragment/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-servlet-spec-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <name>Jetty Tests :: WebApp :: Servlet Spec :: Fragment Jar</name>
   <groupId>org.eclipse.jetty.tests</groupId>
diff --git a/tests/test-webapps/test-webapp-rfc2616/pom.xml b/tests/test-webapps/test-webapp-rfc2616/pom.xml
index 0dd389f..f96b4c5 100644
--- a/tests/test-webapps/test-webapp-rfc2616/pom.xml
+++ b/tests/test-webapps/test-webapp-rfc2616/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.eclipse.jetty.tests</groupId>
     <artifactId>test-webapps-parent</artifactId>
-    <version>9.0.2-SNAPSHOT</version>
+    <version>9.0.3-SNAPSHOT</version>
   </parent>
   <artifactId>test-webapp-rfc2616</artifactId>
   <name>Jetty Tests :: WebApp :: RFC2616</name>
