diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
index 6631590..152b73d 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Interaction.java
@@ -641,11 +641,6 @@
         return this;
     }
 
-    public Interaction flowNextIncomingIdFromLatestDelivery()
-    {
-        return flowNextIncomingId(_latestDeliveryId.add(UnsignedInteger.ONE));
-    }
-
     public Interaction flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
     {
         final Begin begin = getCachedResponse(Begin.class);
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/bindmapjms/TemporaryDestinationTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/bindmapjms/TemporaryDestinationTest.java
index 1dd63ea..bfa999a 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/bindmapjms/TemporaryDestinationTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/bindmapjms/TemporaryDestinationTest.java
@@ -20,10 +20,12 @@
 
 package org.apache.qpid.tests.protocol.v1_0.extensions.bindmapjms;
 
+import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.is;
+import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
 import java.util.Collections;
@@ -46,6 +48,7 @@
 import org.apache.qpid.server.protocol.v1_0.type.transport.Flow;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
+import org.apache.qpid.tests.protocol.Response;
 import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
@@ -100,6 +103,7 @@
                                                      .attachRole(Role.SENDER)
                                                      .attachTarget(target)
                                                      .attach().consumeResponse()
+                                                     .assertLatestResponse(this::assumeAttachResponse)
                                                      .getLatestResponse(Attach.class);
 
             assertThat(attachResponse.getSource(), is(notNullValue()));
@@ -151,6 +155,7 @@
                                                            .attachHandle(senderHandle)
                                                            .attachTarget(target)
                                                            .attach().consumeResponse()
+                                                           .assertLatestResponse(this::assumeAttachResponse)
                                                            .getLatestResponse(Attach.class);
 
             assertThat(senderAttachResponse.getSource(), is(notNullValue()));
@@ -211,6 +216,7 @@
                                                            .attachHandle(senderHandle)
                                                            .attachTarget(target)
                                                            .attach().consumeResponse()
+                                                           .assertLatestResponse(this::assumeAttachResponse)
                                                            .getLatestResponse(Attach.class);
 
             assertThat(senderAttachResponse.getSource(), is(notNullValue()));
@@ -250,6 +256,7 @@
                                                            .attachHandle(senderHandle)
                                                            .attachTarget(target)
                                                            .attach().consumeResponse()
+                                                           .assertLatestResponse(this::assumeAttachResponse)
                                                            .getLatestResponse(Attach.class);
 
             assertThat(senderAttachResponse.getSource(), is(notNullValue()));
@@ -305,6 +312,7 @@
                                                              .attachSource(source)
                                                              .attachHandle(receiverHandle)
                                                              .attach().consumeResponse()
+                                                             .assertLatestResponse(this::assumeAttachResponse)
                                                              .getLatestResponse(Attach.class);
 
             assertThat(receiverAttachResponse.getSource(), is(notNullValue()));
@@ -369,6 +377,7 @@
                                                              .attachSource(source)
                                                              .attachHandle(receiverHandle)
                                                              .attach().consumeResponse()
+                                                             .assertLatestResponse(this::assumeAttachResponse)
                                                              .getLatestResponse(Attach.class);
 
             assertThat(receiverAttachResponse.getSource(), is(notNullValue()));
@@ -410,6 +419,7 @@
                                                              .attachSource(source)
                                                              .attachHandle(receiverHandle)
                                                              .attach().consumeResponse()
+                                                             .assertLatestResponse(this::assumeAttachResponse)
                                                              .getLatestResponse(Attach.class);
 
             assertThat(receiverAttachResponse.getSource(), is(notNullValue()));
@@ -489,4 +499,10 @@
         source.setAddress(name);
         return source;
     }
+
+    private void assumeAttachResponse(Response<?> response)
+    {
+        assertThat(response, notNullValue());
+        assumeThat(response.getBody(), instanceOf(Attach.class));
+    }
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/SoleConnectionAsserts.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/SoleConnectionAsserts.java
index 298ab00..c6eb906 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/SoleConnectionAsserts.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/soleconn/SoleConnectionAsserts.java
@@ -26,19 +26,18 @@
 import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionEnforcementPolicy.CLOSE_EXISTING;
 import static org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionEnforcementPolicy.REFUSE_CONNECTION;
 import static org.hamcrest.CoreMatchers.anyOf;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasItemInArray;
