This closes #32
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 3aec96c..abbb40b 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
@@ -213,6 +213,7 @@
                      (int)(currentArray[currentOffset++] & 0xFF) << 16 |
                      (int)(currentArray[currentOffset++] & 0xFF) << 8 |
                      (int)(currentArray[currentOffset++] & 0xFF) << 0;
+            maybeMoveToNextArray();
         } else {
             for (int i = INT_BYTES - 1; i >= 0; --i) {
                 result |= (int)(currentArray[currentOffset++] & 0xFF) << (i * Byte.SIZE);
@@ -242,6 +243,7 @@
                      (long)(currentArray[currentOffset++] & 0xFF) << 16 |
                      (long)(currentArray[currentOffset++] & 0xFF) << 8 |
                      (long)(currentArray[currentOffset++] & 0xFF) << 0;
+            maybeMoveToNextArray();
         } else {
             for (int i = LONG_BYTES - 1; i >= 0; --i) {
                 result |= (long)(currentArray[currentOffset++] & 0xFF) << (i * Byte.SIZE);
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 28d5d17..9dc5c1b 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
@@ -3027,6 +3027,31 @@
     }
 
     @Test
+    public void testPositionMovedOnArrayBounderies() {
+        CompositeReadableBuffer buffer = new CompositeReadableBuffer();
+
+        buffer.append(new byte[] { 1, 2, 3, 4 });
+        buffer.append(new byte[] { 5, 6 });
+        buffer.append(new byte[] { 7, 8, 9, 10, 11, 12, 13, 14 });
+        buffer.append(new byte[] { 15 });
+
+        buffer.getInt();
+        assertEquals(5, buffer.get(4));
+        buffer.get();
+        buffer.get();
+        buffer.getLong();
+        assertEquals(15, buffer.get(14));
+        assertEquals(15, buffer.get(14));
+
+        try {
+            buffer.get(15);
+        } catch (IndexOutOfBoundsException aiobe) {}
+
+        buffer.position(4);
+        assertEquals(5, buffer.get(4));
+    }
+
+    @Test
     public void testSliceRefusesAppends() {
         CompositeReadableBuffer buffer = new CompositeReadableBuffer();
         buffer.append(new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9});