diff --git a/pom.xml b/pom.xml
index ae6c3e7..f80cc0c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
   <groupId>org.apache.qpid</groupId>
   <artifactId>qpid-interop-test-parent</artifactId>
   <packaging>pom</packaging>
-  <version>0.1.0-SNAPSHOT</version>
+  <version>0.1.0</version>
   <url>https://qpid.apache.org</url>
   <name>Qpid Interop Test</name>
   <description>Qpid client interoperability test suite for AMQP 1.0 clients</description>
@@ -53,7 +53,7 @@
     <!-- Dependency versions -->
     <geronimo.jms.2.spec-version>1.0-alpha-2</geronimo.jms.2.spec-version>
     <json-version>1.1</json-version>
-    <qpid-jms-client-version>[0.25.0-SNAPSHOT,)</qpid-jms-client-version>
+    <qpid-jms-client-version>0.25.0</qpid-jms-client-version>
     <slf4j-version>1.7.25</slf4j-version>
     
   </properties>
diff --git a/shims/qpid-jms/pom.xml b/shims/qpid-jms/pom.xml
index 5030e71..33739d9 100644
--- a/shims/qpid-jms/pom.xml
+++ b/shims/qpid-jms/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.apache.qpid</groupId>
     <artifactId>qpid-interop-test-parent</artifactId>