-import static org.hamcrest.Matchers.is;
 import static org.hamcrest.collection.IsMapContaining.hasEntry;
 import static org.hamcrest.collection.IsMapContaining.hasKey;
 import static org.junit.Assume.assumeThat;
 
 import java.util.Collections;
 
-import org.hamcrest.Matchers;
 
 import org.apache.qpid.server.protocol.v1_0.type.Symbol;
 import org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionDetectionPolicy;
@@ -86,7 +85,7 @@
         assumeThat(open.getProperties(), is(notNullValue()));
         assumeThat(open.getProperties(),
                    anyOf(hasEntry(SOLE_CONNECTION_ENFORCEMENT_POLICY, REFUSE_CONNECTION.getValue()),
-                         is(not(Matchers.hasKey(SOLE_CONNECTION_ENFORCEMENT_POLICY)))));
+                         is(not(hasKey(SOLE_CONNECTION_ENFORCEMENT_POLICY)))));
     }
 
     static void assumeDetectionPolicyStrong(Open open)
@@ -100,14 +99,14 @@
     static void assertConnectionEstablishmentFailed(final Open open)
     {
         assertThat(open.getProperties(), is(notNullValue()));
-        assertThat(open.getProperties(), Matchers.hasKey(CONNECTION_ESTABLISHMENT_FAILED));
+        assertThat(open.getProperties(), hasKey(CONNECTION_ESTABLISHMENT_FAILED));
         assertThat(open.getProperties(), hasEntry(CONNECTION_ESTABLISHMENT_FAILED, true));
     }
 
     static void assumeConnectionEstablishmentFailed(final Open open)
     {
         assumeThat(open.getProperties(), is(notNullValue()));
-        assumeThat(open.getProperties(), Matchers.hasKey(CONNECTION_ESTABLISHMENT_FAILED));
+        assumeThat(open.getProperties(), hasKey(CONNECTION_ESTABLISHMENT_FAILED));
         assertThat(open.getProperties(), hasEntry(CONNECTION_ESTABLISHMENT_FAILED, true));
     }
 
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/DeleteOnCloseTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/DeleteOnCloseTest.java
index bec5067..63f914f 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/DeleteOnCloseTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/DeleteOnCloseTest.java
@@ -20,6 +20,7 @@
 
 package org.apache.qpid.tests.protocol.v1_0.messaging;
 
+import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
@@ -44,12 +45,13 @@
 import org.apache.qpid.server.protocol.v1_0.type.transport.Flow;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
-import org.apache.qpid.tests.utils.BrokerAdmin;
+import org.apache.qpid.tests.protocol.Response;
+import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
-import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
-import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.Utils;
+import org.apache.qpid.tests.utils.BrokerAdmin;
+import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 
 public class DeleteOnCloseTest extends BrokerAdminUsingTestBase
 {
@@ -79,6 +81,7 @@
                                                      .attachRole(Role.RECEIVER)
                                                      .attachSource(source)
                                                      .attach().consumeResponse()
+                                                     .assertLatestResponse(this::assumeAttach)
                                                      .getLatestResponse(Attach.class);
             assertThat(attachResponse.getSource(), is(notNullValue()));
             final String newTempQueueAddress = ((Source) attachResponse.getSource()).getAddress();
@@ -114,6 +117,7 @@
                                                      .attachRole(Role.SENDER)
                                                      .attachTarget(target)
                                                      .attach().consumeResponse()
+                                                     .assertLatestResponse(this::assumeAttach)
                                                      .getLatestResponse(Attach.class);
             assertThat(attachResponse.getTarget(), is(notNullValue()));
             final String newTempQueueAddress = ((Target) attachResponse.getTarget()).getAddress();
@@ -152,6 +156,7 @@
                                                      .attachRole(Role.RECEIVER)
                                                      .attachSource(source)
                                                      .attach().consumeResponse()
+                                                     .assertLatestResponse(this::assumeAttach)
                                                      .getLatestResponse(Attach.class);
             assertThat(attachResponse.getSource(), is(notNullValue()));
             final String newTempQueueAddress = ((Source) attachResponse.getSource()).getAddress();
@@ -196,6 +201,7 @@
                                                      .attachRole(Role.RECEIVER)
                                                      .attachSource(source)
                                                      .attach().consumeResponse()
+                                                     .assertLatestResponse(this::assumeAttach)
                                                      .getLatestResponse(Attach.class);
             assertThat(attachResponse.getSource(), is(notNullValue()));
             newTempQueueAddress = ((Source) attachResponse.getSource()).getAddress();
@@ -209,4 +215,10 @@
 
         assertThat(Utils.doesNodeExist(_brokerAddress, newTempQueueAddress), is(true));
     }
