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 388d140..5ab0348 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
@@ -103,7 +103,7 @@
     @Override
     public int arrayOffset() {
         if (hasArray()) {
-            return currentOffset;
+            return currentOffset - position;
         }
 
         throw new UnsupportedOperationException("Buffer not backed by a single array");
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 298d01c..99a0ced 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
@@ -989,6 +989,63 @@
         }
     }
 
+    //----- Test arrayOffset method ------------------------------------------//
+
+    @Test
+    public void testArrayOffsetIsZeroRegardlessOfPositionOnNonSlicedBuffer() {
+        CompositeReadableBuffer buffer = new CompositeReadableBuffer();
+
+        byte[] data = new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+
+        buffer.append(data);
+
+        assertTrue(buffer.hasArray());
+        assertEquals(0, buffer.arrayOffset());
+
+        buffer.position(1);
+
+        assertEquals(0, buffer.arrayOffset());
+
+        buffer.position(buffer.limit());
+
+        assertEquals(0, buffer.arrayOffset());
+
+        buffer.position(0);
+
+        assertEquals(0, buffer.arrayOffset());
+    }
+
+    @Test
+    public void testArrayOffsetIsFixedOnSliceRegardlessOfPosition() {
+        CompositeReadableBuffer buffer = new CompositeReadableBuffer();
+
+        byte[] data = new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
+
+        buffer.append(data);
+
+        assertTrue(buffer.hasArray());
+        assertEquals(0, buffer.arrayOffset());
+
+        buffer.position(1);
+        ReadableBuffer slice = buffer.slice();
+
+        assertEquals(1, slice.arrayOffset());
+
+        slice.position(slice.limit());
+
+        assertEquals(1, slice.arrayOffset());
+
+        slice.position(0);
+
+        assertEquals(1, slice.arrayOffset());
+
+        slice.position(1);
+
+        ReadableBuffer anotherSlice = slice.slice();
+
+        assertEquals(2, anotherSlice.arrayOffset());
+    }
+
     //----- Test appending data to the buffer --------------------------------//
 
     @Test
