diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Accepted.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Accepted.java
index d21caaa..ecf11b8 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Accepted.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Accepted.java
@@ -27,14 +27,12 @@
 import org.apache.qpid.proton.amqp.transport.DeliveryState;
 
 
-public final class Accepted
-      implements DeliveryState, Outcome
+public final class Accepted implements DeliveryState, Outcome
 {
     public static final Symbol DESCRIPTOR_SYMBOL = Symbol.valueOf("amqp:accepted:list");
 
     private static final Accepted INSTANCE = new Accepted();
 
-
     /**
      *  TODO should this (and other DeliveryStates) have a private constructor??
      */
@@ -52,4 +50,9 @@
     {
         return INSTANCE;
     }
+
+    @Override
+    public DeliveryStateType getType() {
+        return DeliveryStateType.Accepted;
+    }
 }
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/AmqpSequence.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/AmqpSequence.java
index 2a07613..53b11c6 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/AmqpSequence.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/AmqpSequence.java
@@ -25,8 +25,7 @@
 
 import java.util.List;
 
-public final class AmqpSequence
-      implements Section
+public final class AmqpSequence implements Section
 {
     private final List _value;
 
@@ -40,7 +39,6 @@
         return _value;
     }
 
-
     @Override
     public String toString()
     {
@@ -48,5 +46,9 @@
                _value +
                '}';
     }