+
+    private void assumeAttach(final Response<?> response)
+    {
+        assertThat(response, notNullValue());
+        assumeThat(response.getBody(), instanceOf(Attach.class));
+    }
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MessageFormat.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MessageFormat.java
index 5539291..dfca049 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MessageFormat.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MessageFormat.java
@@ -67,26 +67,26 @@
             QpidByteBuffer[] payloads = Utils.splitPayload(getTestName(), 2);
 
             transport.newInteraction()
-                                                        .negotiateProtocol().consumeResponse()
-                                                        .open().consumeResponse(Open.class)
-                                                        .begin().consumeResponse(Begin.class)
-                                                        .attachRole(Role.SENDER)
-                                                        .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
-                                                        .attach().consumeResponse(Attach.class)
-                                                        .consumeResponse(Flow.class)
-                                                        .transferMore(true)
-                                                        .transferMessageFormat(UnsignedInteger.ZERO)
-                                                        .transferPayload(payloads[0])
-                                                        .transferSettled(true)
-                                                        .transfer()
-                                                        .consumeResponse(null, Flow.class, Disposition.class)
-                                                        .transferDeliveryTag(null)
-                                                        .transferDeliveryId(null)
-                                                        .transferMore(false)
-                                                        .transferMessageFormat(UnsignedInteger.ONE)
-                                                        .transferPayload(payloads[1])
-                                                        .transfer()
-                                                        .sync();
+                     .negotiateProtocol().consumeResponse()
+                     .open().consumeResponse(Open.class)
+                     .begin().consumeResponse(Begin.class)
+                     .attachRole(Role.SENDER)
+                     .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
+                     .attach().consumeResponse(Attach.class)
+                     .consumeResponse(Flow.class)
+                     .transferMore(true)
+                     .transferMessageFormat(UnsignedInteger.ZERO)
+                     .transferPayload(payloads[0])
+                     .transferSettled(true)
+                     .transfer()
+                     .consumeResponse(null, Flow.class, Disposition.class)
+                     .transferDeliveryTag(null)
+                     .transferDeliveryId(null)
+                     .transferMore(false)
+                     .transferMessageFormat(UnsignedInteger.ONE)
+                     .transferPayload(payloads[1])
+                     .transfer()
+                     .sync();
 
             for (final QpidByteBuffer payload : payloads)
             {
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MultiTransferTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MultiTransferTest.java
index da85c83..96920c6 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MultiTransferTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/MultiTransferTest.java
@@ -88,7 +88,6 @@
                                                  .begin().consumeResponse(Begin.class)
                                                  .attachRole(Role.SENDER)
                                                  .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
-                                                 .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
                                                  .attach().consumeResponse(Attach.class)
                                                  .consumeResponse(Flow.class)
                                                  .transferPayload(payloads[0])
@@ -135,7 +134,6 @@
                        .begin().consumeResponse(Begin.class)
                        .attachRole(Role.SENDER)
                        .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
-                       .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
                        .transferDeliveryId(deliveryId)
@@ -197,7 +195,6 @@
                        .begin().consumeResponse(Begin.class)
                        .attachRole(Role.SENDER)
                        .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
-                       .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
                        .transferPayload(payloads[0])
@@ -252,7 +249,6 @@
                        .attachHandle(linkHandle1)
                        .attachRole(Role.SENDER)
                        .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
-                       .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
@@ -260,7 +256,6 @@
                        .attachHandle(linkHandle2)
                        .attachRole(Role.SENDER)
                        .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
-                       .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
@@ -356,7 +351,6 @@
 
                        .attachRole(Role.SENDER)
                        .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
-                       .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
                        .attach().consumeResponse(Attach.class)
                        .consumeResponse(Flow.class)
 
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/OutcomeTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/OutcomeTest.java
index 2ea7dda..6fd1b58 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/OutcomeTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/OutcomeTest.java
@@ -21,8 +21,14 @@
 package org.apache.qpid.tests.protocol.v1_0.messaging;
 
 import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.emptyArray;
+import static org.hamcrest.Matchers.hasItemInArray;
+import static org.hamcrest.Matchers.nullValue;
+import static org.hamcrest.Matchers.oneOf;
+import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
 
@@ -30,10 +36,14 @@
 import org.junit.Test;
 
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
+import org.apache.qpid.server.protocol.v1_0.type.messaging.Accepted;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Modified;
+import org.apache.qpid.server.protocol.v1_0.type.messaging.Source;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Attach;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Begin;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Disposition;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Flow;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
@@ -72,6 +82,7 @@
                                                      .attachRole(Role.RECEIVER)
                                                      .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
                                                      .attach().consumeResponse(Attach.class)
+                                                     .assertLatestResponse(Attach.class, this::assumeModifiedSupportedBySource)
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
                                                      .flowLinkCredit(UnsignedInteger.ONE)
                                                      .flowHandleFromLinkHandle()
@@ -95,7 +106,7 @@
                        .flowLinkCredit(UnsignedInteger.valueOf(2))
                        .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
                        .flow()
-                       .receiveDelivery()
+                       .receiveDelivery(Flow.class)
                        .decodeLatestDelivery();
 
             Object secondDeliveryPayload = interaction.getDecodedLatestDelivery();
@@ -107,4 +118,51 @@
         assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(content1)));
         assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(content2)));
     }
