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 57d90d2..c0ccf92 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
@@ -1282,4 +1282,16 @@
         assertion.accept(latestResponse);
         return this;
     }
+
+    public void detachEndCloseUnconditionally() throws Exception
+    {
+        detachClose(true).detach().end().close().sync();
+    }
+
+    public Interaction closeUnconditionally() throws Exception
+    {
+        close().sync();
+        return this;
+    }
+
 }
diff --git a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Utils.java b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Utils.java
index 36bc8a7..cb55d7f 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Utils.java
+++ b/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/Utils.java
@@ -99,10 +99,7 @@
                        .dispositionLast(interaction.getLatestDeliveryId())
                        .dispositionState(new Accepted())
                        .disposition()
-                       .detachClose(true)
-                       .detach().consumeResponse(Detach.class)
-                       .end().consumeResponse(End.class)
-                       .doCloseConnection();
+                       .detachEndCloseUnconditionally();
             return interaction.getDecodedLatestDelivery();
         }
     }
@@ -178,10 +175,7 @@
                                .sync();
                     tag++;
                 }
-                interaction.detachClose(true)
-                    .detach().consumeResponse(Detach.class)
-                    .end().consumeResponse(End.class)
-                    .doCloseConnection();
+                interaction.detachEndCloseUnconditionally();
             }
         }
     }
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/DecodeErrorTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/DecodeErrorTest.java
index c0aaf45..d3d925c 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/DecodeErrorTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/DecodeErrorTest.java
@@ -106,6 +106,7 @@
                            .transfer();
             }
 
+            interaction.closeUnconditionally();
         }
 
         final String validMessage = getTestName() + "_2";
@@ -132,6 +133,7 @@
                                                         .attachSource(source)
                                                         .attachRole(Role.SENDER)
                                                         .attach().consumeResponse()
+                                                        .closeUnconditionally()
                                                         .getLatestResponse();
 
             assertThat(latestResponse, is(notNullValue()));
@@ -165,6 +167,7 @@
                                                         .attachTarget(target)
                                                         .attachRole(Role.SENDER)
                                                         .attach().consumeResponse()
+                                                        .closeUnconditionally()
                                                         .getLatestResponse();
 
             assertThat(latestResponse, is(notNullValue()));
diff --git a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
index 10a700c..4748f10 100644
--- a/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
+++ b/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/extensions/anonymousterminus/AnonymousTerminusTest.java
@@ -106,7 +106,7 @@
                        .transferSettled(Boolean.TRUE)
                        .transferDeliveryTag(_deliveryTag)
                        .transfer()
-                       .sync();
+                       .detachEndCloseUnconditionally();
 
             assertThat(Utils.receiveMessage(_brokerAddress, BrokerAdmin.TEST_QUEUE_NAME),
                        is(equalTo(getTestName())));
@@ -267,7 +267,8 @@
                        .transferDeliveryTag(_deliveryTag)
                        .transferTransactionalStateFromCurrentTransaction()
                        .transferSettled(Boolean.TRUE)
-                       .transfer().txnDischarge(false);
+                       .transfer().txnDischarge(false)
+                       .detachEndCloseUnconditionally();
 
             assertThat(interaction.getCoordinatorLatestDeliveryState(), is(instanceOf(Accepted.class)));
 
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 766afe5..da85c83 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
@@ -106,6 +106,9 @@
             {
                 payload.dispose();
             }
+
+            interaction.detachEndCloseUnconditionally();
+
             assertThat(disposition.getFirst(), is(equalTo(deliveryId)));
             assertThat(disposition.getLast(), oneOf(null, deliveryId));
             assertThat(disposition.getSettled(), is(equalTo(true)));
@@ -165,6 +168,8 @@
             }
 
             Disposition disposition = interaction.consume(Disposition.class, Flow.class);
+            interaction.detachEndCloseUnconditionally();
+
             assertThat(disposition.getFirst(), is(equalTo(deliveryId)));
             assertThat(disposition.getLast(), oneOf(null, deliveryId));
             assertThat(disposition.getSettled(), is(equalTo(true)));
@@ -210,6 +215,8 @@
             {
                 payload.dispose();
             }
+
+            interaction.detachEndCloseUnconditionally();
         }
         String secondMessage = getTestName() + "_2";
         Utils.putMessageOnQueue(getBrokerAdmin(), BrokerAdmin.TEST_QUEUE_NAME, secondMessage);
@@ -309,6 +316,8 @@
                 assertThat(disposition.getState(), is(instanceOf(Accepted.class)));
             }
 
+            interaction.detachEndCloseUnconditionally();
+
             assertThat("Unexpected number of dispositions", dispositionMap.size(), equalTo(2));
             assertThat(dispositionMap.containsKey(deliverId1), is(true));
             assertThat(dispositionMap.containsKey(deliveryId2), is(true));
@@ -387,6 +396,7 @@
                 payload.dispose();
             }
 
+            interaction.closeUnconditionally();
         }
 
         final String controlMessage = getTestName() + "_Control";
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 6332ce4..7b42edb 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
@@ -927,7 +927,7 @@
                        .transfer()
                        .sync();
 
-            interaction.doCloseConnection();
+            interaction.closeUnconditionally();
 
         }
         assertTestQueueMessages(contents);