+
+    @Override
+    public SectionType getType() {
+        return SectionType.AmqpSequence;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/AmqpValue.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/AmqpValue.java
index d6ae49e..9e99f51 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/AmqpValue.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/AmqpValue.java
@@ -23,8 +23,7 @@
 
 package org.apache.qpid.proton.amqp.messaging;
 
-public final class AmqpValue
-      implements  Section
+public final class AmqpValue implements Section
 {
     private final Object _value;
 
@@ -43,5 +42,9 @@
     {
         return "AmqpValue{" + _value + '}';
     }
+
+    @Override
+    public SectionType getType() {
+        return SectionType.AmqpValue;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/ApplicationProperties.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/ApplicationProperties.java
index 80ec90b..8518f27 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/ApplicationProperties.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/ApplicationProperties.java
@@ -25,8 +25,7 @@
 
 import java.util.Map;
 
-public final class ApplicationProperties
-      implements Section
+public final class ApplicationProperties implements Section
 {
     private final Map<String, Object> _value;
 
@@ -45,5 +44,9 @@
     {
         return "ApplicationProperties{" + _value + '}';
     }
+
+    @Override
+    public SectionType getType() {
+        return SectionType.ApplicationProperties;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Data.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Data.java
index c946d14..365a4bb 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Data.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Data.java
@@ -25,8 +25,7 @@
 
 import org.apache.qpid.proton.amqp.Binary;
 
-public final class Data
-      implements Section
+public final class Data implements Section
 {
     private final Binary _value;
 
@@ -45,5 +44,9 @@
     {
         return "Data{" + _value + '}';
     }
+
+    @Override
+    public SectionType getType() {
+        return SectionType.Data;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/DeliveryAnnotations.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/DeliveryAnnotations.java
index 9ea5504..b430ca3 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/DeliveryAnnotations.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/DeliveryAnnotations.java
@@ -46,5 +46,9 @@
     {
         return "DeliveryAnnotations{" + _value + '}';
     }
+
+    @Override
+    public SectionType getType() {
+        return SectionType.DeliveryAnnotations;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Footer.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Footer.java
index 4e9a789..7e2de55 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Footer.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Footer.java
@@ -25,9 +25,7 @@
 
 import java.util.Map;
 
-
-public final class Footer
-      implements  Section
+public final class Footer implements  Section
 {
     private final Map _value;
 
@@ -46,5 +44,9 @@
     {
         return "Footer{" + _value + '}';
     }
+
+    @Override
+    public SectionType getType() {
+        return SectionType.Footer;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Header.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Header.java
index 6f67202..71d1c51 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Header.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Header.java
@@ -26,11 +26,8 @@
 import org.apache.qpid.proton.amqp.UnsignedByte;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
 
-
-public final class Header
-      implements Section
+public final class Header implements Section
 {
-
     private Boolean _durable;
     private UnsignedByte _priority;
     private UnsignedInteger _ttl;
@@ -112,4 +109,9 @@
                ", deliveryCount=" + _deliveryCount +
                '}';
     }
+
+    @Override
+    public SectionType getType() {
+        return SectionType.Header;
+    }
 }
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/MessageAnnotations.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/MessageAnnotations.java
index 9bf82d6..ddb5af9 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/MessageAnnotations.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/MessageAnnotations.java
@@ -23,14 +23,13 @@
 
 package org.apache.qpid.proton.amqp.messaging;
 
-import org.apache.qpid.proton.amqp.Symbol;
-
 import java.util.Map;
 
+import org.apache.qpid.proton.amqp.Symbol;
+
 
 public final class MessageAnnotations implements Section
 {
-
     private final Map<Symbol, Object> _value;
 
     public MessageAnnotations(Map<Symbol, Object> value)
@@ -48,5 +47,9 @@
     {
         return "MessageAnnotations{" + _value + '}';
     }
+
+    @Override
+    public SectionType getType() {
+        return SectionType.MessageAnnotations;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Modified.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Modified.java
index 9b9a3a3..4948c1d 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Modified.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Modified.java
@@ -26,14 +26,13 @@
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.transport.DeliveryState;
 
-public final class Modified
-      implements DeliveryState, Outcome
+public final class Modified implements DeliveryState, Outcome
 {
     public static final Symbol DESCRIPTOR_SYMBOL = Symbol.valueOf("amqp:modified:list");
 
     private Boolean _deliveryFailed;
     private Boolean _undeliverableHere;
-    private Map _messageAnnotations;
+    private Map<Symbol, Object> _messageAnnotations;
 
     public Boolean getDeliveryFailed()
     {
@@ -74,5 +73,9 @@
                ", messageAnnotations=" + _messageAnnotations +
                '}';
     }
+
+    @Override
+    public DeliveryStateType getType() {
+        return DeliveryStateType.Modified;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Properties.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Properties.java
index dbe8c31..d084cdd 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Properties.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Properties.java
@@ -29,11 +29,8 @@
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.UnsignedInteger;
 
-
-public final class Properties
-      implements  Section
+public final class Properties implements Section
 {
-
     private Object _messageId;
     private Binary _userId;
     private String _to;
@@ -218,4 +215,9 @@
                ", replyToGroupId='" + _replyToGroupId + '\'' +
                '}';
     }
+
+    @Override
+    public SectionType getType() {
+        return SectionType.Properties;
+    }
 }
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Received.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Received.java
index 796934b..ddbcf24 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Received.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Received.java
@@ -27,12 +27,8 @@
 import org.apache.qpid.proton.amqp.UnsignedLong;
 import org.apache.qpid.proton.amqp.transport.DeliveryState;
 
-
-
-public final class Received
-      implements DeliveryState
+public final class Received implements DeliveryState
 {
-
     private UnsignedInteger _sectionNumber;
     private UnsignedLong _sectionOffset;
 
@@ -56,7 +52,6 @@
         _sectionOffset = sectionOffset;
     }
 
-
     @Override
     public String toString()
     {
@@ -65,5 +60,9 @@
                ", sectionOffset=" + _sectionOffset +
                '}';
     }
+
+    @Override
+    public DeliveryStateType getType() {
+        return DeliveryStateType.Received;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Rejected.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Rejected.java
index 3ea3a5b..cd181b7 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Rejected.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Rejected.java
@@ -27,9 +27,7 @@
 import org.apache.qpid.proton.amqp.transport.DeliveryState;
 import org.apache.qpid.proton.amqp.transport.ErrorCondition;
 
-
-public final class Rejected
-      implements DeliveryState, Outcome
+public final class Rejected implements DeliveryState, Outcome
 {
     public static final Symbol DESCRIPTOR_SYMBOL = Symbol.valueOf("amqp:rejected:list");
 
@@ -47,10 +45,9 @@
 
     public int size()
     {
-        return _error != null 
-                  ? 1 
-                  : 0;        
-
+        return _error != null
+                  ? 1
+                  : 0;
     }
 
     @Override
@@ -60,5 +57,9 @@
                "error=" + _error +
                '}';
     }
+
+    @Override
+    public DeliveryStateType getType() {
+        return DeliveryStateType.Rejected;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Released.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Released.java
index c67917f..2227e35 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Released.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Released.java
@@ -26,9 +26,7 @@
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.amqp.transport.DeliveryState;
 
-
-public final class Released
-      implements DeliveryState, Outcome
+public final class Released implements DeliveryState, Outcome
 {
     public static final Symbol DESCRIPTOR_SYMBOL = Symbol.valueOf("amqp:released:list");
 
@@ -44,5 +42,9 @@
     {
         return INSTANCE;
     }
+
+    @Override
+    public DeliveryStateType getType() {
+        return DeliveryStateType.Released;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Section.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Section.java
index 8af3595..84a0811 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Section.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/messaging/Section.java
@@ -20,10 +20,9 @@
  */
 package org.apache.qpid.proton.amqp.messaging;
 
-public interface Section
-{
-    enum SectionType
-    {
+public interface Section {
+
+    enum SectionType {
         AmqpSequence,
         AmqpValue,
         ApplicationProperties,
@@ -34,4 +33,10 @@
         MessageAnnotations,
         Properties
     }
+
+    /**
+     * @return the {@link SectionType} that describes this instance.
+     */
+    SectionType getType();
+
 }
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/transaction/Declared.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/transaction/Declared.java
index e049cd5..e56f974 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/transaction/Declared.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/transaction/Declared.java
@@ -29,8 +29,7 @@
 import org.apache.qpid.proton.amqp.transport.DeliveryState;
 
 
-public final class Declared
-      implements DeliveryState, Outcome
+public final class Declared implements DeliveryState, Outcome
 {
     public static final Symbol DESCRIPTOR_SYMBOL = Symbol.valueOf("amqp:declared:list");
 
@@ -58,5 +57,9 @@
                "txnId=" + _txnId +
                '}';
     }
+
+    @Override
+    public DeliveryStateType getType() {
+        return DeliveryStateType.Declared;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/transaction/TransactionalState.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/transaction/TransactionalState.java
index 313d846..61e7269 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/transaction/TransactionalState.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/transaction/TransactionalState.java
@@ -24,13 +24,11 @@
 package org.apache.qpid.proton.amqp.transaction;
 
 import org.apache.qpid.proton.amqp.Binary;
-import org.apache.qpid.proton.amqp.transport.DeliveryState;
 import org.apache.qpid.proton.amqp.messaging.Outcome;
+import org.apache.qpid.proton.amqp.transport.DeliveryState;
 
-public final class TransactionalState
-      implements DeliveryState
+public final class TransactionalState implements DeliveryState
 {
-
     private Binary _txnId;
     private Outcome _outcome;
 
@@ -67,5 +65,9 @@
                ", outcome=" + _outcome +
                '}';
     }
+
+    @Override
+    public DeliveryStateType getType() {
+        return DeliveryStateType.Transactional;
+    }
 }
-  
\ No newline at end of file
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/amqp/transport/DeliveryState.java b/proton-j/src/main/java/org/apache/qpid/proton/amqp/transport/DeliveryState.java
index 4f3be66..95b2709 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/amqp/transport/DeliveryState.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/amqp/transport/DeliveryState.java
@@ -29,8 +29,7 @@
  */
 public interface DeliveryState
 {
-    enum DeliveryStateType
-    {
+    enum DeliveryStateType {
         Accepted,
         Declared,
         Modified,
@@ -39,4 +38,10 @@
         Released,
         Transactional
     }
+
+    /**
+     * @return the {@link DeliveryStateType} that this instance represents.
+     */
+    DeliveryStateType getType();
+
 }