+
+    @Test
+    @SpecificationTest(section = "3.5.3 Source",
+            description = "outcomes descriptors for the outcomes that can be chosen on this link\n"
+                          + "The values in this field are the symbolic descriptors of the outcomes that can be chosen"
+                          + " on this link. This field MAY be empty, indicating that the default-outcome will be"
+                          + " assumed for all message transfers (if the default-outcome is not set, and no outcomes"
+                          + " are provided, then the accepted outcome MUST be supported by the source)."
+                          + " When present, the values MUST be a symbolic descriptor of a valid outcome, e.g.,"
+                          + " “amqp:accepted:list”.")
+    public void transferMessageWithAttachSourceHavingExplicitlySetOutcomesToAccepted() throws Exception
+    {
+        try (FrameTransport transport = new FrameTransport(_brokerAddress).connect())
+        {
+            Interaction interaction = transport.newInteraction();
+            Disposition disposition = interaction.negotiateProtocol().consumeResponse()
+                                                 .open().consumeResponse(Open.class)
+                                                 .begin().consumeResponse(Begin.class)
+                                                 .attachRole(Role.SENDER)
+                                                 .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
+                                                 .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL)
+                                                 .attach().consumeResponse(Attach.class)
+                                                 .consumeResponse(Flow.class)
+                                                 .transferPayloadData(getTestName())
+                                                 .transfer()
+                                                 .consume(Disposition.class, Flow.class);
+
+            interaction.detachEndCloseUnconditionally();
+
+            assertThat(disposition.getFirst(), is(equalTo(UnsignedInteger.ZERO)));
+            assertThat(disposition.getLast(), oneOf(null, UnsignedInteger.ZERO));
+            assertThat(disposition.getSettled(), is(equalTo(true)));
+        }
+        assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(getTestName())));
+    }
+
+
+    private void assumeModifiedSupportedBySource(final Attach attach)
+    {
+        assumeThat(attach.getSource(), instanceOf(Source.class));
+        final Source source = (Source) attach.getSource();
+
+        if (!(source.getDefaultOutcome() instanceof Modified))
+        {
+            assumeThat(source.getOutcomes(), hasItemInArray(Modified.MODIFIED_SYMBOL));
+        }
+    }
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
index 792bf30..9d81ee7 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/messaging/TransferTest.java
@@ -113,10 +113,12 @@
                                            .open().consumeResponse(Open.class)
                                            .begin().consumeResponse(Begin.class)
                                            .attachRole(Role.SENDER)
+                                           .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
                                            .attach().consumeResponse(Attach.class)
                                            .consumeResponse(Flow.class)
                                            .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                                            .transferHandle(null)
+                                           .transferPayloadData(getTestName())
                                            .transfer()
                                            .consumeResponse()
                                            .getLatestResponse();
