PROTON-1362: remove previously-deprecated Messenger
diff --git a/docs/markdown/index.md b/docs/markdown/index.md
deleted file mode 100644
index 5262c44..0000000
--- a/docs/markdown/index.md
+++ /dev/null
@@ -1,27 +0,0 @@
-
-Proton is a library for speaking AMQP, including:
-
-- The AMQP [Messenger API](messenger/index.html), a simple but powerful interface to send and receive
-  messages over AMQP.
-- The [AMQP Protocol Engine](engine/engine.html), a succinct encapsulation of the full
-  AMQP protocol machinery.
-
-Proton is designed for maximum embeddability:
-
-- minimal dependencies
-- minimal assumptions about application threading model
-
-Proton is designed to scale up and down:
-
-- transparently supports both simple peer to peer messaging and complex
-globally federated topologies
-
-Proton is multi-lingual:
-
-- Proton-C - a C implementation with lanuage bindings in Python, Php, Perl,
-Ruby, and Java (via JNI).
-- Proton-J - a pure Java implementation
-
-Please see http://qpid.apache.org/proton for a more info.
-
-
diff --git a/docs/markdown/messenger/addressing-and-routing.md b/docs/markdown/messenger/addressing-and-routing.md
deleted file mode 100644
index 9714e1e..0000000
--- a/docs/markdown/messenger/addressing-and-routing.md
+++ /dev/null
@@ -1,210 +0,0 @@
-
-Messenger Addressing and Routing
-=================================================
-
-
-Addressing
--------------------------
-
-An address has the following form:
-
- [ amqp[s]:// ] [user[:password]@] domain [/[name]]
-
-Where domain can be one of:
-
- host | host:port | ip | ip:port | name
-
-The following are valid examples of addresses:
-
-    * example.org
-    * example.org:1234
-    * amqp://example.org
-    * amqps://example.org
-    * example.org/incoming
-    * amqps://example.org/outgoing
-    * amqps://fred:trustno1@example.org
-    * 127.0.0.1:1234
-    * amqps://127.0.0.1:1234
-
-The "/name" part of the address, that optionally follows
-the domain, is not used by the Messenger library.
-For example, if a receiver subscribes to 
-    
-        amqp://~0.0.0.0:5678
-
-Then it will receive messages sent to
-
-        amqp://~0.0.0.0:5678
-as well as
-        amqp://~0.0.0.0:5678/foo
-
-
-Likewise, if the receiver subscribes to
-
-        amqp://~0.0.0.0:5678/foo
-
-it will receive messages addressed to
-
-        amqp://~0.0.0.0:5678/foo
-        amqp://~0.0.0.0:5678
-
-and
-
-        amqp://~0.0.0.0:5678/bar
-
-
-
-
-<br/>
-
-Routing
-------------------------------
-
-### Pattern Matching, Address Translation, and Message Routing ###
-
-The Messenger library provides message routing capability
-with an address translation table.  Each entry in the table 
-consists of a *pattern* and a *translation*.
-
-You store a new route entry in the table with the call:
-
-        pn_messenger_route(messenger, pattern, translation);
-
-
-The address of each outgoing message is compared to the 
-table's patterns until the first matching pattern is found,
-or until all patterns have failed to match.
-
-If no pattern matches, then Messenger will send (or attempt
-to send) your message with the address as given.
-
-If a pattern does match your outgoing message's address, then
-Messenger will create a temporary address by transforming
-your message's address.  Your message will be sent to the 
-transformed address, but **(note!)** the address on your 
-outgoing message will not be changed.  The receiver will see 
-the original, not the transformed address.
-
-
-<br/>
-
-### Two Translation Mechanisms ###
-
-
-Messenger uses two mechanisms to translate addresses.
-The first is simple string substitution.
-
-
-        pattern:     COLOSSUS
-        translation: amqp://0.0.0.0:6666
-        input addr:  COLOSSUS
-        result:      amqp://0.0.0.0:6666
-
-
-The second mechanism is wildcard/variable substitution.
-A wildcard in the pattern matches all or part of your 
-input address.  The part of your input address that matched
-the wildcard is stored.  The matched value is then inserted
-into your translated address in place of numbered variables:
-$1, $2, and so on, up to a maximum of 64.
-
-There are two wildcards: * and % .
-The rules for matching are:
-
-        * matches anything
-        % matches anything but a /
-        other characters match themselves
-        the whole input addr must be matched
-
-
-Examples of wildcard matching:
-
-        pattern:      /%/%/%
-        translation:  $1x$2x$3
-        input addr:   /foo/bar/baz
-        result:       fooxbarxbaz
-
-        pattern:      *
-        translation:  $1
-        inout addr:   /foo/bar/baz
-        result:       /foo/bar/baz
-
-        pattern:      /*
-        translation:  $1
-        input addr:   /foo/bar/baz
-        result:       foo/bar/baz
-
-        pattern:      /*baz
-        translation:  $1
-        input addr:   /foo/bar/baz
-        result:       foo/bar/
-
-        pattern:      /%baz
-        translation:  $1
-        input addr:   /foo/bar/baz
-        result:       FAIL
-
-        pattern:      /%/baz
-        translation:  $1
-        input addr:   /foo/bar/baz
-        result:       FAIL
-
-        pattern:      /%/%/baz
-        translation:  $1
-        input addr:   /foo/bar/baz
-        result:       foo
-
-        pattern:      /*/baz
-        translation:  $1
-        input addr:   /foo/bar/baz
-        result:       foo/bar
-
-
-Examples of route translation usage:
-
-        pattern:     foo
-        translation: amqp://foo.com
-        explanation: Any message sent to "foo" will be routed to "amqp://foo.com"
-
-
-        pattern:     bar/*
-        translation: amqp://bar.com/$1
-        explanation: Any message sent to bar/<path> will be routed to the corresponding path within the amqp://bar.com domain.
-
-
-        pattern:     amqp:*
-        translation: amqps:$1
-        explanation: Route all messages over TLS.
-
-
-        pattern:     amqp://foo.com/*
-        translation: amqp://user:password@foo.com/$1
-        explanation: Supply credentials for foo.com.
-
-
-        pattern:     amqp://*
-        translation: amqp://user:password@$1
-        explanation: Supply credentials for all domains.
-
-
-        pattern:     amqp://%/*
-        translation: amqp://user:password@proxy/$1/$2
-        explanation: Route all addresses through a single proxy while preserving the
-         original destination.
-
-
-        pattern:     *
-        translation: amqp://user:password@broker/$1
-        explanation: Route any address through a single broker.
-
-
-
-<br/>
-
-### First Match Wins ###
-
-If you create multiple routing rules, each new rule is appended
-to your Messenger's list.  At send-time, Messenger looks down the 
-list, and the first rule that matches your outgoing message's 
-address wins.  Thus, when creating your routing rules, you should
-create them in order of most specific first, most general last.
diff --git a/docs/markdown/messenger/index.md b/docs/markdown/messenger/index.md
deleted file mode 100644
index e8ccaa4..0000000
--- a/docs/markdown/messenger/index.md
+++ /dev/null
@@ -1,13 +0,0 @@
-Proton Messenger Documentation
-==========================================
-
-Proton Messenger is a high-level API that lets you build simple but powerful messaging systems.
-
-- Use the [Linux Quick Start](quick-start-linux.html) to download, build, and run your first Messenger example in two minutes.
-
-- Examples and explanations of Messenger's [Sending and Receiving](sending-and-receiving.html) capabilities.
-
-- Use [Message Disposition](message-disposition.html) functionality to create reliable messaging systems.
-
-- Messenger's [Addressing and Routing](addressing-and-routing.html) capabilities allow you to separate application code from installation-specific configuration information.
-
diff --git a/docs/markdown/messenger/message-disposition.md b/docs/markdown/messenger/message-disposition.md
deleted file mode 100644
index bf66d2e..0000000
--- a/docs/markdown/messenger/message-disposition.md
+++ /dev/null
@@ -1,196 +0,0 @@
-Message Disposition
-===============================
-
-
-Messenger disposition operations allow a receiver to accept or
-reject specific messages, or ranges of messages.  Senders can
-then detect the disposition of their messages.
-
-
-Message States
----------------------------
-
-Messages have one of four different states:  
-        `PN_STATUS_UNKNOWN`  
-        `PN_STATUS_PENDING`  
-        `PN_STATUS_ACCEPTED`  
-        `PN_STATUS_REJECTED`  
-
-<br/>
-
-
-Windows and Trackers
-----------------------------
-
-<br/>
-
-Messenger does not track the disposition of every message that
-it sends or receives.  To set (or get) the disposition of a 
-message, that message must be within your incoming (or outgoing)
-window.
-
-( I will use the incoming direction as the example.  The outgoing
-direction works similarly. )
-
-When you call
-  
-        pn_messenger_set_incoming_window(messenger, window_size);
-
-you have only declared the window size.  The window is not yet
-created.  The window will be created when you issue your first
-call to 
-
-        pn_messenger_get(messenger, msg);
-
-And the window will be further populated only by further calls to
-pn_messenger_get().
-
-
-
-
-
-
-
-### Receiving ###
-
-To explicitly set or get message dispositions, your messenger
-must set a positive size for its incoming window:
-
-        pn_messenger_set_incoming_window(messenger, N);
-
-You can implicity accept messages by simply letting enough
-new messages arrive.  As older messages pass beyond the threshold
-of your incoming window size, they will be automatically
-accepted.  Thus, if you want to automatically accept all
-messages as they arrive, you can set your incoming window
-size to 0.
-
-To exercise *explicit* control over particular messages or ranges
-of messages, the receiver can use trackers. The call
-
-        pn_messenger_incoming_tracker(messenger);
-
-will return a tracker for the message most recently returned
-by a call to
-
-        pn_messenger_get(messenger, message);
-With a message that is being tracked, the messenger can accept
-(or reject) that individual message:
-
-        pn_messenger_accept(messenger, tracker, 0);
-        pn_messenger_reject(messenger, tracker, 0);
-
-Or it can accept (or reject) the tracked message as well as all older
-messages back to the limit of the incoming window:
-
-        pn_messenger_accept(messenger, tracker, PN_CUMULATIVE);
-        pn_messenger_reject(messenger, tracker, PN_CUMULATIVE);
-
-Once a message is accepted or rejected, its status can no longer
-be changed, even if you have a separate tracker associated with it.
-
-
-
-<br/>
-
-###When to Accept###
-
-Although you *can* accept messages implicitly by letting them fall 
-off the edge of your incoming window, you *shouldn't*.  Message
-disposition is an important form of communication to the sender.
-The best practice is to let the sender know your response, by 
-explicit acceptance or rejection, as soon as you can.  Implicitly 
-accepting messages by allowing them to fall off the edge of the 
-incoming window could delay your response to the sender for an 
-unpredictable amount of time.
-
-A nonzero window size places a limit on
-how much state your Messenger needs to track.
-
-<br/>
-
-###Accepting by Accident####
-
-If you allow a message to "fall off the edge" of your incoming 
-window before you have explicitly accepted or rejected it, then
-it will be accepted automatically.
-
-But since your incoming window is only filled by calls to 
-
-        pn_messenger_get(messenger, msg);
-
-messages cannot be forced to fall over the edge by simply 
-receiving more messages.  Messages will not be forced over the
-edge of the incoming window unless you make too many calls to
-`pn_messenger_get()` without explicitly accepting or rejecting 
-the messages.
-
-Your application should accept or reject each message as soon 
-as practical after getting and processing it.
-
-
-
-
-<br/>
-<br/>
-   
-
-
-### Sending ###
-
-A sender can learn how an individual message has been received
-if it has a positive outgoing window size:
-
-        pn_messenger_set_outgoing_window(messenger, N);
-
-and if a tracker has been associated with that message in question.  
-This call:
-
-        pn_messenger_outgoing_tracker(messenger);
-
-will return a tracker for the message most recently given to:
-
-        pn_messenger_put(messenger, message);
-
-To later find the status of the individual tracked message, you can call:
-
-        pn_messenger_status(messenger, tracker);
-
-The returned value will be one of
-
-* `PN_STATUS_ACCEPTED`
-* `PN_STATUS_REJECTED` , or
-* `PN_STATUS_PENDING` - If the receiver has not disposed the message yet.  
-
-
-If either the sender or the receiver simply declares the message (or range of messages) to
-be settled, with one of these calls:
-
-        pn_messenger_settle(messenger, tracker, 0);
-        pn_messenger_settle(messenger, tracker, PN_CUMULATIVE);
-
-then the sender will see `PN_STATUS_PENDING` as the status of any
-settled messages.
-
-<br/>
-
-
-### Message Rejection ###
-If a message is rejected by the receiver, it does not mean that
-the message was malformed.  Malformed messages cannot be sent.
-Even messages with no content are valid messages.
-Rejection by a receiver should be understood as the receiver
-saying "I don't want this." or possibly  "I don't want this *yet*." 
-depending on your application.
-The sender could decide to try sending the same message again later, 
-or to send the message to another receiver, or to discard it.
-
-The AMQP 1.0 specification permits a distinction
-between *rejecting* the message, and *releasing* the message,
-but the Proton library does not expose the *releasing* 
-disposition.
-
-
-
-
-
diff --git a/docs/markdown/messenger/quick-start-linux.md b/docs/markdown/messenger/quick-start-linux.md
deleted file mode 100644
index e8ef466..0000000
--- a/docs/markdown/messenger/quick-start-linux.md
+++ /dev/null
@@ -1,73 +0,0 @@
-Linux Proton Messenger Quick Start
-==============================================
-
-
-On a Linux system, these instructions take you from
-zero to running your first example code.  You will 
-need root privileges for one of the commands.
-
-
-
-
-Prerequisite Packages
----------------------------------
-
-For a minimum build, you will need packages installed on your
-box for :
-
-        subversion
-        gcc
-        cmake
-        libuuid-devel
-
-
-
-Quick Start Commands
----------------------------
-
-    svn co http://svn.apache.org/repos/asf/qpid/proton/trunk proton
-    cd ./proton
-    mkdir ./build
-    cd ./build
-    cmake ..
-    make all
-    # Become root and go to your build dir.
-    make install
-    # Stop being root.
-    # Now let's see if it works.
-    cd ./proton-c/examples/messenger/c
-    ./recv &
-    ./send
-    # You're done ! ( Kill that recv process. )
-    # The output you should see:
-
-        Address: amqp://0.0.0.0
-        Subject: (no subject)
-        Content: "Hello World!"
-
-
-
-
-
-Notes
-----------------------------
-
-1. If you will be editing and checking in code from this tree,
-   replace the "svn co" line with this:
-
-        svn co https://svn.apache.org/repos/asf/qpid/proton/trunk
-
-   You must check out through https, or you will not be able to
-   check in code changes from your tree.
-
-
-2. The recv application in the example defaults to the same port
-   as the qpid demon.  If you happen to have that demon running,
-   and using the default port, the recv app above will fail.
-
-
-3. If you don't have root privileges, you can still do the 
-   "make install" step by setting a non-standard prefix, thus:
-        cmake -DCMAKE_INSTALL_PREFIX=/my/path ..
-
-
diff --git a/docs/markdown/messenger/sending-and-receiving.md b/docs/markdown/messenger/sending-and-receiving.md
deleted file mode 100644
index 555075e..0000000
--- a/docs/markdown/messenger/sending-and-receiving.md
+++ /dev/null
@@ -1,144 +0,0 @@
-Sending and Receiving Messages
-=======================================================
-
-The Proton Messenger API provides a mixture of synchronous
-and asynchronous operations to give you flexibility in
-deciding when you application should block waiting for I/O,
-and when it should not.
-
-
-When sending messages, you can:
-
-* send a message immediately,
-* enqueue a message to be sent later,
-* block until all enqueued messages are sent,
-* send enqueued messages until a timeout occurs, or
-* send all messages that can be sent without blocking.
-
-When receiving messages, you can:
-
-* receive messages that can be received without blocking,
-* block until at least one message is received,
-* receive no more than a fixed number of messages.
-
-
-
-Functions
-------------------------------
-
-* `pn_messenger_put(messenger)`
-
-    Stage message for later transmission, and possibly
-    transmit any messages currently staged that are not
-    blocked.
-    This function will not block.
-
-
-
-* `pn_messenger_send(messenger)`
-
-    If messenger timeout is negative (initial default),
-    block until all staged messages have been sent.
-
-    If messenger timeout is 0, send all messages that
-    can be sent without blocking.
-
-    If messenger timeout is positive, send all messages
-    that can be sent until timeout expires.
-
-    *note: If there are any messages that can be received
-    when `pn_messenger_send()` is called, they will
-    be received.*
-
-
-
-* `pn_messenger_get(messenger, msg)`
-
-    Dequeue the head of the incoming message queue to
-    your application.
-    This call does not block.
-
-
-
-* `pn_messenger_recv(messenger)`
-
-    If messenger timeout is negative(initial default),
-    block until at least one message is received.
-
-    If timeout is 0, receive whatever messages are available,
-    but do not block.
-
-    If timeout is positive, receive available messages until
-    timeout expires.
-
-    *note: If there are any unblocked outgoing messages,
-    they will be sent during this call.*
-
-
-
-
-
-Examples
-------------------------------
-
-* send a message immediately
-
-        pn_messenger_put(messenger, msg);
-        pn_messenger_send(messenger);
-
-
-
-* enqueue a message to be sent later
-
-        pn_messenger_put(messenger, msg);
-
-    *note:
-    The message will be sent whenever it is not blocked and
-    the Messenger code has other I/O work to be done.*
-
-
-
-* block until all enqueued messages are sent
-
-        pn_messenger_set_timeout(messenger, -1);
-        pn_messenger_send(messenger);
-
-    *note:
-    A negative timeout means 'forever'.  That is the initial
-    default for a messenger.*
-
-
-
-* send enqueued messages until a timeout occurs
-
-        pn_messenger_set_timeout(messenger, 100); /* 100 msec */
-        pn_messenger_send(messenger);
-
-
-
-* send all messages that can be sent without blocking
-
-        pn_messenger_set_timeout(messenger, 0);
-        pn_messenger_send(messenger);
-
-
-
-* receive messages that can be received without blocking
-
-        pn_messenger_set_timeout(messenger, 0);
-        pn_messenger_recv(messenger, -1);
-
-
-* block until at least one message is received
-
-        pn_messenger_set_timeout(messenger, -1);
-        pn_messenger_recv(messenger, -1);
-
-    *note: -1 is initial messenger default.*
-
-
-
-* receive no more than a fixed number of messages
-
-        pn_messenger_recv(messenger, 10);
-
diff --git a/examples/java/messenger/README.txt b/examples/java/messenger/README.txt
deleted file mode 100644
index 20d3788..0000000
--- a/examples/java/messenger/README.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-This directory contains java examples that use the messenger API.
-Based on the python examples in  ../py
-
-  Send.java - a simple example of using the messenger API to send messages
-  Recv.java - a simple example of using the messenger API to receive messages
-
-Note that depending on the address passed into these scripts, you can
-use them in either a peer to peer or a brokered scenario.
-
-For brokered usage:
-  java Recv.class amqp://<broker>/<queue>
-  java Send.class -a amqp://<broker>/<queue> msg_1 ... msg_n
-
-For peer to peer usage:
-  # execute on <host> to receive messages from all local network interfaces
-  java Recv.class amqp://~0.0.0.0
-  java Send.class -a amqp://<host> msg_1 ... msg_n
-
-Or, use the shell scripts "recv" and "send" to run the java programs:
-recv [-v] [-n MAXMESSAGES] [-a ADDRESS] ... [-a ADDRESS]
-send [-a ADDRESS] [-s SUBJECT] MESSAGE ... MESSAGE
-
diff --git a/examples/java/messenger/pom.xml b/examples/java/messenger/pom.xml
deleted file mode 100644
index a23a4a3..0000000
--- a/examples/java/messenger/pom.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-  
-  http://www.apache.org/licenses/LICENSE-2.0
-  
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <parent>
-    <groupId>org.apache.qpid</groupId>
-    <artifactId>proton-project</artifactId>
-    <version>0.17.0-SNAPSHOT</version>
-    <relativePath>../../..</relativePath>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>proton-j-messenger-example</artifactId>
-  <name>proton-j-messenger-example</name>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.qpid</groupId>
-      <artifactId>proton-j</artifactId>
-      <version>${project.parent.version}</version>
-    </dependency>
-  </dependencies>
-
-  <scm>
-    <url>http://svn.apache.org/viewvc/qpid/proton/</url>
-  </scm>
-</project>
diff --git a/examples/java/messenger/recv b/examples/java/messenger/recv
deleted file mode 100755
index 862700c..0000000
--- a/examples/java/messenger/recv
+++ /dev/null
@@ -1,31 +0,0 @@
-#! /bin/bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-# Usage: recv [-v] [-n MAXMESSAGES] [-a ADDRESS]*"
-# Subscribes to the given amqp addresses (by default, to amqp://localhost/test),
-# and prints messages received, upt to MAXMESSAGES. 
-# Prints message headers and body; -v means print all message properties.
-
-HERE=$(cd $(dirname $0); pwd)
-TOP=$(cd $(dirname $0); cd  ../../..; pwd)
-LIBS=$HERE/target/classes:$TOP/proton-j/target/classes
-JFLAGS="-Djava.util.logging.config.file=$HERE/recv.trace.props -cp $LIBS"
-java -cp $LIBS org.apache.qpid.proton.example.Recv "$@"
-
diff --git a/examples/java/messenger/send b/examples/java/messenger/send
deleted file mode 100755
index e7b4b67..0000000
--- a/examples/java/messenger/send
+++ /dev/null
@@ -1,29 +0,0 @@
-#! /bin/bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-# Usage: send [-a ADDRESS] [-s SUBJECT] MESSAGE ... MESSAGE
-# sends each arg as a text-message to the given adress (by default, to amqp://localhost/test)
-
-HERE=$(cd $(dirname $0); pwd)
-TOP=$(cd $(dirname $0); cd  ../../..; pwd)
-LIBS=$HERE/target/classes:$TOP/proton-j/target/classes
-JFLAGS="-Djava.util.logging.config.file=$HERE/send.trace.props -cp $LIBS"
-java -cp $LIBS org.apache.qpid.proton.example.Send "$@"
-
diff --git a/examples/java/messenger/src/main/java/org/apache/qpid/proton/example/Recv.java b/examples/java/messenger/src/main/java/org/apache/qpid/proton/example/Recv.java
deleted file mode 100644
index 3934cff..0000000
--- a/examples/java/messenger/src/main/java/org/apache/qpid/proton/example/Recv.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.proton.example;
-
-import org.apache.qpid.proton.message.Message;
-import org.apache.qpid.proton.messenger.Messenger;
-import org.apache.qpid.proton.messenger.impl.MessengerImpl;
-import org.apache.qpid.proton.amqp.messaging.ApplicationProperties;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Example/test of the java Messenger/Message API.
- * Based closely qpid src/proton/examples/messenger/py/recv.py
- * @author mberkowitz@sf.org
- * @since 8/4/2013
- * @deprecated Messenger will be removed from upcoming proton-j releases.
- */
-@Deprecated
-public class Recv {
-    private static Logger tracer = Logger.getLogger("proton.example");
-    private boolean verbose = false;
-    private int maxct = 0;
-    private List<String> addrs = new ArrayList<String>();
-
-    private static void usage() {
-        System.err.println("Usage: recv [-v] [-n MAXCT] [-a ADDRESS]*");
-        System.exit(2);
-    }
-
-    private Recv(String args[]) {
-        int i = 0;
-        while (i < args.length) {
-            String arg = args[i++];
-            if (arg.startsWith("-")) {
-                if ("-v".equals(arg)) {
-                    verbose = true;
-                } else if ("-a".equals(arg)) {
-                    addrs.add(args[i++]);
-                } else if ("-n".equals(arg)) {
-                    maxct = Integer.valueOf(args[i++]);
-                } else {
-                    System.err.println("unknown option " + arg);
-                    usage();
-                }
-            } else {
-                usage();
-            }
-        }
-        if (addrs.size() == 0) {
-            addrs.add("amqp://~0.0.0.0");
-        }
-    }
-
-    private static String safe(Object o) {
-        return String.valueOf(o);
-    }
-
-    private void print(int i, Message msg) {
-        StringBuilder b = new StringBuilder("message: ");
-        b.append(i).append("\n");
-        b.append("Address: ").append(msg.getAddress()).append("\n");
-        b.append("Subject: ").append(msg.getSubject()).append("\n");
-        if (verbose) {
-            b.append("Props:     ").append(msg.getProperties()).append("\n");
-            b.append("App Props: ").append(msg.getApplicationProperties()).append("\n");
-            b.append("Msg Anno:  ").append(msg.getMessageAnnotations()).append("\n");
-            b.append("Del Anno:  ").append(msg.getDeliveryAnnotations()).append("\n");
-        } else {
-            ApplicationProperties p = msg.getApplicationProperties();
-            String s = (p == null) ? "null" : safe(p.getValue());
-            b.append("Headers: ").append(s).append("\n");
-        }
-        b.append(msg.getBody()).append("\n");
-        b.append("END").append("\n");
-        System.out.println(b.toString());
-    }
-
-    private void run() {
-        try {
-            Messenger mng = new MessengerImpl();
-            mng.start();
-            for (String a : addrs) {
-                mng.subscribe(a);
-            }
-            int ct = 0;
-            boolean done = false;
-            while (!done) {
-                mng.recv();
-                while (mng.incoming() > 0) {
-                    Message msg = mng.get();
-                    ++ct;
-                    print(ct, msg);
-                    if (maxct > 0 && ct >= maxct) {
-                        done = true;
-                        break;
-                    }
-                }
-            }
-            mng.stop();
-        } catch (Exception e) {
-            tracer.log(Level.SEVERE, "proton error", e);
-        }
-    }
-
-    public static void main(String args[]) {
-        Recv o = new Recv(args);
-        o.run();
-    }
-}
-
diff --git a/examples/java/messenger/src/main/java/org/apache/qpid/proton/example/Send.java b/examples/java/messenger/src/main/java/org/apache/qpid/proton/example/Send.java
deleted file mode 100644
index 6f4a919..0000000
--- a/examples/java/messenger/src/main/java/org/apache/qpid/proton/example/Send.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.proton.example;
-
-import org.apache.qpid.proton.amqp.messaging.AmqpValue;
-import org.apache.qpid.proton.message.Message;
-import org.apache.qpid.proton.message.impl.MessageImpl;
-import org.apache.qpid.proton.messenger.Messenger;
-import org.apache.qpid.proton.messenger.impl.MessengerImpl;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Example/test of the java Messenger/Message API.
- * Based closely qpid src/proton/examples/messenger/py/send.py
- * @author mberkowitz@sf.org
- * @since 8/4/2013
- * @deprecated Messenger will be removed from upcoming proton-j releases.
- */
-@Deprecated
-public class Send {
-
-    private static Logger tracer = Logger.getLogger("proton.example");
-    private String address = "amqp://0.0.0.0";
-    private String subject;
-    private String[] bodies = new String[]{"Hello World!"};
-
-    private static void usage() {
-        System.err.println("Usage: send [-a ADDRESS] [-s SUBJECT] MSG+");
-        System.exit(2);
-    }
-
-    private Send(String args[]) {
-        int i = 0;
-        while (i < args.length) {
-            String arg = args[i++];
-            if (arg.startsWith("-")) {
-                if ("-a".equals(arg)) {
-                    address = args[i++];
-                } else if ("-s".equals(arg)) {
-                    subject = args[i++];
-                } else {
-                    System.err.println("unknown option " + arg);
-                    usage();
-                }
-            } else {
-                --i;
-                break;
-            }
-        }
-
-        if(i != args.length)
-        {
-            bodies = Arrays.copyOfRange(args, i, args.length);
-        }
-    }
-
-    private void run() {
-        try {
-            Messenger mng = new MessengerImpl();
-            mng.start();
-            Message msg = new MessageImpl();
-            msg.setAddress(address);
-            if (subject != null) msg.setSubject(subject);
-            for (String body : bodies) {
-                msg.setBody(new AmqpValue(body));
-                mng.put(msg);
-            }
-            mng.send();
-            mng.stop();
-        } catch (Exception e) {
-            tracer.log(Level.SEVERE, "proton error", e);
-        }
-    }
-
-    public static void main(String args[]) {
-        Send o = new Send(args);
-        o.run();
-    }
-}
-
-
-
diff --git a/pom.xml b/pom.xml
index 7391713..7f2b443 100644
--- a/pom.xml
+++ b/pom.xml
@@ -137,7 +137,6 @@
     <module>proton-j</module>
     <module>tests</module>
     <module>examples/engine/java</module>
-    <module>examples/java/messenger</module>
     <module>examples/java/reactor</module>
   </modules>
 
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/Proton.java b/proton-j/src/main/java/org/apache/qpid/proton/Proton.java
index 38f39e0..b428736 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/Proton.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/Proton.java
@@ -31,7 +31,6 @@
 import org.apache.qpid.proton.amqp.messaging.Section;
 import org.apache.qpid.proton.codec.Codec;
 import org.apache.qpid.proton.codec.Data;
-import org.apache.qpid.proton.driver.Driver;
 import org.apache.qpid.proton.engine.Collector;
 import org.apache.qpid.proton.engine.Connection;
 import org.apache.qpid.proton.engine.Engine;
@@ -40,10 +39,8 @@
 import org.apache.qpid.proton.engine.SslPeerDetails;
 import org.apache.qpid.proton.engine.Transport;
 import org.apache.qpid.proton.message.Message;
-import org.apache.qpid.proton.messenger.Messenger;
 import org.apache.qpid.proton.reactor.Reactor;
 
-@SuppressWarnings("deprecation")
 public final class Proton
 {
 
@@ -96,33 +93,6 @@
                                       applicationProperties, body, footer);
     }
 