-    <version>0.1.0-SNAPSHOT</version>
+    <version>0.1.0</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Receiver.java b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Receiver.java
deleted file mode 100644
index a4763f8..0000000
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Receiver.java
+++ /dev/null
@@ -1,407 +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.interop_test.jms_dtx_test;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-import javax.jms.BytesMessage;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.Destination;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.StreamMessage;
-import javax.jms.TextMessage;
-import javax.jms.Topic;
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonReader;
-import javax.json.JsonWriter;
-import org.apache.qpid.jms.JmsConnectionFactory;
-
-public class Receiver {
-    private static final String USER = "guest";
-    private static final String PASSWORD = "guest";
-    private static final int TIMEOUT = 1000;
-    private static final String[] SUPPORTED_JMS_MESSAGE_TYPES = {"JMS_MESSAGE_TYPE",
-                                                                 "JMS_BYTESMESSAGE_TYPE",
-                                                                 "JMS_MAPMESSAGE_TYPE",
-                                                                 "JMS_OBJECTMESSAGE_TYPE",
-                                                                 "JMS_STREAMMESSAGE_TYPE",
-                                                                 "JMS_TEXTMESSAGE_TYPE"};
-    private static enum JMS_DESTINATION_TYPE {JMS_QUEUE, JMS_TEMPORARY_QUEUE, JMS_TOPIC, JMS_TEMPORARY_TOPIC};
-    
-    Connection _connection;
-    Session _session;
-    Queue _queue;
-    MessageConsumer _messageConsumer;
-    JsonObjectBuilder _jsonTestValueMapBuilder;
-    
-    // args[0]: Broker URL
-    // args[1]: Queue name
-    // args[2]: JMS message type
-    // args[3]: JSON Test parameters containing testValuesMap
-    public static void main(String[] args) throws Exception {
-        if (args.length != 4) {
-            System.out.println("JmsReceiverShim: Incorrect number of arguments");
-            System.out.println("JmsReceiverShim: Expected arguments: broker_address, queue_name, JMS_msg_type, JSON_receive_params");
-            System.exit(1);
-        }
-        String brokerAddress = "amqp://" + args[0];
-        String queueName = args[1];
-        String jmsMessageType = args[2];
-        if (!isSupportedJmsMessageType(jmsMessageType)) {
-            System.out.println("ERROR: JmsReceiverShim: Unknown or unsupported JMS message type \"" + jmsMessageType + "\"");
-            System.exit(1);
-        }
-
-        JsonReader jsonReader = Json.createReader(new StringReader(args[3]));
-        JsonObject numTestValuesMap = jsonReader.readObject();
-        jsonReader.close();
-        
-        Receiver shim = new Receiver(brokerAddress, queueName);
-        shim.run(jmsMessageType, numTestValuesMap);
-    }
-
-    public Receiver(String brokerAddress, String queueName) {
-        try {
-            _connection = null;
-            ConnectionFactory factory = (ConnectionFactory)new JmsConnectionFactory(brokerAddress);
-            _connection = factory.createConnection(USER, PASSWORD);
-            _connection.setExceptionListener(new MyExceptionListener());
-            _connection.start();
-
-            _session = _connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
-            _queue = _session.createQueue(queueName);
-
-            _messageConsumer = _session.createConsumer(_queue);
-
-            _jsonTestValueMapBuilder = Json.createObjectBuilder();
-        } catch (Exception exc) {
-            if (_connection != null)
-                try { _connection.close(); } catch (JMSException e) {}
-            System.out.println("Caught exception, exiting.");
-            exc.printStackTrace(System.out);
-            System.exit(1);
-        }
-    }
-    
-    public void run(String jmsMessageType, JsonObject numTestValuesMap) {
-        try {
-            List<String> subTypeKeyList = new ArrayList<String>(numTestValuesMap.keySet());
-            Collections.sort(subTypeKeyList);
-            
-            Message message = null;
-            
-            for (String subType: subTypeKeyList) {
-                JsonArrayBuilder jasonTestValuesArrayBuilder = Json.createArrayBuilder();
-                for (int i=0; i<numTestValuesMap.getJsonNumber(subType).intValue(); ++i) {
-                    message = _messageConsumer.receive(TIMEOUT);
-                    if (message == null) break;
-                    switch (jmsMessageType) {
-                    case "JMS_MESSAGE_TYPE":
-                        processJMSMessage(jasonTestValuesArrayBuilder);
-                        break;
-                    case "JMS_BYTESMESSAGE_TYPE":
-                        processJMSBytesMessage(jmsMessageType, subType, message, jasonTestValuesArrayBuilder);
-                        break;
-                    case "JMS_STREAMMESSAGE_TYPE":
-                        processJMSStreamMessage(jmsMessageType, subType, message, jasonTestValuesArrayBuilder);
-                        break;
-                    case "JMS_MAPMESSAGE_TYPE":
-                        processJMSMapMessage(jmsMessageType, subType, i, message, jasonTestValuesArrayBuilder);
-                        break;
-                    case "JMS_OBJECTMESSAGE_TYPE":
-                        processJMSObjectMessage(subType, message, jasonTestValuesArrayBuilder);
-                        break;
-                    case "JMS_TEXTMESSAGE_TYPE":
-                        processJMSTextMessage(message, jasonTestValuesArrayBuilder);
-                        break;
-                    default:
-                        _connection.close();
-                        throw new Exception("JmsReceiverShim: Internal error: Unknown or unsupported JMS message type \"" + jmsMessageType + "\"");
-                    }
-                }
-                _jsonTestValueMapBuilder.add(subType, jasonTestValuesArrayBuilder);
-            }
-            _connection.close();
-    
-            System.out.println(jmsMessageType);
-            StringWriter out = new StringWriter();
-            writeJsonObject(_jsonTestValueMapBuilder, out);
-            System.out.println(out.toString());        
-        } catch (Exception exp) {
-            try { _connection.close(); } catch (JMSException e) {}
-            System.out.println("Caught exception, exiting.");
-            exp.printStackTrace(System.out);
-            System.exit(1);
-        }
-    }
-    
-    protected void processJMSMessage(JsonArrayBuilder jasonTestValuesArrayBuilder) {
-        jasonTestValuesArrayBuilder.addNull();        
-    }
-    
-    protected void processJMSBytesMessage(String jmsMessageType, String subType, Message message, JsonArrayBuilder jasonTestValuesArrayBuilder) throws Exception, JMSException, IOException, ClassNotFoundException {
-        switch (subType) {
-        case "boolean":
-            jasonTestValuesArrayBuilder.add(((BytesMessage)message).readBoolean()?"True":"False");
-            break;
-        case "byte":
-            jasonTestValuesArrayBuilder.add(formatByte(((BytesMessage)message).readByte()));
-            break;
-        case "bytes":
-            {
-                byte[] bytesBuff = new byte[65536];
-                int numBytesRead = ((BytesMessage)message).readBytes(bytesBuff);
-                if (numBytesRead >= 0) {
-                    jasonTestValuesArrayBuilder.add(new String(Arrays.copyOfRange(bytesBuff, 0, numBytesRead)));
-                } else {
-                    // NOTE: For this case, an empty byte array has nothing to return
-                    jasonTestValuesArrayBuilder.add(new String());
-                }
-            }
-            break;
-        case "char":
-            jasonTestValuesArrayBuilder.add(formatChar(((BytesMessage)message).readChar()));
-            break;
-        case "double":
-            long l = Double.doubleToRawLongBits(((BytesMessage)message).readDouble());
-            jasonTestValuesArrayBuilder.add(String.format("0x%16s", Long.toHexString(l)).replace(' ', '0'));
-            break;
-        case "float":
-            int i0 = Float.floatToRawIntBits(((BytesMessage)message).readFloat());
-            jasonTestValuesArrayBuilder.add(String.format("0x%8s", Integer.toHexString(i0)).replace(' ', '0'));
-            break;
-        case "int":
-            jasonTestValuesArrayBuilder.add(formatInt(((BytesMessage)message).readInt()));
-            break;
-        case "long":
-            jasonTestValuesArrayBuilder.add(formatLong(((BytesMessage)message).readLong()));
-            break;
-        case "object":
-            {
-                byte[] bytesBuff = new byte[65536];
-                int numBytesRead = ((BytesMessage)message).readBytes(bytesBuff);
-                if (numBytesRead >= 0) {
-                    ByteArrayInputStream bais = new ByteArrayInputStream(Arrays.copyOfRange(bytesBuff, 0, numBytesRead));
-                    ObjectInputStream ois = new ObjectInputStream(bais);
-                    Object obj = ois.readObject();
-                    jasonTestValuesArrayBuilder.add(obj.getClass().getName() + ":" + obj.toString());
-                } else {
-                    jasonTestValuesArrayBuilder.add("<object error>");
-                }
-            }
-            break;
-        case "short":
-            jasonTestValuesArrayBuilder.add(formatShort(((BytesMessage)message).readShort()));
-            break;
-        case "string":
-            jasonTestValuesArrayBuilder.add(((BytesMessage)message).readUTF());
-            break;
-        default:
-            throw new Exception("JmsReceiverShim: Unknown subtype for " + jmsMessageType + ": \"" + subType + "\"");
-        }        
-    }
-    
-    protected void processJMSMapMessage(String jmsMessageType, String subType, int count, Message message, JsonArrayBuilder jasonTestValuesArrayBuilder) throws Exception, JMSException {
-        String name = String.format("%s%03d", subType, count);
-        switch (subType) {
-        case "boolean":
-            jasonTestValuesArrayBuilder.add(((MapMessage)message).getBoolean(name)?"True":"False");
-            break;
-        case "byte":
-            jasonTestValuesArrayBuilder.add(formatByte(((MapMessage)message).getByte(name)));
-            break;
-        case "bytes":
-            jasonTestValuesArrayBuilder.add(new String(((MapMessage)message).getBytes(name)));
-            break;
-        case "char":
-            jasonTestValuesArrayBuilder.add(formatChar(((MapMessage)message).getChar(name)));
-            break;
-        case "double":
-            long l = Double.doubleToRawLongBits(((MapMessage)message).getDouble(name));
-            jasonTestValuesArrayBuilder.add(String.format("0x%16s", Long.toHexString(l)).replace(' ', '0'));
-            break;
-        case "float":
-            int i0 = Float.floatToRawIntBits(((MapMessage)message).getFloat(name));
-            jasonTestValuesArrayBuilder.add(String.format("0x%8s", Integer.toHexString(i0)).replace(' ', '0'));
-            break;
-        case "int":
-            jasonTestValuesArrayBuilder.add(formatInt(((MapMessage)message).getInt(name)));
-            break;
-        case "long":
-            jasonTestValuesArrayBuilder.add(formatLong(((MapMessage)message).getLong(name)));
-            break;
-        case "object":
-            Object obj = ((MapMessage)message).getObject(name);
-            jasonTestValuesArrayBuilder.add(obj.getClass().getName() + ":" + obj.toString());
-            break;
-        case "short":
-            jasonTestValuesArrayBuilder.add(formatShort(((MapMessage)message).getShort(name)));
-            break;
-        case "string":
-            jasonTestValuesArrayBuilder.add(((MapMessage)message).getString(name));
-            break;
-        default:
-            throw new Exception("JmsReceiverShim: Unknown subtype for " + jmsMessageType + ": \"" + subType + "\"");
-        }        
-    }
-    
-    protected void processJMSObjectMessage(String subType, Message message, JsonArrayBuilder jasonTestValuesArrayBuilder) throws JMSException {
-        jasonTestValuesArrayBuilder.add(((ObjectMessage)message).getObject().toString());
-    }
-    
-    protected void processJMSStreamMessage(String jmsMessageType, String subType, Message message, JsonArrayBuilder jasonTestValuesArrayBuilder) throws Exception, JMSException {
-        switch (subType) {
-        case "boolean":
-            jasonTestValuesArrayBuilder.add(((StreamMessage)message).readBoolean()?"True":"False");
-            break;
-        case "byte":
-            jasonTestValuesArrayBuilder.add(formatByte(((StreamMessage)message).readByte()));
-            break;
-        case "bytes":
-            byte[] bytesBuff = new byte[65536];
-            int numBytesRead = ((StreamMessage)message).readBytes(bytesBuff);
-            if (numBytesRead >= 0) {
-                jasonTestValuesArrayBuilder.add(new String(Arrays.copyOfRange(bytesBuff, 0, numBytesRead)));
-            } else {
-                System.out.println("StreamMessage.readBytes() returned " + numBytesRead);
-                jasonTestValuesArrayBuilder.add("<bytes error>");
-            }
-            break;
-        case "char":
-            jasonTestValuesArrayBuilder.add(formatChar(((StreamMessage)message).readChar()));
-            break;
-        case "double":
-            long l = Double.doubleToRawLongBits(((StreamMessage)message).readDouble());
-            jasonTestValuesArrayBuilder.add(String.format("0x%16s", Long.toHexString(l)).replace(' ', '0'));
-            break;
-        case "float":
-            int i0 = Float.floatToRawIntBits(((StreamMessage)message).readFloat());
-            jasonTestValuesArrayBuilder.add(String.format("0x%8s", Integer.toHexString(i0)).replace(' ', '0'));
-            break;
-        case "int":
-            jasonTestValuesArrayBuilder.add(formatInt(((StreamMessage)message).readInt()));
-            break;
-        case "long":
-            jasonTestValuesArrayBuilder.add(formatLong(((StreamMessage)message).readLong()));
-            break;
-        case "object":
-            Object obj = ((StreamMessage)message).readObject();
-            jasonTestValuesArrayBuilder.add(obj.getClass().getName() + ":" + obj.toString());
-            break;
-        case "short":
-            jasonTestValuesArrayBuilder.add(formatShort(((StreamMessage)message).readShort()));
-            break;
-        case "string":
-            jasonTestValuesArrayBuilder.add(((StreamMessage)message).readString());
-            break;
-        default:
-            throw new Exception("JmsReceiverShim: Unknown subtype for " + jmsMessageType + ": \"" + subType + "\"");
-        }        
-    }
-
-    protected void processJMSTextMessage(Message message, JsonArrayBuilder jasonTestValuesArrayBuilder) throws JMSException {
-        jasonTestValuesArrayBuilder.add(((TextMessage)message).getText());
-    }
-
-    protected static void writeJsonObject(JsonObjectBuilder builder, StringWriter out) {
-        JsonWriter jsonWriter = Json.createWriter(out);
-        jsonWriter.writeObject(builder.build());
-        jsonWriter.close();        
-    }
-
-    protected static String formatByte(byte b) {
-        boolean neg = false;
-        if (b < 0) {
-            neg = true;
-            b = (byte)-b;
-        }
-        return String.format("%s0x%x", neg?"-":"", b);
-    }
-    
-    protected static String formatChar(char c) {
-        if (Character.isLetterOrDigit(c)) {
-            return String.format("%c", c);
-        }
-        char[] ca = {c};
-        return new String(ca);
-    }
-    
-    protected static String formatInt(int i) {
-        boolean neg = false;
-        if (i < 0) {
-            neg = true;
-            i = -i;
-        }
-        return String.format("%s0x%x", neg?"-":"", i);
-    }
-    
-    protected static String formatLong(long l) {
-        boolean neg = false;
-        if (l < 0) {
-            neg = true;
-            l = -l;
-        }
-        return String.format("%s0x%x", neg?"-":"", l);
-    }
-    
-    protected static String formatShort(int s) {
-        boolean neg = false;
-        if (s < 0) {
-            neg = true;
-            s = -s;
-        }
-        return String.format("%s0x%x", neg?"-":"", s);
-    }
-        
-    protected static boolean isSupportedJmsMessageType(String jmsMessageType) {
-        for (String supportedJmsMessageType: SUPPORTED_JMS_MESSAGE_TYPES) {
-            if (jmsMessageType.equals(supportedJmsMessageType))
-                return true;
-        }
-    return false;
-    }
-
-    private static class MyExceptionListener implements ExceptionListener {
-        @Override
-        public void onException(JMSException exception) {
-            System.out.println("Connection ExceptionListener fired, exiting.");
-            exception.printStackTrace(System.out);
-            System.exit(1);
-        }
-    }
-}
\ No newline at end of file
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_hdrs_props_test/Receiver.java b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_hdrs_props_test/Receiver.java
index 00d2e4c..13331ba 100644
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_hdrs_props_test/Receiver.java
+++ b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_hdrs_props_test/Receiver.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.qpid.interop_test.jms_hdrs_props_test;
+package org.apache.qpid.qpid_interop_test.jms_hdrs_props_test;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_hdrs_props_test/Sender.java b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_hdrs_props_test/Sender.java
index 2f38991..efc3fb9 100644
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_hdrs_props_test/Sender.java
+++ b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_hdrs_props_test/Sender.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.qpid.interop_test.jms_hdrs_props_test;
+package org.apache.qpid.qpid_interop_test.jms_hdrs_props_test;
 
 import java.io.Serializable;
 import java.io.StringReader;
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Sender.java b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Sender.java
deleted file mode 100644
index 41f5ee8..0000000
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Sender.java
+++ /dev/null
@@ -1,113 +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.interop_test.jms_large_content_test;
-
-import java.io.Serializable;
-import java.io.StringReader;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import javax.jms.BytesMessage;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.DeliveryMode;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.Message;
-import javax.jms.MessageProducer;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.StreamMessage;
-import javax.jms.TextMessage;
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-import javax.json.JsonReader;
-import org.apache.qpid.jms.JmsConnectionFactory;
-
-public class Sender {
-    private static final String USER = "guest";
-    private static final String PASSWORD = "guest";
-    private static final String[] SUPPORTED_JMS_MESSAGE_TYPES = {"JMS_MESSAGE_TYPE",
-                                                                 "JMS_BYTESMESSAGE_TYPE",
-                                                                 "JMS_MAPMESSAGE_TYPE",
-                                                                 "JMS_OBJECTMESSAGE_TYPE",
-                                                                 "JMS_STREAMMESSAGE_TYPE",
-                                                                 "JMS_TEXTMESSAGE_TYPE"};
-    Connection _connection;
-    Session _session;
-    Queue _queue;
-    MessageProducer _messageProducer;
-    int _msgsSent;
-    
-
-    // args[0]: Broker URL
-    // args[1]: Queue name
-    // ...
-    public static void main(String[] args) throws Exception {
-        if (args.length != 2) {
-            System.out.println("JmsSenderShim: Incorrect number of arguments");
-            System.out.println("JmsSenderShim: Expected arguments: broker_address, queue_name, ...");
-            System.exit(1);
-        }
-        String brokerAddress = "amqp://" + args[0];
-        String queueName = args[1];
-
-        Sender shim = new Sender(brokerAddress, queueName);
-        shim.runTests();
-    }
-
-    public Sender(String brokerAddress, String queueName) {
-        try {
-            ConnectionFactory factory = (ConnectionFactory)new JmsConnectionFactory(brokerAddress);
-
-            _connection = factory.createConnection();
-            _connection.setExceptionListener(new MyExceptionListener());
-            _connection.start();
-
-            _session = _connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
-            _queue = _session.createQueue(queueName);
-
-            _messageProducer = _session.createProducer(_queue);
-            
-            _msgsSent = 0;
-        } catch (Exception exp) {
-            System.out.println("Caught exception, exiting.");
-            exp.printStackTrace(System.out);
-            System.exit(1);
-        }
-    }
-
-    public void runTests() throws Exception {
-        _connection.close();
-    }
-    
-
-    private static class MyExceptionListener implements ExceptionListener {
-        @Override
-        public void onException(JMSException exception) {
-            System.out.println("Connection ExceptionListener fired, exiting.");
-            exception.printStackTrace(System.out);
-            System.exit(1);
-        }
-    }
-}
\ No newline at end of file
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_messages_test/Receiver.java b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_messages_test/Receiver.java
index 07d1f06..a3acb66 100644
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_messages_test/Receiver.java
+++ b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_messages_test/Receiver.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.qpid.interop_test.jms_messages_test;
+package org.apache.qpid.qpid_interop_test.jms_messages_test;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_messages_test/Sender.java b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_messages_test/Sender.java
index 0cccc97..5348663 100644
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_messages_test/Sender.java
+++ b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_messages_test/Sender.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.qpid.interop_test.jms_messages_test;
+package org.apache.qpid.qpid_interop_test.jms_messages_test;
 
 import java.io.Serializable;
 import java.io.StringReader;
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java b/shims/qpid-jms/src_not_yet_impl/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Receiver.java
similarity index 99%
copy from shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java
copy to shims/qpid-jms/src_not_yet_impl/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Receiver.java
index 0eed5ef..0614e15 100644
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java
+++ b/shims/qpid-jms/src_not_yet_impl/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Receiver.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.qpid.interop_test.jms_large_content_test;
+package org.apache.qpid.qpid_interop_test.jms_dtx_test;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java b/shims/qpid-jms/src_not_yet_impl/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java
similarity index 98%
rename from shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java
rename to shims/qpid-jms/src_not_yet_impl/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java
index 78dfa4f..c5b3506 100644
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java
+++ b/shims/qpid-jms/src_not_yet_impl/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.qpid.interop_test.jms_dtx_test;
+package org.apache.qpid.qpid_interop_test.jms_dtx_test;
 
 import java.io.Serializable;
 import java.io.StringReader;
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java b/shims/qpid-jms/src_not_yet_impl/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java
similarity index 99%
rename from shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java
rename to shims/qpid-jms/src_not_yet_impl/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java
index 0eed5ef..2fb8ac7 100644
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java
+++ b/shims/qpid-jms/src_not_yet_impl/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.qpid.interop_test.jms_large_content_test;
+package org.apache.qpid.qpid_interop_test.jms_large_content_test;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
diff --git a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java b/shims/qpid-jms/src_not_yet_impl/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Sender.java
similarity index 98%
copy from shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java
copy to shims/qpid-jms/src_not_yet_impl/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Sender.java
index 78dfa4f..0980e67 100644
--- a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java
+++ b/shims/qpid-jms/src_not_yet_impl/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Sender.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.qpid.interop_test.jms_dtx_test;
+package org.apache.qpid.qpid_interop_test.jms_large_content_test;
 
 import java.io.Serializable;
 import java.io.StringReader;