@@ -125,9 +127,10 @@
             assertThat(response.getBody(), is(notNullValue()));
             assertThat(response.getBody(), is(instanceOf(ErrorCarryingFrameBody.class)));
 
-            final Error error = ((ErrorCarryingFrameBody)response.getBody()).getError();
+            final Error error = ((ErrorCarryingFrameBody) response.getBody()).getError();
             assertThat(error, is(notNullValue()));
-            assertThat(error.getCondition(), anyOf(equalTo(AmqpError.DECODE_ERROR), equalTo(AmqpError.INVALID_FIELD)));
+            assertThat(error.getCondition(),
+                       oneOf(AmqpError.DECODE_ERROR, AmqpError.INVALID_FIELD, AmqpError.ILLEGAL_STATE));
         }
     }
 
@@ -143,10 +146,12 @@
                                            .open().consumeResponse(Open.class)
                                            .begin().consumeResponse(Begin.class)
                                            .attachRole(Role.SENDER)
+                                           .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
                                            .attach().consumeResponse(Attach.class)
                                            .consumeResponse(Flow.class)
                                            .assertLatestResponse(Flow.class, this::assumeSufficientCredits)
                                            .transferDeliveryId(null)
+                                           .transferPayloadData(getTestName())
                                            .transfer()
                                            .consumeResponse()
                                            .getLatestResponse();
@@ -347,11 +352,12 @@
 
             assertThat(response, is(notNullValue()));
             assertThat(response.getBody(), is(notNullValue()));
-            assertThat(response.getBody(), is(instanceOf(Detach.class)));
+            assertThat(response.getBody(), is(instanceOf(ErrorCarryingFrameBody.class)));
 
-            final Detach detach = (Detach) response.getBody();
-            Error error = detach.getError();
+            final ErrorCarryingFrameBody performative = (ErrorCarryingFrameBody) response.getBody();
+            final Error error = performative.getError();
             assertThat(error, is(notNullValue()));
+            assumeThat(error.getCondition(), is(not(AmqpError.NOT_IMPLEMENTED)));
             assertThat(error.getCondition(), is(equalTo(AmqpError.INVALID_FIELD)));
         }
     }
@@ -562,8 +568,7 @@
                        .dispositionRole(Role.RECEIVER)
                        .disposition();
 
-            // verify that no unexpected performative is received by closing
-            interaction.doCloseConnection();
+            interaction.detachEndCloseUnconditionally();
         }
     }
 
@@ -581,6 +586,7 @@
                                                      .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
                                                      .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                                                      .attach().consumeResponse()
+                                                     .assertLatestResponse(this::assumeAttach)
                                                      .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
                                                      .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
@@ -628,6 +634,7 @@
                                                      .attachSourceOutcomes(Accepted.ACCEPTED_SYMBOL, Rejected.REJECTED_SYMBOL)
                                                      .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                                                      .attach().consumeResponse()
+                                                     .assertLatestResponse(this::assumeAttach)
                                                      .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                                                      .flowIncomingWindow(UnsignedInteger.ONE)
                                                      .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
@@ -732,6 +739,7 @@
                        .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
                        .attachRcvSettleMode(ReceiverSettleMode.SECOND)
                        .attach().consumeResponse()
+                       .assertLatestResponse(this::assumeAttach)
                        .assertLatestResponse(Attach.class, this::assumeReceiverSettlesSecond)
                        .flowIncomingWindow(UnsignedInteger.ONE)
                        .flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
@@ -818,8 +826,7 @@
 
             assertThat(isSettled.get(), is(true));
 
-            // verify no unexpected performative received by closing the connection
-            interaction.doCloseConnection();
+            interaction.detachEndCloseUnconditionally();
         }
 
         Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, "test");
@@ -1137,7 +1144,7 @@
                        .dispositionLast(interaction.getLatestDeliveryId())
                        .dispositionState(new Accepted())
                        .disposition();
-            interaction.doCloseConnection();
+            interaction.detachEndCloseUnconditionally();
         }
 
         final String messageText = getTestName() + "_" + 4;
@@ -1266,4 +1273,11 @@
         assertThat(response, is(notNullValue()));
         assumeThat(response.getBody(), anyOf(instanceOf(Attach.class), instanceOf(Flow.class)));
     }
