diff --git a/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java b/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java
index f5f2e2a..3780668 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java
@@ -36,7 +36,7 @@
 
     private static final List<byte[]> EMPTY_LIST = Collections.unmodifiableList(new ArrayList<byte[]>());
     private static final ByteBuffer EMPTY_BUFFER = ByteBuffer.wrap(new byte[0]);
-    private static final CompositeReadableBuffer EMPTY_SLICE = new CompositeReadableBuffer(true);
+    private static final CompositeReadableBuffer EMPTY_SLICE = new CompositeReadableBuffer(false);
     private static int UNSET_MARK = -1;
 
     private static final int SHORT_BYTES = 2;
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java b/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java
index 136f655..4daef3e 100644
--- a/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java
+++ b/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java
@@ -1940,7 +1940,42 @@
     }
 
     @Test
-    public void testSliceIgnoresAppends() {
+    public void testSliceWithNoRemainderRefusesAppends() {
+        CompositeReadableBuffer buffer = new CompositeReadableBuffer();
+        buffer.append(new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9});
+
+        // Empty slice at end of buffer
+        assertEquals(10, buffer.remaining());
+        buffer.position(10);
+        assertEquals(0, buffer.remaining());
+
+        CompositeReadableBuffer emptySlice = buffer.slice();
+        assertNotSame(buffer, emptySlice);
+        assertEquals(0, emptySlice.remaining());
+
+        try {
+            emptySlice.append(new byte[] { 10 });
+            fail("Should not be allowed to append to empty slice, must throw IllegalStateException");
+        } catch (IllegalStateException ise) {}
+
+        // Empty slice at start of buffer
+        buffer.position(0);
+        assertEquals(10, buffer.remaining());
+        buffer.limit(0);
+        assertEquals(0, buffer.remaining());
+
+        emptySlice = buffer.slice();
+        assertNotSame(buffer, emptySlice);
+        assertEquals(0, emptySlice.remaining());
+
+        try {
+            emptySlice.append(new byte[] { 10 });
+            fail("Should not be allowed to append to empty slice, must throw IllegalStateException");
+        } catch (IllegalStateException ise) {}
+    }
+
+    @Test
+    public void testSliceRefusesAppends() {
         CompositeReadableBuffer buffer = new CompositeReadableBuffer();
         buffer.append(new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9});
 
@@ -1950,7 +1985,7 @@
 
         try {
             slice.append(new byte[] { 10 });
-            fail("Should not be allowed to append to a slice, must throw ReadOnlyBufferException");
+            fail("Should not be allowed to append to a slice, must throw IllegalStateException");
         } catch (IllegalStateException ise) {}
     }
 