diff --git a/shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Receiver.cpp b/shims/qpid-proton-cpp/src/not_yet_impl/amqp_dtx_test/Receiver.cpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Receiver.cpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/amqp_dtx_test/Receiver.cpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Receiver.hpp b/shims/qpid-proton-cpp/src/not_yet_impl/amqp_dtx_test/Receiver.hpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Receiver.hpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/amqp_dtx_test/Receiver.hpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Sender.cpp b/shims/qpid-proton-cpp/src/not_yet_impl/amqp_dtx_test/Sender.cpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Sender.cpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/amqp_dtx_test/Sender.cpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Sender.hpp b/shims/qpid-proton-cpp/src/not_yet_impl/amqp_dtx_test/Sender.hpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Sender.hpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/amqp_dtx_test/Sender.hpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/amqp_features_test/Receiver.cpp b/shims/qpid-proton-cpp/src/not_yet_impl/amqp_features_test/Receiver.cpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/amqp_features_test/Receiver.cpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/amqp_features_test/Receiver.cpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/amqp_features_test/Receiver.hpp b/shims/qpid-proton-cpp/src/not_yet_impl/amqp_features_test/Receiver.hpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/amqp_features_test/Receiver.hpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/amqp_features_test/Receiver.hpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/amqp_features_test/Sender.cpp b/shims/qpid-proton-cpp/src/not_yet_impl/amqp_features_test/Sender.cpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/amqp_features_test/Sender.cpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/amqp_features_test/Sender.cpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/amqp_features_test/Sender.hpp b/shims/qpid-proton-cpp/src/not_yet_impl/amqp_features_test/Sender.hpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/amqp_features_test/Sender.hpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/amqp_features_test/Sender.hpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/jms_dtx_test/Receiver.cpp b/shims/qpid-proton-cpp/src/not_yet_impl/jms_dtx_test/Receiver.cpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/jms_dtx_test/Receiver.cpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/jms_dtx_test/Receiver.cpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/jms_dtx_test/Receiver.hpp b/shims/qpid-proton-cpp/src/not_yet_impl/jms_dtx_test/Receiver.hpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/jms_dtx_test/Receiver.hpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/jms_dtx_test/Receiver.hpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/jms_dtx_test/Sender.cpp b/shims/qpid-proton-cpp/src/not_yet_impl/jms_dtx_test/Sender.cpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/jms_dtx_test/Sender.cpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/jms_dtx_test/Sender.cpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/jms_dtx_test/Sender.hpp b/shims/qpid-proton-cpp/src/not_yet_impl/jms_dtx_test/Sender.hpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/jms_dtx_test/Sender.hpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/jms_dtx_test/Sender.hpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/jms_large_content_test/Receiver.cpp b/shims/qpid-proton-cpp/src/not_yet_impl/jms_large_content_test/Receiver.cpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/jms_large_content_test/Receiver.cpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/jms_large_content_test/Receiver.cpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/jms_large_content_test/Receiver.hpp b/shims/qpid-proton-cpp/src/not_yet_impl/jms_large_content_test/Receiver.hpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/jms_large_content_test/Receiver.hpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/jms_large_content_test/Receiver.hpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/jms_large_content_test/Sender.cpp b/shims/qpid-proton-cpp/src/not_yet_impl/jms_large_content_test/Sender.cpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/jms_large_content_test/Sender.cpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/jms_large_content_test/Sender.cpp
diff --git a/shims/qpid-proton-cpp/src/qpidit/jms_large_content_test/Sender.hpp b/shims/qpid-proton-cpp/src/not_yet_impl/jms_large_content_test/Sender.hpp
similarity index 100%
rename from shims/qpid-proton-cpp/src/qpidit/jms_large_content_test/Sender.hpp
rename to shims/qpid-proton-cpp/src/not_yet_impl/jms_large_content_test/Sender.hpp
diff --git a/shims/qpid-proton-python/src/amqp_dtx_test/Receiver.py b/shims/qpid-proton-python/not_yet_impl/amqp_dtx_test/Receiver.py
similarity index 100%
rename from shims/qpid-proton-python/src/amqp_dtx_test/Receiver.py
rename to shims/qpid-proton-python/not_yet_impl/amqp_dtx_test/Receiver.py
diff --git a/shims/qpid-proton-python/src/amqp_dtx_test/Sender.py b/shims/qpid-proton-python/not_yet_impl/amqp_dtx_test/Sender.py
similarity index 100%
rename from shims/qpid-proton-python/src/amqp_dtx_test/Sender.py
rename to shims/qpid-proton-python/not_yet_impl/amqp_dtx_test/Sender.py
diff --git a/shims/qpid-proton-python/src/amqp_features_test/Receiver.py b/shims/qpid-proton-python/not_yet_impl/amqp_features_test/Receiver.py
similarity index 100%
rename from shims/qpid-proton-python/src/amqp_features_test/Receiver.py
rename to shims/qpid-proton-python/not_yet_impl/amqp_features_test/Receiver.py
diff --git a/shims/qpid-proton-python/src/amqp_features_test/Sender.py b/shims/qpid-proton-python/not_yet_impl/amqp_features_test/Sender.py
similarity index 100%
rename from shims/qpid-proton-python/src/amqp_features_test/Sender.py
rename to shims/qpid-proton-python/not_yet_impl/amqp_features_test/Sender.py
diff --git a/shims/qpid-proton-python/src/jms_dtx_test/Receiver.py b/shims/qpid-proton-python/not_yet_impl/jms_dtx_test/Receiver.py
similarity index 100%
rename from shims/qpid-proton-python/src/jms_dtx_test/Receiver.py
rename to shims/qpid-proton-python/not_yet_impl/jms_dtx_test/Receiver.py
diff --git a/shims/qpid-proton-python/src/jms_dtx_test/Sender.py b/shims/qpid-proton-python/not_yet_impl/jms_dtx_test/Sender.py
similarity index 100%
rename from shims/qpid-proton-python/src/jms_dtx_test/Sender.py
rename to shims/qpid-proton-python/not_yet_impl/jms_dtx_test/Sender.py
diff --git a/shims/qpid-proton-python/src/jms_large_content_test/Receiver.py b/shims/qpid-proton-python/not_yet_impl/jms_large_content_test/Receiver.py
similarity index 100%
rename from shims/qpid-proton-python/src/jms_large_content_test/Receiver.py
rename to shims/qpid-proton-python/not_yet_impl/jms_large_content_test/Receiver.py
diff --git a/shims/qpid-proton-python/src/jms_large_content_test/Sender.py b/shims/qpid-proton-python/not_yet_impl/jms_large_content_test/Sender.py
similarity index 100%
rename from shims/qpid-proton-python/src/jms_large_content_test/Sender.py
rename to shims/qpid-proton-python/not_yet_impl/jms_large_content_test/Sender.py
diff --git a/src/python/qpid_interop_test/jms_hdrs_props_test.py b/src/python/qpid_interop_test/jms_hdrs_props_test.py
index 139b5ae..b436162 100755
--- a/src/python/qpid_interop_test/jms_hdrs_props_test.py
+++ b/src/python/qpid_interop_test/jms_hdrs_props_test.py
@@ -43,6 +43,7 @@
     print 'ERROR: Environment variable QIT_INSTALL_PREFIX is not set'
     sys.exit(1)
 QIT_TEST_SHIM_HOME = path.join(QIT_INSTALL_PREFIX, 'libexec', 'qpid_interop_test', 'shims')