+
+    private void assumeAttach(final Response<?> response)
+    {
+        assertThat(response, notNullValue());
+        assumeThat(response.getBody(), is(instanceOf(Attach.class)));
+    }
+
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java
index 8467a51..bf6682f 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/ProtocolHeaderTest.java
@@ -22,6 +22,7 @@
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assume.assumeThat;
 
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java
index f0f46f4..f20b8c0 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java
@@ -28,8 +28,10 @@
 import static org.hamcrest.Matchers.greaterThan;
 import static org.hamcrest.Matchers.greaterThanOrEqualTo;
 import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.lessThan;
 import static org.hamcrest.Matchers.lessThanOrEqualTo;
 import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assume.assumeThat;
 
 import java.net.InetSocketAddress;
 
@@ -146,6 +148,7 @@
             final int timeout = peerIdleTimeOut == null || peerIdleTimeOut.intValue() == 0
                     ? idleTimeOut
                     : peerIdleTimeOut.intValue();
+            assumeThat(timeout, lessThan(30000));
             Thread.sleep(timeout);
             interaction.consumeResponse(EmptyResponse.class);
         }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java
index a170e7e..a6caac1 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/AttachTest.java
@@ -39,16 +39,15 @@
 import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Attach;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Begin;
-import org.apache.qpid.server.protocol.v1_0.type.transport.Close;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Detach;
 import org.apache.qpid.server.protocol.v1_0.type.transport.End;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Role;
 import org.apache.qpid.tests.protocol.Response;
+import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
 import org.apache.qpid.tests.protocol.v1_0.Interaction;
-import org.apache.qpid.tests.protocol.SpecificationTest;
 import org.apache.qpid.tests.utils.BrokerAdmin;
 import org.apache.qpid.tests.utils.BrokerAdminUsingTestBase;
 import org.apache.qpid.tests.utils.BrokerSpecific;
@@ -89,6 +88,7 @@
                           + "assigning it to an unused handle, and sending an attach frame.")
     public void successfulAttachAsSender() throws Exception
     {
+        getBrokerAdmin().createQueue(BrokerAdmin.TEST_QUEUE_NAME);
         final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
         try (FrameTransport transport = new FrameTransport(addr).connect())
         {
@@ -98,6 +98,7 @@
                                                    .begin().consumeResponse(Begin.class)
                                                    .attachRole(Role.SENDER)
                                                    .attachInitialDeliveryCount(UnsignedInteger.ZERO)
+                                                   .attachTargetAddress(BrokerAdmin.TEST_QUEUE_NAME)
                                                    .attach().consumeResponse()
                                                    .getLatestResponse(Attach.class);
             assertThat(responseAttach.getName(), is(notNullValue()));
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/FlowTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/FlowTest.java
index 1f9968b..747fc02 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/FlowTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/FlowTest.java
@@ -39,6 +39,7 @@
 import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Attach;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Begin;
+import org.apache.qpid.server.protocol.v1_0.type.transport.Detach;
 import org.apache.qpid.server.protocol.v1_0.type.transport.End;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Flow;
@@ -213,7 +214,6 @@
                                          .consumeResponse().getLatestResponse(Flow.class);
 
             assertThat(responseFlow.getHandle(), is(notNullValue()));
-            assertThat(responseFlow.getLinkCredit(), is(equalTo(UnsignedInteger.ZERO)));
             assertThat(responseFlow.getDrain(), is(equalTo(Boolean.TRUE)));
         }
     }
@@ -294,7 +294,6 @@
                                       .consumeResponse().getLatestResponse(Flow.class);
 
             assertThat(responseFlow.getHandle(), is(equalTo(remoteHandle)));
-            assertThat(responseFlow.getLinkCredit(), is(equalTo(UnsignedInteger.ZERO)));
             assertThat(responseFlow.getDrain(), is(equalTo(Boolean.TRUE)));
         }
     }
@@ -340,7 +339,7 @@
 
             Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, getTestName());
 
-            final Object receivedMessageContent = interaction.receiveDelivery()
+            final Object receivedMessageContent = interaction.receiveDelivery(Flow.class)
                                                              .decodeLatestDelivery()
                                                              .getDecodedLatestDelivery();
 