-    /**
-     * @deprecated Messenger will be removed from upcoming proton-j releases.
-     */
-    @Deprecated
-    public static Messenger messenger()
-    {
-        return Messenger.Factory.create();
-    }
-
-    /**
-     * @deprecated  Messenger will be removed from upcoming proton-j releases.
-     */
-    @Deprecated
-    public static Messenger messenger(String name)
-    {
-        return Messenger.Factory.create(name);
-    }
-
-    /**
-     * @deprecated Messenger and its driver will be removed from upcoming proton-j releases.
-     */
-    @Deprecated
-    public static Driver driver() throws IOException
-    {
-        return Driver.Factory.create();
-    }
-
     public static Reactor reactor() throws IOException
     {
         return Reactor.Factory.create();
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/driver/Connector.java b/proton-j/src/main/java/org/apache/qpid/proton/driver/Connector.java
deleted file mode 100644
index 619b1cf..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/driver/Connector.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.proton.driver;
-
-import java.io.IOException;
-
-import org.apache.qpid.proton.engine.Connection;
-import org.apache.qpid.proton.engine.Sasl;
-import org.apache.qpid.proton.engine.Transport;
-
-/**
- * Intermediates between a proton engine {@link Connection} and the I/O
- * layer.
- *
- * The top half of the engine can be access via {@link #getConnection()}.
- * The bottom half of the engine is used by {@link #process()}.
- * Stores application specific context using {@link #setContext(Object)}.
- *
- * Implementations are not necessarily thread-safe.
- *
- * @param <C> application supplied context
- * @deprecated Messenger and its connector will be removed from upcoming proton-j releases.
- */
-@Deprecated
-public interface Connector<C>
-{
-    /**
-     * Handle any inbound data, outbound data, or timing events pending on
-     * the connector.
-     * Typically, applications repeatedly invoke this method
-     * during the lifetime of a connection.
-     */
-    boolean process() throws IOException;
-
-    /**
-     * Access the listener which opened this connector.
-     *
-     * @return the listener which created this connector, or null if the
-     *         connector has no listener (e.g. an outbound client
-     *         connection).
-     */
-    @SuppressWarnings("rawtypes")
-    Listener listener();
-
-    /**
-     * Access the Authentication and Security context of the connector.
-     *
-     * @return the Authentication and Security context for the connector,
-     *         or null if none.
-     */
-    Sasl sasl();
-
-    /**
-     * Access the Transport associated with the connector.
-     *
-     */
-
-    Transport getTransport();
-
-    /**
-     * Access the AMQP Connection associated with the connector.
-     *
-     * @return the connection context for the connector, or null if none.
-     */
-    Connection getConnection();
-
-    /**
-     * Assign the AMQP Connection associated with the connector.
-     *
-     * @param connection the connection to associate with the connector.
-     */
-    void setConnection(Connection connection);
-
-    /**
-     * Access the application context that is associated with the connector.
-     *
-     * @return the application context that was passed when creating this
-     *         connector. See
-     *         {@link Driver#createConnector(String, int, Object)
-     *         createConnector(String, int, Object)} and
-     *         {@link Driver#createConnector(java.nio.channels.SelectableChannel, Object)
-     *         createConnector(java.nio.channels.SelectableChannel, Object)}.
-     */
-    C getContext();
-
-    /**
-     * Assign a new application context to the connector.
-     *
-     * @param context new application context to associate with the connector
-     */
-    void setContext(C context);
-
-    /**
-     * Close the socket used by the connector.
-     */
-    void close();
-
-    /**
-     * Determine if the connector is closed.
-     */
-    boolean isClosed();
-
-    /**
-     * Destructor for the given connector.
-     *
-     * Assumes the connector's socket has been closed prior to call.
-     */
-    void destroy();
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/driver/Driver.java b/proton-j/src/main/java/org/apache/qpid/proton/driver/Driver.java
deleted file mode 100644
index 3d8ada3..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/driver/Driver.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.proton.driver;
-
-import java.io.IOException;
-import java.nio.channels.SelectableChannel;
-import java.nio.channels.ServerSocketChannel;
-
-import org.apache.qpid.proton.driver.impl.DriverImpl;
-
-/**
- * A driver for the proton engine.
- *
- * Manages {@link Connector}'s and {@link Listener}'s, which act as intermediaries between
- * the proton engine and the network.
- *
- * Provides methods for the application to access the "top half" of the engine API when the state
- * of the engine may have changed due to I/O or timing events - see {@link #connector()}.
- *
- * Connectors incorporate the SASL engine in order to provide a complete network stack:
- * AMQP over SASL over TCP.
- *
- * Unless otherwise stated, methods on Driver implementations are not necessarily thread-safe.
- *
- * @deprecated Messenger and its driver will be removed from upcoming proton-j releases.
- */
-@Deprecated
-public interface Driver
-{
-    /**
-     * @deprecated Messenger and its driver will be removed from upcoming proton-j releases.
-     */
-    @Deprecated
-    public static final class Factory
-    {
-        public static Driver create() throws IOException {
-            return new DriverImpl();
-        }
-    }
-
-    /**
-     * Force {@link #doWait(long)} to return.
-     *
-     * If the driver is not currently waiting then the next invocation of {@link #doWait(long)}
-     * will return immediately unless the {@link #connector()} method is invoked in the meantime.
-     *
-     * Thread-safe.
-     */
-    void wakeup();
-
-    /**
-     * Wait for an active connector or listener, or for {@link #wakeup()} to be called.
-     *
-     * Thread-safe.
-     *
-     * @param timeout maximum time in milliseconds to wait. -1 means wait indefinitely.
-     *
-     * @return true if woken up
-     */
-    boolean doWait(long timeout);
-
-    /**
-     * Get the next listener with pending data in the driver.
-     *
-     * @return null if no active listener available
-     */
-    @SuppressWarnings("rawtypes")
-    Listener listener();
-
-    /**
-     * Get the next active connector in the driver.
-     *
-     * Returns the next connector with pending inbound data, available capacity
-     * for outbound data, or pending tick.
-     *
-     * Clears the wake-up status that is set by {@link #wakeup()}.
-     *
-     * @return null if no active connector available
-     */
-    @SuppressWarnings("rawtypes")
-    Connector connector();
-
-    /**
-     * Destruct the driver and all associated listeners, connectors and other resources.
-     */
-    void destroy();
-
-    /**
-     * Construct a listener for the given address.
-     *
-     * @param host local host address to listen on
-     * @param port local port to listen on
-     * @param context application-supplied, can be accessed via
-     *                {@link Listener#getContext() getContext()} method on a listener.
-     * @return a new listener on the given host:port, null if error
-     */
-    <C> Listener<C> createListener(String host, int port, C context);
-
-    /**
-     * Create a listener using the existing channel.
-     *
-     * @param c   existing SocketChannel for listener to listen on
-     * @param context application-supplied, can be accessed via
-     *                {@link Listener#getContext() getContext()} method on a listener.
-     * @return a new listener on the given channel, null if error
-     */
-    <C> Listener<C> createListener(ServerSocketChannel c, C context);
-
-    /**
-     * Construct a connector to the given remote address.
-     *
-     * @param host remote host to connect to.
-     * @param port remote port to connect to.
-     * @param context application-supplied, can be accessed via
-     *                {@link Connector#getContext() getContext()} method on a listener.
-     *
-     * @return a new connector to the given remote, or null on error.
-     */
-    <C> Connector<C> createConnector(String host, int port, C context);
-
-    /**
-     * Create a connector using the existing file descriptor.
-     *
-     * @param fd   existing SocketChannel for listener to listen on
-     * @param context application-supplied, can be accessed via
-     *                {@link Connector#getContext() getContext()} method on a listener.
-     *
-     * @return a new connector to the given host:port, null if error.
-     */
-    <C> Connector<C> createConnector(SelectableChannel fd, C context);
-
-    /**
-     * Return an iterator over all listeners.
-     */
-    Iterable<Listener> listeners();
-    /**
-     * Return an iterator over all connectors.
-     */
-    Iterable<Connector> connectors();
-
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/driver/Listener.java b/proton-j/src/main/java/org/apache/qpid/proton/driver/Listener.java
deleted file mode 100644
index 7541d4d..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/driver/Listener.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.proton.driver;
-
-/**
- * Server API.
- *
- * @param <C> application supplied context
- * @deprecated Messenger and its listener will be removed from upcoming proton-j releases.
- */
-@Deprecated
-public interface Listener<C>
-{
-    /**
-     * Accept a connection that is pending on the listener.
-     *
-     * @return a new connector for the remote, or NULL on error.
-     */
-    Connector<C> accept();
-
-    /**
-     * Access the application context that is associated with the listener.
-     *
-     * @return the application context that was passed when creating this
-     *         listener. See {@link Driver#createListener(String, int, Object)
-     *         createListener(String, int, Object)} and
-     *         {@link Driver#createConnector(java.nio.channels.SelectableChannel, Object)
-     *         createConnector(java.nio.channels.SelectableChannel, Object)}
-     */
-    C getContext();
-
-    /**
-     * Set the application context that is associated with this listener.
-     *
-     */
-    void setContext(C ctx);
-
-    /**
-     * Close the socket used by the listener.
-     *
-     */
-    void close() throws java.io.IOException;
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/driver/impl/ConnectorImpl.java b/proton-j/src/main/java/org/apache/qpid/proton/driver/impl/ConnectorImpl.java
deleted file mode 100644
index 18cad9a..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/driver/impl/ConnectorImpl.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.qpid.proton.driver.impl;
-
-import static org.apache.qpid.proton.driver.impl.ConnectorImpl.ConnectorState.UNINITIALIZED;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.SocketChannel;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.qpid.proton.Proton;
-import org.apache.qpid.proton.driver.Connector;
-import org.apache.qpid.proton.driver.Listener;
-import org.apache.qpid.proton.engine.Connection;
-import org.apache.qpid.proton.engine.Sasl;
-import org.apache.qpid.proton.engine.Transport;
-import org.apache.qpid.proton.engine.TransportException;
-
-@SuppressWarnings("deprecation")
-class ConnectorImpl<C> implements Connector<C>
-{
-    private static int DEFAULT_BUFFER_SIZE = 64 * 1024;
-    private static int readBufferSize = Integer.getInteger
-        ("pn.receive_buffer_size", DEFAULT_BUFFER_SIZE);
-    private static int writeBufferSize = Integer.getInteger
-        ("pn.send_buffer_size", DEFAULT_BUFFER_SIZE);
-
-    enum ConnectorState {UNINITIALIZED, OPENED, EOS, CLOSED};
-
-    private final DriverImpl _driver;
-    private final Listener<C> _listener;
-    private final SocketChannel _channel;
-    private final Logger _logger = Logger.getLogger("proton.driver");
-    private C _context;
-
-    private Connection _connection;
-    private Transport _transport = Proton.transport();
-    private SelectionKey _key;
-    private ConnectorState _state = UNINITIALIZED;
-
-    private boolean _inputDone = false;
-    private boolean _outputDone = false;
-    private boolean _closed = false;
-
-    private boolean _selected = false;
-    private boolean _readAllowed = false;
-
-    ConnectorImpl(DriverImpl driver, Listener<C> listener, SocketChannel c, C context, SelectionKey key)
-    {
-        _driver = driver;
-        _listener = listener;
-        _channel = c;
-        _context = context;
-        _key = key;
-    }
-
-    void selected()
-    {
-        if (!_selected) {
-            _selected = true;
-            _driver.selectConnector(this);
-            _readAllowed = true;
-        }
-    }
-
-    void unselected()
-    {
-        _selected = false;
-    }
-
-    public boolean process() throws IOException
-    {
-        if (isClosed() || !_channel.finishConnect()) return false;
-
-        boolean processed = false;
-        if (!_inputDone)
-        {
-            if (read()) {
-                processed = true;
-            }
-        }
-
-        if (!_outputDone)
-        {
-            if (write()) {
-                processed = true;
-            }
-        }
-
-        if (_outputDone && _inputDone)
-        {
-            close();
-        }
-
-        return processed;
-    }
-
-    private boolean read() throws IOException
-    {
-        if (!_readAllowed) return false;
-        _readAllowed = false;
-        boolean processed = false;
-
-        int interest = _key.interestOps();
-        int capacity = _transport.capacity();
-        if (capacity == Transport.END_OF_STREAM)
-        {
-            _inputDone = true;
-        }
-        else
-        {
-            ByteBuffer tail = _transport.tail();
-            int bytesRead = _channel.read(tail);
-            if (bytesRead < 0) {
-                _transport.close_tail();
-                _inputDone = true;
-            } else if (bytesRead > 0) {
-                try {
-                    _transport.process();
-                } catch (TransportException e) {
-                    _logger.log(Level.SEVERE, this + " error processing input", e);
-                }
-                processed = true;
-            }
-        }
-
-        capacity = _transport.capacity();
-        if (capacity > 0) {
-            interest |= SelectionKey.OP_READ;
-        } else {
-            interest &= ~SelectionKey.OP_READ;
-            if (capacity < 0) {
-                _inputDone = true;
-            }
-        }
-        _key.interestOps(interest);
-
-        return processed;
-    }
-
-    private boolean write() throws IOException
-    {
-        boolean processed = false;
-
-        int interest = _key.interestOps();
-        boolean writeBlocked = false;
-
-        try {
-            while (_transport.pending() > 0 && !writeBlocked)
-            {
-                ByteBuffer head = _transport.head();
-                int wrote = _channel.write(head);
-                if (wrote > 0) {
-                    processed = true;
-                    _transport.pop(wrote);
-                } else {
-                    writeBlocked = true;
-                }
-            }
-
-            int pending = _transport.pending();
-            if (pending > 0) {
-                interest |= SelectionKey.OP_WRITE;
-            } else {
-                interest &= ~SelectionKey.OP_WRITE;
-                if (pending < 0) {
-                    _outputDone = true;
-                }
-            }
-        } catch (TransportException e) {
-            _logger.log(Level.SEVERE, this + " error", e);
-            interest &= ~SelectionKey.OP_WRITE;
-            _inputDone = true;
-            _outputDone = true;
-        }
-
-        _key.interestOps(interest);
-
-        return processed;
-    }
-
-    public Listener<C> listener()
-    {
-        return _listener;
-    }
-
-    public Sasl sasl()
-    {
-        if (_transport != null)
-        {
-            return _transport.sasl();
-        }
-        else
-        {
-            return null;
-        }
-    }
-
-    public Connection getConnection()
-    {
-        return _connection;
-    }
-
-    public void setConnection(Connection connection)
-    {
-        _connection = connection;
-        _transport.bind(_connection);
-    }
-
-    public Transport getTransport()
-    {
-        return _transport;
-    }
-
-    public C getContext()
-    {
-        return _context;
-    }
-
-    public void setContext(C context)
-    {
-        _context = context;
-    }
-
-    public void close()
-    {
-        if (!isClosed())
-        {
-            try
-            {
-                _channel.close();
-            }
-            catch (IOException e)
-            {
-                _logger.log(Level.SEVERE, "Exception when closing connection",e);
-            }
-            finally
-            {
-                _closed = true;
-                selected();
-            }
-        }
-    }
-
-    public boolean isClosed()
-    {
-        return _closed;
-    }
-
-    public void destroy()
-    {
-        close(); // close if not closed already
-        _driver.removeConnector(this);
-    }
-
-    @Override
-    public String toString()
-    {
-        StringBuilder builder = new StringBuilder();
-        builder.append("ConnectorImpl [_channel=").append(_channel).append("]");
-        return builder.toString();
-    }
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/driver/impl/DriverImpl.java b/proton-j/src/main/java/org/apache/qpid/proton/driver/impl/DriverImpl.java
deleted file mode 100644
index 6264d7a..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/driver/impl/DriverImpl.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.proton.driver.impl;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.ServerSocket;
-import java.nio.channels.ClosedChannelException;
-import java.nio.channels.SelectableChannel;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.Selector;
-import java.nio.channels.ServerSocketChannel;
-import java.nio.channels.SocketChannel;
-import java.util.ArrayDeque;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Queue;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.qpid.proton.driver.Connector;
-import org.apache.qpid.proton.driver.Driver;
-import org.apache.qpid.proton.driver.Listener;
-
-@SuppressWarnings("deprecation")
-public class DriverImpl implements Driver
-{
-    private Selector _selector;
-    private Collection<Listener> _listeners = new LinkedList();
-    private Collection<Connector> _connectors = new LinkedList();
-    private Logger _logger = Logger.getLogger("proton.driver");
-    private Object _wakeupLock = new Object();
-    private boolean _woken = false;
-    private Queue<ConnectorImpl> _selectedConnectors = new ArrayDeque<ConnectorImpl>();
-    private Queue<ListenerImpl> _selectedListeners = new ArrayDeque<ListenerImpl>();
-
-    public DriverImpl() throws IOException
-    {
-        _selector = Selector.open();
-    }
-
-    public void wakeup()
-    {
-        synchronized (_wakeupLock) {
-            _woken = true;
-        }
-        _selector.wakeup();
-    }
-
-    public boolean doWait(long timeout)
-    {
-        try
-        {
-            boolean woken;
-            synchronized (_wakeupLock) {
-                woken = _woken;
-            }
-
-            if (woken || timeout == 0) {
-                _selector.selectNow();
-            } else if (timeout < 0) {
-                _selector.select();
-            } else {
-                _selector.select(timeout);
-            }
-
-            synchronized (_wakeupLock) {
-                woken = woken || _woken;
-                _woken = false;
-            }
-
-            for (SelectionKey key : _selector.selectedKeys()) {
-                if (key.isAcceptable()) {
-                    ListenerImpl l = (ListenerImpl) key.attachment();
-                    l.selected();
-                } else {
-                    ConnectorImpl c = (ConnectorImpl) key.attachment();
-                    c.selected();
-                }
-            }
-
-            _selector.selectedKeys().clear();
-
-            return woken;
-        }
-        catch (IOException e)
-        {
-            _logger.log(Level.SEVERE, "Exception when waiting for IO Event",e);
-            throw new RuntimeException(e);
-        }
-    }
-
-    void selectListener(ListenerImpl l)
-    {
-        _selectedListeners.add(l);
-    }
-
-    public Listener listener()
-    {
-        ListenerImpl listener = _selectedListeners.poll();
-        if (listener != null) {
-            listener.unselected();
-        }
-
-        return listener;
-    }
-
-    void selectConnector(ConnectorImpl c)
-    {
-        _selectedConnectors.add(c);
-    }
-
-    public Connector connector()
-    {
-        ConnectorImpl connector = _selectedConnectors.poll();
-        if (connector != null) {
-            connector.unselected();
-        }
-        return connector;
-    }
-
-    public void destroy()
-    {
-        try
-        {
-            _selector.close();
-        }
-        catch (IOException e)
-        {
-            _logger.log(Level.SEVERE, "Exception when closing selector",e);
-            throw new RuntimeException(e);
-        }
-        _listeners.clear();
-        _connectors.clear();
-    }
-
-    public <C> Listener<C> createListener(String host, int port, C context)
-    {
-        try
-        {
-            ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
-            ServerSocket serverSocket = serverSocketChannel.socket();
-            serverSocket.bind(new InetSocketAddress(host, port));
-            serverSocketChannel.configureBlocking(false);
-            Listener<C> listener = createListener(serverSocketChannel, context);
-            _logger.fine("Created listener on " + host + ":" + port + ": " + context);
-
-            return listener;
-        }
-        catch (ClosedChannelException e)
-        {
-            e.printStackTrace();  // TODO - Implement
-        }
-        catch (IOException e)
-        {
-            e.printStackTrace();  // TODO - Implement
-        }
-        return null;
-    }
-
-    public <C> Listener<C> createListener(ServerSocketChannel c, C context)
-    {
-        Listener<C> l = new ListenerImpl<C>(this, c, context);
-        SelectionKey key = registerInterest(c,SelectionKey.OP_ACCEPT);
-        key.attach(l);
-        _listeners.add(l);
-        return l;
-    }
-
-    public <C> Connector<C> createConnector(String host, int port, C context)
-    {
-        try
-        {
-            SocketChannel channel = SocketChannel.open();
-            channel.configureBlocking(false);
-            // Disable the Nagle algorithm on TCP connections.
-            channel.socket().setTcpNoDelay(true);
-            channel.connect(new InetSocketAddress(host, port));
-            return createConnector(channel, context);
-        }
-        catch (IOException e)
-        {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-            throw new RuntimeException(e);
-        }
-    }
-
-    public <C> Connector<C> createConnector(SelectableChannel c, C context)
-    {
-        SelectionKey key = registerInterest(c, SelectionKey.OP_READ | SelectionKey.OP_WRITE);
-        Connector<C> co = new ConnectorImpl<C>(this, null, (SocketChannel)c, context, key);
-        key.attach(co);
-        _connectors.add(co);
-        return co;
-    }
-
-    public <C> void removeConnector(Connector<C> c)
-    {
-        _connectors.remove(c);
-    }
-
-    public Iterable<Listener> listeners()
-    {
-        return _listeners;
-    }
-
-    public Iterable<Connector> connectors()
-    {
-        return _connectors;
-    }
-
-    protected <C> Connector<C> createServerConnector(SelectableChannel c, C context, Listener<C> l)
-    {
-        SelectionKey key = registerInterest(c, SelectionKey.OP_READ | SelectionKey.OP_WRITE);
-        Connector<C> co = new ConnectorImpl<C>(this, l, (SocketChannel)c, context, key);
-        key.attach(co);
-        _connectors.add(co);
-        return co;
-    }
-
-    private <C> SelectionKey registerInterest(SelectableChannel c, int opKeys)
-    {
-        try
-        {
-            return c.register(_selector, opKeys);
-        }
-        catch (ClosedChannelException e)
-        {
-            e.printStackTrace();  // TODO - Implement
-            throw new RuntimeException(e);
-        }
-    }
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/driver/impl/ListenerImpl.java b/proton-j/src/main/java/org/apache/qpid/proton/driver/impl/ListenerImpl.java
deleted file mode 100644
index a7dd936..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/driver/impl/ListenerImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.proton.driver.impl;
-
-import java.io.IOException;
-import java.nio.channels.ServerSocketChannel;
-import java.nio.channels.SocketChannel;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.qpid.proton.driver.Connector;
-import org.apache.qpid.proton.driver.Listener;
-
-@SuppressWarnings("deprecation")
-class ListenerImpl<C> implements Listener<C>
-{
-    private C _context;
-    private final ServerSocketChannel _channel;
-    private final DriverImpl _driver;
-    private final Logger _logger = Logger.getLogger("proton.driver");
-    private boolean _selected = false;
-
-    ListenerImpl(DriverImpl driver, ServerSocketChannel c, C context)
-    {
-        _driver = driver;
-        _channel = c;
-        _context = context;
-    }
-
-    void selected()
-    {
-        if (!_selected) {
-            _selected = true;
-            _driver.selectListener(this);
-        }
-    }
-
-    void unselected()
-    {
-        _selected = false;
-    }
-
-    public Connector<C> accept()
-    {
-        try
-        {
-            SocketChannel c = _channel.accept();
-            if(c != null)
-            {
-                c.configureBlocking(false);
-                return _driver.createServerConnector(c, null, this);
-            }
-        }
-        catch (IOException e)
-        {
-            _logger.log(Level.SEVERE, "Exception when accepting connection",e);
-        }
-        return null;  //TODO - we should probably throw an exception instead of returning null?
-    }
-
-    public C getContext()
-    {
-        return _context;
-    }
-
-    public void setContext(C context)
-    {
-        _context = context;
-    }
-
-    public void close() throws IOException
-    {
-        _channel.socket().close();
-    }
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/messenger/Messenger.java b/proton-j/src/main/java/org/apache/qpid/proton/messenger/Messenger.java
deleted file mode 100644
index bd19259..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/messenger/Messenger.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.qpid.proton.messenger;
-
-import java.io.IOException;
-
-import org.apache.qpid.proton.TimeoutException;
-import org.apache.qpid.proton.message.Message;
-import org.apache.qpid.proton.messenger.impl.MessengerImpl;
-
-/**
- *
- *  Messenger defines a high level interface for sending and receiving
- *  messages. Every Messenger contains a single logical queue of
- *  incoming messages and a single logical queue of outgoing
- *  messages. These messages in these queues may be destined for, or
- *  originate from, a variety of addresses.
- *
- *  <h3>Address Syntax</h3>
- *
- *  An address has the following form:
- *
- *    [ amqp[s]:// ] [user[:password]@] domain [/[name]]
- *
- *  Where domain can be one of:
- *
- *    host | host:port | ip | ip:port | name
- *
- *  The following are valid examples of addresses:
- *
- *   - example.org
- *   - example.org:1234
- *   - amqp://example.org
- *   - amqps://example.org
- *   - example.org/incoming
- *   - amqps://example.org/outgoing
- *   - amqps://fred:trustno1@example.org
- *   - 127.0.0.1:1234
- *   - amqps://127.0.0.1:1234
- *
- *  <h3>Sending &amp; Receiving Messages</h3>
- *
- *  The Messenger interface works in conjuction with the Message
- *  class. The Message class is a mutable holder of message content.
- *  The put method will encode the content in a given Message object
- *  into the outgoing message queue leaving that Message object free
- *  to be modified or discarded without having any impact on the
- *  content in the outgoing queue.
- *
- *  Similarly, the get method will decode the content in the incoming
- *  message queue into the supplied Message object.
- *
- *  @deprecated Messenger will be removed from upcoming proton-j releases.
-*/
-@Deprecated
-public interface Messenger
-{
-
-    /**
-     * @deprecated Messenger will be removed from upcoming proton-j releases.
-     */
-    @Deprecated
-    public static final class Factory
-    {
-        public static Messenger create() {
-            return new MessengerImpl();
-        }
-
-        public static Messenger create(String name) {
-            return new MessengerImpl(name);
-        }
-    }
-
-    /**
-     * Flag for use with reject(), accept() and settle() methods.
-     */
-    static final int CUMULATIVE = 0x01;
-
-    /**
-     * Places the content contained in the message onto the outgoing
-     * queue of the Messenger. This method will never block. The
-     * send call may be used to block until the messages are
-     * sent. Either a send() or a recv() call is neceesary at present
-     * to cause the messages to actually be sent out.
-     */
-    void put(Message message) throws MessengerException;
-
-    /**
-     * Blocks until the outgoing queue is empty and, in the event that
-     * an outgoing window has been set, until the messages in that
-     * window have been received by the target to which they were
-     * sent, or the operation times out. The timeout property
-     * controls how long a Messenger will block before timing out.
-     */
-    void send() throws TimeoutException;
-
-    void send(int n) throws TimeoutException;
-
-    /**
-     * Subscribes the Messenger to messages originating from the
-     * specified source. The source is an address as specified in the
-     * Messenger introduction with the following addition. If the
-     * domain portion of the address begins with the '~' character,
-     * the Messenger will interpret the domain as host/port, bind
-     * to it, and listen for incoming messages. For example
-     * "~0.0.0.0", "amqp://~0.0.0.0" will bind to any local interface
-     * and listen for incoming messages.
-     */
-    void subscribe(String source) throws MessengerException;
-    /**
-     * Receives an arbitrary number of messages into the
-     * incoming queue of the Messenger. This method will block until
-     * at least one message is available or the operation times out.
-     */
-    void recv() throws TimeoutException;
-    /**
-     * Receives up to the specified number of messages into the
-     * incoming queue of the Messenger. This method will block until
-     * at least one message is available or the operation times out.
-     */
-    void recv(int count) throws TimeoutException;
-    /**
-     * Returns the capacity of the incoming message queue of
-     * messenger. Note this count does not include those messages
-     * already available on the incoming queue (see
-     * incoming()). Rather it returns the number of incoming queue
-     * entries available for receiving messages
-     */
-    int receiving();
-    /**
-     * Returns the message from the head of the incoming message
-     * queue.
-     */
-    Message get();
-
-    /**
-     * Transitions the Messenger to an active state. A Messenger is
-     * initially created in an inactive state. When inactive, a
-     * Messenger will not send or receive messages from its internal
-     * queues. A Messenger must be started before calling send() or
-     * recv().
-     */
-    void start() throws IOException;
-    /**
-     * Transitions the Messenger to an inactive state. An inactive
-     * Messenger will not send or receive messages from its internal
-     * queues. A Messenger should be stopped before being discarded to
-     * ensure a clean shutdown handshake occurs on any internally managed
-     * connections.
-     */
-    void stop();
-
-    boolean stopped();
-
-    /** Sends or receives any outstanding messages queued for a
-     * messenger.  If timeout is zero, no blocking is done.  A timeout
-     * of -1 blocks forever, otherwise timeout is the maximum time (in
-     * millisecs) to block.  Returns True if work was performed.
-     */
-    boolean work(long timeout) throws TimeoutException;
-
-    void interrupt();
-
-    void setTimeout(long timeInMillis);
-    long getTimeout();
-
-    boolean isBlocking();
-    void setBlocking(boolean b);
-
-    /**
-     * Returns a count of the messages currently on the outgoing queue
-     * (i.e. those that have been put() but not yet actually sent
-     * out).
-     */
-    int outgoing();
-    /**
-     * Returns a count of the messages available on the incoming
-     * queue.
-     */
-    int incoming();
-
-    int getIncomingWindow();
-    void setIncomingWindow(int window);
-
-    int getOutgoingWindow();
-    void setOutgoingWindow(int window);
-
-    /**
-     * Returns a token which can be used to accept or reject the
-     * message returned in the previous get() call.
-     */
-    Tracker incomingTracker();
-    /**
-     * Returns a token which can be used to track the status of the
-     * message of the previous put() call.
-     */
-    Tracker outgoingTracker();
-
-    /**
-     * Rejects messages retrieved from the incoming message queue. The
-     * tracker object for a message is obtained through a call to
-     * incomingTracker() following a get(). If the flags argument
-     * contains CUMULATIVE, then all message up to the one identified
-     * by the tracker will be rejected.
-     */
-    void reject(Tracker tracker, int flags);
-    /**
-     * Accepts messages retrieved from the incoming message queue. The
-     * tracker object for a message is obtained through a call to
-     * incomingTracker() following a get(). If the flags argument
-     * contains CUMULATIVE, then all message up to the one identified
-     * by the tracker will be accepted.
-     */
-    void accept(Tracker tracker, int flags);
-    void settle(Tracker tracker, int flags);
-
-    /**
-     * Gets the last known remote state of the delivery associated
-     * with the given tracker.
-     */
-    Status getStatus(Tracker tracker);
-
-    void route(String pattern, String address);
-
-    void rewrite(String pattern, String address);
-
-    /**
-     * Set the path to the certificate file.
-     */
-    void setCertificate(String certificate);
-
-    /**
-     * Get the path to the certificate file.
-     */
-    String getCertificate();
-
-    /**
-     * Set the path to private key file.
-     */
-    void setPrivateKey(String privateKey);
-
-    /**
-     * Get the path to the private key file.
-     */
-    String getPrivateKey();
-
-    /**
-     * Set the password for private key file.
-     */
-    void setPassword(String password);
-
-    /**
-     * Get the password for the priate key file.
-     */
-    String getPassword();
-
-    /**
-     * Set the path to the trusted certificate database.
-     */
-    void setTrustedCertificates(String trusted);
-
-    /**
-     * Get the path to the trusted certificate database.
-     */
-    String getTrustedCertificates();
-
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/messenger/MessengerException.java b/proton-j/src/main/java/org/apache/qpid/proton/messenger/MessengerException.java
deleted file mode 100644
index c6f3570..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/messenger/MessengerException.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.proton.messenger;
-
-import org.apache.qpid.proton.ProtonException;
-
-/**
- * @deprecated  Messenger will be removed from upcoming proton-j releases.
- */
-@Deprecated
-public class MessengerException extends ProtonException
-{
-    public MessengerException()
-    {
-    }
-
-    public MessengerException(String message)
-    {
-        super(message);
-    }
-
-    public MessengerException(String message, Throwable cause)
-    {
-        super(message, cause);
-    }
-
-    public MessengerException(Throwable cause)
-    {
-        super(cause);
-    }
-
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/messenger/Status.java b/proton-j/src/main/java/org/apache/qpid/proton/messenger/Status.java
deleted file mode 100644
index ae7ca95..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/messenger/Status.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.qpid.proton.messenger;
-
-/**
- * @deprecated Messenger will be removed from upcoming proton-j releases.
- */
-@Deprecated
-public enum Status
-{
-    UNKNOWN,
-    PENDING,
-    ACCEPTED,
-    REJECTED,
-    RELEASED,
-    MODIFIED,
-    ABORTED,
-    SETTLED
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/messenger/Tracker.java b/proton-j/src/main/java/org/apache/qpid/proton/messenger/Tracker.java
deleted file mode 100644
index 974b1b6..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/messenger/Tracker.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.qpid.proton.messenger;
-
-/**
- * @deprecated Messenger will be removed from upcoming proton-j releases.
- */
-@Deprecated
-public interface Tracker { }
-
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java b/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
deleted file mode 100644
index e7c9d9e..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
+++ /dev/null
@@ -1,1555 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.qpid.proton.messenger.impl;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.apache.qpid.proton.Proton;
-import org.apache.qpid.proton.InterruptException;
-import org.apache.qpid.proton.TimeoutException;
-import org.apache.qpid.proton.driver.Connector;
-import org.apache.qpid.proton.driver.Driver;
-import org.apache.qpid.proton.driver.Listener;
-import org.apache.qpid.proton.engine.Connection;
-import org.apache.qpid.proton.engine.Delivery;
-import org.apache.qpid.proton.engine.EndpointState;
-import org.apache.qpid.proton.engine.Link;
-import org.apache.qpid.proton.engine.Receiver;
-import org.apache.qpid.proton.engine.Sasl;
-import org.apache.qpid.proton.engine.Sender;
-import org.apache.qpid.proton.engine.Session;
-import org.apache.qpid.proton.engine.SslDomain;
-import org.apache.qpid.proton.engine.Ssl;
-import org.apache.qpid.proton.engine.Transport;
-import org.apache.qpid.proton.message.Message;
-import org.apache.qpid.proton.messenger.Messenger;
-import org.apache.qpid.proton.messenger.MessengerException;
-import org.apache.qpid.proton.messenger.Status;
-import org.apache.qpid.proton.messenger.Tracker;
-import org.apache.qpid.proton.amqp.messaging.Source;
-import org.apache.qpid.proton.amqp.messaging.Target;
-import org.apache.qpid.proton.amqp.transport.ReceiverSettleMode;
-import org.apache.qpid.proton.amqp.transport.SenderSettleMode;
-import org.apache.qpid.proton.amqp.Binary;
-
-/**
- * @deprecated Messenger will be removed from upcoming proton-j releases.
- */
-@Deprecated
-public class MessengerImpl implements Messenger
-{
-    private enum LinkCreditMode
-    {
-        // method for replenishing credit
-        LINK_CREDIT_EXPLICIT,   // recv(N)
-        LINK_CREDIT_AUTO;       // recv()
-    }
-
-    private static final EnumSet<EndpointState> UNINIT = EnumSet.of(EndpointState.UNINITIALIZED);
-    private static final EnumSet<EndpointState> ACTIVE = EnumSet.of(EndpointState.ACTIVE);
-    private static final EnumSet<EndpointState> CLOSED = EnumSet.of(EndpointState.CLOSED);
-    private static final EnumSet<EndpointState> ANY = EnumSet.allOf(EndpointState.class);
-
-    private final Logger _logger = Logger.getLogger("proton.messenger");
-    private final String _name;
-    private long _timeout = -1;
-    private boolean _blocking = true;
-    private long _nextTag = 1;
-    private Driver _driver;
-    private LinkCreditMode _credit_mode = LinkCreditMode.LINK_CREDIT_EXPLICIT;
-    private final int _credit_batch = 1024;   // credit_mode == LINK_CREDIT_AUTO
-    private int _credit;        // available
-    private int _distributed;    // outstanding credit
-    private int _receivers;      // total # receiver Links
-    private int _draining;       // # Links in drain state
-    private List<Receiver> _credited = new ArrayList<Receiver>();
-    private List<Receiver> _blocked = new ArrayList<Receiver>();
-    private long _next_drain;
-    private TrackerImpl _incomingTracker;
-    private TrackerImpl _outgoingTracker;
-    private Store _incomingStore = new Store();
-    private Store _outgoingStore = new Store();
-    private List<Connector> _awaitingDestruction = new ArrayList<Connector>();
-    private int _sendThreshold;
-
-    private Transform _routes = new Transform();
-    private Transform _rewrites = new Transform();
-
-    private String _certificate;
-    private String _privateKey;
-    private String _password;
-    private String _trustedDb;
-
-
-    /**
-     * @deprecated Messenger will be removed from upcoming proton-j releases.
-     */
-    @Deprecated public MessengerImpl()
-    {
-        this(java.util.UUID.randomUUID().toString());
-    }
-
-    /**
-     * @deprecated Messenger will be removed from upcoming proton-j releases.
-     */
-    @Deprecated public MessengerImpl(String name)
-    {
-        _name = name;
-    }
-
-    public void setTimeout(long timeInMillis)
-    {
-        _timeout = timeInMillis;
-    }
-
-    public long getTimeout()
-    {
-        return _timeout;
-    }
-
-    public boolean isBlocking()
-    {
-        return _blocking;
-    }
-
-    public void setBlocking(boolean b)
-    {
-        _blocking = b;
-    }
-
-    public void setCertificate(String certificate)
-    {
-        _certificate = certificate;
-    }
-
-    public String getCertificate()
-    {
-        return _certificate;
-    }
-
-    public void setPrivateKey(String privateKey)
-    {
-        _privateKey = privateKey;
-    }
-
-    public String getPrivateKey()
-    {
-        return _privateKey;
-    }
-
-    public void setPassword(String password)
-    {
-        _password = password;
-    }
-
-    public String getPassword()
-    {
-        return _password;
-    }
-
-    public void setTrustedCertificates(String trusted)
-    {
-        _trustedDb = trusted;
-    }
-
-    public String getTrustedCertificates()
-    {
-        return _trustedDb;
-    }
-
-    public void start() throws IOException
-    {
-        _driver = Proton.driver();
-    }
-
-    public void stop()
-    {
-        if (_driver != null) {
-            if(_logger.isLoggable(Level.FINE))
-            {
-                _logger.fine(this + " about to stop");
-            }
-            //close all connections
-            for (Connector<?> c : _driver.connectors())
-            {
-                Connection connection = c.getConnection();
-                connection.close();
-            }
-            //stop listeners
-            for (Listener<?> l : _driver.listeners())
-            {
-                try
-                {
-                    l.close();
-                }
-                catch (IOException e)
-                {
-                    _logger.log(Level.WARNING, "Error while closing listener", e);
-                }
-            }
-            waitUntil(_allClosed);
-        }
-    }
-
-    public boolean stopped()
-    {
-        return _allClosed.test();
-    }
-
-    public boolean work(long timeout) throws TimeoutException
-    {
-        if (_driver == null) { return false; }
-        _worked = false;
-        return waitUntil(_workPred, timeout);
-    }
-
-    public void interrupt()
-    {
-        if (_driver != null) {
-            _driver.wakeup();
-        }
-    }
-
-    private String defaultRewrite(String address) {
-        if (address != null && address.contains("@")) {
-            Address addr = new Address(address);
-            String scheme = addr.getScheme();
-            String host = addr.getHost();
-            String port = addr.getPort();
-            String name = addr.getName();
-
-            StringBuilder sb = new StringBuilder();
-            if (scheme != null) {
-                sb.append(scheme).append("://");
-            }
-            if (host != null) {
-                sb.append(host);
-            }
-            if (port != null) {
-                sb.append(":").append(port);
-            }
-            if (name != null) {
-                sb.append("/").append(name);
-            }
-            return sb.toString();
-        } else {
-            return address;
-        }
-    }
-
-
-    private String _original;
-
-    private void rewriteMessage(Message m)
-    {
-        _original = m.getAddress();
-        if (_rewrites.apply(_original)) {
-            m.setAddress(_rewrites.result());
-        } else {
-            m.setAddress(defaultRewrite(_original));
-        }
-    }
-
-    private void restoreMessage(Message m)
-    {
-        m.setAddress(_original);
-    }
-
-    private String routeAddress(String addr)
-    {
-        if (_routes.apply(addr)) {
-            return _routes.result();
-        } else {
-            return addr;
-        }
-    }
-
-    public void put(Message m) throws MessengerException
-    {
-        if (_driver == null) {
-            throw new IllegalStateException("cannot put while messenger is stopped");
-        }
-
-        if(_logger.isLoggable(Level.FINE))
-        {
-            _logger.fine(this + " about to put message: " + m);
-        }
-
-        StoreEntry entry = _outgoingStore.put( m.getAddress() );
-        _outgoingTracker = new TrackerImpl(TrackerImpl.Type.OUTGOING,
-                                           _outgoingStore.trackEntry(entry));
-
-        String routedAddress = routeAddress(m.getAddress());
-        Address address = new Address(routedAddress);
-        if (address.getHost() == null)
-        {
-            throw new MessengerException("unable to send to address: " + routedAddress);
-        }
-
-        rewriteMessage(m);
-
-        try {
-            adjustReplyTo(m);
-
-            int encoded;
-            byte[] buffer = new byte[5*1024];
-            while (true)
-            {
-                try
-                {
-                    encoded = m.encode(buffer, 0, buffer.length);
-                    break;
-                } catch (java.nio.BufferOverflowException e) {
-                    buffer = new byte[buffer.length*2];
-                }
-            }
-            entry.setEncodedMsg( buffer, encoded );
-        }
-        finally
-        {
-            restoreMessage(m);
-        }
-
-        Sender sender = getLink(address, new SenderFinder(address.getName()));
-        pumpOut(m.getAddress(), sender);
-    }
-
-    private void reclaimLink(Link link)
-    {
-        if (link instanceof Receiver)
-        {
-            int credit = link.getCredit();
-            if (credit > 0)
-            {
-                _credit += credit;
-                _distributed -= credit;
-            }
-        }
-
-        Delivery delivery = link.head();
-        while (delivery != null)
-        {
-            StoreEntry entry = (StoreEntry) delivery.getContext();
-            if (entry != null)
-            {
-                entry.setDelivery(null);
-                if (delivery.isBuffered()) {
-                    entry.setStatus(Status.ABORTED);
-                }
-            }
-            delivery = delivery.next();
-        }
-        linkRemoved(link);
-    }
-
-    private int pumpOut( String address, Sender sender )
-    {
-        StoreEntry entry = _outgoingStore.get( address );
-        if (entry == null) {
-            sender.drained();
-            return 0;
-        }
-
-        byte[] tag = String.valueOf(_nextTag++).getBytes();
-        Delivery delivery = sender.delivery(tag);
-        entry.setDelivery( delivery );
-        _logger.log(Level.FINE, "Sending on delivery: " + delivery);
-        int n = sender.send( entry.getEncodedMsg(), 0, entry.getEncodedLength());
-        if (n < 0) {
-            _outgoingStore.freeEntry( entry );
-            _logger.log(Level.WARNING, "Send error: " + n);
-            return n;
-        } else {
-            sender.advance();
-            _outgoingStore.freeEntry( entry );
-            return 0;
-        }
-    }
-
-    public void send() throws TimeoutException
-    {
-        send(-1);
-    }
-
-    public void send(int n) throws TimeoutException
-    {
-        if (_driver == null) {
-            throw new IllegalStateException("cannot send while messenger is stopped");
-        }
-
-        if(_logger.isLoggable(Level.FINE))
-        {
-            _logger.fine(this + " about to send");
-        }
-
-        if (n == -1)
-            _sendThreshold = 0;
-        else
-        {
-            _sendThreshold = outgoing() - n;
-            if (_sendThreshold < 0)
-                _sendThreshold = 0;
-        }
-
-        waitUntil(_sentSettled);
-    }
-
-    public void recv(int n) throws TimeoutException
-    {
-        if (_driver == null) {
-            throw new IllegalStateException("cannot recv while messenger is stopped");
-        }
-
-        if (_logger.isLoggable(Level.FINE) && n != -1)
-        {
-            _logger.fine(this + " about to wait for up to " + n + " messages to be received");
-        }
-
-        if (n == -1)
-        {
-            _credit_mode = LinkCreditMode.LINK_CREDIT_AUTO;
-        }
-        else
-        {
-            _credit_mode = LinkCreditMode.LINK_CREDIT_EXPLICIT;
-            if (n > _distributed)
-                _credit = n - _distributed;
-            else        // cancel unallocated
-                _credit = 0;
-        }
-
-        distributeCredit();
-
-        waitUntil(_messageAvailable);
-    }
-
-    public void recv() throws TimeoutException
-    {
-        recv(-1);
-    }
-
-    public int receiving()
-    {
-        return _credit + _distributed;
-    }
-
-    public Message get()
-    {
-        StoreEntry entry = _incomingStore.get( null );
-        if (entry != null)
-        {
-            Message message = Proton.message();
-            message.decode( entry.getEncodedMsg(), 0, entry.getEncodedLength() );
-
-            _incomingTracker = new TrackerImpl(TrackerImpl.Type.INCOMING,
-                                               _incomingStore.trackEntry(entry));
-
-            _incomingStore.freeEntry( entry );
-            return message;
-        }
-        return null;
-    }
-
-    private int pumpIn(String address, Receiver receiver)
-    {
-        Delivery delivery = receiver.current();
-        if (delivery.isReadable() && !delivery.isPartial())
-        {
-            StoreEntry entry = _incomingStore.put( address );
-            entry.setDelivery( delivery );
-
-            _logger.log(Level.FINE, "Readable delivery found: " + delivery);
-
-            int size = delivery.pending();
-            byte[] buffer = new byte[size];
-            int read = receiver.recv( buffer, 0, buffer.length );
-            if (read != size) {
-                throw new IllegalStateException();
-            }
-            entry.setEncodedMsg( buffer, size );
-            receiver.advance();
-
-            // account for the used credit, replenish if
-            // low (< 20% maximum per-link batch) and
-            // extra credit available
-            assert(_distributed > 0);
-            _distributed--;
-            if (!receiver.getDrain() && _blocked.isEmpty() && _credit > 0)
-            {
-                final int max = perLinkCredit();
-                final int lo_thresh = (int)(max * 0.2 + 0.5);
-                if (receiver.getRemoteCredit() < lo_thresh)
-                {
-                    final int more = Math.min(_credit, max - receiver.getRemoteCredit());
-                    _credit -= more;
-                    _distributed += more;
-                    receiver.flow(more);
-                }
-            }
-            // check if blocked
-            if (receiver.getRemoteCredit() == 0 && _credited.contains(receiver))
-            {
-                _credited.remove(receiver);
-                if (receiver.getDrain())
-                {
-                    receiver.setDrain(false);
-                    assert( _draining > 0 );
-                    _draining--;
-                }
-                _blocked.add(receiver);
-            }
-        }
-        return 0;
-    }
-
-    public void subscribe(String source) throws MessengerException
-    {
-        if (_driver == null) {
-            throw new IllegalStateException("messenger is stopped");
-        }
-
-        String routed = routeAddress(source);
-        Address address = new Address(routed);
-
-        String hostName = address.getHost();
-        if (hostName == null) throw new MessengerException("Invalid address (hostname cannot be null): " + routed);
-        int port = Integer.valueOf(address.getImpliedPort());
-        if (address.isPassive())
-        {
-            if(_logger.isLoggable(Level.FINE))
-            {
-                _logger.fine(this + " about to subscribe to source " + source + " using address " + hostName + ":" + port);
-            }
-            ListenerContext ctx = new ListenerContext(address);
-            _driver.createListener(hostName, port, ctx);
-        }
-        else
-        {
-            if(_logger.isLoggable(Level.FINE))
-            {
-                _logger.fine(this + " about to subscribe to source " + source);
-            }
-            getLink(address, new ReceiverFinder(address.getName()));
-        }
-    }
-
-    public int outgoing()
-    {
-        return _outgoingStore.size() + queued(true);
-    }
-
-    public int incoming()
-    {
-        return _incomingStore.size() + queued(false);
-    }
-
-    public int getIncomingWindow()
-    {
-        return _incomingStore.getWindow();
-    }
-
-    public void setIncomingWindow(int window)
-    {
-        _incomingStore.setWindow(window);
-    }
-
-    public int getOutgoingWindow()
-    {
-        return _outgoingStore.getWindow();
-    }
-
-    public void setOutgoingWindow(int window)
-    {
-        _outgoingStore.setWindow(window);
-    }
-
-    public Tracker incomingTracker()
-    {
-        return _incomingTracker;
-    }
-    public Tracker outgoingTracker()
-    {
-        return _outgoingTracker;
-    }
-
-    private Store getTrackerStore(Tracker tracker)
-    {
-        return ((TrackerImpl)tracker).isOutgoing() ? _outgoingStore : _incomingStore;
-    }
-
-    @Override
-    public void reject(Tracker tracker, int flags)
-    {
-        int id = ((TrackerImpl)tracker).getSequence();
-        getTrackerStore(tracker).update(id, Status.REJECTED, flags, false, false);
-    }
-
-    @Override
-    public void accept(Tracker tracker, int flags)
-    {
-        int id = ((TrackerImpl)tracker).getSequence();
-        getTrackerStore(tracker).update(id, Status.ACCEPTED, flags, false, false);
-    }
-
-    @Override
-    public void settle(Tracker tracker, int flags)
-    {
-        int id = ((TrackerImpl)tracker).getSequence();
-        getTrackerStore(tracker).update(id, Status.UNKNOWN, flags, true, true);
-    }
-
-    public Status getStatus(Tracker tracker)
-    {
-        int id = ((TrackerImpl)tracker).getSequence();
-        StoreEntry e = getTrackerStore(tracker).getEntry(id);
-        if (e != null)
-        {
-            return e.getStatus();
-        }
-        return Status.UNKNOWN;
-    }
-
-    @Override
-    public void route(String pattern, String address)
-    {
-        _routes.rule(pattern, address);
-    }
-
-    @Override
-    public void rewrite(String pattern, String address)
-    {
-        _rewrites.rule(pattern, address);
-    }
-
-    private int queued(boolean outgoing)
-    {
-        int count = 0;
-        if (_driver != null) {
-            for (Connector<?> c : _driver.connectors())
-            {
-                Connection connection = c.getConnection();
-                for (Link link : new Links(connection, ACTIVE, ANY))
-                {
-                    if (outgoing)
-                    {
-                        if (link instanceof Sender) count += link.getQueued();
-                    }
-                    else
-                    {
-                        if (link instanceof Receiver) count += link.getQueued();
-                    }
-                }
-            }
-        }
-        return count;
-    }
-
-    private void bringDestruction()
-    {
-        for (Connector<?> c : _awaitingDestruction)
-        {
-            c.destroy();
-        }
-        _awaitingDestruction.clear();
-    }
-
-    private void processAllConnectors()
-    {
-        distributeCredit();
-        for (Connector<?> c : _driver.connectors())
-        {
-            processEndpoints(c);
-            try
-            {
-                if (c.process()) {
-                    _worked = true;
-                }
-            }
-            catch (IOException e)
-            {
-                _logger.log(Level.SEVERE, "Error processing connection", e);
-            }
-        }
-        bringDestruction();
-        distributeCredit();
-    }
-
-    private void processActive()
-    {
-        //process active listeners
-        for (Listener<?> l = _driver.listener(); l != null; l = _driver.listener())
-        {
-            _worked = true;
-            Connector<?> c = l.accept();
-            Connection connection = Proton.connection();
-            connection.setContainer(_name);
-            ListenerContext ctx = (ListenerContext) l.getContext();
-            connection.setContext(new ConnectionContext(ctx.getAddress(), c));
-            c.setConnection(connection);
-            Transport transport = c.getTransport();
-            //TODO: full SASL
-            Sasl sasl = c.sasl();
-            if (sasl != null)
-            {
-                sasl.server();
-                sasl.setMechanisms(new String[]{"ANONYMOUS"});
-                sasl.done(Sasl.SaslOutcome.PN_SASL_OK);
-            }
-            transport.ssl(ctx.getDomain());
-            connection.open();
-        }
-        // process connectors, reclaiming credit on closed connectors
-        for (Connector<?> c = _driver.connector(); c != null; c = _driver.connector())
-        {
-            _worked = true;
-            if (c.isClosed())
-            {
-                _awaitingDestruction.add(c);
-                reclaimCredit(c.getConnection());
-            }
-            else
-            {
-                _logger.log(Level.FINE, "Processing active connector " + c);
-                try
-                {
-                    c.process();
-                    processEndpoints(c);
-                    c.process();
-                }
-                catch (IOException e)
-                {
-                    _logger.log(Level.SEVERE, "Error processing connection", e);
-                }
-            }
-        }
-        bringDestruction();
-        distributeCredit();
-    }
-
-    private void processEndpoints(Connector c)
-    {
-        Connection connection = c.getConnection();
-
-        if (connection.getLocalState() == EndpointState.UNINITIALIZED)
-        {
-            connection.open();
-        }
-
-        Delivery delivery = connection.getWorkHead();
-        while (delivery != null)
-        {
-            Link link = delivery.getLink();
-            if (delivery.isUpdated())
-            {
-                if (link instanceof Sender)
-                {
-                    delivery.disposition(delivery.getRemoteState());
-                }
-                StoreEntry e = (StoreEntry) delivery.getContext();
-                if (e != null) e.updated();
-            }
-
-            if (delivery.isReadable())
-            {
-                pumpIn( link.getSource().getAddress(), (Receiver)link );
-            }
-
-            Delivery next = delivery.getWorkNext();
-            delivery.clear();
-            delivery = next;
-        }
-
-        for (Session session : new Sessions(connection, UNINIT, ANY))
-        {
-            session.open();
-            _logger.log(Level.FINE, "Opened session " + session);
-        }
-        for (Link link : new Links(connection, UNINIT, ANY))
-        {
-            //TODO: the following is not correct; should only copy those properties that we understand
-            //TODO: is this any better:
-            if (link.getRemoteSource() != null) {
-                link.setSource(link.getRemoteSource().copy());
-            }
-            if (link.getRemoteTarget() != null) {
-                link.setTarget(link.getRemoteTarget().copy());
-            }
-            linkAdded(link);
-            link.open();
-            _logger.log(Level.FINE, "Opened link " + link);
-        }
-
-        distributeCredit();
-
-        for (Link link : new Links(connection, ACTIVE, ACTIVE))
-        {
-            if (link instanceof Sender)
-            {
-                pumpOut(link.getTarget().getAddress(), (Sender)link);
-            }
-        }
-
-        for (Session session : new Sessions(connection, ACTIVE, CLOSED))
-        {
-            session.close();
-        }
-
-        for (Link link : new Links(connection, ANY, CLOSED))
-        {
-            if (link.getLocalState() == EndpointState.ACTIVE)
-            {
-                link.close();
-            }
-            else
-            {
-                reclaimLink(link);
-            }
-        }
-
-        if (connection.getRemoteState() == EndpointState.CLOSED)
-        {
-            if (connection.getLocalState() == EndpointState.ACTIVE)
-            {
-                connection.close();
-            }
-        }
-    }
-
-    private boolean waitUntil(Predicate condition) throws TimeoutException
-    {
-        if (_blocking) {
-            boolean done = waitUntil(condition, _timeout);
-            if (!done) {
-                _logger.log(Level.SEVERE, String.format
-                            ("Timeout when waiting for condition %s after %s ms",
-                             condition, _timeout));
-                throw new TimeoutException();
-            }
-            return done;
-        } else {
-            return waitUntil(condition, 0);
-        }
-    }
-
-    private boolean waitUntil(Predicate condition, long timeout)
-    {
-        if (_driver == null) {
-            throw new IllegalStateException("cannot wait while messenger is stopped");
-        }
-
-        processAllConnectors();
-
-        // wait until timeout expires or until test is true
-        long now = System.currentTimeMillis();
-        final long deadline = timeout < 0 ? Long.MAX_VALUE : now + timeout;
-        boolean done = false;
-
-        while (true)
-        {
-            done = condition.test();
-            if (done) break;
-
-            long remaining;
-            if (timeout < 0)
-                remaining = -1;
-            else {
-                remaining = deadline - now;
-                if (remaining < 0) break;
-            }
-
-            // Update the credit scheduler. If the scheduler detects
-            // credit imbalance on the links, wake up in time to
-            // service credit drain
-            distributeCredit();
-            if (_next_drain != 0)
-            {
-                long wakeup = (_next_drain > now) ? _next_drain - now : 0;
-                remaining = (remaining == -1) ? wakeup : Math.min(remaining, wakeup);
-            }
-
-            boolean woken;
-            woken = _driver.doWait(remaining);
-            processActive();
-            if (woken) {
-                throw new InterruptException();
-            }
-            now = System.currentTimeMillis();
-        }
-
-        return done;
-    }
-
-    private Connection lookup(Address address)
-    {
-        for (Connector<?> c : _driver.connectors())
-        {
-            Connection connection = c.getConnection();
-            ConnectionContext ctx = (ConnectionContext) connection.getContext();
-            if (ctx.matches(address))
-            {
-                return connection;
-            }
-        }
-        return null;
-    }
-
-    private void reclaimCredit(Connection connection)
-    {
-        for (Link link : new Links(connection, ANY, ANY))
-        {
-            reclaimLink(link);
-        }
-    }
-
-    private void distributeCredit()
-    {
-        if (_receivers == 0) return;
-
-        if (_credit_mode == LinkCreditMode.LINK_CREDIT_AUTO)
-        {
-            // replenish, but limit the max total messages buffered
-            final int max = _receivers * _credit_batch;
-            final int used = _distributed + incoming();
-            if (max > used)
-                _credit = max - used;
-        }
-
-        // reclaim any credit left over after draining links has completed
-        if (_draining > 0)
-        {
-            Iterator<Receiver> itr = _credited.iterator();
-            while (itr.hasNext())
-            {
-                Receiver link = (Receiver) itr.next();
-                if (link.getDrain())
-                {
-                    if (!link.draining())
-                    {
-                        // drain completed for this link
-                        int drained = link.drained();
-                        assert(_distributed >= drained);
-                        _distributed -= drained;
-                        _credit += drained;
-                        link.setDrain(false);
-                        _draining--;
-                        itr.remove();
-                        _blocked.add(link);
-                    }
-                }
-            }
-        }
-
-        // distribute available credit to blocked links
-        final int batch = perLinkCredit();
-        while (_credit > 0 && !_blocked.isEmpty())
-        {
-            Receiver link = _blocked.get(0);
-            _blocked.remove(0);
-
-            final int more = Math.min(_credit, batch);
-            _distributed += more;
-            _credit -= more;
-
-            link.flow(more);
-            _credited.add(link);
-
-            // flow changed, must process it
-            ConnectionContext ctx = (ConnectionContext) link.getSession().getConnection().getContext();
-            try
-            {
-                ctx.getConnector().process();
-            } catch (IOException e) {
-                _logger.log(Level.SEVERE, "Error processing connection", e);
-            }
-        }
-
-        if (_blocked.isEmpty())
-        {
-            _next_drain = 0;
-        }
-        else
-        {
-            // not enough credit for all links - start draining granted credit
-            if (_draining == 0)
-            {
-                // don't do it too often - pace ourselves (it's expensive)
-                if (_next_drain == 0)
-                {
-                    _next_drain = System.currentTimeMillis() + 250;
-                }
-                else if (_next_drain <= System.currentTimeMillis())
-                {
-                    // initiate drain, free up at most enough to satisfy blocked
-                    _next_drain = 0;
-                    int needed = _blocked.size() * batch;
-
-                    for (Receiver link : _credited)
-                    {
-                        if (!link.getDrain()) {
-                            link.setDrain(true);
-                            needed -= link.getRemoteCredit();
-                            _draining++;
-                            // drain requested on link, must process it
-                            ConnectionContext ctx = (ConnectionContext) link.getSession().getConnection().getContext();
-                            try
-                            {
-                                ctx.getConnector().process();
-                            } catch (IOException e) {
-                                _logger.log(Level.SEVERE, "Error processing connection", e);
-                            }
-                            if (needed <= 0) break;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    private interface Predicate
-    {
-        boolean test();
-    }
-
-    private class SentSettled implements Predicate
-    {
-        public boolean test()
-        {
-            //are all sent messages settled?
-            int total = _outgoingStore.size();
-
-            for (Connector<?> c : _driver.connectors())
-            {
-                // TBD
-                // check if transport is done generating output
-                // pn_transport_t *transport = pn_connector_transport(ctor);
-                // if (transport) {
-                //    if (!pn_transport_quiesced(transport)) {
-                //        pn_connector_process(ctor);
-                //        return false;
-                //    }
-                // }
-
-                Connection connection = c.getConnection();
-                for (Link link : new Links(connection, ACTIVE, ANY))
-                {
-                    if (link instanceof Sender)
-                    {
-                        total += link.getQueued();
-                    }
-                }
-
-                // TBD: there is no per-link unsettled
-                // deliveries iterator, so for now get the
-                // deliveries by walking the outgoing trackers
-                Iterator<StoreEntry> entries = _outgoingStore.trackedEntries();
-                while (entries.hasNext() && total <= _sendThreshold)
-                {
-                    StoreEntry e = (StoreEntry) entries.next();
-                    if (e != null )
-                    {
-                        Delivery d = e.getDelivery();
-                        if (d != null)
-                        {
-                            if (d.getRemoteState() == null && !d.remotelySettled())
-                            {
-                                total++;
-                            }
-                        }
-                    }
-                }
-            }
-            return total <= _sendThreshold;
-        }
-    }
-
-    private class MessageAvailable implements Predicate
-    {
-        public boolean test()
-        {
-            //do we have at least one pending message?
-            if (_incomingStore.size() > 0) return true;
-            for (Connector<?> c : _driver.connectors())
-            {
-                Connection connection = c.getConnection();
-                Delivery delivery = connection.getWorkHead();
-                while (delivery != null)
-                {
-                    if (delivery.isReadable() && !delivery.isPartial())
-                    {
-                        return true;
-                    }
-                    else
-                    {
-                        delivery = delivery.getWorkNext();
-                    }
-                }
-            }
-            // if no connections, or not listening, exit as there won't ever be a message
-            if (!_driver.listeners().iterator().hasNext() && !_driver.connectors().iterator().hasNext())
-                return true;
-
-            return false;
-        }
-    }
-
-    private class AllClosed implements Predicate
-    {
-        public boolean test()
-        {
-            if (_driver == null) {
-                return true;
-            }
-
-            for (Connector<?> c : _driver.connectors()) {
-                if (!c.isClosed()) {
-                    return false;
-                }
-            }
-
-            _driver.destroy();
-            _driver = null;
-
-            return true;
-        }
-    }
-
-    private boolean _worked = false;
-
-    private class WorkPred implements Predicate
-    {
-        public boolean test()
-        {
-            return _worked;
-        }
-    }
-
-    private final SentSettled _sentSettled = new SentSettled();
-    private final MessageAvailable _messageAvailable = new MessageAvailable();
-    private final AllClosed _allClosed = new AllClosed();
-    private final WorkPred _workPred = new WorkPred();
-
-    private interface LinkFinder<C extends Link>
-    {
-        C test(Link link);
-        C create(Session session);
-    }
-
-    private class SenderFinder implements LinkFinder<Sender>
-    {
-        private final String _path;
-
-        SenderFinder(String path)
-        {
-            _path = path == null ? "" : path;
-        }
-
-        public Sender test(Link link)
-        {
-            if (link instanceof Sender && matchTarget((Target) link.getTarget(), _path))
-            {
-                return (Sender) link;
-            }
-            else
-            {
-                return null;
-            }
-        }
-
-        public Sender create(Session session)
-        {
-            Sender sender = session.sender(_path);
-            Target target = new Target();
-            target.setAddress(_path);
-            sender.setTarget(target);
-            // the C implemenation does this:
-            Source source = new Source();
-            source.setAddress(_path);
-            sender.setSource(source);
-            if (getOutgoingWindow() > 0)
-            {
-                // use explicit settlement via dispositions (not pre-settled)
-                sender.setSenderSettleMode(SenderSettleMode.UNSETTLED);
-                sender.setReceiverSettleMode(ReceiverSettleMode.SECOND);  // desired
-            }
-            return sender;
-        }
-    }
-
-    private class ReceiverFinder implements LinkFinder<Receiver>
-    {
-        private final String _path;
-
-        ReceiverFinder(String path)
-        {
-            _path = path == null ? "" : path;
-        }
-
-        public Receiver test(Link link)
-        {
-            if (link instanceof Receiver && matchSource((Source) link.getSource(), _path))
-            {
-                return (Receiver) link;
-            }
-            else
-            {
-                return null;
-            }
-        }
-
-        public Receiver create(Session session)
-        {
-            Receiver receiver = session.receiver(_path);
-            Source source = new Source();
-            source.setAddress(_path);
-            receiver.setSource(source);
-            // the C implemenation does this:
-            Target target = new Target();
-            target.setAddress(_path);
-            receiver.setTarget(target);
-            if (getIncomingWindow() > 0)
-            {
-                // use explicit settlement via dispositions (not pre-settled)
-                receiver.setSenderSettleMode(SenderSettleMode.UNSETTLED);  // desired
-                receiver.setReceiverSettleMode(ReceiverSettleMode.SECOND);
-            }
-            return receiver;
-        }
-    }
-
-    private <C extends Link> C getLink(Address address, LinkFinder<C> finder)
-    {
-        Connection connection = lookup(address);
-        if (connection == null)
-        {
-            String host = address.getHost();
-            int port = Integer.valueOf(address.getImpliedPort());
-            Connector<?> connector = _driver.createConnector(host, port, null);
-            _logger.log(Level.FINE, "Connecting to " + host + ":" + port);
-            connection = Proton.connection();
-            connection.setContainer(_name);
-            connection.setHostname(host);
-            connection.setContext(new ConnectionContext(address, connector));
-            connector.setConnection(connection);
-            Sasl sasl = connector.sasl();
-            if (sasl != null)
-            {
-                sasl.client();
-                sasl.setMechanisms(new String[]{"ANONYMOUS"});
-            }
-            if ("amqps".equalsIgnoreCase(address.getScheme())) {
-                Transport transport = connector.getTransport();
-                SslDomain domain = makeDomain(address, SslDomain.Mode.CLIENT);
-                if (_trustedDb != null) {
-                    domain.setPeerAuthentication(SslDomain.VerifyMode.VERIFY_PEER);
-                    //domain.setPeerAuthentication(SslDomain.VerifyMode.VERIFY_PEER_NAME);
-                } else {
-                    domain.setPeerAuthentication(SslDomain.VerifyMode.ANONYMOUS_PEER);
-                }
-                Ssl ssl = transport.ssl(domain);
-                //ssl.setPeerHostname(host);
-            }
-            connection.open();
-        }
-
-        for (Link link : new Links(connection, ACTIVE, ANY))
-        {
-            C result = finder.test(link);
-            if (result != null) return result;
-        }
-        Session session = connection.session();
-        session.open();
-        C link = finder.create(session);
-        linkAdded(link);
-        link.open();
-        return link;
-    }
-
-    private static class Links implements Iterable<Link>
-    {
-        private final Connection _connection;
-        private final EnumSet<EndpointState> _local;
-        private final EnumSet<EndpointState> _remote;
-
-        Links(Connection connection, EnumSet<EndpointState> local, EnumSet<EndpointState> remote)
-        {
-            _connection = connection;
-            _local = local;
-            _remote = remote;
-        }
-
-        public java.util.Iterator<Link> iterator()
-        {
-            return new LinkIterator(_connection, _local, _remote);
-        }
-    }
-
-    private static class LinkIterator implements java.util.Iterator<Link>
-    {
-        private final EnumSet<EndpointState> _local;
-        private final EnumSet<EndpointState> _remote;
-        private Link _next;
-
-        LinkIterator(Connection connection, EnumSet<EndpointState> local, EnumSet<EndpointState> remote)
-        {
-            _local = local;
-            _remote = remote;
-            _next = connection.linkHead(_local, _remote);
-        }
-
-        public boolean hasNext()
-        {
-            return _next != null;
-        }
-
-        public Link next()
-        {
-            try
-            {
-                return _next;
-            }
-            finally
-            {
-                _next = _next.next(_local, _remote);
-            }
-        }
-
-        public void remove()
-        {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    private static class Sessions implements Iterable<Session>
-    {
-        private final Connection _connection;
-        private final EnumSet<EndpointState> _local;
-        private final EnumSet<EndpointState> _remote;
-
-        Sessions(Connection connection, EnumSet<EndpointState> local, EnumSet<EndpointState> remote)
-        {
-            _connection = connection;
-            _local = local;
-            _remote = remote;
-        }
-
-        public java.util.Iterator<Session> iterator()
-        {
-            return new SessionIterator(_connection, _local, _remote);
-        }
-    }
-
-    private static class SessionIterator implements java.util.Iterator<Session>
-    {
-        private final EnumSet<EndpointState> _local;
-        private final EnumSet<EndpointState> _remote;
-        private Session _next;
-
-        SessionIterator(Connection connection, EnumSet<EndpointState> local, EnumSet<EndpointState> remote)
-        {
-            _local = local;
-            _remote = remote;
-            _next = connection.sessionHead(_local, _remote);
-        }
-
-        public boolean hasNext()
-        {
-            return _next != null;
-        }
-
-        public Session next()
-        {
-            try
-            {
-                return _next;
-            }
-            finally
-            {
-                _next = _next.next(_local, _remote);
-            }
-        }
-
-        public void remove()
-        {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    private void adjustReplyTo(Message m)
-    {
-        String original = m.getReplyTo();
-        if (original != null) {
-            if (original.startsWith("~/"))
-            {
-                m.setReplyTo("amqp://" + _name + "/" + original.substring(2));
-            }
-            else if (original.equals("~"))
-            {
-                m.setReplyTo("amqp://" + _name);
-            }
-        }
-    }
-
-    private static boolean matchTarget(Target target, String path)
-    {
-        if (target == null) return path.isEmpty();
-        else return path.equals(target.getAddress());
-    }
-
-    private static boolean matchSource(Source source, String path)
-    {
-        if (source == null) return path.isEmpty();
-        else return path.equals(source.getAddress());
-    }
-
-    @Override
-    public String toString()
-    {
-        StringBuilder builder = new StringBuilder();
-        builder.append("MessengerImpl [_name=").append(_name).append("]");
-        return builder.toString();
-    }
-
-    // compute the maximum amount of credit each receiving link is
-    // entitled to.  The actual credit given to the link depends on
-    // what amount of credit is actually available.
-    private int perLinkCredit()
-    {
-        if (_receivers == 0) return 0;
-        int total = _credit + _distributed;
-        return Math.max(total/_receivers, 1);
-    }
-
-    // a new link has been created, account for it.
-    private void linkAdded(Link link)
-    {
-        if (link instanceof Receiver)
-        {
-            _receivers++;
-            _blocked.add((Receiver)link);
-            link.setContext(Boolean.TRUE);
-        }
-    }
-
-    // a link is being removed, account for it.
-    private void linkRemoved(Link _link)
-    {
-        if (_link instanceof Receiver && (Boolean) _link.getContext())
-        {
-            _link.setContext(Boolean.FALSE);
-            Receiver link = (Receiver)_link;
-            assert _receivers > 0;
-            _receivers--;
-            if (link.getDrain())
-            {
-                link.setDrain(false);
-                assert _draining > 0;
-                _draining--;
-            }
-            if (_blocked.contains(link))
-                _blocked.remove(link);
-            else if (_credited.contains(link))
-                _credited.remove(link);
-            else
-                assert(false);
-        }
-    }
-
-    private static class ConnectionContext
-    {
-        private Address _address;
-        private Connector _connector;
-
-        public ConnectionContext(Address address, Connector connector)
-        {
-            _address = address;
-            _connector = connector;
-        }
-
-        public Address getAddress()
-        {
-            return _address;
-        }
-
-        public boolean matches(Address address)
-        {
-            String host = address.getHost();
-            String port = address.getImpliedPort();
-            Connection conn = _connector.getConnection();
-            return host.equals(conn.getRemoteContainer()) ||
-                (_address.getHost().equals(host) && _address.getImpliedPort().equals(port));
-        }
-
-        public Connector getConnector()
-        {
-            return _connector;
-        }
-    }
-
-    private SslDomain makeDomain(Address address, SslDomain.Mode mode)
-    {
-        SslDomain domain = Proton.sslDomain();
-        domain.init(mode);
-        if (_certificate != null) {
-            domain.setCredentials(_certificate, _privateKey, _password);
-        }
-        if (_trustedDb != null) {
-            domain.setTrustedCaDb(_trustedDb);
-        }
-
-        if ("amqps".equalsIgnoreCase(address.getScheme())) {
-            domain.allowUnsecuredClient(false);
-        } else {
-            domain.allowUnsecuredClient(true);
-        }
-
-        return domain;
-    }
-
-
-    private class ListenerContext
-    {
-        private Address _address;
-        private SslDomain _domain;
-
-        public ListenerContext(Address address)
-        {
-            _address = address;
-            _domain = makeDomain(address, SslDomain.Mode.SERVER);
-        }
-
-        public SslDomain getDomain()
-        {
-            return _domain;
-        }
-
-        public Address getAddress()
-        {
-            return _address;
-        }
-
-    }
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Store.java b/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Store.java
deleted file mode 100644
index b60e8ed..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Store.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.qpid.proton.messenger.impl;
-
-import java.util.List;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.qpid.proton.messenger.Status;
-import org.apache.qpid.proton.messenger.Messenger;
-import org.apache.qpid.proton.engine.Delivery;
-import org.apache.qpid.proton.amqp.messaging.Accepted;
-import org.apache.qpid.proton.amqp.messaging.Rejected;
-
-/**
- * @deprecated Messenger will be removed from upcoming proton-j releases.
- */
-class Store
-{
-    private static final Accepted ACCEPTED = Accepted.getInstance();
-    private static final Rejected REJECTED = new Rejected();
-
-    private LinkedList<StoreEntry> _store = new LinkedList<StoreEntry>();
-    private HashMap<String, LinkedList<StoreEntry>> _stream = new HashMap<String, LinkedList<StoreEntry>>();
-
-    // for incoming/outgoing window tracking
-    int _window;
-    int _lwm;
-    int _hwm;
-    private HashMap<Integer, StoreEntry> _tracked = new HashMap<Integer, StoreEntry>();
-
-    Store()
-    {
-    }
-
-    private boolean isTracking( Integer id )
-    {
-        return id != null && (id.intValue() - _lwm >= 0) && (_hwm - id.intValue() > 0);
-    }
-
-    int size()
-    {
-        return _store.size();
-    }
-
-    int getWindow()
-    {
-        return _window;
-    }
-
-    void setWindow(int window)
-    {
-        _window = window;
-    }
-
-    StoreEntry put(String address)
-    {
-        if (address == null) address = "";
-        StoreEntry entry = new StoreEntry(this, address);
-        _store.add( entry );
-        LinkedList<StoreEntry> list = _stream.get( address );
-        if (list != null) {
-            list.add( entry );
-        } else {
-            list = new LinkedList<StoreEntry>();
-            list.add( entry );
-            _stream.put( address, list );
-        }
-        entry.stored();
-        return entry;
-    }
-
-    StoreEntry get(String address)
-    {
-        if (address != null) {
-            LinkedList<StoreEntry> list = _stream.get( address );
-            if (list != null) return list.peekFirst();
-        } else {
-            return _store.peekFirst();
-        }
-        return null;
-    }
-
-    StoreEntry getEntry(int id)
-    {
-        return _tracked.get(id);
-    }
-
-    Iterator<StoreEntry> trackedEntries()
-    {
-        return _tracked.values().iterator();
-    }
-
-    void freeEntry(StoreEntry entry)
-    {
-        if (entry.isStored()) {
-            _store.remove( entry );
-            LinkedList<StoreEntry> list = _stream.get( entry.getAddress() );
-            if (list != null) list.remove( entry );
-            entry.notStored();
-        }
-        // note well: may still be in _tracked map if still in window!
-    }
-
-    public int trackEntry(StoreEntry entry)
-    {
-        assert( entry.getStore() == this );
-        entry.setId(_hwm++);
-        _tracked.put(entry.getId(), entry);
-        slideWindow();
-        return entry.getId();
-    }
-
-    private void slideWindow()
-    {
-        if (_window >= 0)
-        {
-            while (_hwm - _lwm > _window)
-            {
-                StoreEntry old = getEntry(_lwm);
-                if (old != null)
-                {
-                    _tracked.remove( old.getId() );
-                    Delivery d = old.getDelivery();
-                    if (d != null) {
-                        if (d.getLocalState() == null)
-                            d.disposition(ACCEPTED);
-                        d.settle();
-                    }
-                }
-                _lwm++;
-            }
-        }
-    }
-
-    int update(int id, Status status, int flags, boolean settle, boolean match )
-    {
-        if (!isTracking(id)) return 0;
-
-        int start = (Messenger.CUMULATIVE & flags) != 0 ? _lwm : id;
-        for (int i = start; (id - i) >= 0; i++)
-        {
-            StoreEntry e = getEntry(i);
-            if (e != null)
-            {
-                Delivery d = e.getDelivery();
-                if (d != null)
-                {
-                    if (d.getLocalState() == null)
-                    {
-                        if (match)
-                        {
-                            d.disposition(d.getRemoteState());
-                        }
-                        else
-                        {
-                            switch (status)
-                            {
-                            case ACCEPTED:
-                                d.disposition(ACCEPTED);
-                                break;
-                            case REJECTED:
-                                d.disposition(REJECTED);
-                                break;
-                            default:
-                                break;
-                            }
-                        }
-                        e.updated();
-                    }
-                }
-                if (settle)
-                {
-                    if (d != null)
-                    {
-                        d.settle();
-                    }
-                    _tracked.remove(e.getId());
-                }
-            }
-        }
-
-        while (_hwm - _lwm > 0 && !_tracked.containsKey(_lwm))
-        {
-            _lwm++;
-        }
-
-        return 0;
-    }
-}
-
-
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/StoreEntry.java b/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/StoreEntry.java
deleted file mode 100644
index 1687b94..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/StoreEntry.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.qpid.proton.messenger.impl;
-
-import org.apache.qpid.proton.messenger.Tracker;
-import org.apache.qpid.proton.messenger.Status;
-import org.apache.qpid.proton.engine.Delivery;
-import org.apache.qpid.proton.amqp.messaging.Accepted;
-import org.apache.qpid.proton.amqp.messaging.Modified;
-import org.apache.qpid.proton.amqp.messaging.Rejected;
-import org.apache.qpid.proton.amqp.messaging.Released;
-import org.apache.qpid.proton.amqp.messaging.Received;
-import org.apache.qpid.proton.amqp.transport.DeliveryState;
-
-/**
- * @deprecated Messenger will be removed from upcoming proton-j releases.
- */
-class StoreEntry
-{
-    private Store  _store;
-    private Integer _id;
-    private String _address;
-    private byte[] _encodedMsg;
-    private int _encodedLength;
-    private Delivery _delivery;
-    private Status _status = Status.UNKNOWN;
-    private Object _context;
-    private boolean _inStore = false;
-
-    public StoreEntry(Store store, String address)
-    {
-        _store = store;
-        _address = address;
-    }
-
-    public Store getStore()
-    {
-        return _store;
-    }
-
-    public boolean isStored()
-    {
-        return _inStore;
-    }
-
-    public void stored()
-    {
-        _inStore = true;
-    }
-
-    public void notStored()
-    {
-        _inStore = false;
-    }
-
-    public String getAddress()
-    {
-        return _address;
-    }
-
-    public byte[] getEncodedMsg()
-    {
-        return _encodedMsg;
-    }
-
-    public int getEncodedLength()
-    {
-        return _encodedLength;
-    }
-
-    public void setEncodedMsg( byte[] encodedMsg, int length )
-    {
-        _encodedMsg = encodedMsg;
-        _encodedLength = length;
-    }
-
-    public void setId(int id)
-    {
-        _id = new Integer(id);
-    }
-
-    public Integer getId()
-    {
-        return _id;
-    }
-
-    public void setDelivery( Delivery d )
-    {
-        if (_delivery != null)
-        {
-            _delivery.setContext(null);
-        }
-        _delivery = d;
-        if (_delivery != null)
-        {
-            _delivery.setContext(this);
-        }
-        updated();
-    }
-
-    public Delivery getDelivery()
-    {
-        return _delivery;
-    }
-
-    public Status getStatus()
-    {
-        return _status;
-    }
-
-    public void setStatus(Status status)
-    {
-        _status = status;
-    }
-
-    private static Status _disp2status(DeliveryState disp)
-    {
-        if (disp == null) return Status.PENDING;
-
-        if (disp instanceof Received)
-            return Status.PENDING;
-        if (disp instanceof Accepted)
-            return Status.ACCEPTED;
-        if (disp instanceof Rejected)
-            return Status.REJECTED;
-        if (disp instanceof Released)
-            return Status.RELEASED;
-        if (disp instanceof Modified)
-            return Status.MODIFIED;
-        assert(false);
-        return null;
-    }
-
-    public void updated()
-    {
-        if (_delivery != null)
-        {
-            if (_delivery.getRemoteState() != null)
-            {
-                _status = _disp2status(_delivery.getRemoteState());
-            }
-            else if (_delivery.remotelySettled())
-            {
-                DeliveryState disp = _delivery.getLocalState();
-                if (disp == null) {
-                    _status = Status.SETTLED;
-                } else {
-                    _status = _disp2status(_delivery.getLocalState());
-                }
-            }
-            else
-            {
-                _status = Status.PENDING;
-            }
-        }
-    }
-
-    public void setContext(Object context)
-    {
-        _context = context;
-    }
-
-    public Object getContext()
-    {
-        return _context;
-    }
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/TrackerImpl.java b/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/TrackerImpl.java
deleted file mode 100644
index 2d8b584..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/TrackerImpl.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.qpid.proton.messenger.impl;
-
-import org.apache.qpid.proton.messenger.Tracker;
-
-/**
- * @deprecated Messenger will be removed from upcoming proton-j releases.
- */
-class TrackerImpl implements Tracker
-{
-    public enum Type {
-        OUTGOING,
-        INCOMING
-    }
-
-    private Type _type;
-    private int _sequence;
-
-    TrackerImpl(Type type, int sequence)
-    {
-        _type = type;
-        _sequence = sequence;
-    }
-
-    boolean isOutgoing()
-    {
-        return _type == Type.OUTGOING;
-    }
-
-    int getSequence()
-    {
-        return _sequence;
-    }
-
-    public String toString()
-    {
-        return (isOutgoing() ? "O:" : "I:") + Integer.toString(_sequence);
-    }
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Transform.java b/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Transform.java
deleted file mode 100644
index c3a08ea..0000000
--- a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Transform.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.proton.messenger.impl;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-
-/**
- * Transform
- *
- * @deprecated Messenger will be removed from upcoming proton-j releases.
- */
-class Transform
-{
-
-    private static class Rule {
-
-        String _pattern;
-        String _substitution;
-
-        Pattern _compiled;
-        StringBuilder _sb = new StringBuilder();
-        boolean _matched = false;
-        String _result = null;
-
-        Rule(String pattern, String substitution)
-        {
-            _pattern = pattern;
-            _substitution = substitution;
-            _compiled = Pattern.compile(_pattern.replace("*", "(.*)").replace("%", "([^/]*)"));
-        }
-
-        boolean apply(String src) {
-            _matched = false;
-            _result = null;
-            Matcher m = _compiled.matcher(src);
-            if (m.matches()) {
-                _matched = true;
-                if (_substitution != null) {
-                    _sb.setLength(0);
-                    int limit = _substitution.length();
-                    int idx = 0;
-                    while (idx < limit) {
-                        char c = _substitution.charAt(idx);
-                        switch (c) {
-                        case '$':
-                            idx++;
-                            if (idx < limit) {
-                                c = _substitution.charAt(idx);
-                            } else {
-                                throw new IllegalStateException("substition index truncated");
-                            }
-
-                            if (c == '$') {
-                                _sb.append(c);
-                                idx++;
-                            } else {
-                                int num = 0;
-                                while (Character.isDigit(c)) {
-                                    num *= 10;
-                                    num += c - '0';
-                                    idx++;
-                                    c = idx < limit ? _substitution.charAt(idx) : '\0';
-                                }
-                                if (num > 0) {
-                                    _sb.append(m.group(num));
-                                } else {
-                                    throw new IllegalStateException
-                                        ("bad substitution index at character[" +
-                                         idx + "]: " + _substitution);
-                                }
-                            }
-                            break;
-                        default:
-                            _sb.append(c);
-                            idx++;
-                            break;
-                        }
-                    }
-                    _result = _sb.toString();
-                }
-            }
-
-            return _matched;
-        }
-
-        boolean matched() {
-            return _matched;
-        }
-
-        String result() {
-            return _result;
-        }
-
-    }
-
-    private List<Rule> _rules = new ArrayList<Rule>();
-    private Rule _matched = null;
-
-    public void rule(String pattern, String substitution)
-    {
-        _rules.add(new Rule(pattern, substitution));
-    }
-
-    public boolean apply(String src)
-    {
-        _matched = null;
-
-        for (Rule rule: _rules) {
-            if (rule.apply(src)) {
-                _matched = rule;
-                break;
-            }
-        }
-
-        return _matched != null;
-    }
-
-    public boolean matched()
-    {
-        return _matched != null;
-    }
-
-    public String result()
-    {
-        return _matched != null ? _matched.result() : null;
-    }
-
-}
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/AcceptorImpl.java b/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/AcceptorImpl.java
index c5abbd8..b9fd1de 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/AcceptorImpl.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/AcceptorImpl.java
@@ -40,7 +40,6 @@
 import org.apache.qpid.proton.reactor.impl.ReactorImpl;
 import org.apache.qpid.proton.reactor.Selectable;
 import org.apache.qpid.proton.reactor.Selectable.Callback;
-import org.apache.qpid.proton.messenger.impl.Address;
 
 @SuppressWarnings("deprecation")
 public class AcceptorImpl implements Acceptor {
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Address.java b/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/Address.java
similarity index 97%
rename from proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Address.java
rename to proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/Address.java
index 27b0d39..619912f 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Address.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/Address.java
@@ -18,13 +18,12 @@
  * under the License.
  *
  */
-package org.apache.qpid.proton.messenger.impl;
+package org.apache.qpid.proton.reactor.impl;
 
 
 /**
  * Address
  *
- * @deprecated Messenger will be removed from upcoming proton-j releases.
  */
 public class Address
 {
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/IOHandler.java b/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/IOHandler.java
index 2dd7e1a..1282083 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/IOHandler.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/IOHandler.java
@@ -45,7 +45,6 @@
 import org.apache.qpid.proton.reactor.Selector;
 import org.apache.qpid.proton.reactor.Acceptor;
 import org.apache.qpid.proton.reactor.impl.AcceptorImpl;
-import org.apache.qpid.proton.messenger.impl.Address;
 
 @SuppressWarnings("deprecation")
 public class IOHandler extends BaseHandler {
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/ReactorImpl.java b/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/ReactorImpl.java
index 30c8df9..9d38b85 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/ReactorImpl.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/reactor/impl/ReactorImpl.java
@@ -51,7 +51,6 @@
 import org.apache.qpid.proton.reactor.Selectable.Callback;
 import org.apache.qpid.proton.reactor.Selector;
 import org.apache.qpid.proton.reactor.Task;
-import org.apache.qpid.proton.messenger.impl.Address;
 
 @SuppressWarnings("deprecation")
 public class ReactorImpl implements Reactor, Extendable {
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/messenger/impl/AddressTest.java b/proton-j/src/test/java/org/apache/qpid/proton/reactor/impl/AddressTest.java
similarity index 98%
rename from proton-j/src/test/java/org/apache/qpid/proton/messenger/impl/AddressTest.java
rename to proton-j/src/test/java/org/apache/qpid/proton/reactor/impl/AddressTest.java
index 77154b6..6b2da05 100644
--- a/proton-j/src/test/java/org/apache/qpid/proton/messenger/impl/AddressTest.java
+++ b/proton-j/src/test/java/org/apache/qpid/proton/reactor/impl/AddressTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.qpid.proton.messenger.impl;
+package org.apache.qpid.proton.reactor.impl;
 
 import static org.junit.Assert.*;
 
diff --git a/tests/java/pythonTests.ignore b/tests/java/pythonTests.ignore
index 7911176..1fafa02 100644
--- a/tests/java/pythonTests.ignore
+++ b/tests/java/pythonTests.ignore
@@ -1,4 +1 @@
 proton_tests.reactor_interop.*
-proton_tests.soak.*
-proton_tests.ssl.SslTest.test_defaults_messenger_app
-proton_tests.ssl.SslTest.test_server_authentication_messenger_app
diff --git a/tests/java/shim/binding/proton/__init__.py b/tests/java/shim/binding/proton/__init__.py
index d3f6922..ecb480f 100644
--- a/tests/java/shim/binding/proton/__init__.py
+++ b/tests/java/shim/binding/proton/__init__.py
@@ -23,7 +23,6 @@
 
 The proton APIs consist of the following classes:
 
- - L{Messenger} -- A messaging endpoint.
  - L{Message}   -- A class for creating and/or accessing AMQP message content.
  - L{Data}      -- A class for creating and/or accessing arbitrary AMQP encoded
                   data.
@@ -148,13 +147,6 @@
   """
   pass
 
-class MessengerException(ProtonException):
-  """
-  The root of the messenger exception hierarchy. All exceptions
-  generated by the messenger class derive from this exception.
-  """
-  pass
-
 class MessageException(ProtonException):
   """
   The MessageException class is the root of the message exception
@@ -168,618 +160,10 @@
   PN_INTR: Interrupt
   }
 
-PENDING = Constant("PENDING")
-ACCEPTED = Constant("ACCEPTED")
-REJECTED = Constant("REJECTED")
-RELEASED = Constant("RELEASED")
-MODIFIED = Constant("MODIFIED")
-ABORTED = Constant("ABORTED")
-SETTLED = Constant("SETTLED")
-
-STATUSES = {
-  PN_STATUS_ABORTED: ABORTED,
-  PN_STATUS_ACCEPTED: ACCEPTED,
-  PN_STATUS_REJECTED: REJECTED,
-  PN_STATUS_RELEASED: RELEASED,
-  PN_STATUS_MODIFIED: MODIFIED,
-  PN_STATUS_PENDING: PENDING,
-  PN_STATUS_SETTLED: SETTLED,
-  PN_STATUS_UNKNOWN: None
-  }
 
 AUTOMATIC = Constant("AUTOMATIC")
 MANUAL = Constant("MANUAL")
 
-class Messenger(object):
-  """
-  The L{Messenger} class defines a high level interface for sending
-  and receiving L{Messages<Message>}. Every L{Messenger} contains a
-  single logical queue of incoming messages and a single logical queue
-  of outgoing messages. These messages in these queues may be destined
-  for, or originate from, a variety of addresses.
-
-  The messenger interface is single-threaded.  All methods
-  except one (L{interrupt}) are intended to be used from within
-  the messenger thread.
-
-
-  Address Syntax
-  ==============
-
-  An address has the following form::
-
-    [ amqp[s]:// ] [user[:password]@] domain [/[name]]
-
-  Where domain can be one of::
-
-    host | host:port | ip | ip:port | name
-
-  The following are valid examples of addresses:
-
-   - example.org
-   - example.org:1234
-   - amqp://example.org
-   - amqps://example.org
-   - example.org/incoming
-   - amqps://example.org/outgoing
-   - amqps://fred:trustno1@example.org
-   - 127.0.0.1:1234
-   - amqps://127.0.0.1:1234
-
-  Sending & Receiving Messages
-  ============================
-
-  The L{Messenger} class works in conjuction with the L{Message} class. The
-  L{Message} class is a mutable holder of message content.
-
-  The L{put} method copies its L{Message} to the outgoing queue, and may
-  send queued messages if it can do so without blocking.  The L{send}
-  method blocks until it has sent the requested number of messages,
-  or until a timeout interrupts the attempt.
-
-
-    >>> message = Message()
-    >>> for i in range(3):
-    ...   message.address = "amqp://host/queue"
-    ...   message.subject = "Hello World %i" % i
-    ...   messenger.put(message)
-    >>> messenger.send()
-
-  Similarly, the L{recv} method receives messages into the incoming
-  queue, and may block as it attempts to receive the requested number
-  of messages,  or until timeout is reached. It may receive fewer
-  than the requested number.  The L{get} method pops the
-  eldest L{Message} off the incoming queue and copies it into the L{Message}
-  object that you supply.  It will not block.
-
-
-    >>> message = Message()
-    >>> messenger.recv(10):
-    >>> while messenger.incoming > 0:
-    ...   messenger.get(message)
-    ...   print message.subject
-    Hello World 0
-    Hello World 1
-    Hello World 2
-
-  The blocking flag allows you to turn off blocking behavior entirely,
-  in which case L{send} and L{recv} will do whatever they can without
-  blocking, and then return.  You can then look at the number
-  of incoming and outgoing messages to see how much outstanding work
-  still remains.
-  """
-
-  def __init__(self, name=None):
-    """
-    Construct a new L{Messenger} with the given name. The name has
-    global scope. If a NULL name is supplied, a UUID based name will
-    be chosen.
-
-    @type name: string
-    @param name: the name of the messenger or None
-
-    """
-    self._mng = pn_messenger(name)
-    self._selectables = {}
-
-  def __del__(self):
-    """
-    Destroy the L{Messenger}.  This will close all connections that
-    are managed by the L{Messenger}.  Call the L{stop} method before
-    destroying the L{Messenger}.
-    """
-    if hasattr(self, "_mng"):
-      pn_messenger_free(self._mng)
-      del self._mng
-
-  def _check(self, err):
-    if err < 0:
-      if (err == PN_INPROGRESS):
-        return
-      exc = EXCEPTIONS.get(err, MessengerException)
-      raise exc("[%s]: %s" % (err, pn_error_text(pn_messenger_error(self._mng))))
-    else:
-      return err
-
-  @property
-  def name(self):
-    """
-    The name of the L{Messenger}.
-    """
-    return pn_messenger_name(self._mng)
-
-  def _get_certificate(self):
-    return pn_messenger_get_certificate(self._mng)
-
-  def _set_certificate(self, value):
-    self._check(pn_messenger_set_certificate(self._mng, value))
-
-  certificate = property(_get_certificate, _set_certificate,
-                         doc="""
-Path to a certificate file for the L{Messenger}. This certificate is
-used when the L{Messenger} accepts or establishes SSL/TLS connections.
-This property must be specified for the L{Messenger} to accept
-incoming SSL/TLS connections and to establish client authenticated
-outgoing SSL/TLS connection. Non client authenticated outgoing SSL/TLS
-connections do not require this property.
-""")
-
-  def _get_private_key(self):
-    return pn_messenger_get_private_key(self._mng)
-
-  def _set_private_key(self, value):
-    self._check(pn_messenger_set_private_key(self._mng, value))
-
-  private_key = property(_get_private_key, _set_private_key,
-                         doc="""
-Path to a private key file for the L{Messenger's<Messenger>}
-certificate. This property must be specified for the L{Messenger} to
-accept incoming SSL/TLS connections and to establish client
-authenticated outgoing SSL/TLS connection. Non client authenticated
-SSL/TLS connections do not require this property.
-""")
-
-  def _get_password(self):
-    return pn_messenger_get_password(self._mng)
-
-  def _set_password(self, value):
-    self._check(pn_messenger_set_password(self._mng, value))
-
-  password = property(_get_password, _set_password,
-                      doc="""
-This property contains the password for the L{Messenger.private_key}
-file, or None if the file is not encrypted.
-""")
-
-  def _get_trusted_certificates(self):
-    return pn_messenger_get_trusted_certificates(self._mng)
-
-  def _set_trusted_certificates(self, value):
-    self._check(pn_messenger_set_trusted_certificates(self._mng, value))
-
-  trusted_certificates = property(_get_trusted_certificates,
-                                  _set_trusted_certificates,
-                                  doc="""
-A path to a database of trusted certificates for use in verifying the
-peer on an SSL/TLS connection. If this property is None, then the peer
-will not be verified.
-""")
-
-  def _get_timeout(self):
-    t = pn_messenger_get_timeout(self._mng)
-    if t == -1:
-      return None
-    else:
-      return millis2secs(t)
-
-  def _set_timeout(self, value):
-    if value is None:
-      t = -1
-    else:
-      t = secs2millis(value)
-    self._check(pn_messenger_set_timeout(self._mng, t))
-
-  timeout = property(_get_timeout, _set_timeout,
-                     doc="""
-The timeout property contains the default timeout for blocking
-operations performed by the L{Messenger}.
-""")
-
-  def _is_blocking(self):
-    return pn_messenger_is_blocking(self._mng)
-
-  def _set_blocking(self, b):
-    self._check(pn_messenger_set_blocking(self._mng, b))
-
-  blocking = property(_is_blocking, _set_blocking,
-                      doc="""
-Enable or disable blocking behavior during L{Message} sending
-and receiving.  This affects every blocking call, with the
-exception of L{work}.  Currently, the affected calls are
-L{send}, L{recv}, and L{stop}.
-""")
-
-  def _is_passive(self):
-    return pn_messenger_is_passive(self._mng)
-
-  def _set_passive(self, b):
-    self._check(pn_messenger_set_passive(self._mng, b))
-
-  passive = property(_is_passive, _set_passive,
-                      doc="""
-When passive is set to true, Messenger will not attempt to perform I/O
-internally. In this mode it is necessary to use the selectables API to
-drive any I/O needed to perform requested actions. In this mode
-Messenger will never block.
-""")
-
-  def _get_incoming_window(self):
-    return pn_messenger_get_incoming_window(self._mng)
-
-  def _set_incoming_window(self, window):
-    self._check(pn_messenger_set_incoming_window(self._mng, window))
-
-  incoming_window = property(_get_incoming_window, _set_incoming_window,
-                             doc="""
-The incoming tracking window for the messenger. The messenger will
-track the remote status of this many incoming deliveries after they
-have been accepted or rejected. Defaults to zero.
-
-L{Messages<Message>} enter this window only when you take them into your application
-using L{get}.  If your incoming window size is I{n}, and you get I{n}+1 L{messages<Message>}
-without explicitly accepting or rejecting the oldest message, then the
-message that passes beyond the edge of the incoming window will be assigned
-the default disposition of its link.
-""")
-
-  def _get_outgoing_window(self):
-    return pn_messenger_get_outgoing_window(self._mng)
-
-  def _set_outgoing_window(self, window):
-    self._check(pn_messenger_set_outgoing_window(self._mng, window))
-
-  outgoing_window = property(_get_outgoing_window, _set_outgoing_window,
-                             doc="""
-The outgoing tracking window for the messenger. The messenger will
-track the remote status of this many outgoing deliveries after calling
-send. Defaults to zero.
-
-A L{Message} enters this window when you call the put() method with the
-message.  If your outgoing window size is I{n}, and you call L{put} I{n}+1
-times, status information will no longer be available for the
-first message.
-""")
-
-  def start(self):
-    """
-    Currently a no-op placeholder.
-    For future compatibility, do not L{send} or L{recv} messages
-    before starting the L{Messenger}.
-    """
-    self._check(pn_messenger_start(self._mng))
-
-  def stop(self):
-    """
-    Transitions the L{Messenger} to an inactive state. An inactive
-    L{Messenger} will not send or receive messages from its internal
-    queues. A L{Messenger} should be stopped before being discarded to
-    ensure a clean shutdown handshake occurs on any internally managed
-    connections.
-    """
-    self._check(pn_messenger_stop(self._mng))
-
-  @property
-  def stopped(self):
-    """
-    Returns true iff a L{Messenger} is in the stopped state.
-    This function does not block.
-    """
-    return pn_messenger_stopped(self._mng)
-
-  def subscribe(self, source):
-    """
-    Subscribes the L{Messenger} to messages originating from the
-    specified source. The source is an address as specified in the
-    L{Messenger} introduction with the following addition. If the
-    domain portion of the address begins with the '~' character, the
-    L{Messenger} will interpret the domain as host/port, bind to it,
-    and listen for incoming messages. For example "~0.0.0.0",
-    "amqp://~0.0.0.0", and "amqps://~0.0.0.0" will all bind to any
-    local interface and listen for incoming messages with the last
-    variant only permitting incoming SSL connections.
-
-    @type source: string
-    @param source: the source of messages to subscribe to
-    """
-    sub_impl = pn_messenger_subscribe(self._mng, source)
-    if not sub_impl:
-      self._check(pn_error_code(pn_messenger_error(self._mng)))
-      raise MessengerException("Cannot subscribe to %s"%source)
-    return Subscription(sub_impl)
-
-  def put(self, message):
-    """
-    Places the content contained in the message onto the outgoing
-    queue of the L{Messenger}. This method will never block, however
-    it will send any unblocked L{Messages<Message>} in the outgoing
-    queue immediately and leave any blocked L{Messages<Message>}
-    remaining in the outgoing queue. The L{send} call may be used to
-    block until the outgoing queue is empty. The L{outgoing} property
-    may be used to check the depth of the outgoing queue.
-
-    When the content in a given L{Message} object is copied to the outgoing
-    message queue, you may then modify or discard the L{Message} object
-    without having any impact on the content in the outgoing queue.
-
-    This method returns an outgoing tracker for the L{Message}.  The tracker
-    can be used to determine the delivery status of the L{Message}.
-
-    @type message: Message
-    @param message: the message to place in the outgoing queue
-    @return: a tracker
-    """
-    message._pre_encode()
-    self._check(pn_messenger_put(self._mng, message._msg))
-    return pn_messenger_outgoing_tracker(self._mng)
-
-  def status(self, tracker):
-    """
-    Gets the last known remote state of the delivery associated with
-    the given tracker.
-
-    @type tracker: tracker
-    @param tracker: the tracker whose status is to be retrieved
-
-    @return: one of None, PENDING, REJECTED, MODIFIED, or ACCEPTED
-    """
-    disp = pn_messenger_status(self._mng, tracker);
-    return STATUSES.get(disp, disp)
-
-  def buffered(self, tracker):
-    """
-    Checks if the delivery associated with the given tracker is still
-    waiting to be sent.
-
-    @type tracker: tracker
-    @param tracker: the tracker whose status is to be retrieved
-
-    @return: true if delivery is still buffered
-    """
-    return pn_messenger_buffered(self._mng, tracker);
-
-  def settle(self, tracker=None):
-    """
-    Frees a L{Messenger} from tracking the status associated with a given
-    tracker. If you don't supply a tracker, all outgoing L{messages<Message>} up
-    to the most recent will be settled.
-    """
-    if tracker is None:
-      tracker = pn_messenger_outgoing_tracker(self._mng)
-      flags = PN_CUMULATIVE
-    else:
-      flags = 0
-    self._check(pn_messenger_settle(self._mng, tracker, flags))
-
-  def send(self, n=-1):
-    """
-    This call will block until the indicated number of L{messages<Message>}
-    have been sent, or until the operation times out.  If n is -1 this call will
-    block until all outgoing L{messages<Message>} have been sent. If n is 0 then
-    this call will send whatever it can without blocking.
-    """
-    self._check(pn_messenger_send(self._mng, n))
-
-  def recv(self, n=None):
-    """
-    Receives up to I{n} L{messages<Message>} into the incoming queue.  If no value
-    for I{n} is supplied, this call will receive as many L{messages<Message>} as it
-    can buffer internally.  If the L{Messenger} is in blocking mode, this
-    call will block until at least one L{Message} is available in the
-    incoming queue.
-    """
-    if n is None:
-      n = -1
-    self._check(pn_messenger_recv(self._mng, n))
-
-  def work(self, timeout=None):
-    """
-    Sends or receives any outstanding L{messages<Message>} queued for a L{Messenger}.
-    This will block for the indicated timeout.
-    This method may also do I/O work other than sending and receiving
-    L{messages<Message>}.  For example, closing connections after messenger.L{stop}()
-    has been called.
-    """
-    if timeout is None:
-      t = -1
-    else:
-      t = secs2millis(timeout)
-    err = pn_messenger_work(self._mng, t)
-    if (err == PN_TIMEOUT):
-      return False
-    else:
-      self._check(err)
-      return True
-
-  @property
-  def receiving(self):
-    return pn_messenger_receiving(self._mng)
-
-  def interrupt(self):
-    """
-    The L{Messenger} interface is single-threaded.
-    This is the only L{Messenger} function intended to be called
-    from outside of the L{Messenger} thread.
-    Call this from a non-messenger thread to interrupt
-    a L{Messenger} that is blocking.
-    This will cause any in-progress blocking call to throw
-    the L{Interrupt} exception.  If there is no currently blocking
-    call, then the next blocking call will be affected, even if it
-    is within the same thread that interrupt was called from.
-    """
-    self._check(pn_messenger_interrupt(self._mng))
-
-  def get(self, message=None):
-    """
-    Moves the message from the head of the incoming message queue into
-    the supplied message object. Any content in the message will be
-    overwritten.
-
-    A tracker for the incoming L{Message} is returned.  The tracker can
-    later be used to communicate your acceptance or rejection of the
-    L{Message}.
-
-    If None is passed in for the L{Message} object, the L{Message}
-    popped from the head of the queue is discarded.
-
-    @type message: Message
-    @param message: the destination message object
-    @return: a tracker
-    """
-    if message is None:
-      impl = None
-    else:
-      impl = message._msg
-    self._check(pn_messenger_get(self._mng, impl))
-    if message is not None:
-      message._post_decode()
-    return pn_messenger_incoming_tracker(self._mng)
-
-  def accept(self, tracker=None):
-    """
-    Signal the sender that you have acted on the L{Message}
-    pointed to by the tracker.  If no tracker is supplied,
-    then all messages that have been returned by the L{get}
-    method are accepted, except those that have already been
-    auto-settled by passing beyond your incoming window size.
-
-    @type tracker: tracker
-    @param tracker: a tracker as returned by get
-    """
-    if tracker is None:
-      tracker = pn_messenger_incoming_tracker(self._mng)
-      flags = PN_CUMULATIVE
-    else:
-      flags = 0
-    self._check(pn_messenger_accept(self._mng, tracker, flags))
-
-  def reject(self, tracker=None):
-    """
-    Rejects the L{Message} indicated by the tracker.  If no tracker
-    is supplied, all messages that have been returned by the L{get}
-    method are rejected, except those that have already been auto-settled
-    by passing beyond your outgoing window size.
-
-    @type tracker: tracker
-    @param tracker: a tracker as returned by get
-    """
-    if tracker is None:
-      tracker = pn_messenger_incoming_tracker(self._mng)
-      flags = PN_CUMULATIVE
-    else:
-      flags = 0
-    self._check(pn_messenger_reject(self._mng, tracker, flags))
-
-  @property
-  def outgoing(self):
-    """
-    The outgoing queue depth.
-    """
-    return pn_messenger_outgoing(self._mng)
-
-  @property
-  def incoming(self):
-    """
-    The incoming queue depth.
-    """
-    return pn_messenger_incoming(self._mng)
-
-  def route(self, pattern, address):
-    """
-          Adds a routing rule to a L{Messenger's<Messenger>} internal routing table.
-
-          The route procedure may be used to influence how a L{Messenger} will
-          internally treat a given address or class of addresses. Every call
-          to the route procedure will result in L{Messenger} appending a routing
-          rule to its internal routing table.
-
-          Whenever a L{Message} is presented to a L{Messenger} for delivery, it
-          will match the address of this message against the set of routing
-          rules in order. The first rule to match will be triggered, and
-          instead of routing based on the address presented in the message,
-          the L{Messenger} will route based on the address supplied in the rule.
-
-          The pattern matching syntax supports two types of matches, a '%'
-          will match any character except a '/', and a '*' will match any
-          character including a '/'.
-
-          A routing address is specified as a normal AMQP address, however it
-          may additionally use substitution variables from the pattern match
-          that triggered the rule.
-
-          Any message sent to "foo" will be routed to "amqp://foo.com":
-
-             >>> messenger.route("foo", "amqp://foo.com");
-
-          Any message sent to "foobar" will be routed to
-          "amqp://foo.com/bar":
-
-             >>> messenger.route("foobar", "amqp://foo.com/bar");
-
-          Any message sent to bar/<path> will be routed to the corresponding
-          path within the amqp://bar.com domain:
-
-             >>> messenger.route("bar/*", "amqp://bar.com/$1");
-
-          Route all L{messages<Message>} over TLS:
-
-             >>> messenger.route("amqp:*", "amqps:$1")
-
-          Supply credentials for foo.com:
-
-             >>> messenger.route("amqp://foo.com/*", "amqp://user:password@foo.com/$1");
-
-          Supply credentials for all domains:
-
-             >>> messenger.route("amqp://*", "amqp://user:password@$1");
-
-          Route all addresses through a single proxy while preserving the
-          original destination:
-
-             >>> messenger.route("amqp://%/*", "amqp://user:password@proxy/$1/$2");
-
-          Route any address through a single broker:
-
-             >>> messenger.route("*", "amqp://user:password@broker/$1");
-    """
-    self._check(pn_messenger_route(self._mng, unicode2utf8(pattern), unicode2utf8(address)))
-
-  def rewrite(self, pattern, address):
-    """
-    Similar to route(), except that the destination of
-    the L{Message} is determined before the message address is rewritten.
-
-    The outgoing address is only rewritten after routing has been
-    finalized.  If a message has an outgoing address of
-    "amqp://0.0.0.0:5678", and a rewriting rule that changes its
-    outgoing address to "foo", it will still arrive at the peer that
-    is listening on "amqp://0.0.0.0:5678", but when it arrives there,
-    the receiver will see its outgoing address as "foo".
-
-    The default rewrite rule removes username and password from addresses
-    before they are transmitted.
-    """
-    self._check(pn_messenger_rewrite(self._mng, unicode2utf8(pattern), unicode2utf8(address)))
-
-  def selectable(self):
-    return Selectable.wrap(pn_messenger_selectable(self._mng))
-
-  @property
-  def deadline(self):
-    tstamp = pn_messenger_deadline(self._mng)
-    if tstamp:
-      return millis2secs(tstamp)
-    else:
-      return None
 
 class Message(object):
   """The L{Message} class is a mutable holder of message content.
@@ -4259,8 +3643,6 @@
            "Link",
            "Message",
            "MessageException",
-           "Messenger",
-           "MessengerException",
            "ProtonException",
            "VERSION_MAJOR",
            "VERSION_MINOR",
diff --git a/tests/java/shim/cmessenger.py b/tests/java/shim/cmessenger.py
deleted file mode 100644
index 249e0dc..0000000
--- a/tests/java/shim/cmessenger.py
+++ /dev/null
@@ -1,225 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-# 
-#   http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-from org.apache.qpid.proton import Proton
-from org.apache.qpid.proton.messenger import Messenger, Status
-from org.apache.qpid.proton import InterruptException, TimeoutException
-
-from cerror import *
-
-# from proton/messenger.h
-PN_STATUS_UNKNOWN = 0
-PN_STATUS_PENDING = 1
-PN_STATUS_ACCEPTED = 2
-PN_STATUS_REJECTED = 3
-PN_STATUS_RELEASED = 4
-PN_STATUS_MODIFIED = 5
-PN_STATUS_ABORTED = 6
-PN_STATUS_SETTLED = 7
-
-PN_CUMULATIVE = 1
-
-class pn_messenger_wrapper:
-
-  def __init__(self, impl):
-    self.impl = impl
-    self.error = pn_error(0, None)
-
-def pn_messenger(name):
-  if name is None:
-    return pn_messenger_wrapper(Proton.messenger())
-  else:
-    return pn_messenger_wrapper(Proton.messenger(name))
-
-def pn_messenger_error(m):
-  return m.error
-
-def pn_messenger_set_timeout(m, t):
-  m.impl.setTimeout(t)
-  return 0
-
-def pn_messenger_set_blocking(m, b):
-  m.impl.setBlocking(b)
-  return 0
-
-def pn_messenger_set_certificate(m, c):
-  m.impl.setCertificate(c)
-  return 0
-
-def pn_messenger_set_private_key(m, p):
-  m.impl.setPrivateKey(p)
-  return 0
-
-def pn_messenger_set_password(m, p):
-  m.impl.setPassword(p)
-  return 0
-
-def pn_messenger_set_trusted_certificates(m, t):
-  m.impl.setTrustedCertificates(t)
-  return 0
-
-def pn_messenger_set_incoming_window(m, w):
-  m.impl.setIncomingWindow(w)
-  return 0
-
-def pn_messenger_set_outgoing_window(m, w):
-  m.impl.setOutgoingWindow(w)
-  return 0
-
-def pn_messenger_start(m):
-  m.impl.start()
-  return 0
-
-# XXX: ???
-def pn_messenger_work(m, t):
-  try:
-    if m.impl.work(t):
-      return 1
-    else:
-      return PN_TIMEOUT
-  except InterruptException, e:
-    return PN_INTR
-
-class pn_subscription:
-
-  def __init__(self):
-    pass
-
-def pn_messenger_subscribe(m, source):
-  m.impl.subscribe(source)
-  return pn_subscription()
-
-def pn_messenger_route(m, pattern, address):
-  m.impl.route(pattern, address)
-  return 0
-
-def pn_messenger_rewrite(m, pattern, address):
-  m.impl.rewrite(pattern, address)
-  return 0
-
-def pn_messenger_interrupt(m):
-  m.impl.interrupt()
-  return 0
-
-def pn_messenger_buffered(m, t):
-  raise Skipped()
-
-from org.apache.qpid.proton.engine import TransportException
-
-def pn_messenger_stop(m):
-  m.impl.stop()
-  return 0
-
-def pn_messenger_stopped(m):
-  return m.impl.stopped()
-
-def pn_messenger_put(m, msg):
-  msg.pre_encode()
-  m.impl.put(msg.impl)
-  return 0
-
-def pn_messenger_outgoing_tracker(m):
-  return m.impl.outgoingTracker()
-
-def pn_messenger_send(m, n):
-  try:
-    m.impl.send(n)
-    return 0
-  except InterruptException, e:
-    return PN_INTR
-  except TimeoutException, e:
-    return PN_TIMEOUT
-
-def pn_messenger_recv(m, n):
-  try:
-    m.impl.recv(n)
-    return 0
-  except InterruptException, e:
-    return PN_INTR
-  except TimeoutException, e:
-    return PN_TIMEOUT
-
-def pn_messenger_receiving(m):
-  return m.impl.receiving()
-
-def pn_messenger_incoming(m):
-  return m.impl.incoming()
-
-def pn_messenger_outgoing(m):
-  return m.impl.outgoing()
-
-def pn_messenger_get(m, msg):
-  mimpl = m.impl.get()
-  if msg:
-    msg.decode(mimpl)
-  return 0
-
-def pn_messenger_incoming_tracker(m):
-  return m.impl.incomingTracker()
-
-def pn_messenger_accept(m, tracker, flags):
-  if flags:
-    m.impl.accept(tracker, Messenger.CUMULATIVE)
-  else:
-    m.impl.accept(tracker, 0)
-  return 0
-
-def pn_messenger_reject(m, tracker, flags):
-  if flags:
-    m.impl.reject(tracker, Messenger.CUMULATIVE)
-  else:
-    m.impl.reject(tracker, 0)
-  return 0
-
-def pn_messenger_settle(m, tracker, flags):
-  if flags:
-    m.impl.settle(tracker, Messenger.CUMULATIVE)
-  else:
-    m.impl.settle(tracker, 0)
-  return 0
-
-STATUS_P2J = {
-  PN_STATUS_UNKNOWN: Status.UNKNOWN,
-  PN_STATUS_PENDING: Status.PENDING,
-  PN_STATUS_ACCEPTED: Status.ACCEPTED,
-  PN_STATUS_REJECTED: Status.REJECTED,
-  PN_STATUS_RELEASED: Status.RELEASED,
-  PN_STATUS_MODIFIED: Status.MODIFIED,
-  PN_STATUS_ABORTED: Status.ABORTED,
-  PN_STATUS_SETTLED: Status.SETTLED
-}
-
-STATUS_J2P = {
-  Status.UNKNOWN: PN_STATUS_UNKNOWN,
-  Status.PENDING: PN_STATUS_PENDING,
-  Status.ACCEPTED: PN_STATUS_ACCEPTED,
-  Status.REJECTED: PN_STATUS_REJECTED,
-  Status.RELEASED: PN_STATUS_RELEASED,
-  Status.MODIFIED: PN_STATUS_MODIFIED,
-  Status.ABORTED: PN_STATUS_ABORTED,
-  Status.SETTLED: PN_STATUS_SETTLED
-}
-
-def pn_messenger_status(m, tracker):
-  return STATUS_J2P[m.impl.getStatus(tracker)]
-
-def pn_messenger_set_passive(m, passive):
-  raise Skipped()
-
-def pn_messenger_selectable(m):
-  raise Skipped()
diff --git a/tests/java/shim/cproton.py b/tests/java/shim/cproton.py
index d5ed574..ec7feec 100644
--- a/tests/java/shim/cproton.py
+++ b/tests/java/shim/cproton.py
@@ -35,7 +35,6 @@
 from cengine import *
 from csasl import *
 from cssl import *
-from cmessenger import *
 from cmessage import *
 from curl import *
 from creactor import *
diff --git a/tests/java/shim/curl.py b/tests/java/shim/curl.py
index d4d3d37..2b8c9c8 100644
--- a/tests/java/shim/curl.py
+++ b/tests/java/shim/curl.py
@@ -17,7 +17,7 @@
 # under the License
 #
 
-from org.apache.qpid.proton.messenger.impl import Address
+from org.apache.qpid.proton.reactor.impl import Address
 
 def pn_url():
     return Address()
diff --git a/tests/python/proton_tests/__init__.py b/tests/python/proton_tests/__init__.py
index 66ce650..647cbf5 100644
--- a/tests/python/proton_tests/__init__.py
+++ b/tests/python/proton_tests/__init__.py
@@ -22,11 +22,9 @@
 import proton_tests.message
 import proton_tests.handler
 import proton_tests.reactor
-import proton_tests.messenger
 import proton_tests.sasl
 import proton_tests.transport
 import proton_tests.ssl
 import proton_tests.interop
-import proton_tests.soak
 import proton_tests.url
 import proton_tests.utils
diff --git a/tests/python/proton_tests/common.py b/tests/python/proton_tests/common.py
index aaefccd..02de4ff 100644
--- a/tests/python/proton_tests/common.py
+++ b/tests/python/proton_tests/common.py
@@ -264,308 +264,3 @@
   def on_delivery(self, event):
     event.delivery.settle()
 
-#
-# Classes that wrap the messenger applications msgr-send and msgr-recv.
-# These applications reside in the tests/tools/apps directory
-#
-
-class MessengerApp(object):
-    """ Interface to control a MessengerApp """
-    def __init__(self):
-        self._cmdline = None
-        # options common to Receivers and Senders:
-        self.ca_db = None
-        self.certificate = None
-        self.privatekey = None
-        self.password = None
-        self._output = None
-
-    def start(self, verbose=False):
-        """ Begin executing the test """
-        cmd = self.cmdline()
-        self._verbose = verbose
-        if self._verbose:
-            print("COMMAND='%s'" % str(cmd))
-        #print("ENV='%s'" % str(os.environ.copy()))
-        try:
-            # Handle python launch by replacing script 'filename' with
-            # 'python abspath-to-filename' in cmdline arg list.
-            if cmd[0].endswith('.py'):
-                foundfile = findfileinpath(cmd[0], os.getenv('PATH'))
-                if foundfile is None:
-                    msg = "Unable to locate file '%s' in PATH" % cmd[0]
-                    raise Skipped("Skipping test - %s" % msg)
-
-                del cmd[0:1]
-                cmd.insert(0, foundfile)
-                cmd.insert(0, sys.executable)
-            self._process = Popen(cmd, stdout=PIPE, stderr=STDOUT,
-                                  bufsize=4096, universal_newlines=True)
-        except OSError:
-            e = sys.exc_info()[1]
-            print("ERROR: '%s'" % e)
-            msg = "Unable to execute command '%s', is it in your PATH?" % cmd[0]
-
-            # NOTE(flaper87): Skip the test if the command is not found.
-            if e.errno == 2:
-              raise Skipped("Skipping test - %s" % msg)
-            assert False, msg
-
-        self._ready()  # wait for it to initialize
-
-    def stop(self):
-        """ Signal the client to start clean shutdown """
-        pass
-
-    def wait(self):
-        """ Wait for client to complete """
-        self._output = self._process.communicate()
-        if self._verbose:
-            print("OUTPUT='%s'" % self.stdout())
-
-    def status(self):
-        """ Return status from client process """
-        return self._process.returncode
-
-    def stdout(self):
-        #self._process.communicate()[0]
-        if not self._output or not self._output[0]:
-            return "*** NO STDOUT ***"
-        return self._output[0]
-
-    def stderr(self):
-        if not self._output or not self._output[1]:
-            return "*** NO STDERR ***"
-        return self._output[1]
-
-    def cmdline(self):
-        if not self._cmdline:
-            self._build_command()
-        return self._cmdline
-
-    def _build_command(self):
-        assert False, "_build_command() needs override"
-
-    def _ready(self):
-        assert False, "_ready() needs override"
-
-    def _do_common_options(self):
-        """ Common option handling """
-        if self.ca_db is not None:
-            self._cmdline.append("-T")
-            self._cmdline.append(str(self.ca_db))
-        if self.certificate is not None:
-            self._cmdline.append("-C")
-            self._cmdline.append(str(self.certificate))
-        if self.privatekey is not None:
-            self._cmdline.append("-K")
-            self._cmdline.append(str(self.privatekey))
-        if self.password is not None:
-            self._cmdline.append("-P")
-            self._cmdline.append("pass:" + str(self.password))
-
-
-class MessengerSender(MessengerApp):
-    """ Interface to configure a sending MessengerApp """
-    def __init__(self):
-        MessengerApp.__init__(self)
-        self._command = None
-        # @todo make these properties
-        self.targets = []
-        self.send_count = None
-        self.msg_size = None
-        self.send_batch = None
-        self.outgoing_window = None
-        self.report_interval = None
-        self.get_reply = False
-        self.timeout = None
-        self.incoming_window = None
-        self.recv_count = None
-        self.name = None
-
-    # command string?
-    def _build_command(self):
-        self._cmdline = self._command
-        self._do_common_options()
-        assert self.targets, "Missing targets, required for sender!"
-        self._cmdline.append("-a")
-        self._cmdline.append(",".join(self.targets))
-        if self.send_count is not None:
-            self._cmdline.append("-c")
-            self._cmdline.append(str(self.send_count))
-        if self.msg_size is not None:
-            self._cmdline.append("-b")
-            self._cmdline.append(str(self.msg_size))
-        if self.send_batch is not None:
-            self._cmdline.append("-p")
-            self._cmdline.append(str(self.send_batch))
-        if self.outgoing_window is not None:
-            self._cmdline.append("-w")
-            self._cmdline.append(str(self.outgoing_window))
-        if self.report_interval is not None:
-            self._cmdline.append("-e")
-            self._cmdline.append(str(self.report_interval))
-        if self.get_reply:
-            self._cmdline.append("-R")
-        if self.timeout is not None:
-            self._cmdline.append("-t")
-            self._cmdline.append(str(self.timeout))
-        if self.incoming_window is not None:
-            self._cmdline.append("-W")
-            self._cmdline.append(str(self.incoming_window))
-        if self.recv_count is not None:
-            self._cmdline.append("-B")
-            self._cmdline.append(str(self.recv_count))
-        if self.name is not None:
-            self._cmdline.append("-N")
-            self._cmdline.append(str(self.name))
-
-    def _ready(self):
-        pass
-
-
-class MessengerReceiver(MessengerApp):
-    """ Interface to configure a receiving MessengerApp """
-    def __init__(self):
-        MessengerApp.__init__(self)
-        self._command = None
-        # @todo make these properties
-        self.subscriptions = []
-        self.receive_count = None
-        self.recv_count = None
-        self.incoming_window = None
-        self.timeout = None
-        self.report_interval = None
-        self.send_reply = False
-        self.outgoing_window = None
-        self.forwards = []
-        self.name = None
-
-    # command string?
-    def _build_command(self):
-        self._cmdline = self._command
-        self._do_common_options()
-        self._cmdline += ["-X", "READY"]
-        assert self.subscriptions, "Missing subscriptions, required for receiver!"
-        self._cmdline.append("-a")
-        self._cmdline.append(",".join(self.subscriptions))
-        if self.receive_count is not None:
-            self._cmdline.append("-c")
-            self._cmdline.append(str(self.receive_count))
-        if self.recv_count is not None:
-            self._cmdline.append("-b")
-            self._cmdline.append(str(self.recv_count))
-        if self.incoming_window is not None:
-            self._cmdline.append("-w")
-            self._cmdline.append(str(self.incoming_window))
-        if self.timeout is not None:
-            self._cmdline.append("-t")
-            self._cmdline.append(str(self.timeout))
-        if self.report_interval is not None:
-            self._cmdline.append("-e")
-            self._cmdline.append(str(self.report_interval))
-        if self.send_reply:
-            self._cmdline.append("-R")
-        if self.outgoing_window is not None:
-            self._cmdline.append("-W")
-            self._cmdline.append(str(self.outgoing_window))
-        if self.forwards:
-            self._cmdline.append("-F")
-            self._cmdline.append(",".join(self.forwards))
-        if self.name is not None:
-            self._cmdline.append("-N")
-            self._cmdline.append(str(self.name))
-
-    def _ready(self):
-        """ wait for subscriptions to complete setup. """
-        r = self._process.stdout.readline()
-        assert r.strip() == "READY", "Unexpected input while waiting for receiver to initialize: %s" % r
-
-class MessengerSenderC(MessengerSender):
-    def __init__(self):
-        MessengerSender.__init__(self)
-        self._command = ["msgr-send"]
-
-class MessengerSenderValgrind(MessengerSenderC):
-    """ Run the C sender under Valgrind
-    """
-    def __init__(self, suppressions=None):
-        if "VALGRIND" not in os.environ:
-            raise Skipped("Skipping test - $VALGRIND not set.")
-        MessengerSenderC.__init__(self)
-        if not suppressions:
-            suppressions = os.path.join(os.path.dirname(__file__),
-                                        "valgrind.supp" )
-        self._command = [os.environ["VALGRIND"], "--error-exitcode=42", "--quiet",
-                         "--trace-children=yes", "--leak-check=full",
-                         "--suppressions=%s" % suppressions] + self._command
-
-class MessengerReceiverC(MessengerReceiver):
-    def __init__(self):
-        MessengerReceiver.__init__(self)
-        self._command = ["msgr-recv"]
-
-class MessengerReceiverValgrind(MessengerReceiverC):
-    """ Run the C receiver under Valgrind
-    """
-    def __init__(self, suppressions=None):
-        if "VALGRIND" not in os.environ:
-            raise Skipped("Skipping test - $VALGRIND not set.")
-        MessengerReceiverC.__init__(self)
-        if not suppressions:
-            suppressions = os.path.join(os.path.dirname(__file__),
-                                        "valgrind.supp" )
-        self._command = [os.environ["VALGRIND"], "--error-exitcode=42", "--quiet",
-                         "--trace-children=yes", "--leak-check=full",
-                         "--suppressions=%s" % suppressions] + self._command
-
-class MessengerSenderPython(MessengerSender):
-    def __init__(self):
-        MessengerSender.__init__(self)
-        self._command = ["msgr-send.py"]
-
-
-class MessengerReceiverPython(MessengerReceiver):
-    def __init__(self):
-        MessengerReceiver.__init__(self)
-        self._command = ["msgr-recv.py"]
-
-
-
-class ReactorSenderC(MessengerSender):
-    def __init__(self):
-        MessengerSender.__init__(self)
-        self._command = ["reactor-send"]
-
-class ReactorSenderValgrind(ReactorSenderC):
-    """ Run the C sender under Valgrind
-    """
-    def __init__(self, suppressions=None):
-        if "VALGRIND" not in os.environ:
-            raise Skipped("Skipping test - $VALGRIND not set.")
-        ReactorSenderC.__init__(self)
-        if not suppressions:
-            suppressions = os.path.join(os.path.dirname(__file__),
-                                        "valgrind.supp" )
-        self._command = [os.environ["VALGRIND"], "--error-exitcode=42", "--quiet",
-                         "--trace-children=yes", "--leak-check=full",
-                         "--suppressions=%s" % suppressions] + self._command
-
-class ReactorReceiverC(MessengerReceiver):
-    def __init__(self):
-        MessengerReceiver.__init__(self)
-        self._command = ["reactor-recv"]
-
-class ReactorReceiverValgrind(ReactorReceiverC):
-    """ Run the C receiver under Valgrind
-    """
-    def __init__(self, suppressions=None):
-        if "VALGRIND" not in os.environ:
-            raise Skipped("Skipping test - $VALGRIND not set.")
-        ReactorReceiverC.__init__(self)
-        if not suppressions:
-            suppressions = os.path.join(os.path.dirname(__file__),
-                                        "valgrind.supp" )
-        self._command = [os.environ["VALGRIND"], "--error-exitcode=42", "--quiet",
-                         "--trace-children=yes", "--leak-check=full",
-                         "--suppressions=%s" % suppressions] + self._command
diff --git a/tests/python/proton_tests/messenger.py b/tests/python/proton_tests/messenger.py
deleted file mode 100644
index 8da068e..0000000
--- a/tests/python/proton_tests/messenger.py
+++ /dev/null
@@ -1,1091 +0,0 @@
-from __future__ import absolute_import
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-import os, sys, traceback
-from . import common
-from proton import *
-from threading import Thread, Event
-from time import sleep, time
-from .common import Skipped
-
-class Test(common.Test):
-
-  def setUp(self):
-    self.server_credit = 10
-    self.server_received = 0
-    self.server_finite_credit = False
-    self.server = Messenger("server")
-    self.server.timeout = self.timeout
-    self.server.start()
-    self.port = common.free_tcp_port()
-    self.server.subscribe("amqp://~127.0.0.1:%d" % self.port)
-    self.server_thread = Thread(name="server-thread", target=self.run_server)
-    self.server_thread.daemon = True
-    self.server_is_running_event = Event()
-    self.running = True
-    self.server_thread_started = False
-
-    self.client = Messenger("client")
-    self.client.timeout = self.timeout
-
-  def start(self):
-    self.server_thread_started = True
-    self.server_thread.start()
-    self.server_is_running_event.wait(self.timeout)
-    self.client.start()
-
-  def _safelyStopClient(self):
-    self.server.interrupt()
-    self.client.stop()
-    self.client = None
-
-  def tearDown(self):
-    try:
-      if self.running:
-        if not self.server_thread_started: self.start()
-        # send a message to cause the server to promptly exit
-        self.running = False
-        self._safelyStopClient()
-    finally:
-      self.server_thread.join(self.timeout)
-      self.server = None
-
-REJECT_ME = "*REJECT-ME*"
-
-class MessengerTest(Test):
-
-  def run_server(self):
-    if self.server_finite_credit:
-      self._run_server_finite_credit()
-    else:
-      self._run_server_recv()
-
-  def _run_server_recv(self):
-    """ Use recv() to replenish credit each time the server waits
-    """
-    msg = Message()
-    try:
-      while self.running:
-        self.server_is_running_event.set()
-        try:
-          self.server.recv(self.server_credit)
-          self.process_incoming(msg)
-        except Interrupt:
-          pass
-    finally:
-      self.server.stop()
-      self.running = False
-
-  def _run_server_finite_credit(self):
-    """ Grant credit once, process until credit runs out
-    """
-    msg = Message()
-    self.server_is_running_event.set()
-    try:
-      self.server.recv(self.server_credit)
-      while self.running:
-        try:
-          # do not grant additional credit (eg. call recv())
-          self.process_incoming(msg)
-          self.server.work()
-        except Interrupt:
-          break
-    finally:
-      self.server.stop()
-      self.running = False
-
-  def process_incoming(self, msg):
-    while self.server.incoming:
-      self.server.get(msg)
-      self.server_received += 1
-      if msg.body == REJECT_ME:
-        self.server.reject()
-      else:
-        self.server.accept()
-      self.dispatch(msg)
-
-  def dispatch(self, msg):
-    if msg.reply_to:
-      msg.address = msg.reply_to
-      self.server.put(msg)
-      self.server.settle()
-
-  def testSendReceive(self, size=None, address_size=None):
-    self.start()
-    msg = Message()
-    if address_size:
-      msg.address="amqp://127.0.0.1:%d/%s" % (self.port, "x"*address_size)
-    else:
-      msg.address="amqp://127.0.0.1:%d" % self.port
-    msg.reply_to = "~"
-    msg.subject="Hello World!"
-    body = "First the world, then the galaxy!"
-    if size is not None:
-      while len(body) < size:
-        body = 2*body
-      body = body[:size]
-    msg.body = body
-    self.client.put(msg)
-    self.client.send()
-
-    reply = Message()
-    self.client.recv(1)
-    assert self.client.incoming == 1, self.client.incoming
-    self.client.get(reply)
-
-    assert reply.subject == "Hello World!"
-    rbod = reply.body
-    assert rbod == body, (rbod, body)
-
-  def testSendReceive1K(self):
-    self.testSendReceive(1024)
-
-  def testSendReceive2K(self):
-    self.testSendReceive(2*1024)
-
-  def testSendReceive4K(self):
-    self.testSendReceive(4*1024)
-
-  def testSendReceive10K(self):
-    self.testSendReceive(10*1024)
-
-  def testSendReceive100K(self):
-    self.testSendReceive(100*1024)
-
-  def testSendReceive1M(self):
-    self.testSendReceive(1024*1024)
-
-  def testSendReceiveLargeAddress(self):
-    self.testSendReceive(address_size=2048)
-
-  # PROTON-285 - prevent continually failing test
-  def xtestSendBogus(self):
-    self.start()
-    msg = Message()
-    msg.address="totally-bogus-address"
-    try:
-      self.client.put(msg)
-      assert False, "Expecting MessengerException"
-    except MessengerException:
-      exc = sys.exc_info()[1]
-      err = str(exc)
-      assert "unable to send to address: totally-bogus-address" in err, err
-
-  def testOutgoingWindow(self):
-    self.server.incoming_window = 10
-    self.start()
-    msg = Message()
-    msg.address="amqp://127.0.0.1:%d" % self.port
-    msg.subject="Hello World!"
-
-    trackers = []
-    for i in range(10):
-      trackers.append(self.client.put(msg))
-
-    self.client.send()
-
-    for t in trackers:
-      assert self.client.status(t) is None
-
-    # reduce outgoing_window to 5 and then try to send 10 messages
-    self.client.outgoing_window = 5
-
-    trackers = []
-    for i in range(10):
-      trackers.append(self.client.put(msg))
-
-    for i in range(5):
-      t = trackers[i]
-      assert self.client.status(t) is None, (t, self.client.status(t))
-
-    for i in range(5, 10):
-      t = trackers[i]
-      assert self.client.status(t) is PENDING, (t, self.client.status(t))
-
-    self.client.send()
-
-    for i in range(5):
-      t = trackers[i]
-      assert self.client.status(t) is None
-
-    for i in range(5, 10):
-      t = trackers[i]
-      assert self.client.status(t) is ACCEPTED
-
-  def testReject(self, process_incoming=None):
-    if process_incoming:
-      self.process_incoming = process_incoming
-    self.server.incoming_window = 10
-    self.start()
-    msg = Message()
-    msg.address="amqp://127.0.0.1:%d" % self.port
-    msg.subject="Hello World!"
-
-    self.client.outgoing_window = 10
-    trackers = []
-    rejected = []
-    for i in range(10):
-      if i == 5:
-        msg.body = REJECT_ME
-      else:
-        msg.body = "Yay!"
-      trackers.append(self.client.put(msg))
-      if msg.body == REJECT_ME:
-        rejected.append(trackers[-1])
-
-    self.client.send()
-
-    for t in trackers:
-      if t in rejected:
-        assert self.client.status(t) is REJECTED, (t, self.client.status(t))
-      else:
-        assert self.client.status(t) is ACCEPTED, (t, self.client.status(t))
-
-  def testRejectIndividual(self):
-    self.testReject(self.reject_individual)
-
-  def reject_individual(self, msg):
-    if self.server.incoming < 10:
-      self.server.work(0)
-      return
-    while self.server.incoming:
-      t = self.server.get(msg)
-      if msg.body == REJECT_ME:
-        self.server.reject(t)
-      self.dispatch(msg)
-    self.server.accept()
-
-
-  def testIncomingWindow(self):
-    self.server.incoming_window = 10
-    self.server.outgoing_window = 10
-    self.start()
-    msg = Message()
-    msg.address="amqp://127.0.0.1:%d" % self.port
-    msg.reply_to = "~"
-    msg.subject="Hello World!"
-
-    self.client.outgoing_window = 10
-    trackers = []
-    for i in range(10):
-      trackers.append(self.client.put(msg))
-
-    self.client.send()
-
-    for t in trackers:
-      assert self.client.status(t) is ACCEPTED, (t, self.client.status(t))
-
-    self.client.incoming_window = 10
-    remaining = 10
-
-    trackers = []
-    while remaining:
-      self.client.recv(remaining)
-      while self.client.incoming:
-        t = self.client.get()
-        trackers.append(t)
-        self.client.accept(t)
-        remaining -= 1
-    for t in trackers:
-      assert self.client.status(t) is ACCEPTED, (t, self.client.status(t))
-
-  def testIncomingQueueBiggerThanWindow(self, size=10):
-    self.server.outgoing_window = size
-    self.client.incoming_window = size
-    self.start()
-
-    msg = Message()
-    msg.address = "amqp://127.0.0.1:%d" % self.port
-    msg.reply_to = "~"
-    msg.subject = "Hello World!"
-
-    for i in range(2*size):
-      self.client.put(msg)
-
-    trackers = []
-    while len(trackers) < 2*size:
-      self.client.recv(2*size - len(trackers))
-      while self.client.incoming:
-        t = self.client.get(msg)
-        assert self.client.status(t) is SETTLED, (t, self.client.status(t))
-        trackers.append(t)
-
-    for t in trackers[:size]:
-      assert self.client.status(t) is None, (t, self.client.status(t))
-    for t in trackers[size:]:
-      assert self.client.status(t) is SETTLED, (t, self.client.status(t))
-
-    self.client.accept()
-
-    for t in trackers[:size]:
-      assert self.client.status(t) is None, (t, self.client.status(t))
-    for t in trackers[size:]:
-      assert self.client.status(t) is ACCEPTED, (t, self.client.status(t))
-
-  def testIncomingQueueBiggerThanSessionWindow(self):
-    self.testIncomingQueueBiggerThanWindow(2048)
-
-  def testBuffered(self):
-    self.client.outgoing_window = 1000
-    self.client.incoming_window = 1000
-    self.start();
-    assert self.server_received == 0
-    buffering = 0
-    count = 100
-    for i in range(count):
-      msg = Message()
-      msg.address="amqp://127.0.0.1:%d" % self.port
-      msg.subject="Hello World!"
-      msg.body = "First the world, then the galaxy!"
-      t = self.client.put(msg)
-      buffered = self.client.buffered(t)
-      # allow transition from False to True, but not back
-      if buffered:
-          buffering += 1
-      else:
-        assert not buffering, ("saw %s buffered deliveries before?" % buffering)
-
-    while self.client.outgoing:
-        last = self.client.outgoing
-        self.client.send()
-        #print "sent ", last - self.client.outgoing
-
-    assert self.server_received == count
-
-  def test_proton222(self):
-    self.start()
-    msg = Message()
-    msg.address="amqp://127.0.0.1:%d" % self.port
-    msg.subject="Hello World!"
-    msg.body = "First the world, then the galaxy!"
-    assert self.server_received == 0
-    self.client.put(msg)
-    self.client.send()
-    # ensure the server got the message without requiring client to stop first
-    deadline = time() + 10
-    while self.server_received == 0:
-      assert time() < deadline, "Server did not receive message!"
-      sleep(.1)
-    assert self.server_received == 1
-
-  def testUnlimitedCredit(self):
-    """ Bring up two links.  Verify credit is granted to each link by
-    transferring a message over each.
-    """
-    self.server_credit = -1
-    self.start()
-
-    msg = Message()
-    msg.address="amqp://127.0.0.1:%d/XXX" % self.port
-    msg.reply_to = "~"
-    msg.subject="Hello World!"
-    body = "First the world, then the galaxy!"
-    msg.body = body
-    self.client.put(msg)
-    self.client.send()
-
-    reply = Message()
-    self.client.recv(1)
-    assert self.client.incoming == 1
-    self.client.get(reply)
-
-    assert reply.subject == "Hello World!"
-    rbod = reply.body
-    assert rbod == body, (rbod, body)
-
-    msg = Message()
-    msg.address="amqp://127.0.0.1:%d/YYY" % self.port
-    msg.reply_to = "~"
-    msg.subject="Hello World!"
-    body = "First the world, then the galaxy!"
-    msg.body = body
-    self.client.put(msg)
-    self.client.send()
-
-    reply = Message()
-    self.client.recv(1)
-    assert self.client.incoming == 1
-    self.client.get(reply)
-
-    assert reply.subject == "Hello World!"
-    rbod = reply.body
-    assert rbod == body, (rbod, body)
-
-  def _DISABLE_test_proton268(self):
-    """ Reproducer for JIRA Proton-268 """
-    """ DISABLED: Causes failure on Jenkins, appears to be unrelated to fix """
-    self.server_credit = 2048
-    self.start()
-
-    msg = Message()
-    msg.address="amqp://127.0.0.1:%d" % self.port
-    msg.body = "X" * 1024
-
-    for x in range( 100 ):
-      self.client.put( msg )
-    self.client.send()
-
-    try:
-      self.client.stop()
-    except Timeout:
-      assert False, "Timeout waiting for client stop()"
-
-    # need to restart client, as tearDown() uses it to stop server
-    self.client.start()
-
-  def testRoute(self):
-    # anonymous cipher not supported on Windows
-    if os.name == "nt" or not common.isSSLPresent():
-        domain = "amqp"
-    else:
-        domain = "amqps"
-    port = common.free_tcp_port()
-    self.server.subscribe(domain + "://~0.0.0.0:%d" % port)
-    self.start()
-    self.client.route("route1", "amqp://127.0.0.1:%d" % self.port)
-    self.client.route("route2", domain + "://127.0.0.1:%d" % port)
-
-    msg = Message()
-    msg.address = "route1"
-    msg.reply_to = "~"
-    msg.body = "test"
-    self.client.put(msg)
-    self.client.recv(1)
-
-    reply = Message()
-    self.client.get(reply)
-
-    msg = Message()
-    msg.address = "route2"
-    msg.reply_to = "~"
-    msg.body = "test"
-    self.client.put(msg)
-    self.client.recv(1)
-
-    self.client.get(reply)
-    assert reply.body == "test"
-
-  def testDefaultRoute(self):
-    self.start()
-    self.client.route("*", "amqp://127.0.0.1:%d" % self.port)
-
-    msg = Message()
-    msg.address = "asdf"
-    msg.body = "test"
-    msg.reply_to = "~"
-
-    self.client.put(msg)
-    self.client.recv(1)
-
-    reply = Message()
-    self.client.get(reply)
-    assert reply.body == "test"
-
-  def testDefaultRouteSubstitution(self):
-    self.start()
-    self.client.route("*", "amqp://127.0.0.1:%d/$1" % self.port)
-
-    msg = Message()
-    msg.address = "asdf"
-    msg.body = "test"
-    msg.reply_to = "~"
-
-    self.client.put(msg)
-    self.client.recv(1)
-
-    reply = Message()
-    self.client.get(reply)
-    assert reply.body == "test"
-
-  def testIncomingRoute(self):
-    self.start()
-    port = common.free_tcp_port()
-    self.client.route("in", "amqp://~0.0.0.0:%d" % port)
-    self.client.subscribe("in")
-
-    msg = Message()
-    msg.address = "amqp://127.0.0.1:%d" %self.port
-    msg.reply_to = "amqp://127.0.0.1:%d" % port
-    msg.body = "test"
-
-    self.client.put(msg)
-    self.client.recv(1)
-    reply = Message()
-    self.client.get(reply)
-    assert reply.body == "test"
-
-  def echo_address(self, msg):
-    while self.server.incoming:
-      self.server.get(msg)
-      msg.body = msg.address
-      self.dispatch(msg)
-
-  def _testRewrite(self, original, rewritten):
-    self.start()
-    self.process_incoming = self.echo_address
-    self.client.route("*", "amqp://127.0.0.1:%d" % self.port)
-
-    msg = Message()
-    msg.address = original
-    msg.body = "test"
-    msg.reply_to = "~"
-
-    self.client.put(msg)
-    assert msg.address == original
-    self.client.recv(1)
-    assert self.client.incoming == 1
-
-    echo = Message()
-    self.client.get(echo)
-    assert echo.body == rewritten, (echo.body, rewritten)
-    assert msg.address == original
-
-  def testDefaultRewriteH(self):
-    self._testRewrite("original", "original")
-
-  def testDefaultRewriteUH(self):
-    self._testRewrite("user@original", "original")
-
-  def testDefaultRewriteUPH(self):
-    self._testRewrite("user:pass@original", "original")
-
-  def testDefaultRewriteHP(self):
-    self._testRewrite("original:123", "original:123")
-
-  def testDefaultRewriteUHP(self):
-    self._testRewrite("user@original:123", "original:123")
-
-  def testDefaultRewriteUPHP(self):
-    self._testRewrite("user:pass@original:123", "original:123")
-
-  def testDefaultRewriteHN(self):
-    self._testRewrite("original/name", "original/name")
-
-  def testDefaultRewriteUHN(self):
-    self._testRewrite("user@original/name", "original/name")
-
-  def testDefaultRewriteUPHN(self):
-    self._testRewrite("user:pass@original/name", "original/name")
-
-  def testDefaultRewriteHPN(self):
-    self._testRewrite("original:123/name", "original:123/name")
-
-  def testDefaultRewriteUHPN(self):
-    self._testRewrite("user@original:123/name", "original:123/name")
-
-  def testDefaultRewriteUPHPN(self):
-    self._testRewrite("user:pass@original:123/name", "original:123/name")
-
-  def testDefaultRewriteSH(self):
-    self._testRewrite("amqp://original", "amqp://original")
-
-  def testDefaultRewriteSUH(self):
-    self._testRewrite("amqp://user@original", "amqp://original")
-
-  def testDefaultRewriteSUPH(self):
-    self._testRewrite("amqp://user:pass@original", "amqp://original")
-
-  def testDefaultRewriteSHP(self):
-    self._testRewrite("amqp://original:123", "amqp://original:123")
-
-  def testDefaultRewriteSUHP(self):
-    self._testRewrite("amqp://user@original:123", "amqp://original:123")
-
-  def testDefaultRewriteSUPHP(self):
-    self._testRewrite("amqp://user:pass@original:123", "amqp://original:123")
-
-  def testDefaultRewriteSHN(self):
-    self._testRewrite("amqp://original/name", "amqp://original/name")
-
-  def testDefaultRewriteSUHN(self):
-    self._testRewrite("amqp://user@original/name", "amqp://original/name")
-
-  def testDefaultRewriteSUPHN(self):
-    self._testRewrite("amqp://user:pass@original/name", "amqp://original/name")
-
-  def testDefaultRewriteSHPN(self):
-    self._testRewrite("amqp://original:123/name", "amqp://original:123/name")
-
-  def testDefaultRewriteSUHPN(self):
-    self._testRewrite("amqp://user@original:123/name", "amqp://original:123/name")
-
-  def testDefaultRewriteSUPHPN(self):
-    self._testRewrite("amqp://user:pass@original:123/name", "amqp://original:123/name")
-
-  def testRewriteSupress(self):
-    self.client.rewrite("*", None)
-    self._testRewrite("asdf", None)
-
-  def testRewrite(self):
-    self.client.rewrite("a", "b")
-    self._testRewrite("a", "b")
-
-  def testRewritePattern(self):
-    self.client.rewrite("amqp://%@*", "amqp://$2")
-    self._testRewrite("amqp://foo@bar", "amqp://bar")
-
-  def testRewriteToAt(self):
-    self.client.rewrite("amqp://%/*", "$2@$1")
-    self._testRewrite("amqp://domain/name", "name@domain")
-
-  def testRewriteOverrideDefault(self):
-    self.client.rewrite("*", "$1")
-    self._testRewrite("amqp://user:pass@host", "amqp://user:pass@host")
-
-  def testCreditBlockingRebalance(self):
-    """ The server is given a fixed amount of credit, and runs until that
-    credit is exhausted.
-    """
-    self.server_finite_credit = True
-    self.server_credit = 11
-    self.start()
-
-    # put one message out on "Link1" - since there are no other links, it
-    # should get all the credit (10 after sending)
-    msg = Message()
-    msg.address="amqp://127.0.0.1:%d/Link1" % self.port
-    msg.subject="Hello World!"
-    body = "First the world, then the galaxy!"
-    msg.body = body
-    msg.reply_to = "~"
-    self.client.put(msg)
-    self.client.send()
-    self.client.recv(1)
-    assert self.client.incoming == 1
-
-    # Now attempt to exhaust credit using a different link
-    for i in range(10):
-      msg.address="amqp://127.0.0.1:%d/Link2" % self.port
-      self.client.put(msg)
-    self.client.send()
-
-    deadline = time() + self.timeout
-    count = 0
-    while count < 11 and time() < deadline:
-        self.client.recv(-1)
-        while self.client.incoming:
-            self.client.get(msg)
-            count += 1
-    assert count == 11, count
-
-    # now attempt to send one more.  There isn't enough credit, so it should
-    # not be sent
-    self.client.timeout = 1
-    msg.address="amqp://127.0.0.1:%d/Link2" % self.port
-    self.client.put(msg)
-    try:
-      self.client.send()
-      assert False, "expected client to time out in send()"
-    except Timeout:
-      pass
-    assert self.client.outgoing == 1
-
-
-class NBMessengerTest(common.Test):
-
-  def setUp(self):
-    self.client = Messenger("client")
-    self.client2 = Messenger("client2")
-    self.server = Messenger("server")
-    self.messengers = [self.client, self.client2, self.server]
-    self.client.blocking = False
-    self.client2.blocking = False
-    self.server.blocking = False
-    self.server.start()
-    self.client.start()
-    self.client2.start()
-    port = common.free_tcp_port()
-    self.address = "amqp://127.0.0.1:%d" % port
-    self.server.subscribe("amqp://~0.0.0.0:%d" % port)
-
-  def _pump(self, timeout, work_triggers_exit):
-    for msgr in self.messengers:
-      if msgr.work(timeout) and work_triggers_exit:
-        return True
-    return False
-
-  def pump(self, timeout=0):
-    while self._pump(0, True): pass
-    self._pump(timeout, False)
-    while self._pump(0, True): pass
-
-  def tearDown(self):
-    self.server.stop()
-    self.client.stop()
-    self.client2.stop()
-    self.pump()
-    assert self.server.stopped
-    assert self.client.stopped
-    assert self.client2.stopped
-
-  def testSmoke(self, count=1):
-    self.server.recv()
-
-    msg = Message()
-    msg.address = self.address
-    for i in range(count):
-      msg.body = "Hello %s" % i
-      self.client.put(msg)
-
-    msg2 = Message()
-    for i in range(count):
-      if self.server.incoming == 0:
-        self.pump()
-      assert self.server.incoming > 0, self.server.incoming
-      self.server.get(msg2)
-      assert msg2.body == "Hello %s" % i, (msg2.body, i)
-
-    assert self.client.outgoing == 0, self.client.outgoing
-    assert self.server.incoming == 0, self.client.incoming
-
-  def testSmoke1024(self):
-    self.testSmoke(1024)
-
-  def testSmoke4096(self):
-    self.testSmoke(4096)
-
-  def testPushback(self):
-    self.server.recv()
-
-    msg = Message()
-    msg.address = self.address
-    for i in range(16):
-      for i in range(1024):
-        self.client.put(msg)
-      self.pump()
-      if self.client.outgoing > 0:
-        break
-
-    assert self.client.outgoing > 0
-
-  def testRecvBeforeSubscribe(self):
-    self.client.recv()
-    self.client.subscribe(self.address + "/foo")
-
-    self.pump()
-
-    msg = Message()
-    msg.address = "amqp://client/foo"
-    msg.body = "Hello World!"
-    self.server.put(msg)
-
-    assert self.client.incoming == 0
-    self.pump(self.delay)
-    assert self.client.incoming == 1
-
-    msg2 = Message()
-    self.client.get(msg2)
-    assert msg2.address == msg.address
-    assert msg2.body == msg.body
-
-  def testCreditAutoBackpressure(self):
-    """ Verify that use of automatic credit (pn_messenger_recv(-1)) does not
-    fill the incoming queue indefinitely.  If the receiver does not 'get' the
-    message, eventually the sender will block.  See PROTON-350 """
-    self.server.recv()
-    msg = Message()
-    msg.address = self.address
-    deadline = time() + self.timeout
-    while time() < deadline:
-        old = self.server.incoming
-        for j in range(1001):
-            self.client.put(msg)
-        self.pump()
-        if old == self.server.incoming:
-            break;
-    assert old == self.server.incoming, "Backpressure not active!"
-
-  def testCreditRedistribution(self):
-    """ Verify that a fixed amount of credit will redistribute to new
-    links.
-    """
-    self.server.recv( 5 )
-
-    # first link will get all credit
-    msg1 = Message()
-    msg1.address = self.address + "/msg1"
-    self.client.put(msg1)
-    self.pump()
-    assert self.server.incoming == 1, self.server.incoming
-    assert self.server.receiving == 4, self.server.receiving
-
-    # no credit left over for this link
-    msg2 = Message()
-    msg2.address = self.address + "/msg2"
-    self.client.put(msg2)
-    self.pump()
-    assert self.server.incoming == 1, self.server.incoming
-    assert self.server.receiving == 4, self.server.receiving
-
-    # eventually, credit will rebalance and the new link will send
-    deadline = time() + self.timeout
-    while time() < deadline:
-        sleep(.1)
-        self.pump()
-        if self.server.incoming == 2:
-            break;
-    assert self.server.incoming == 2, self.server.incoming
-    assert self.server.receiving == 3, self.server.receiving
-
-  def testCreditReclaim(self):
-    """ Verify that credit is reclaimed when a link with outstanding credit is
-    torn down.
-    """
-    self.server.recv( 9 )
-
-    # first link will get all credit
-    msg1 = Message()
-    msg1.address = self.address + "/msg1"
-    self.client.put(msg1)
-    self.pump()
-    assert self.server.incoming == 1, self.server.incoming
-    assert self.server.receiving == 8, self.server.receiving
-
-    # no credit left over for this link
-    msg2 = Message()
-    msg2.address = self.address + "/msg2"
-    self.client.put(msg2)
-    self.pump()
-    assert self.server.incoming == 1, self.server.incoming
-    assert self.server.receiving == 8, self.server.receiving
-
-    # and none for this new client
-    msg3 = Message()
-    msg3.address = self.address + "/msg3"
-    self.client2.put(msg3)
-    self.pump()
-
-    # eventually, credit will rebalance and all links will
-    # send a message
-    deadline = time() + self.timeout
-    while time() < deadline:
-        sleep(.1)
-        self.pump()
-        if self.server.incoming == 3:
-            break;
-    assert self.server.incoming == 3, self.server.incoming
-    assert self.server.receiving == 6, self.server.receiving
-
-    # now tear down client two, this should cause its outstanding credit to be
-    # made available to the other links
-    self.client2.stop()
-    self.pump()
-
-    for i in range(4):
-        self.client.put(msg1)
-        self.client.put(msg2)
-
-    # should exhaust all credit
-    deadline = time() + self.timeout
-    while time() < deadline:
-        sleep(.1)
-        self.pump()
-        if self.server.incoming == 9:
-            break;
-    assert self.server.incoming == 9, self.server.incoming
-    assert self.server.receiving == 0, self.server.receiving
-
-  def testCreditReplenish(self):
-    """ When extra credit is available it should be granted to the first
-    link that can use it.
-    """
-    # create three links
-    msg = Message()
-    for i in range(3):
-        msg.address = self.address + "/%d" % i
-        self.client.put(msg)
-
-    self.server.recv( 50 )  # 50/3 = 16 per link + 2 extra
-
-    self.pump()
-    assert self.server.incoming == 3, self.server.incoming
-    assert self.server.receiving == 47, self.server.receiving
-
-    # 47/3 = 15 per link, + 2 extra
-
-    # verify one link can send 15 + the two extra (17)
-    for i in range(17):
-        msg.address = self.address + "/0"
-        self.client.put(msg)
-    self.pump()
-    assert self.server.incoming == 20, self.server.incoming
-    assert self.server.receiving == 30, self.server.receiving
-
-    # now verify that the remaining credit (30) will eventually rebalance
-    # across all links (10 per link)
-    for j in range(10):
-        for i in range(3):
-            msg.address = self.address + "/%d" % i
-            self.client.put(msg)
-
-    deadline = time() + self.timeout
-    while time() < deadline:
-        sleep(.1)
-        self.pump()
-        if self.server.incoming == 50:
-            break
-    assert self.server.incoming == 50, self.server.incoming
-    assert self.server.receiving == 0, self.server.receiving
-
-from select import select
-
-class Pump:
-
-  def __init__(self, *messengers):
-    self.messengers = messengers
-    self.selectables = []
-
-  def pump_once(self):
-    for m in self.messengers:
-      while True:
-        sel = m.selectable()
-        if sel:
-          self.selectables.append(sel)
-        else:
-          break
-
-    reading = []
-    writing = []
-
-    for sel in self.selectables[:]:
-      if sel.is_terminal:
-        sel.release()
-        self.selectables.remove(sel)
-      else:
-        if sel.reading:
-          reading.append(sel)
-        if sel.writing:
-          writing.append(sel)
-
-    readable, writable, _ = select(reading, writing, [], 0.1)
-
-    count = 0
-    for s in readable:
-      s.readable()
-      count += 1
-    for s in writable:
-      s.writable()
-      count += 1
-    return count
-
-  def pump(self):
-    while self.pump_once(): pass
-
-class SelectableMessengerTest(common.Test):
-
-  def testSelectable(self, count = 1):
-    if os.name=="nt":
-      # Conflict between native OS select() in Pump and IOCP based pn_selector_t
-      # makes this fail on Windows (see PROTON-668).
-      raise Skipped("Invalid test on Windows with IOCP.")
-
-    mrcv = Messenger()
-    mrcv.passive = True
-    port = common.free_tcp_port()
-    mrcv.subscribe("amqp://~0.0.0.0:%d" % port)
-
-    msnd = Messenger()
-    msnd.passive = True
-    m = Message()
-    m.address = "amqp://127.0.0.1:%d" % port
-
-    for i in range(count):
-      m.body = u"Hello World! %s" % i
-      msnd.put(m)
-
-    p = Pump(msnd, mrcv)
-    p.pump()
-
-    assert msnd.outgoing == count
-    assert mrcv.incoming == 0
-
-    mrcv.recv()
-
-    mc = Message()
-
-    try:
-      for i in range(count):
-        while mrcv.incoming == 0:
-          p.pump()
-        assert mrcv.incoming > 0, (count, msnd.outgoing, mrcv.incoming)
-        mrcv.get(mc)
-        assert mc.body == u"Hello World! %s" % i, (i, mc.body)
-    finally:
-      mrcv.stop()
-      msnd.stop()
-      assert not mrcv.stopped
-      assert not msnd.stopped
-      p.pump()
-      assert mrcv.stopped
-      assert msnd.stopped
-
-  def testSelectable16(self):
-    self.testSelectable(count=16)
-
-  def testSelectable1024(self):
-    self.testSelectable(count=1024)
-
-  def testSelectable4096(self):
-    self.testSelectable(count=4096)
-
-
-class IdleTimeoutTest(common.Test):
-
-  def testIdleTimeout(self):
-    """
-    Verify that a Messenger connection is kept alive using empty idle frames
-    when a idle_timeout is advertised by the remote peer.
-    """
-    if "java" in sys.platform:
-      raise Skipped()
-    idle_timeout_secs = self.delay
-
-    try:
-      idle_server = common.TestServer(idle_timeout=idle_timeout_secs)
-      idle_server.timeout = self.timeout
-      idle_server.start()
-
-      idle_client = Messenger("idle_client")
-      idle_client.timeout = self.timeout
-      idle_client.start()
-
-      idle_client.subscribe("amqp://%s:%s/foo" %
-                            (idle_server.host, idle_server.port))
-      idle_client.work(idle_timeout_secs/10)
-
-      # wait up to 3x the idle timeout and hence verify that everything stays
-      # connected during that time by virtue of no Exception being raised
-      duration = 3 * idle_timeout_secs
-      deadline = time() + duration
-      while time() <= deadline:
-        idle_client.work(idle_timeout_secs/10)
-        continue
-
-      # confirm link is still active
-      assert not idle_server.conditions, idle_server.conditions
-    finally:
-      try:
-        idle_client.stop()
-      except:
-        pass
-      try:
-        idle_server.stop()
-      except:
-        pass
diff --git a/tests/python/proton_tests/soak.py b/tests/python/proton_tests/soak.py
deleted file mode 100644
index 52382ba..0000000
--- a/tests/python/proton_tests/soak.py
+++ /dev/null
@@ -1,368 +0,0 @@
-from __future__ import absolute_import
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-import os
-import sys
-from .common import Test, Skipped, free_tcp_ports, \
-    MessengerReceiverC, MessengerSenderC, \
-    MessengerReceiverValgrind, MessengerSenderValgrind, \
-    MessengerReceiverPython, MessengerSenderPython, \
-    ReactorReceiverC, ReactorSenderC, \
-    ReactorReceiverValgrind, ReactorSenderValgrind, \
-    isSSLPresent
-from proton import *
-
-#
-# Tests that run the apps
-#
-
-class AppTests(Test):
-
-    def __init__(self, *args):
-        Test.__init__(self, *args)
-        self.is_valgrind = False
-
-    def default(self, name, value, **kwargs):
-        if self.is_valgrind:
-            default = kwargs.get("valgrind", value)
-        else:
-            default = value
-        return Test.default(self, name, default, **kwargs)
-
-    @property
-    def iterations(self):
-        return int(self.default("iterations", 2, fast=1, valgrind=2))
-
-    @property
-    def send_count(self):
-        return int(self.default("send_count", 17, fast=1, valgrind=2))
-
-    @property
-    def target_count(self):
-        return int(self.default("target_count", 5, fast=1, valgrind=2))
-
-    @property
-    def send_batch(self):
-        return int(self.default("send_batch", 7, fast=1, valgrind=2))
-
-    @property
-    def forward_count(self):
-        return int(self.default("forward_count", 5, fast=1, valgrind=2))
-
-    @property
-    def port_count(self):
-        return int(self.default("port_count", 3, fast=1, valgrind=2))
-
-    @property
-    def sender_count(self):
-        return int(self.default("sender_count", 3, fast=1, valgrind=2))
-
-    def valgrind_test(self):
-        self.is_valgrind = True
-
-    def setUp(self):
-        self.senders = []
-        self.receivers = []
-
-    def tearDown(self):
-        pass
-
-    def _do_test(self, iterations=1):
-        verbose = self.verbose
-
-        for R in self.receivers:
-            R.start( verbose )
-
-        for j in range(iterations):
-            for S in self.senders:
-                S.start( verbose )
-
-            for S in self.senders:
-                S.wait()
-                #print("SENDER OUTPUT:")
-                #print( S.stdout() )
-                assert S.status() == 0, ("Command '%s' failed status=%d: '%s' '%s'"
-                                         % (str(S.cmdline()),
-                                            S.status(),
-                                            S.stdout(),
-                                            S.stderr()))
-
-        for R in self.receivers:
-            R.wait()
-            #print("RECEIVER OUTPUT")
-            #print( R.stdout() )
-            assert R.status() == 0, ("Command '%s' failed status=%d: '%s' '%s'"
-                                     % (str(R.cmdline()),
-                                        R.status(),
-                                        R.stdout(),
-                                        R.stderr()))
-
-#
-# Traffic passing tests based on the Messenger apps
-#
-
-class MessengerTests(AppTests):
-
-    _timeout = 60
-
-    def _ssl_check(self):
-        if not isSSLPresent():
-            raise Skipped("No SSL libraries found.")
-        if os.name=="nt":
-            raise Skipped("Windows SChannel lacks anonymous cipher support.")
-
-    def __init__(self, *args):
-        AppTests.__init__(self, *args)
-
-    def _do_oneway_test(self, receiver, sender, domain="amqp"):
-        """ Send N messages to a receiver.
-        Parameters:
-        iterations - repeat the senders this many times
-        target_count = # of targets to send to.
-        send_count = # messages sent to each target
-        """
-        iterations = self.iterations
-        send_count = self.send_count
-        target_count = self.target_count
-
-        send_total = send_count * target_count
-        receive_total = send_total * iterations
-
-        port = free_tcp_ports()[0]
-
-        receiver.subscriptions = ["%s://~0.0.0.0:%s" % (domain, port)]
-        receiver.receive_count = receive_total
-        receiver.timeout = MessengerTests._timeout
-        self.receivers.append( receiver )
-
-        sender.targets = ["%s://0.0.0.0:%s/X%d" % (domain, port, j) for j in range(target_count)]
-        sender.send_count = send_total
-        sender.timeout = MessengerTests._timeout
-        self.senders.append( sender )
-
-        self._do_test(iterations)
-
-    def _do_echo_test(self, receiver, sender, domain="amqp"):
-        """ Send N messages to a receiver, which responds to each.
-        Parameters:
-        iterations - repeat the senders this many times
-        target_count - # targets to send to
-        send_count = # messages sent to each target
-        send_batch - wait for replies after this many messages sent
-        """
-        iterations = self.iterations
-        send_count = self.send_count
-        target_count = self.target_count
-        send_batch = self.send_batch
-
-        send_total = send_count * target_count
-        receive_total = send_total * iterations
-
-        port = free_tcp_ports()[0]
-
-        receiver.subscriptions = ["%s://~0.0.0.0:%s" % (domain, port)]
-        receiver.receive_count = receive_total
-        receiver.send_reply = True
-        receiver.timeout = MessengerTests._timeout
-        self.receivers.append( receiver )
-
-        sender.targets = ["%s://0.0.0.0:%s/%dY" % (domain, port, j) for j in range(target_count)]
-        sender.send_count = send_total
-        sender.get_reply = True
-        sender.send_batch = send_batch
-        sender.timeout = MessengerTests._timeout
-        self.senders.append( sender )
-
-        self._do_test(iterations)
-
-    def _do_relay_test(self, receiver, relay, sender, domain="amqp"):
-        """ Send N messages to a receiver, which replies to each and forwards
-        each of them to different receiver.
-        Parameters:
-        iterations - repeat the senders this many times
-        target_count - # targets to send to
-        send_count = # messages sent to each target
-        send_batch - wait for replies after this many messages sent
-        forward_count - forward to this many targets
-        """
-        iterations = self.iterations
-        send_count = self.send_count
-        target_count = self.target_count
-        send_batch = self.send_batch
-        forward_count = self.forward_count
-
-        send_total = send_count * target_count
-        receive_total = send_total * iterations
-
-        port = free_tcp_ports()[0]
-
-        receiver.subscriptions = ["%s://~0.0.0.0:%s" % (domain, port)]
-        receiver.receive_count = receive_total
-        receiver.send_reply = True
-        # forward to 'relay' - uses two links
-        # ## THIS FAILS:
-        # receiver.forwards = ["amqp://Relay/%d" % j for j in range(forward_count)]
-        receiver.forwards = ["%s://Relay" % domain]
-        receiver.timeout = MessengerTests._timeout
-        self.receivers.append( receiver )
-
-        relay.subscriptions = ["%s://0.0.0.0:%s" % (domain, port)]
-        relay.name = "Relay"
-        relay.receive_count = receive_total
-        relay.timeout = MessengerTests._timeout
-        self.receivers.append( relay )
-
-        # send to 'receiver'
-        sender.targets = ["%s://0.0.0.0:%s/X%dY" % (domain, port, j) for j in range(target_count)]
-        sender.send_count = send_total
-        sender.get_reply = True
-        sender.timeout = MessengerTests._timeout
-        self.senders.append( sender )
-
-        self._do_test(iterations)
-
-
-    def _do_star_topology_test(self, r_factory, s_factory, domain="amqp"):
-        """
-        A star-like topology, with a central receiver at the hub, and senders at
-        the spokes.  Each sender will connect to each of the ports the receiver is
-        listening on.  Each sender will then create N links per each connection.
-        Each sender will send X messages per link, waiting for a response.
-        Parameters:
-        iterations - repeat the senders this many times
-        port_count - # of ports the receiver will listen on.  Each sender connects
-                     to all ports.
-        sender_count - # of senders
-        target_count - # of targets per connection
-        send_count - # of messages sent to each target
-        send_batch - # of messages to send before waiting for response
-        """
-        iterations = self.iterations
-        port_count = self.port_count
-        sender_count = self.sender_count
-        target_count = self.target_count
-        send_count = self.send_count
-        send_batch = self.send_batch
-
-        send_total = port_count * target_count * send_count
-        receive_total = send_total * sender_count * iterations
-
-        ports = free_tcp_ports(port_count)
-
-        receiver = r_factory()
-        receiver.subscriptions = ["%s://~0.0.0.0:%s" % (domain, port) for port in ports]
-        receiver.receive_count = receive_total
-        receiver.send_reply = True
-        receiver.timeout = MessengerTests._timeout
-        self.receivers.append( receiver )
-
-        for i in range(sender_count):
-            sender = s_factory()
-            sender.targets = ["%s://0.0.0.0:%s/%d" % (domain, port, j) for port in ports for j in range(target_count)]
-            sender.send_count = send_total
-            sender.send_batch = send_batch
-            sender.get_reply = True
-            sender.timeout = MessengerTests._timeout
-            self.senders.append( sender )
-
-        self._do_test(iterations)
-
-    def test_oneway_C(self):
-        self._do_oneway_test(MessengerReceiverC(), MessengerSenderC())
-
-    def test_oneway_C_SSL(self):
-        self._ssl_check()
-        self._do_oneway_test(MessengerReceiverC(), MessengerSenderC(), "amqps")
-
-    def test_oneway_valgrind(self):
-        self.valgrind_test()
-        self._do_oneway_test(MessengerReceiverValgrind(), MessengerSenderValgrind())
-
-    def test_oneway_Python(self):
-        self._do_oneway_test(MessengerReceiverPython(), MessengerSenderPython())
-
-    def test_oneway_C_Python(self):
-        self._do_oneway_test(MessengerReceiverC(), MessengerSenderPython())
-
-    def test_oneway_Python_C(self):
-        self._do_oneway_test(MessengerReceiverPython(), MessengerSenderC())
-
-    def test_echo_C(self):
-        self._do_echo_test(MessengerReceiverC(), MessengerSenderC())
-
-    def test_echo_C_SSL(self):
-        self._ssl_check()
-        self._do_echo_test(MessengerReceiverC(), MessengerSenderC(), "amqps")
-
-    def test_echo_valgrind(self):
-        self.valgrind_test()
-        self._do_echo_test(MessengerReceiverValgrind(), MessengerSenderValgrind())
-
-    def test_echo_Python(self):
-        self._do_echo_test(MessengerReceiverPython(), MessengerSenderPython())
-
-    def test_echo_C_Python(self):
-        self._do_echo_test(MessengerReceiverC(), MessengerSenderPython())
-
-    def test_echo_Python_C(self):
-        self._do_echo_test(MessengerReceiverPython(), MessengerSenderC())
-
-    def test_relay_C(self):
-        self._do_relay_test(MessengerReceiverC(), MessengerReceiverC(), MessengerSenderC())
-
-    def test_relay_C_SSL(self):
-        self._ssl_check()
-        self._do_relay_test(MessengerReceiverC(), MessengerReceiverC(), MessengerSenderC(), "amqps")
-
-    def test_relay_valgrind(self):
-        self.valgrind_test()
-        self._do_relay_test(MessengerReceiverValgrind(), MessengerReceiverValgrind(), MessengerSenderValgrind())
-
-    def test_relay_C_Python(self):
-        self._do_relay_test(MessengerReceiverC(), MessengerReceiverPython(), MessengerSenderPython())
-
-    def test_relay_Python(self):
-        self._do_relay_test(MessengerReceiverPython(), MessengerReceiverPython(), MessengerSenderPython())
-
-    def test_star_topology_C(self):
-        self._do_star_topology_test( MessengerReceiverC, MessengerSenderC )
-
-    def test_star_topology_C_SSL(self):
-        self._ssl_check()
-        self._do_star_topology_test( MessengerReceiverC, MessengerSenderC, "amqps" )
-
-    def test_star_topology_valgrind(self):
-        self.valgrind_test()
-        self._do_star_topology_test( MessengerReceiverValgrind, MessengerSenderValgrind )
-
-    def test_star_topology_Python(self):
-        self._do_star_topology_test( MessengerReceiverPython, MessengerSenderPython )
-
-    def test_star_topology_Python_C(self):
-        self._do_star_topology_test( MessengerReceiverPython, MessengerSenderC )
-
-    def test_star_topology_C_Python(self):
-        self._do_star_topology_test( MessengerReceiverPython, MessengerSenderC )
-
-    def test_oneway_reactor(self):
-        self._do_oneway_test(ReactorReceiverC(), ReactorSenderC())
-
-    def test_oneway_reactor_valgrind(self):
-        self.valgrind_test()
-        self._do_oneway_test(ReactorReceiverValgrind(), ReactorSenderValgrind())
diff --git a/tests/python/proton_tests/ssl.py b/tests/python/proton_tests/ssl.py
index 89fe828..225afa7 100644
--- a/tests/python/proton_tests/ssl.py
+++ b/tests/python/proton_tests/ssl.py
@@ -832,93 +832,6 @@
         assert server.connection.state & Endpoint.REMOTE_UNINIT
         self.tearDown()
 
-    def test_defaults_messenger_app(self):
-        """ Test an SSL connection using the Messenger apps (no certificates)
-        """
-        if os.name=="nt":
-            raise Skipped("Windows SChannel lacks anonymous cipher support.")
-        port = common.free_tcp_ports()[0]
-
-        receiver = common.MessengerReceiverC()
-        receiver.subscriptions = ["amqps://~0.0.0.0:%s" % port]
-        receiver.receive_count = 1
-        receiver.timeout = self.timeout
-        receiver.start()
-
-        sender = common.MessengerSenderC()
-        sender.targets = ["amqps://0.0.0.0:%s/X" % port]
-        sender.send_count = 1
-        sender.timeout = self.timeout
-        sender.start()
-        sender.wait()
-        assert sender.status() == 0, "Command '%s' failed" % str(sender.cmdline())
-
-        receiver.wait()
-        assert receiver.status() == 0, "Command '%s' failed" % str(receiver.cmdline())
-
-    def test_server_authentication_messenger_app(self):
-        """ Test an SSL authentication using the Messenger apps.
-        """
-        port = common.free_tcp_ports()[0]
-
-        receiver = common.MessengerReceiverC()
-        receiver.subscriptions = ["amqps://~0.0.0.0:%s" % port]
-        receiver.receive_count = 1
-        receiver.timeout = self.timeout
-        # Note hack - by default we use the client-certificate for the
-        # _server_ because the client-certificate's common name field
-        # is "127.0.0.1", which will match the target address used by
-        # the sender.
-        receiver.certificate = self._testpath("client-certificate.pem")
-        receiver.privatekey = self._testpath("client-private-key.pem")
-        receiver.password = "client-password"
-        receiver.start()
-
-        sender = common.MessengerSenderC()
-        sender.targets = ["amqps://127.0.0.1:%s/X" % port]
-        sender.send_count = 1
-        sender.timeout = self.timeout
-        sender.ca_db = self._testpath("ca-certificate.pem")
-        sender.start()
-        sender.wait()
-        assert sender.status() == 0, "Command '%s' failed" % str(sender.cmdline())
-
-        receiver.wait()
-        assert receiver.status() == 0, "Command '%s' failed" % str(receiver.cmdline())
-
-    def DISABLED_test_defaults_valgrind(self):
-        """ Run valgrind over a simple SSL connection (no certificates)
-        """
-        # the openssl libraries produce far too many valgrind errors to be
-        # useful.  AFAIK, there is no way to wriate a valgrind suppression
-        # expression that will ignore all errors from a given library.
-        # Until we can, skip this test.
-        port = common.free_tcp_ports()[0]
-
-        receiver = common.MessengerReceiverValgrind()
-        receiver.subscriptions = ["amqps://~127.0.0.1:%s" % port]
-        receiver.receive_count = 1
-        receiver.timeout = self.timeout
-        receiver.start()
-
-        sender = common.MessengerSenderValgrind()
-        sender.targets = ["amqps://127.0.0.1:%s/X" % port]
-        sender.send_count = 1
-        sender.timeout = self.timeout
-        sender.start()
-        sender.wait()
-        assert sender.status() == 0, "Command '%s' failed" % str(sender.cmdline())
-
-        receiver.wait()
-        assert receiver.status() == 0, "Command '%s' failed" % str(receiver.cmdline())
-
-        # self.server_domain.set_credentials(self._testpath("client-certificate.pem"),
-        #                                    self._testpath("client-private-key.pem"),
-        #                                    "client-password")
-
-        # self.client_domain.set_trusted_ca_db(self._testpath("ca-certificate.pem"))
-        # self.client_domain.set_peer_authentication( SSLDomain.VERIFY_PEER )
-
     def test_singleton(self):
         """Verify that only a single instance of SSL can exist per Transport"""
         transport = Transport()
@@ -938,127 +851,3 @@
         except SSLException:
             pass
 
-class MessengerSSLTests(common.Test):
-
-    def setUp(self):
-        if not common.isSSLPresent():
-            raise Skipped("No SSL libraries found.")
-        self.server = Messenger()
-        self.client = Messenger()
-        self.server.blocking = False
-        self.client.blocking = False
-
-    def tearDown(self):
-        self.server.stop()
-        self.client.stop()
-        self.pump()
-        assert self.server.stopped
-        assert self.client.stopped
-
-    def pump(self, timeout=0):
-        while self.client.work(0) or self.server.work(0): pass
-        self.client.work(timeout)
-        self.server.work(timeout)
-        while self.client.work(0) or self.server.work(0): pass
-
-    def test_server_credentials(self,
-                                cert="server-certificate.pem",
-                                key="server-private-key.pem",
-                                password="server-password",
-                                exception=None):
-        import sys
-        # java doesn't do validation in the same way (yet)
-        if exception and "java" in sys.platform:
-            raise Skipped()
-        self.server.certificate = _testpath(cert)
-        self.server.private_key = _testpath(key)
-        self.server.password = password
-        port = common.free_tcp_ports()[0]
-        try:
-            self.server.start()
-            self.server.subscribe("amqps://~0.0.0.0:%s" % port)
-            if exception is not None:
-                assert False, "expected failure did not occur"
-        except MessengerException:
-            e = sys.exc_info()[1]
-            if exception:
-                assert exception in str(e), str(e)
-            else:
-                raise e
-
-    def test_server_credentials_bad_cert(self):
-        self.test_server_credentials(cert="bad",
-                                     exception="invalid credentials")
-
-    def test_server_credentials_bad_key(self):
-        self.test_server_credentials(key="bad",
-                                     exception="invalid credentials")
-
-    def test_server_credentials_bad_password(self):
-        self.test_server_credentials(password="bad",
-                                     exception="invalid credentials")
-
-    def test_client_credentials(self,
-                                trusted="ca-certificate.pem",
-                                cert="client-certificate.pem",
-                                key="client-private-key.pem",
-                                password="client-password",
-                                altserv=False,
-                                fail=False):
-        if altserv:
-            self.server.certificate = _testpath("bad-server-certificate.pem")
-            self.server.private_key = _testpath("bad-server-private-key.pem")
-            self.server.password = "server-password"
-        else:
-            self.server.certificate = _testpath("client-certificate.pem")
-            self.server.private_key = _testpath("client-private-key.pem")
-            self.server.password = "client-password"
-        self.server.start()
-        port = common.free_tcp_ports()[0]
-        self.server.subscribe("amqps://~0.0.0.0:%s" % port)
-        self.server.incoming_window = 10
-
-        self.client.trusted_certificates = _testpath(trusted)
-        self.client.certificate = _testpath(cert)
-        self.client.private_key = _testpath(key)
-        self.client.password = password
-        self.client.outgoing_window = 10
-        self.client.start()
-
-        self.server.recv()
-
-        msg = Message()
-        msg.address = "amqps://127.0.0.1:%s" % port
-        # make sure a large, uncompressible message body works!
-        msg.body = "".join(random.choice(string.ascii_letters)
-                           for x in range(10099))
-        trk = self.client.put(msg)
-        self.client.send()
-
-        self.pump()
-
-        if fail:
-            assert self.server.incoming == 0, self.server.incoming
-            assert self.client.status(trk) == ABORTED, self.client.status(trk)
-        else:
-            assert self.server.incoming == 1, self.server.incoming
-
-            rmsg = Message()
-            self.server.get(rmsg)
-            assert rmsg.body == msg.body
-            self.server.accept()
-            self.pump()
-
-            assert self.client.status(trk) == ACCEPTED, self.client.status(trk)
-
-    def test_client_credentials_bad_cert(self):
-        self.test_client_credentials(cert="bad", fail=True)
-
-    def test_client_credentials_bad_trusted(self):
-        self.test_client_credentials(trusted="bad", fail=True)
-
-    def test_client_credentials_bad_password(self):
-        self.test_client_credentials(password="bad", fail=True)
-
-    def test_client_credentials_untrusted(self):
-        self.test_client_credentials(altserv=True, fail=True)