+QPID_JMS_SHIM_VER = '0.1.0'
 
 class JmsMessageTypes(TestTypeMap):
     """
@@ -634,9 +635,10 @@
       with open(QIT_JMS_CLASSPATH_FILE, 'r') as classpath_file:
           QIT_JMS_CLASSPATH = classpath_file.read()
     else:
-      QIT_JMS_CLASSPATH = path.join(QIT_TEST_SHIM_HOME, 'qpid-jms', '*')
-    QPID_JMS_RECEIVER_SHIM = 'org.apache.qpid.interop_test.jms_hdrs_props_test.Receiver'
-    QPID_JMS_SENDER_SHIM = 'org.apache.qpid.interop_test.jms_hdrs_props_test.Sender'
+      QIT_JMS_CLASSPATH = path.join(QIT_TEST_SHIM_HOME, 'qpid-jms',
+                                    'qpid-interop-test-jms-shim-%s-jar-with-dependencies.jar' % QPID_JMS_SHIM_VER)
+    QPID_JMS_RECEIVER_SHIM = 'org.apache.qpid.qpid_interop_test.jms_hdrs_props_test.Receiver'
+    QPID_JMS_SENDER_SHIM = 'org.apache.qpid.qpid_interop_test.jms_hdrs_props_test.Sender'
 
     # SHIM_MAP contains an instance of each client language shim that is to be tested as a part of this test. For
     # every shim in this list, a test is dynamically constructed which tests it against itself as well as every
diff --git a/src/python/qpid_interop_test/jms_messages_test.py b/src/python/qpid_interop_test/jms_messages_test.py
index 3b54510..6a6f630 100755
--- a/src/python/qpid_interop_test/jms_messages_test.py
+++ b/src/python/qpid_interop_test/jms_messages_test.py
@@ -43,6 +43,8 @@
     print 'ERROR: Environment variable QIT_INSTALL_PREFIX is not set'
     sys.exit(1)
 QIT_TEST_SHIM_HOME = path.join(QIT_INSTALL_PREFIX, 'libexec', 'qpid_interop_test', 'shims')
+QPID_JMS_SHIM_VER = '0.1.0'
+
 
 class JmsMessageTypes(TestTypeMap):
     """