@@ -358,7 +357,6 @@
                                                  .consumeResponse().getLatestResponse(Flow.class);
 
             assertThat(responseFlow.getHandle(), is(equalTo(remoteHandle)));
-            assertThat(responseFlow.getLinkCredit(), is(equalTo(UnsignedInteger.ZERO)));
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
@@ -396,10 +394,6 @@
                                                .attachSourceAddress(BrokerAdmin.TEST_QUEUE_NAME)
                                                .attach().consumeResponse(Attach.class);
 
-            Attach remoteAttach = interaction.getLatestResponse(Attach.class);
-            UnsignedInteger remoteHandle = remoteAttach.getHandle();
-            assertThat(remoteHandle, is(notNullValue()));
-
             UnsignedInteger delta = UnsignedInteger.ONE;
             UnsignedInteger incomingWindow = UnsignedInteger.valueOf(3);
             Object receivedMessageContent1 = interaction.flowIncomingWindow(incomingWindow)
@@ -432,25 +426,15 @@
             assertThat(receivedMessageContent2, is(equalTo(contents[1])));
             UnsignedInteger secondDeliveryId = interaction.getLatestDeliveryId();
 
-            // send session flow with echo=true to verify that no message is delivered without issuing a credit
-            interaction.flowNextIncomingIdFromPeerLatestSessionBeginAndDeliveryCount()
-                       .flowIncomingWindow(incomingWindow)
-                       .flowLinkCredit(null)
-                       .flowHandle(null)
-                       .flowDeliveryCount(null)
-                       .flowEcho(Boolean.TRUE)
-                       .flowOutgoingWindow(UnsignedInteger.ZERO)
-                       .flowNextOutgoingId(UnsignedInteger.ZERO)
-                       .flow()
-                       .consumeResponse(null, Flow.class);
-
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
                        .dispositionFirst(firstDeliveryId)
                        .dispositionLast(secondDeliveryId)
                        .dispositionState(new Accepted())
-                       .disposition()
-                       .sync();
+                       .disposition();
+
+            // detach link and consume detach to verify that no transfer was delivered
+            interaction.detachClose(true).detach().consume(Detach.class, Flow.class);
         }
         assertThat(Utils.receiveMessage(addr, BrokerAdmin.TEST_QUEUE_NAME), is(equalTo(contents[2])));
     }
@@ -585,7 +569,6 @@
                                            .consumeResponse(Flow.class).getLatestResponse(Flow.class);
 
             assertThat(responseFlow.getHandle(), is(equalTo(remoteHandle)));
-            assertThat(responseFlow.getLinkCredit(), is(equalTo(UnsignedInteger.ZERO)));
 
             interaction.dispositionSettled(true)
                        .dispositionRole(Role.RECEIVER)
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
index b58185e..e8b6160 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/link/ResumeDeliveriesTest.java
@@ -486,7 +486,7 @@
                        .dispositionRole(Role.RECEIVER)
                        .disposition();
 
-            Detach detach = interaction.detach().consumeResponse().getLatestResponse(Detach.class);
+            Detach detach = interaction.detach().consume(Detach.class, Flow.class);
             assertThat(detach.getClosed(), anyOf(nullValue(), equalTo(false)));
 
             interaction.attachUnsettled(new HashMap<>())
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java
index a1ea481..e05de00 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/session/BeginTest.java
@@ -39,6 +39,7 @@
 import org.apache.qpid.server.protocol.v1_0.type.transport.Begin;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Close;
 import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
+import org.apache.qpid.server.protocol.v1_0.type.transport.End;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
 import org.apache.qpid.tests.protocol.Response;
@@ -93,12 +94,13 @@
                                            .sessionChannel(channel)
                                            .begin().consumeResponse()
                                            .getLatestResponse(Begin.class);
+
             assertThat(responseBegin.getRemoteChannel(), equalTo(channel));
             assertThat(responseBegin.getIncomingWindow(), is(instanceOf(UnsignedInteger.class)));
             assertThat(responseBegin.getOutgoingWindow(), is(instanceOf(UnsignedInteger.class)));
             assertThat(responseBegin.getNextOutgoingId(), is(instanceOf(UnsignedInteger.class)));
 
-            interaction.doCloseConnection();
+            interaction.end().consumeResponse(End.class).close().consumeResponse(Close.class);
         }
     }
 