@@ -340,9 +342,10 @@
       with open(QIT_JMS_CLASSPATH_FILE, 'r') as classpath_file:
           QIT_JMS_CLASSPATH = classpath_file.read()
     else:
-      QIT_JMS_CLASSPATH = path.join(QIT_TEST_SHIM_HOME, 'qpid-jms', '*')
-    QPID_JMS_RECEIVER_SHIM = 'org.apache.qpid.interop_test.jms_messages_test.Receiver'
-    QPID_JMS_SENDER_SHIM = 'org.apache.qpid.interop_test.jms_messages_test.Sender'
+      QIT_JMS_CLASSPATH = path.join(QIT_TEST_SHIM_HOME, 'qpid-jms',
+                                    'qpid-interop-test-jms-shim-%s-jar-with-dependencies.jar' % QPID_JMS_SHIM_VER)
+    QPID_JMS_RECEIVER_SHIM = 'org.apache.qpid.qpid_interop_test.jms_messages_test.Receiver'
+    QPID_JMS_SENDER_SHIM = 'org.apache.qpid.qpid_interop_test.jms_messages_test.Sender'
 
     # SHIM_MAP contains an instance of each client language shim that is to be tested as a part of this test. For
     # every shim in this list, a test is dynamically constructed which tests it against itself as well as every
diff --git a/src/python/qpid_interop_test/shims.py b/src/python/qpid_interop_test/shims.py
index df36c4f..52716bb 100644
--- a/src/python/qpid_interop_test/shims.py
+++ b/src/python/qpid_interop_test/shims.py
@@ -210,11 +210,6 @@
     NAME = 'QpidJms'
     JMS_CLIENT = True
 
-    # Installed versions
-    # TODO: Automate this - it gets out of date quickly
-    # Maven works out all the deps, should use that
-    QPID_JMS_SHIM_VER = '0.1.0-SNAPSHOT'
-
     JAVA_HOME = getenv('JAVA_HOME', '/usr/bin') # Default only works in Linux
     JAVA_EXEC = path.join(JAVA_HOME, 'java')
 
diff --git a/utils/pom.xml b/utils/pom.xml
index 9367cfb..e3f86a0 100644
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.apache.qpid</groupId>
     <artifactId>qpid-interop-test-parent</artifactId>
-    <version>0.1.0-SNAPSHOT</version>
+    <version>0.1.0</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
