From Steve Huston: add support for AMQP 0-10.
[obnox/wireshark/wip.git] / epan / dissectors / packet-amqp.c
index 1d06064165b83fd6d25792bb4c064e1021bb1517..247d97b481a68a3a7f6f22ee1ebb575930e14e31 100644 (file)
@@ -1,8 +1,9 @@
 /* packet-amqp.c
  *
- * AMQP v0-9 Wireshark dissector plug-in
+ * AMQP v0-9, 0-10 Wireshark dissector plug-in
  *
- * Author: Martin Sustrik <sustrik@imatix.com>
+ * Author: Martin Sustrik <sustrik@imatix.com> (AMQP 0-9)
+ * Author: Steve Huston <shuston@riverace.com> (extended for AMQP 0-10)
  *
  * Copyright (c) 1996-2007 iMatix Corporation
  *
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
+/*
+ * See
+ *
+ *     http://www.amqp.org/confluence/display/AMQP/AMQP+Specification
+ *
+ * for specifications for various versions of the AMQP protocol.
+ */
+
 #ifdef HAVE_CONFIG_H
 #    include "config.h"
 #endif
-
 #include <gmodule.h>
 #include <glib.h>
+#include <epan/exceptions.h>
 #include <epan/packet.h>
+#include <epan/expert.h>
 #include <epan/emem.h>
 #include <epan/dissectors/packet-tcp.h>
+#include <epan/tfs.h>
 
 /*  Generic data  */
 
@@ -47,509 +58,1036 @@ static int amqp_port = 5672;
     int tmp;\
     tmp = offset;\
     offset += (addend);\
-    DISSECTOR_ASSERT(offset <= bound);\
-}
-
-#define AMQP_FRAME_TYPE_METHOD                                    1
-#define AMQP_FRAME_TYPE_CONTENT_HEADER                            2
-#define AMQP_FRAME_TYPE_CONTENT_BODY                              3
-#define AMQP_FRAME_TYPE_OOB_METHOD                                4
-#define AMQP_FRAME_TYPE_OOB_CONTENT_HEADER                        5
-#define AMQP_FRAME_TYPE_OOB_CONTENT_BODY                          6
-#define AMQP_FRAME_TYPE_TRACE                                     7
-#define AMQP_FRAME_TYPE_HEARTBEAT                                 8
-
-#define AMQP_CLASS_CONNECTION                                     10
-#define AMQP_CLASS_CHANNEL                                        20
-#define AMQP_CLASS_ACCESS                                         30
-#define AMQP_CLASS_EXCHANGE                                       40
-#define AMQP_CLASS_QUEUE                                          50
-#define AMQP_CLASS_BASIC                                          60
-#define AMQP_CLASS_FILE                                           70
-#define AMQP_CLASS_STREAM                                         80
-#define AMQP_CLASS_TX                                             90
-#define AMQP_CLASS_DTX                                            100
-#define AMQP_CLASS_TUNNEL                                         110
-
-#define AMQP_METHOD_CONNECTION_START                              10
-#define AMQP_METHOD_CONNECTION_START_OK                           11
-#define AMQP_METHOD_CONNECTION_SECURE                             20
-#define AMQP_METHOD_CONNECTION_SECURE_OK                          21
-#define AMQP_METHOD_CONNECTION_TUNE                               30
-#define AMQP_METHOD_CONNECTION_TUNE_OK                            31
-#define AMQP_METHOD_CONNECTION_OPEN                               40
-#define AMQP_METHOD_CONNECTION_OPEN_OK                            41
-#define AMQP_METHOD_CONNECTION_REDIRECT                           42
-#define AMQP_METHOD_CONNECTION_CLOSE                              50
-#define AMQP_METHOD_CONNECTION_CLOSE_OK                           51
-
-#define AMQP_METHOD_CHANNEL_OPEN                                  10
-#define AMQP_METHOD_CHANNEL_OPEN_OK                               11
-#define AMQP_METHOD_CHANNEL_FLOW                                  20
-#define AMQP_METHOD_CHANNEL_FLOW_OK                               21
-#define AMQP_METHOD_CHANNEL_CLOSE                                 40
-#define AMQP_METHOD_CHANNEL_CLOSE_OK                              41
-#define AMQP_METHOD_CHANNEL_RESUME                                50
-#define AMQP_METHOD_CHANNEL_PING                                  60
-#define AMQP_METHOD_CHANNEL_PONG                                  70
-#define AMQP_METHOD_CHANNEL_OK                                    80
-
-#define AMQP_METHOD_ACCESS_REQUEST                                10
-#define AMQP_METHOD_ACCESS_REQUEST_OK                             11
-
-#define AMQP_METHOD_EXCHANGE_DECLARE                              10
-#define AMQP_METHOD_EXCHANGE_DECLARE_OK                           11
-#define AMQP_METHOD_EXCHANGE_DELETE                               20
-#define AMQP_METHOD_EXCHANGE_DELETE_OK                            21
-
-#define AMQP_METHOD_QUEUE_DECLARE                                 10
-#define AMQP_METHOD_QUEUE_DECLARE_OK                              11
-#define AMQP_METHOD_QUEUE_BIND                                    20
-#define AMQP_METHOD_QUEUE_BIND_OK                                 21
-#define AMQP_METHOD_QUEUE_UNBIND                                  50
-#define AMQP_METHOD_QUEUE_UNBIND_OK                               51
-#define AMQP_METHOD_QUEUE_PURGE                                   30
-#define AMQP_METHOD_QUEUE_PURGE_OK                                31
-#define AMQP_METHOD_QUEUE_DELETE                                  40
-#define AMQP_METHOD_QUEUE_DELETE_OK                               41
-
-#define AMQP_METHOD_BASIC_QOS                                     10
-#define AMQP_METHOD_BASIC_QOS_OK                                  11
-#define AMQP_METHOD_BASIC_CONSUME                                 20
-#define AMQP_METHOD_BASIC_CONSUME_OK                              21
-#define AMQP_METHOD_BASIC_CANCEL                                  30
-#define AMQP_METHOD_BASIC_CANCEL_OK                               31
-#define AMQP_METHOD_BASIC_PUBLISH                                 40
-#define AMQP_METHOD_BASIC_RETURN                                  50
-#define AMQP_METHOD_BASIC_DELIVER                                 60
-#define AMQP_METHOD_BASIC_GET                                     70
-#define AMQP_METHOD_BASIC_GET_OK                                  71
-#define AMQP_METHOD_BASIC_GET_EMPTY                               72
-#define AMQP_METHOD_BASIC_ACK                                     80
-#define AMQP_METHOD_BASIC_REJECT                                  90
-#define AMQP_METHOD_BASIC_RECOVER                                 100
-
-#define AMQP_METHOD_FILE_QOS                                      10
-#define AMQP_METHOD_FILE_QOS_OK                                   11
-#define AMQP_METHOD_FILE_CONSUME                                  20
-#define AMQP_METHOD_FILE_CONSUME_OK                               21
-#define AMQP_METHOD_FILE_CANCEL                                   30
-#define AMQP_METHOD_FILE_CANCEL_OK                                31
-#define AMQP_METHOD_FILE_OPEN                                     40
-#define AMQP_METHOD_FILE_OPEN_OK                                  41
-#define AMQP_METHOD_FILE_STAGE                                    50
-#define AMQP_METHOD_FILE_PUBLISH                                  60
-#define AMQP_METHOD_FILE_RETURN                                   70
-#define AMQP_METHOD_FILE_DELIVER                                  80
-#define AMQP_METHOD_FILE_ACK                                      90
-#define AMQP_METHOD_FILE_REJECT                                   100
-
-#define AMQP_METHOD_STREAM_QOS                                    10
-#define AMQP_METHOD_STREAM_QOS_OK                                 11
-#define AMQP_METHOD_STREAM_CONSUME                                20
-#define AMQP_METHOD_STREAM_CONSUME_OK                             21
-#define AMQP_METHOD_STREAM_CANCEL                                 30
-#define AMQP_METHOD_STREAM_CANCEL_OK                              31
-#define AMQP_METHOD_STREAM_PUBLISH                                40
-#define AMQP_METHOD_STREAM_RETURN                                 50
-#define AMQP_METHOD_STREAM_DELIVER                                60
-
-#define AMQP_METHOD_TX_SELECT                                     10
-#define AMQP_METHOD_TX_SELECT_OK                                  11
-#define AMQP_METHOD_TX_COMMIT                                     20
-#define AMQP_METHOD_TX_COMMIT_OK                                  21
-#define AMQP_METHOD_TX_ROLLBACK                                   30
-#define AMQP_METHOD_TX_ROLLBACK_OK                                31
-
-#define AMQP_METHOD_DTX_SELECT                                    10
-#define AMQP_METHOD_DTX_SELECT_OK                                 11
-#define AMQP_METHOD_DTX_START                                     20
-#define AMQP_METHOD_DTX_START_OK                                  21
-
-#define AMQP_METHOD_TUNNEL_REQUEST                                10
+    THROW_ON((offset > bound), ReportedBoundsError);  \
+}
+
+/*
+ * This dissector handles AMQP 0-9 and 0-10. The conversation structure
+ * contains the version being run - it's only really reliably detected at
+ * protocol init. If this dissector starts in the middle of a conversation
+ * it will try to figure it out, but conversation start is the best.
+ */
+
+/* #define AMQP_V0_8           1 */
+#define AMQP_V0_9           2
+/* #define AMQP_V0_91          3 */
+#define AMQP_V0_10          4
+typedef struct {
+    guint8 version;
+} amqp_conv;
+
+/* 0-9 defines */
+
+#define AMQP_0_9_FRAME_TYPE_METHOD                                    1
+#define AMQP_0_9_FRAME_TYPE_CONTENT_HEADER                            2
+#define AMQP_0_9_FRAME_TYPE_CONTENT_BODY                              3
+#define AMQP_0_9_FRAME_TYPE_OOB_METHOD                                4
+#define AMQP_0_9_FRAME_TYPE_OOB_CONTENT_HEADER                        5
+#define AMQP_0_9_FRAME_TYPE_OOB_CONTENT_BODY                          6
+#define AMQP_0_9_FRAME_TYPE_TRACE                                     7
+#define AMQP_0_9_FRAME_TYPE_HEARTBEAT                                 8
+
+#define AMQP_0_9_CLASS_CONNECTION                                     10
+#define AMQP_0_9_CLASS_CHANNEL                                        20
+#define AMQP_0_9_CLASS_ACCESS                                         30
+#define AMQP_0_9_CLASS_EXCHANGE                                       40
+#define AMQP_0_9_CLASS_QUEUE                                          50
+#define AMQP_0_9_CLASS_BASIC                                          60
+#define AMQP_0_9_CLASS_FILE                                           70
+#define AMQP_0_9_CLASS_STREAM                                         80
+#define AMQP_0_9_CLASS_TX                                             90
+#define AMQP_0_9_CLASS_DTX                                            100
+#define AMQP_0_9_CLASS_TUNNEL                                         110
+
+#define AMQP_0_9_METHOD_CONNECTION_START                              10
+#define AMQP_0_9_METHOD_CONNECTION_START_OK                           11
+#define AMQP_0_9_METHOD_CONNECTION_SECURE                             20
+#define AMQP_0_9_METHOD_CONNECTION_SECURE_OK                          21
+#define AMQP_0_9_METHOD_CONNECTION_TUNE                               30
+#define AMQP_0_9_METHOD_CONNECTION_TUNE_OK                            31
+#define AMQP_0_9_METHOD_CONNECTION_OPEN                               40
+#define AMQP_0_9_METHOD_CONNECTION_OPEN_OK                            41
+#define AMQP_0_9_METHOD_CONNECTION_REDIRECT                           42
+#define AMQP_0_9_METHOD_CONNECTION_CLOSE                              50
+#define AMQP_0_9_METHOD_CONNECTION_CLOSE_OK                           51
+
+#define AMQP_0_9_METHOD_CHANNEL_OPEN                                  10
+#define AMQP_0_9_METHOD_CHANNEL_OPEN_OK                               11
+#define AMQP_0_9_METHOD_CHANNEL_FLOW                                  20
+#define AMQP_0_9_METHOD_CHANNEL_FLOW_OK                               21
+#define AMQP_0_9_METHOD_CHANNEL_CLOSE                                 40
+#define AMQP_0_9_METHOD_CHANNEL_CLOSE_OK                              41
+#define AMQP_0_9_METHOD_CHANNEL_RESUME                                50
+#define AMQP_0_9_METHOD_CHANNEL_PING                                  60
+#define AMQP_0_9_METHOD_CHANNEL_PONG                                  70
+#define AMQP_0_9_METHOD_CHANNEL_OK                                    80
+
+#define AMQP_0_9_METHOD_ACCESS_REQUEST                                10
+#define AMQP_0_9_METHOD_ACCESS_REQUEST_OK                             11
+
+#define AMQP_0_9_METHOD_EXCHANGE_DECLARE                              10
+#define AMQP_0_9_METHOD_EXCHANGE_DECLARE_OK                           11
+#define AMQP_0_9_METHOD_EXCHANGE_DELETE                               20
+#define AMQP_0_9_METHOD_EXCHANGE_DELETE_OK                            21
+
+#define AMQP_0_9_METHOD_QUEUE_DECLARE                                 10
+#define AMQP_0_9_METHOD_QUEUE_DECLARE_OK                              11
+#define AMQP_0_9_METHOD_QUEUE_BIND                                    20
+#define AMQP_0_9_METHOD_QUEUE_BIND_OK                                 21
+#define AMQP_0_9_METHOD_QUEUE_UNBIND                                  50
+#define AMQP_0_9_METHOD_QUEUE_UNBIND_OK                               51
+#define AMQP_0_9_METHOD_QUEUE_PURGE                                   30
+#define AMQP_0_9_METHOD_QUEUE_PURGE_OK                                31
+#define AMQP_0_9_METHOD_QUEUE_DELETE                                  40
+#define AMQP_0_9_METHOD_QUEUE_DELETE_OK                               41
+
+#define AMQP_0_9_METHOD_BASIC_QOS                                     10
+#define AMQP_0_9_METHOD_BASIC_QOS_OK                                  11
+#define AMQP_0_9_METHOD_BASIC_CONSUME                                 20
+#define AMQP_0_9_METHOD_BASIC_CONSUME_OK                              21
+#define AMQP_0_9_METHOD_BASIC_CANCEL                                  30
+#define AMQP_0_9_METHOD_BASIC_CANCEL_OK                               31
+#define AMQP_0_9_METHOD_BASIC_PUBLISH                                 40
+#define AMQP_0_9_METHOD_BASIC_RETURN                                  50
+#define AMQP_0_9_METHOD_BASIC_DELIVER                                 60
+#define AMQP_0_9_METHOD_BASIC_GET                                     70
+#define AMQP_0_9_METHOD_BASIC_GET_OK                                  71
+#define AMQP_0_9_METHOD_BASIC_GET_EMPTY                               72
+#define AMQP_0_9_METHOD_BASIC_ACK                                     80
+#define AMQP_0_9_METHOD_BASIC_REJECT                                  90
+#define AMQP_0_9_METHOD_BASIC_RECOVER                                 100
+
+#define AMQP_0_9_METHOD_FILE_QOS                                      10
+#define AMQP_0_9_METHOD_FILE_QOS_OK                                   11
+#define AMQP_0_9_METHOD_FILE_CONSUME                                  20
+#define AMQP_0_9_METHOD_FILE_CONSUME_OK                               21
+#define AMQP_0_9_METHOD_FILE_CANCEL                                   30
+#define AMQP_0_9_METHOD_FILE_CANCEL_OK                                31
+#define AMQP_0_9_METHOD_FILE_OPEN                                     40
+#define AMQP_0_9_METHOD_FILE_OPEN_OK                                  41
+#define AMQP_0_9_METHOD_FILE_STAGE                                    50
+#define AMQP_0_9_METHOD_FILE_PUBLISH                                  60
+#define AMQP_0_9_METHOD_FILE_RETURN                                   70
+#define AMQP_0_9_METHOD_FILE_DELIVER                                  80
+#define AMQP_0_9_METHOD_FILE_ACK                                      90
+#define AMQP_0_9_METHOD_FILE_REJECT                                   100
+
+#define AMQP_0_9_METHOD_STREAM_QOS                                    10
+#define AMQP_0_9_METHOD_STREAM_QOS_OK                                 11
+#define AMQP_0_9_METHOD_STREAM_CONSUME                                20
+#define AMQP_0_9_METHOD_STREAM_CONSUME_OK                             21
+#define AMQP_0_9_METHOD_STREAM_CANCEL                                 30
+#define AMQP_0_9_METHOD_STREAM_CANCEL_OK                              31
+#define AMQP_0_9_METHOD_STREAM_PUBLISH                                40
+#define AMQP_0_9_METHOD_STREAM_RETURN                                 50
+#define AMQP_0_9_METHOD_STREAM_DELIVER                                60
+
+#define AMQP_0_9_METHOD_TX_SELECT                                     10
+#define AMQP_0_9_METHOD_TX_SELECT_OK                                  11
+#define AMQP_0_9_METHOD_TX_COMMIT                                     20
+#define AMQP_0_9_METHOD_TX_COMMIT_OK                                  21
+#define AMQP_0_9_METHOD_TX_ROLLBACK                                   30
+#define AMQP_0_9_METHOD_TX_ROLLBACK_OK                                31
+
+#define AMQP_0_9_METHOD_DTX_SELECT                                    10
+#define AMQP_0_9_METHOD_DTX_SELECT_OK                                 11
+#define AMQP_0_9_METHOD_DTX_START                                     20
+#define AMQP_0_9_METHOD_DTX_START_OK                                  21
+
+#define AMQP_0_9_METHOD_TUNNEL_REQUEST                                10
+
+/* AMQP 0-10 values */
+
+#define AMQP_0_10_FRAME_CONTROL  0
+#define AMQP_0_10_FRAME_COMMAND  1
+#define AMQP_0_10_FRAME_HEADER   2
+#define AMQP_0_10_FRAME_BODY     3
+
+#define AMQP_0_10_TYPE_STR16     0x95
+#define AMQP_0_10_TYPE_MAP       0xa8
+#define AMQP_0_10_TYPE_LIST      0xa9
+#define AMQP_0_10_TYPE_ARRAY     0xaa
+#define AMQP_0_10_TYPE_STRUCT32  0xab
+
+#define AMQP_0_10_CLASS_CONNECTION           0x01
+#define AMQP_0_10_METHOD_CONNECTION_START          0x01
+#define AMQP_0_10_METHOD_CONNECTION_START_OK       0x02
+#define AMQP_0_10_METHOD_CONNECTION_SECURE         0x03
+#define AMQP_0_10_METHOD_CONNECTION_SECURE_OK      0x04
+#define AMQP_0_10_METHOD_CONNECTION_TUNE           0x05
+#define AMQP_0_10_METHOD_CONNECTION_TUNE_OK        0x06
+#define AMQP_0_10_METHOD_CONNECTION_OPEN           0x07
+#define AMQP_0_10_METHOD_CONNECTION_OPEN_OK        0x08
+#define AMQP_0_10_METHOD_CONNECTION_REDIRECT       0x09
+#define AMQP_0_10_METHOD_CONNECTION_HEARTBEAT      0x0a
+#define AMQP_0_10_METHOD_CONNECTION_CLOSE          0x0b
+#define AMQP_0_10_METHOD_CONNECTION_CLOSE_OK       0x0c
+
+#define AMQP_0_10_CLASS_SESSION              0x02
+#define AMQP_0_10_METHOD_SESSION_ATTACH            0x01
+#define AMQP_0_10_METHOD_SESSION_ATTACHED          0x02
+#define AMQP_0_10_METHOD_SESSION_DETACH            0x03
+#define AMQP_0_10_METHOD_SESSION_DETACHED          0x04
+#define AMQP_0_10_METHOD_SESSION_REQUEST_TIMEOUT   0x05
+#define AMQP_0_10_METHOD_SESSION_TIMEOUT           0x06
+#define AMQP_0_10_METHOD_SESSION_COMMAND_POINT     0x07
+#define AMQP_0_10_METHOD_SESSION_EXPECTED          0x08
+#define AMQP_0_10_METHOD_SESSION_CONFIRMED         0x09
+#define AMQP_0_10_METHOD_SESSION_COMPLETED         0x0a
+#define AMQP_0_10_METHOD_SESSION_KNOWN_COMPLETED   0x0b
+#define AMQP_0_10_METHOD_SESSION_FLUSH             0x0c
+#define AMQP_0_10_METHOD_SESSION_GAP               0x0d
+
+#define AMQP_0_10_CLASS_EXECUTION            0x03
+#define AMQP_0_10_METHOD_EXECUTION_SYNC            0x01
+#define AMQP_0_10_METHOD_EXECUTION_RESULT          0x02
+#define AMQP_0_10_METHOD_EXECUTION_EXCEPTION       0x03
+
+#define AMQP_0_10_CLASS_MESSAGE              0x04
+#define AMQP_0_10_STRUCT_MESSAGE_DELIVERY_PROPERTIES   0x01
+#define AMQP_0_10_STRUCT_MESSAGE_FRAGMENT_PROPERTIES   0x02
+#define AMQP_0_10_STRUCT_MESSAGE_MESSAGE_PROPERTIES    0x03
+#define AMQP_0_10_STRUCT_MESSAGE_ACQUIRED              0x04
+#define AMQP_0_10_STRUCT_MESSAGE_RESUME_RESULT         0x05
+#define AMQP_0_10_METHOD_MESSAGE_TRANSFER          0x01
+#define AMQP_0_10_METHOD_MESSAGE_ACCEPT            0x02
+#define AMQP_0_10_METHOD_MESSAGE_REJECT            0x03
+#define AMQP_0_10_METHOD_MESSAGE_RELEASE           0x04
+#define AMQP_0_10_METHOD_MESSAGE_ACQUIRE           0x05
+#define AMQP_0_10_METHOD_MESSAGE_RESUME            0x06
+#define AMQP_0_10_METHOD_MESSAGE_SUBSCRIBE         0x07
+#define AMQP_0_10_METHOD_MESSAGE_CANCEL            0x08
+#define AMQP_0_10_METHOD_MESSAGE_SET_FLOW_MODE     0x09
+#define AMQP_0_10_METHOD_MESSAGE_FLOW              0x0a
+#define AMQP_0_10_METHOD_MESSAGE_FLUSH             0x0b
+#define AMQP_0_10_METHOD_MESSAGE_STOP              0x0c
+
+#define AMQP_0_10_CLASS_TX                   0x05
+#define AMQP_0_10_METHOD_TX_SELECT                 0x01
+#define AMQP_0_10_METHOD_TX_COMMIT                 0x02
+#define AMQP_0_10_METHOD_TX_ROLLBACK               0x03
+
+#define AMQP_0_10_CLASS_DTX                  0x06
+#define AMQP_0_10_STRUCT_DTX_XA_RESULT          0x01
+#define AMQP_0_10_STRUCT_DTX_RECOVER_RESULT     0x03
+#define AMQP_0_10_METHOD_DTX_SELECT                0x01
+#define AMQP_0_10_METHOD_DTX_START                 0x02
+#define AMQP_0_10_METHOD_DTX_END                   0x03
+#define AMQP_0_10_METHOD_DTX_COMMIT                0x04
+#define AMQP_0_10_METHOD_DTX_FORGET                0x05
+#define AMQP_0_10_METHOD_DTX_GET_TIMEOUT           0x06
+#define AMQP_0_10_METHOD_DTX_PREPARE               0x07
+#define AMQP_0_10_METHOD_DTX_RECOVER               0x08
+#define AMQP_0_10_METHOD_DTX_ROLLBACK              0x09
+#define AMQP_0_10_METHOD_DTX_SET_TIMEOUT           0x0a
+
+#define AMQP_0_10_CLASS_EXCHANGE             0x07
+#define AMQP_0_10_STRUCT_EXCHANGE_QUERY_RESULT  0x01
+#define AMQP_0_10_STRUCT_EXCHANGE_BOUND_RESULT  0x02
+#define AMQP_0_10_METHOD_EXCHANGE_DECLARE          0x01
+#define AMQP_0_10_METHOD_EXCHANGE_DELETE           0x02
+#define AMQP_0_10_METHOD_EXCHANGE_QUERY            0x03
+#define AMQP_0_10_METHOD_EXCHANGE_BIND             0x04
+#define AMQP_0_10_METHOD_EXCHANGE_UNBIND           0x05
+#define AMQP_0_10_METHOD_EXCHANGE_BOUND            0x06
+
+#define AMQP_0_10_CLASS_QUEUE                0x08
+#define AMQP_0_10_STRUCT_QUEUE_QUERY_RESULT     0x01
+#define AMQP_0_10_METHOD_QUEUE_DECLARE             0x01
+#define AMQP_0_10_METHOD_QUEUE_DELETE              0x02
+#define AMQP_0_10_METHOD_QUEUE_PURGE               0x03
+#define AMQP_0_10_METHOD_QUEUE_QUERY               0x04
+
+#define AMQP_0_10_CLASS_FILE                 0x09
+#define AMQP_0_10_STRUCT_FILE_PROPERTIES        0x01
+#define AMQP_0_10_METHOD_FILE_QOS                  0x01
+#define AMQP_0_10_METHOD_FILE_QOS_OK               0x02
+#define AMQP_0_10_METHOD_FILE_CONSUME              0x03
+#define AMQP_0_10_METHOD_FILE_CONSUME_OK           0x04
+#define AMQP_0_10_METHOD_FILE_CANCEL               0x05
+#define AMQP_0_10_METHOD_FILE_OPEN                 0x06
+#define AMQP_0_10_METHOD_FILE_OPEN_OK              0x07
+#define AMQP_0_10_METHOD_FILE_STAGE                0x08
+#define AMQP_0_10_METHOD_FILE_PUBLISH              0x09
+#define AMQP_0_10_METHOD_FILE_RETURN               0x0a
+#define AMQP_0_10_METHOD_FILE_DELIVER              0x0b
+#define AMQP_0_10_METHOD_FILE_ACK                  0x0c
+#define AMQP_0_10_METHOD_FILE_REJECT               0x0d
+
+#define AMQP_0_10_CLASS_STREAM               0x0a
+#define AMQP_0_10_STRUCT_STREAM_PROPERTIES      0x01
+#define AMQP_0_10_METHOD_STREAM_QOS                0x01
+#define AMQP_0_10_METHOD_STREAM_QOS_OK             0x02
+#define AMQP_0_10_METHOD_STREAM_CONSUME            0x03
+#define AMQP_0_10_METHOD_STREAM_CONSUME_OK         0x04
+#define AMQP_0_10_METHOD_STREAM_CANCEL             0x05
+#define AMQP_0_10_METHOD_STREAM_PUBLISH            0x06
+#define AMQP_0_10_METHOD_STREAM_RETURN             0x07
+#define AMQP_0_10_METHOD_STREAM_DELIVER            0x08
 
 /*  Private functions  */
 
 static void
 dissect_amqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
+static void
+check_amqp_version(tvbuff_t *tvb, amqp_conv *conn);
+
+static guint
+get_amqp_0_10_message_len(packet_info *pinfo, tvbuff_t *tvb, int offset);
+
 static guint
-get_amqp_message_len(packet_info *pinfo, tvbuff_t *tvb, int offset);
+get_amqp_0_9_message_len(packet_info *pinfo, tvbuff_t *tvb, int offset);
+
+static void
+dissect_amqp_0_9_field_table(tvbuff_t *tvb, packet_info *pinfo, int offset, guint length, proto_item *item);
+
+static void
+dissect_amqp_0_10_map(tvbuff_t *tvb,
+                      int offset,
+                      int bound,
+                      int length,
+                      proto_item *item);
+
+static void
+dissect_amqp_0_10_array(tvbuff_t *tvb,
+                        int offset,
+                        int bound,
+                        int length,
+                        proto_item *item);
+
+static void
+dissect_amqp_0_10_xid (tvbuff_t *tvb,
+                       int offset,
+                       guint16 xid_length,
+                       proto_item *ti);
+
+static void
+dissect_amqp_0_10_connection(tvbuff_t *tvb,
+                             packet_info *pinfo,
+                             proto_tree *tree,
+                             int offset, guint16 length);
+
+static void
+dissect_amqp_0_10_session(tvbuff_t *tvb,
+                          packet_info *pinfo,
+                          proto_tree *tree,
+                          int offset, guint16 length);
+
+static void
+dissect_amqp_0_10_execution(tvbuff_t *tvb,
+                            packet_info *pinfo,
+                            proto_tree *tree,
+                            int offset, guint16 length);
+
+static void
+dissect_amqp_0_10_message(tvbuff_t *tvb,
+                          packet_info *pinfo,
+                          proto_tree *tree,
+                          int offset, guint16 length);
+
+static void
+dissect_amqp_0_10_tx(tvbuff_t *tvb,
+                     packet_info *pinfo,
+                     proto_tree *tree,
+                     int offset, guint16 length);
+
+static void
+dissect_amqp_0_10_dtx(tvbuff_t *tvb,
+                      packet_info *pinfo,
+                      proto_tree *tree,
+                      int offset, guint16 length);
+
+static void
+dissect_amqp_0_10_exchange(tvbuff_t *tvb,
+                           packet_info *pinfo,
+                           proto_tree *tree,
+                           int offset, guint16 length);
+
+static void
+dissect_amqp_0_10_queue(tvbuff_t *tvb,
+                        packet_info *pinfo,
+                        proto_tree *tree,
+                        int offset, guint16 length);
+
+static void
+dissect_amqp_0_10_file(tvbuff_t *tvb,
+                       packet_info *pinfo,
+                       proto_tree *tree,
+                       int offset, guint16 length);
+
+static void
+dissect_amqp_0_10_stream(tvbuff_t *tvb,
+                         packet_info *pinfo,
+                         proto_tree *tree,
+                         int offset, guint16 length);
+
+static void
+dissect_amqp_0_10_struct_delivery_properties(tvbuff_t *tvb,
+                                             proto_tree *tree,
+                                             int offset,
+                                             guint32 struct_length);
+
+static void
+dissect_amqp_0_10_struct_fragment_properties(tvbuff_t *tvb,
+                                             proto_tree *tree,
+                                             int offset,
+                                             guint32 struct_length);
+
+static void
+dissect_amqp_0_10_struct_message_properties(tvbuff_t *tvb,
+                                            proto_tree *tree,
+                                            int offset,
+                                            guint32 struct_length);
+
+static void
+dissect_amqp_0_10_struct_exchange_query_result(tvbuff_t *tvb,
+                                               proto_tree *tree,
+                                               int offset,
+                                               guint32 struct_length);
+
+static void
+dissect_amqp_0_10_struct_queue_query_result(tvbuff_t *tvb,
+                                            proto_tree *tree,
+                                            int offset,
+                                            guint32 struct_length);
+
+static void
+dissect_amqp_0_10_struct_file_properties(tvbuff_t *tvb,
+                                         proto_tree *tree,
+                                         int offset,
+                                         guint32 struct_length);
+
+static void
+dissect_amqp_0_10_struct_stream_properties(tvbuff_t *tvb,
+                                           proto_tree *tree,
+                                           int offset,
+                                           guint32 struct_length);
+
+static void
+dissect_amqp_0_10_struct32(tvbuff_t *tvb, proto_tree *tree,
+                           int offset, guint32 struct_length);
 
 static void
-dissect_amqp_field_table(tvbuff_t *tvb, int offset, int bound, int length, proto_item *item);
+dissect_amqp_0_10_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
 
 static void
-dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+dissect_amqp_0_9_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+
+static int
+dissect_amqp_0_9_method_connection_start(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree);
+
+static int
+dissect_amqp_0_9_method_connection_start_ok(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree);
+
+static int
+dissect_amqp_0_9_method_connection_secure(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
+
+static int
+dissect_amqp_0_9_method_connection_secure_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
+
+static int
+dissect_amqp_0_9_method_connection_tune(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
+
+static int
+dissect_amqp_0_9_method_connection_tune_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
+
+static int
+dissect_amqp_0_9_method_connection_open(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_connection_start(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_connection_open_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_connection_start_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_connection_redirect(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_connection_secure(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_connection_close(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_connection_secure_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_connection_close_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_connection_tune(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_channel_open(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_connection_tune_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_channel_open_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_connection_open(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_channel_flow(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_connection_open_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_channel_flow_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_connection_redirect(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_channel_close(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_connection_close(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_channel_close_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_connection_close_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_channel_resume(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_channel_open(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_channel_ping(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_channel_open_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_channel_pong(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_channel_flow(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_channel_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_channel_flow_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_access_request(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_channel_close(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_access_request_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_channel_close_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_exchange_declare(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_channel_resume(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_exchange_declare_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_channel_ping(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_exchange_delete(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_channel_pong(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_exchange_delete_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_channel_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_queue_declare(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_access_request(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_queue_declare_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_access_request_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_queue_bind(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_exchange_declare(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_queue_bind_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_exchange_declare_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_queue_unbind(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_exchange_delete(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_queue_unbind_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_exchange_delete_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_queue_purge(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_queue_declare(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_queue_purge_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_queue_declare_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_queue_delete(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_queue_bind(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_queue_delete_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_queue_bind_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_qos(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_queue_unbind(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_qos_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_queue_unbind_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_consume(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_queue_purge(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_consume_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_queue_purge_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_cancel(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_queue_delete(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_cancel_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_queue_delete_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_publish(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_qos(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_return(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_qos_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_deliver(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_consume(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_get(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_consume_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_get_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_cancel(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_get_empty(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_cancel_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_ack(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_publish(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_reject(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_return(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_basic_recover(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_deliver(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_qos(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_get(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_qos_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_get_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_consume(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_get_empty(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_consume_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_ack(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_cancel(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_reject(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_cancel_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_basic_recover(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_open(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_qos(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_open_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_qos_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_stage(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_consume(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_publish(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_consume_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_return(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_cancel(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_deliver(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_cancel_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_ack(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_open(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_file_reject(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_open_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_stream_qos(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_stage(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_stream_qos_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_publish(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_stream_consume(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_return(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_stream_consume_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_deliver(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_stream_cancel(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_ack(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_stream_cancel_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_file_reject(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_stream_publish(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_stream_qos(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_stream_return(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_stream_qos_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_stream_deliver(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_stream_consume(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_tx_select(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_stream_consume_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_tx_select_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_stream_cancel(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_tx_commit(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_stream_cancel_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_tx_commit_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_stream_publish(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_tx_rollback(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_stream_return(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_tx_rollback_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_stream_deliver(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_dtx_select(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_tx_select(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_dtx_select_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_tx_select_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_dtx_start(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_tx_commit(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_dtx_start_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_tx_commit_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_method_tunnel_request(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree);
 
 static int
-dissect_amqp_method_tx_rollback(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_content_header_basic(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *prop_tree);
 
 static int
-dissect_amqp_method_tx_rollback_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_content_header_file(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *prop_tree);
 
 static int
-dissect_amqp_method_dtx_select(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_content_header_stream(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *prop_tree);
 
 static int
-dissect_amqp_method_dtx_select_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+dissect_amqp_0_9_content_header_tunnel(tvbuff_t *tvb, packet_info *pifo,
+    int offset, proto_tree *prop_tree);
+
+/*  AMQP 0-10 type decoding information  */
+
+typedef int (*type_formatter)(tvbuff_t *tvb,
+                              guint offset,   /* In tvb where data starts */
+                              guint bound,    /* Last byte in tvb */
+                              guint length,   /* Length of data, if known */
+                              const char **value); /* Receive formatted val */
+struct amqp_typeinfo {
+    guint8 typecode;        /* From AMQP 0-10 spec */
+    const char *typename;
+    type_formatter formatter;
+    guint known_size;
+};
+static gboolean
+get_amqp_0_10_type_formatter(guint8 code,
+                             const char **name,
+                             type_formatter *decoder,
+                             guint *length_size);
 
 static int
-dissect_amqp_method_dtx_start(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+format_amqp_0_10_bin(tvbuff_t *tvb,
+                     guint offset, guint bound, guint length,
+                     const char **value);
 
 static int
-dissect_amqp_method_dtx_start_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+format_amqp_0_10_int(tvbuff_t *tvb,
+                     guint offset, guint bound, guint length,
+                     const char **value);
 
 static int
-dissect_amqp_method_tunnel_request(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree);
+format_amqp_0_10_uint(tvbuff_t *tvb,
+                      guint offset, guint bound, guint length,
+                      const char **value);
 
 static int
-dissect_amqp_content_header_basic(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *prop_tree);
+format_amqp_0_10_char(tvbuff_t *tvb,
+                      guint offset, guint bound, guint length,
+                      const char **value);
 
 static int
-dissect_amqp_content_header_file(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *prop_tree);
+format_amqp_0_10_boolean(tvbuff_t *tvb,
+                         guint offset, guint bound, guint length,
+                         const char **value);
 
 static int
-dissect_amqp_content_header_stream(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *prop_tree);
+format_amqp_0_10_vbin(tvbuff_t *tvb,
+                      guint offset, guint bound, guint length,
+                      const char **value);
 
 static int
-dissect_amqp_content_header_tunnel(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *prop_tree);
+format_amqp_0_10_str(tvbuff_t *tvb,
+                     guint offset, guint bound, guint length,
+                     const char **value);
+
+static void
+format_amqp_0_10_sequence_set(tvbuff_t *tvb, guint offset, guint length,
+                              proto_item *item);
 
 /*  Various handles  */
 
 static int proto_amqp = -1;
 
-static int hf_amqp_type = -1;
+/* 0-10 handles */
+
+static int hf_amqp_0_10_format = -1;
+static int hf_amqp_0_10_position = -1;
+static int hf_amqp_0_10_type = -1;
+static int hf_amqp_0_10_size = -1;
+static int hf_amqp_0_10_track = -1;
+static int hf_amqp_0_10_class = -1;
+static int hf_amqp_0_10_connection_method = -1;
+static int hf_amqp_0_10_session_method = -1;
+static int hf_amqp_0_10_execution_method = -1;
+static int hf_amqp_0_10_message_method = -1;
+static int hf_amqp_0_10_tx_method = -1;
+static int hf_amqp_0_10_dtx_method = -1;
+static int hf_amqp_0_10_exchange_method = -1;
+static int hf_amqp_0_10_queue_method = -1;
+static int hf_amqp_0_10_file_method = -1;
+static int hf_amqp_0_10_stream_method = -1;
+static int hf_amqp_0_10_argument_packing_flags = -1;
+static int hf_amqp_0_10_session_header_sync = -1;
+static int hf_amqp_0_10_undissected_struct32 = -1;
+static int hf_amqp_0_10_message_body = -1;
+static int hf_amqp_0_10_dtx_xid = -1;
+static int hf_amqp_0_10_dtx_xid_format = -1;
+static int hf_amqp_0_10_dtx_xid_global_id = -1;
+static int hf_amqp_0_10_dtx_xid_branch_id = -1;
+static int hf_amqp_0_10_struct_delivery_properties_discard_unroutable = -1;
+static int hf_amqp_0_10_struct_delivery_properties_immediate = -1;
+static int hf_amqp_0_10_struct_delivery_properties_redelivered = -1;
+static int hf_amqp_0_10_struct_delivery_properties_priority = -1;
+static int hf_amqp_0_10_struct_delivery_properties_mode = -1;
+static int hf_amqp_0_10_struct_delivery_properties_ttl = -1;
+static int hf_amqp_0_10_struct_delivery_properties_timestamp = -1;
+static int hf_amqp_0_10_struct_delivery_properties_expiration = -1;
+static int hf_amqp_0_10_struct_delivery_properties_exchange = -1;
+static int hf_amqp_0_10_struct_delivery_properties_routing_key = -1;
+static int hf_amqp_0_10_struct_delivery_properties_resume_ttl = -1;
+static int hf_amqp_0_10_struct_fragment_properties_first = -1;
+static int hf_amqp_0_10_struct_fragment_properties_last = -1;
+static int hf_amqp_0_10_struct_fragment_properties_size = -1;
+static int hf_amqp_0_10_struct_message_properties = -1;
+static int hf_amqp_0_10_struct_message_properties_content_len = -1;
+static int hf_amqp_0_10_struct_message_properties_message_id = -1;
+static int hf_amqp_0_10_struct_message_properties_correlation = -1;
+static int hf_amqp_0_10_struct_message_properties_reply_to = -1;
+static int hf_amqp_0_10_struct_message_properties_content_type = -1;
+static int hf_amqp_0_10_struct_message_properties_content_encoding = -1;
+static int hf_amqp_0_10_struct_message_properties_user_id = -1;
+static int hf_amqp_0_10_struct_message_properties_app_id = -1;
+static int hf_amqp_0_10_struct_message_properties_application_headers = -1;
+static int hf_amqp_0_10_struct_reply_to_exchange = -1;
+static int hf_amqp_0_10_struct_reply_to_routing_key = -1;
+static int hf_amqp_0_10_struct_acquired_transfers = -1;
+static int hf_amqp_0_10_struct_resume_result_offset = -1;
+static int hf_amqp_0_10_struct_exchange_query_result_durable = -1;
+static int hf_amqp_0_10_struct_exchange_query_result_not_found = -1;
+static int hf_amqp_0_10_struct_exchange_bound_result_exchange_not_found = -1;
+static int hf_amqp_0_10_struct_exchange_bound_result_queue_not_found = -1;
+static int hf_amqp_0_10_struct_exchange_bound_result_queue_not_matched = -1;
+static int hf_amqp_0_10_struct_exchange_bound_result_key_not_matched = -1;
+static int hf_amqp_0_10_struct_exchange_bound_result_args_not_matched = -1;
+static int hf_amqp_0_10_struct_queue_query_result_durable = -1;
+static int hf_amqp_0_10_struct_queue_query_result_exclusive = -1;
+static int hf_amqp_0_10_struct_queue_query_result_auto_delete = -1;
+static int hf_amqp_0_10_struct_queue_query_result_message_count = -1;
+static int hf_amqp_0_10_struct_queue_query_result_subscriber_count = -1;
+static int hf_amqp_0_10_struct_file_properties_content_type = -1;
+static int hf_amqp_0_10_struct_file_properties_content_encoding = -1;
+static int hf_amqp_0_10_struct_file_properties_headers = -1;
+static int hf_amqp_0_10_struct_file_properties_priority = -1;
+static int hf_amqp_0_10_struct_file_properties_reply_to = -1;
+static int hf_amqp_0_10_struct_file_properties_message_id = -1;
+static int hf_amqp_0_10_struct_file_properties_filename = -1;
+static int hf_amqp_0_10_struct_file_properties_timestamp = -1;
+static int hf_amqp_0_10_struct_file_properties_cluster_id = -1;
+static int hf_amqp_0_10_struct_stream_properties_content_type = -1;
+static int hf_amqp_0_10_struct_stream_properties_content_encoding = -1;
+static int hf_amqp_0_10_struct_stream_properties_headers = -1;
+static int hf_amqp_0_10_struct_stream_properties_priority = -1;
+static int hf_amqp_0_10_struct_stream_properties_timestamp = -1;
+static int hf_amqp_0_10_method_session_attach_name = -1;
+static int hf_amqp_0_10_method_session_attach_force = -1;
+static int hf_amqp_0_10_method_session_detached_code = -1;
+static int hf_amqp_0_10_method_session_timeout = -1;
+static int hf_amqp_0_10_method_session_completed_timely = -1;
+static int hf_amqp_0_10_method_session_flush_expected = -1;
+static int hf_amqp_0_10_method_session_flush_confirmed = -1;
+static int hf_amqp_0_10_method_session_flush_completed = -1;
+static int hf_amqp_0_10_method_session_command_point_id = -1;
+static int hf_amqp_0_10_method_session_command_point_offset = -1;
+static int hf_amqp_0_10_method_session_commands = -1;
+static int hf_amqp_0_10_method_session_fragments = -1;
+static int hf_amqp_0_10_method_execution_command_id = -1;
+static int hf_amqp_0_10_method_execution_exception_error = -1;
+static int hf_amqp_0_10_method_execution_field_index = -1;
+static int hf_amqp_0_10_method_execution_description = -1;
+static int hf_amqp_0_10_method_execution_error_info = -1;
+static int hf_amqp_0_10_method_message_transfer_destination = -1;
+static int hf_amqp_0_10_method_message_transfer_accept_mode = -1;
+static int hf_amqp_0_10_method_message_transfer_acquire_mode = -1;
+static int hf_amqp_0_10_method_message_accept_transfers = -1;
+static int hf_amqp_0_10_method_message_transfer_reject_code = -1;
+static int hf_amqp_0_10_method_message_reject_text = -1;
+static int hf_amqp_0_10_method_message_release_set_redelivered = -1;
+static int hf_amqp_0_10_method_message_dest = -1;
+static int hf_amqp_0_10_method_message_resume_id = -1;
+static int hf_amqp_0_10_method_message_subscribe_queue = -1;
+static int hf_amqp_0_10_method_message_subscribe_exclusive = -1;
+static int hf_amqp_0_10_method_message_subscribe_resume_ttl = -1;
+static int hf_amqp_0_10_method_message_subscribe_args = -1;
+static int hf_amqp_0_10_method_message_flow_mode = -1;
+static int hf_amqp_0_10_method_message_credit_unit = -1;
+static int hf_amqp_0_10_method_message_credit_value = -1;
+static int hf_amqp_0_10_method_dtx_start_join = -1;
+static int hf_amqp_0_10_method_dtx_start_resume = -1;
+static int hf_amqp_0_10_method_dtx_end_fail = -1;
+static int hf_amqp_0_10_method_dtx_end_suspend = -1;
+static int hf_amqp_0_10_method_dtx_commit_one_phase = -1;
+static int hf_amqp_0_10_method_dtx_set_timeout_timeout = -1;
+static int hf_amqp_0_10_method_exchange_declare_exchange = -1;
+static int hf_amqp_0_10_method_exchange_declare_type = -1;
+static int hf_amqp_0_10_method_exchange_declare_alt_exchange = -1;
+static int hf_amqp_0_10_method_exchange_declare_passive = -1;
+static int hf_amqp_0_10_method_exchange_declare_durable = -1;
+static int hf_amqp_0_10_method_exchange_declare_auto_delete = -1;
+static int hf_amqp_0_10_method_exchange_declare_arguments = -1;
+static int hf_amqp_0_10_method_exchange_delete_if_unused = -1;
+static int hf_amqp_0_10_method_exchange_bind_queue = -1;
+static int hf_amqp_0_10_method_exchange_binding_key = -1;
+static int hf_amqp_0_10_method_queue_name = -1;
+static int hf_amqp_0_10_method_queue_alt_exchange = -1;
+static int hf_amqp_0_10_method_queue_declare_passive = -1;
+static int hf_amqp_0_10_method_queue_declare_durable = -1;
+static int hf_amqp_0_10_method_queue_declare_exclusive = -1;
+static int hf_amqp_0_10_method_queue_declare_auto_delete = -1;
+static int hf_amqp_0_10_method_queue_declare_arguments = -1;
+static int hf_amqp_0_10_method_queue_delete_if_unused = -1;
+static int hf_amqp_0_10_method_queue_delete_if_empty = -1;
+static int hf_amqp_0_10_method_file_qos_prefetch_size = -1;
+static int hf_amqp_0_10_method_file_qos_prefetch_count = -1;
+static int hf_amqp_0_10_method_file_qos_global = -1;
+static int hf_amqp_0_10_method_file_consumer_tag = -1;
+static int hf_amqp_0_10_method_file_consume_no_local = -1;
+static int hf_amqp_0_10_method_file_consume_no_ack = -1;
+static int hf_amqp_0_10_method_file_consume_exclusive = -1;
+static int hf_amqp_0_10_method_file_consume_nowait = -1;
+static int hf_amqp_0_10_method_file_consume_arguments = -1;
+static int hf_amqp_0_10_method_file_identifier = -1;
+static int hf_amqp_0_10_method_file_open_content_size = -1;
+static int hf_amqp_0_10_method_file_open_ok_staged_size = -1;
+static int hf_amqp_0_10_method_file_publish_exchange = -1;
+static int hf_amqp_0_10_method_file_publish_routing_key = -1;
+static int hf_amqp_0_10_method_file_publish_mandatory = -1;
+static int hf_amqp_0_10_method_file_publish_immediate = -1;
+static int hf_amqp_0_10_method_file_return_reply_code = -1;
+static int hf_amqp_0_10_method_file_return_reply_text = -1;
+static int hf_amqp_0_10_method_file_return_exchange = -1;
+static int hf_amqp_0_10_method_file_return_routing_key = -1;
+static int hf_amqp_0_10_method_file_deliver_consumer_tag = -1;
+static int hf_amqp_0_10_method_file_deliver_delivery_tag = -1;
+static int hf_amqp_0_10_method_file_deliver_redelivered = -1;
+static int hf_amqp_0_10_method_file_deliver_exchange = -1;
+static int hf_amqp_0_10_method_file_deliver_routing_key = -1;
+static int hf_amqp_0_10_method_file_ack_delivery_tag = -1;
+static int hf_amqp_0_10_method_file_ack_multiple = -1;
+static int hf_amqp_0_10_method_file_reject_delivery_tag = -1;
+static int hf_amqp_0_10_method_file_reject_requeue = -1;
+static int hf_amqp_0_10_method_stream_qos_prefetch_size = -1;
+static int hf_amqp_0_10_method_stream_qos_prefetch_count = -1;
+static int hf_amqp_0_10_method_stream_qos_consume_rate = -1;
+static int hf_amqp_0_10_method_stream_qos_global = -1;
+static int hf_amqp_0_10_method_stream_consumer_tag = -1;
+static int hf_amqp_0_10_method_stream_consume_no_local = -1;
+static int hf_amqp_0_10_method_stream_consume_exclusive = -1;
+static int hf_amqp_0_10_method_stream_consume_nowait = -1;
+static int hf_amqp_0_10_method_stream_consume_arguments = -1;
+static int hf_amqp_0_10_method_stream_publish_exchange = -1;
+static int hf_amqp_0_10_method_stream_publish_routing_key = -1;
+static int hf_amqp_0_10_method_stream_publish_mandatory = -1;
+static int hf_amqp_0_10_method_stream_publish_immediate = -1;
+static int hf_amqp_0_10_method_stream_return_reply_code = -1;
+static int hf_amqp_0_10_method_stream_return_reply_text = -1;
+static int hf_amqp_0_10_method_stream_return_exchange = -1;
+static int hf_amqp_0_10_method_stream_return_routing_key = -1;
+static int hf_amqp_0_10_method_stream_deliver_consumer_tag = -1;
+static int hf_amqp_0_10_method_stream_deliver_delivery_tag = -1;
+static int hf_amqp_0_10_method_stream_deliver_exchange = -1;
+static int hf_amqp_0_10_method_stream_deliver_queue = -1;
 static int hf_amqp_channel = -1;
-static int hf_amqp_length = -1;
-static int hf_amqp_method_class_id = -1;
+static int hf_amqp_0_9_type = -1;
+static int hf_amqp_0_9_length = -1;
+static int hf_amqp_0_9_method_class_id = -1;
 static int hf_amqp_method_connection_method_id = -1;
 static int hf_amqp_method_channel_method_id = -1;
 static int hf_amqp_method_access_method_id = -1;
@@ -565,8 +1103,10 @@ static int hf_amqp_method_arguments = -1;
 static int hf_amqp_method_connection_start_version_major = -1;
 static int hf_amqp_method_connection_start_version_minor = -1;
 static int hf_amqp_method_connection_start_server_properties = -1;
-static int hf_amqp_method_connection_start_mechanisms = -1;
-static int hf_amqp_method_connection_start_locales = -1;
+static int hf_amqp_0_9_method_connection_start_mechanisms = -1;
+static int hf_amqp_0_10_method_connection_start_mechanisms = -1;
+static int hf_amqp_0_9_method_connection_start_locales = -1;
+static int hf_amqp_0_10_method_connection_start_locales = -1;
 static int hf_amqp_method_connection_start_ok_client_properties = -1;
 static int hf_amqp_method_connection_start_ok_mechanism = -1;
 static int hf_amqp_method_connection_start_ok_response = -1;
@@ -574,18 +1114,27 @@ static int hf_amqp_method_connection_start_ok_locale = -1;
 static int hf_amqp_method_connection_secure_challenge = -1;
 static int hf_amqp_method_connection_secure_ok_response = -1;
 static int hf_amqp_method_connection_tune_channel_max = -1;
-static int hf_amqp_method_connection_tune_frame_max = -1;
-static int hf_amqp_method_connection_tune_heartbeat = -1;
+static int hf_amqp_0_9_method_connection_tune_frame_max = -1;
+static int hf_amqp_0_10_method_connection_tune_frame_max = -1;
+static int hf_amqp_0_9_method_connection_tune_heartbeat = -1;
+static int hf_amqp_0_10_method_connection_tune_heartbeat_min = -1;
+static int hf_amqp_0_10_method_connection_tune_heartbeat_max = -1;
 static int hf_amqp_method_connection_tune_ok_channel_max = -1;
-static int hf_amqp_method_connection_tune_ok_frame_max = -1;
+static int hf_amqp_0_9_method_connection_tune_ok_frame_max = -1;
+static int hf_amqp_0_10_method_connection_tune_ok_frame_max = -1;
 static int hf_amqp_method_connection_tune_ok_heartbeat = -1;
 static int hf_amqp_method_connection_open_virtual_host = -1;
-static int hf_amqp_method_connection_open_capabilities = -1;
-static int hf_amqp_method_connection_open_insist = -1;
-static int hf_amqp_method_connection_open_ok_known_hosts = -1;
+static int hf_amqp_0_9_method_connection_open_capabilities = -1;
+static int hf_amqp_0_10_method_connection_open_capabilities = -1;
+static int hf_amqp_0_9_method_connection_open_insist = -1;
+static int hf_amqp_0_10_method_connection_open_insist = -1;
+static int hf_amqp_0_9_method_connection_open_ok_known_hosts = -1;
+static int hf_amqp_0_10_method_connection_open_ok_known_hosts = -1;
 static int hf_amqp_method_connection_redirect_host = -1;
-static int hf_amqp_method_connection_redirect_known_hosts = -1;
-static int hf_amqp_method_connection_close_reply_code = -1;
+static int hf_amqp_0_9_method_connection_redirect_known_hosts = -1;
+static int hf_amqp_0_10_method_connection_redirect_known_hosts = -1;
+static int hf_amqp_0_9_method_connection_close_reply_code = -1;
+static int hf_amqp_0_10_method_connection_close_reply_code = -1;
 static int hf_amqp_method_connection_close_reply_text = -1;
 static int hf_amqp_method_connection_close_class_id = -1;
 static int hf_amqp_method_connection_close_method_id = -1;
@@ -808,37 +1357,327 @@ static int hf_amqp_init_version_major = -1;
 static int hf_amqp_init_version_minor = -1;
 
 static gint ett_amqp = -1;
+static gint ett_header = -1;
 static gint ett_args = -1;
 static gint ett_props = -1;
 static gint ett_field_table = -1;
 static gint ett_amqp_init = -1;
+static gint ett_amqp_0_10_map = -1;
+static gint ett_amqp_0_10_array = -1;
 
 /*  Various enumerations  */
 
-static const value_string amqp_frame_types [] = {
-    {AMQP_FRAME_TYPE_METHOD,             "Method"},
-    {AMQP_FRAME_TYPE_CONTENT_HEADER,     "Content header"},
-    {AMQP_FRAME_TYPE_CONTENT_BODY,       "Content body"},
-    {AMQP_FRAME_TYPE_OOB_METHOD,         "OOB Method"},
-    {AMQP_FRAME_TYPE_OOB_CONTENT_HEADER, "OOB Content header"},
-    {AMQP_FRAME_TYPE_OOB_CONTENT_BODY,   "OOB Content body"},
-    {AMQP_FRAME_TYPE_TRACE ,             "Trace"},
-    {AMQP_FRAME_TYPE_HEARTBEAT,          "Heartbeat"},
+static const value_string amqp_0_10_frame_position [] = {
+    {0x00,  "----"},
+    {0x01,  "---e"},
+    {0x02,  "--b-"},
+    {0x03,  "--be"},
+    {0x04,  "-E--"},
+    {0x05,  "-E-e"},
+    {0x06,  "-Eb-"},
+    {0x07,  "-Ebe"},
+    {0x08,  "B---"},
+    {0x09,  "B--e"},
+    {0x0a,  "B-b-"},
+    {0x0b,  "B-be"},
+    {0x0c,  "BE--"},
+    {0x0d,  "BE-e"},
+    {0x0e,  "BEb-"},
+    {0x0f,  "BEbe"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_frame_types [] = {
+    {0,     "Control"},
+    {1,     "Command"},
+    {2,     "Header"},
+    {3,     "Body"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_frame_tracks [] = {
+    {0,     "Control"},
+    {1,     "Command"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_class [] = {
+    {AMQP_0_10_CLASS_CONNECTION,  "Connection"},
+    {AMQP_0_10_CLASS_SESSION,     "Session"},
+    {AMQP_0_10_CLASS_EXECUTION,   "Execution"},
+    {AMQP_0_10_CLASS_MESSAGE,     "Message"},
+    {AMQP_0_10_CLASS_TX,          "Tx"},
+    {AMQP_0_10_CLASS_DTX,         "Dtx"},
+    {AMQP_0_10_CLASS_EXCHANGE,    "Exchange"},
+    {AMQP_0_10_CLASS_QUEUE,       "Queue"},
+    {AMQP_0_10_CLASS_FILE,        "File"},
+    {AMQP_0_10_CLASS_STREAM,      "Stream"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_connection_methods [] = {
+    {AMQP_0_10_METHOD_CONNECTION_START,     "connection.start"},
+    {AMQP_0_10_METHOD_CONNECTION_START_OK,  "connection.start-ok"},
+    {AMQP_0_10_METHOD_CONNECTION_SECURE,    "connection.secure"},
+    {AMQP_0_10_METHOD_CONNECTION_SECURE_OK, "connection.secure-ok"},
+    {AMQP_0_10_METHOD_CONNECTION_TUNE,      "connection.tune"},
+    {AMQP_0_10_METHOD_CONNECTION_TUNE_OK,   "connection.tune-ok"},
+    {AMQP_0_10_METHOD_CONNECTION_OPEN,      "connection.open"},
+    {AMQP_0_10_METHOD_CONNECTION_OPEN_OK,   "connection.open-ok"},
+    {AMQP_0_10_METHOD_CONNECTION_REDIRECT,  "connection.redirect"},
+    {AMQP_0_10_METHOD_CONNECTION_HEARTBEAT, "connection.heartbeat"},
+    {AMQP_0_10_METHOD_CONNECTION_CLOSE,     "connection.close"},
+    {AMQP_0_10_METHOD_CONNECTION_CLOSE_OK,  "connection.close-ok"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_session_methods [] = {
+    {AMQP_0_10_METHOD_SESSION_ATTACH,           "session.attach"},
+    {AMQP_0_10_METHOD_SESSION_ATTACHED,         "session.attached"},
+    {AMQP_0_10_METHOD_SESSION_DETACH,           "session.detach"},
+    {AMQP_0_10_METHOD_SESSION_DETACHED,         "session.detached"},
+    {AMQP_0_10_METHOD_SESSION_REQUEST_TIMEOUT,  "session.request-timeout"},
+    {AMQP_0_10_METHOD_SESSION_TIMEOUT,          "session.timeout"},
+    {AMQP_0_10_METHOD_SESSION_COMMAND_POINT,    "session.command-point"},
+    {AMQP_0_10_METHOD_SESSION_EXPECTED,         "session.expected"},
+    {AMQP_0_10_METHOD_SESSION_CONFIRMED,        "session.confirmed"},
+    {AMQP_0_10_METHOD_SESSION_COMPLETED,        "session.completed"},
+    {AMQP_0_10_METHOD_SESSION_KNOWN_COMPLETED,  "session.known-completed"},
+    {AMQP_0_10_METHOD_SESSION_FLUSH,            "session.flush"},
+    {AMQP_0_10_METHOD_SESSION_GAP,              "session.gap"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_execution_methods [] = {
+    {AMQP_0_10_METHOD_EXECUTION_SYNC,       "execution.sync"},
+    {AMQP_0_10_METHOD_EXECUTION_RESULT,     "execution.result"},
+    {AMQP_0_10_METHOD_EXECUTION_EXCEPTION,  "execution.exception"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_message_methods [] = {
+    {AMQP_0_10_METHOD_MESSAGE_TRANSFER,      "message.transfer"},
+    {AMQP_0_10_METHOD_MESSAGE_ACCEPT,        "message.accept"},
+    {AMQP_0_10_METHOD_MESSAGE_REJECT,        "message.reject"},
+    {AMQP_0_10_METHOD_MESSAGE_RELEASE,       "message.release"},
+    {AMQP_0_10_METHOD_MESSAGE_ACQUIRE,       "message.acquire"},
+    {AMQP_0_10_METHOD_MESSAGE_RESUME,        "message.resume"},
+    {AMQP_0_10_METHOD_MESSAGE_SUBSCRIBE,     "message.subscribe"},
+    {AMQP_0_10_METHOD_MESSAGE_CANCEL,        "message.cancel"},
+    {AMQP_0_10_METHOD_MESSAGE_SET_FLOW_MODE, "message.set-flow-mode"},
+    {AMQP_0_10_METHOD_MESSAGE_FLOW,          "message.flow"},
+    {AMQP_0_10_METHOD_MESSAGE_FLUSH,         "message.flush"},
+    {AMQP_0_10_METHOD_MESSAGE_STOP,          "message.stop"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_tx_methods [] = {
+    {AMQP_0_10_METHOD_TX_SELECT,    "tx.select"},
+    {AMQP_0_10_METHOD_TX_COMMIT,    "tx.commit"},
+    {AMQP_0_10_METHOD_TX_ROLLBACK,  "tx.rollback"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_dtx_methods [] = {
+    {AMQP_0_10_METHOD_DTX_SELECT,       "dtx.select"},
+    {AMQP_0_10_METHOD_DTX_START,        "dtx.start"},
+    {AMQP_0_10_METHOD_DTX_END,          "dtx.end"},
+    {AMQP_0_10_METHOD_DTX_COMMIT,       "dtx.commit"},
+    {AMQP_0_10_METHOD_DTX_FORGET,       "dtx.forget"},
+    {AMQP_0_10_METHOD_DTX_GET_TIMEOUT,  "dtx.get-timeout"},
+    {AMQP_0_10_METHOD_DTX_PREPARE,      "dtx.prepare"},
+    {AMQP_0_10_METHOD_DTX_RECOVER,      "dtx.recover"},
+    {AMQP_0_10_METHOD_DTX_ROLLBACK,     "dtx.rollback"},
+    {AMQP_0_10_METHOD_DTX_SET_TIMEOUT,  "dtx.set-timeout"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_exchange_methods [] = {
+    {AMQP_0_10_METHOD_EXCHANGE_DECLARE,  "exchange.declare"},
+    {AMQP_0_10_METHOD_EXCHANGE_DELETE,   "exchange.delete"},
+    {AMQP_0_10_METHOD_EXCHANGE_QUERY,    "exchange.query"},
+    {AMQP_0_10_METHOD_EXCHANGE_BIND,     "exchange.bind"},
+    {AMQP_0_10_METHOD_EXCHANGE_UNBIND,   "exchange.unbind"},
+    {AMQP_0_10_METHOD_EXCHANGE_BOUND,    "exchange.bound"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_queue_methods [] = {
+    {AMQP_0_10_METHOD_QUEUE_DECLARE,  "queue.declare"},
+    {AMQP_0_10_METHOD_QUEUE_DELETE,   "queue.delete"},
+    {AMQP_0_10_METHOD_QUEUE_PURGE,    "queue.purge"},
+    {AMQP_0_10_METHOD_QUEUE_QUERY,    "queue.query"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_file_methods [] = {
+    {AMQP_0_10_METHOD_FILE_QOS,         "file.qos"},
+    {AMQP_0_10_METHOD_FILE_QOS_OK,      "file.qos-ok"},
+    {AMQP_0_10_METHOD_FILE_CONSUME,     "file.consume"},
+    {AMQP_0_10_METHOD_FILE_CONSUME_OK,  "file.consume-ok"},
+    {AMQP_0_10_METHOD_FILE_CANCEL,      "file.cancel"},
+    {AMQP_0_10_METHOD_FILE_OPEN,        "file.open"},
+    {AMQP_0_10_METHOD_FILE_OPEN_OK,     "file.open-ok"},
+    {AMQP_0_10_METHOD_FILE_STAGE,       "file.stage"},
+    {AMQP_0_10_METHOD_FILE_PUBLISH,     "file.publish"},
+    {AMQP_0_10_METHOD_FILE_RETURN,      "file.return"},
+    {AMQP_0_10_METHOD_FILE_DELIVER,     "file.deliver"},
+    {AMQP_0_10_METHOD_FILE_ACK,         "file.ack"},
+    {AMQP_0_10_METHOD_FILE_REJECT,      "file.reject"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_stream_methods [] = {
+    {AMQP_0_10_METHOD_STREAM_QOS,         "stream.qos"},
+    {AMQP_0_10_METHOD_STREAM_QOS_OK,      "stream.qos-ok"},
+    {AMQP_0_10_METHOD_STREAM_CONSUME,     "stream.consume"},
+    {AMQP_0_10_METHOD_STREAM_CONSUME_OK,  "stream.consume-ok"},
+    {AMQP_0_10_METHOD_STREAM_CANCEL,      "stream.cancel"},
+    {AMQP_0_10_METHOD_STREAM_PUBLISH,     "stream.publish"},
+    {AMQP_0_10_METHOD_STREAM_RETURN,      "stream.return"},
+    {AMQP_0_10_METHOD_STREAM_DELIVER,     "stream.deliver"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_method_connection_close_reply_codes [] = {
+    {200,   "normal"},
+    {320,   "connection-forced"},
+    {402,   "invalid-path"},
+    {501,   "framing-error"},
+    {0, NULL}
+};
+
+static const true_false_string amqp_0_10_session_header_sync = {
+    "notification requested", "notification NOT requested"
+};
+
+static const value_string amqp_0_10_method_session_detached_codes [] = {
+    {0,    "normal"},
+    {1,    "session-busy"},
+    {2,    "transport-busy"},
+    {3,    "not-attached"},
+    {4,    "unknown-ids"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_method_execution_exception_errors [] = {
+    {403,   "unauthorized-access"},
+    {404,   "not-found"},
+    {405,   "resource-locked"},
+    {406,   "precondition-failed"},
+    {408,   "resource-deleted"},
+    {409,   "illegal-state"},
+    {503,   "command-invalid"},
+    {506,   "resource-limit-exceeded"},
+    {530,   "not-allowed"},
+    {531,   "illegal-argument"},
+    {540,   "not-implemented"},
+    {541,   "internal-error"},
+    {542,   "invalid-argument"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_message_transfer_accept_modes [] = {
+    {0,    "explicit"},
+    {1,    "none"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_message_transfer_acquire_modes [] = {
+    {0,    "pre-acquired"},
+    {1,    "not-acquired"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_message_transfer_reject_codes [] = {
+    {0,    "unspecified"},
+    {1,    "unroutable"},
+    {2,    "immediate"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_message_flow_modes [] = {
+    {0,    "credit"},
+    {1,    "window"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_message_credit_units [] = {
+    {0,    "message"},
+    {1,    "byte"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_xa_status [] = {
+    {0,    "Normal execution completion. (xa-ok)"},
+    {1,    "The rollback was caused for an unspecified reason. (xa-rbrollback)"},
+    {2,    "A transaction branch took too long. (xa-rbtimeout)"},
+    {3,    "The transaction branch may have been heuristically completed. (xa-heurhaz)"},
+    {4,    "The transaction branch has been heuristically committed. (xa-heurcom)"},
+    {5,    "The transaction branch has been heuristically rolled back. (xa-heurrb)"},
+    {6,    "The transaction branch has been heuristically committed and rolled back. (xa-heurmix)"},
+    {7,    "The transaction branch was read-only and has been committed. (xa-rdonly)"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_struct_delivery_properties_priorities [] = {
+    {0,    "lowest"},
+    {1,    "lower"},
+    {2,    "low"},
+    {3,    "below-average"},
+    {4,    "medium"},
+    {5,    "above-average"},
+    {6,    "high"},
+    {7,    "higher"},
+    {8,    "very-high"},
+    {9,    "highest"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_struct_delivery_properties_modes [] = {
+    {1,    "non-persistent"},
+    {2,    "persistent"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_file_return_codes [] = {
+    {311,    "content-too-large"},
+    {312,    "no-route"},
+    {313,    "no-consumers"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_10_stream_return_codes [] = {
+    {311,    "content-too-large"},
+    {312,    "no-route"},
+    {313,    "no-consumers"},
+    {0, NULL}
+};
+
+static const value_string amqp_0_9_frame_types [] = {
+    {AMQP_0_9_FRAME_TYPE_METHOD,             "Method"},
+    {AMQP_0_9_FRAME_TYPE_CONTENT_HEADER,     "Content header"},
+    {AMQP_0_9_FRAME_TYPE_CONTENT_BODY,       "Content body"},
+    {AMQP_0_9_FRAME_TYPE_OOB_METHOD,         "OOB Method"},
+    {AMQP_0_9_FRAME_TYPE_OOB_CONTENT_HEADER, "OOB Content header"},
+    {AMQP_0_9_FRAME_TYPE_OOB_CONTENT_BODY,   "OOB Content body"},
+    {AMQP_0_9_FRAME_TYPE_TRACE ,             "Trace"},
+    {AMQP_0_9_FRAME_TYPE_HEARTBEAT,          "Heartbeat"},
     {0, NULL}
 };
 
-static const value_string amqp_method_classes [] = {
-    {10, "Connection"},
-    {20, "Channel"},
-    {30, "Access"},
-    {40, "Exchange"},
-    {50, "Queue"},
-    {60, "Basic"},
-    {70, "File"},
-    {80, "Stream"},
-    {90, "Tx"},
-    {100, "Dtx"},
-    {110, "Tunnel"},
+static const value_string amqp_0_9_method_classes [] = {
+    {AMQP_0_9_CLASS_CONNECTION, "Connection"},
+    {AMQP_0_9_CLASS_CHANNEL,    "Channel"},
+    {AMQP_0_9_CLASS_ACCESS,     "Access"},
+    {AMQP_0_9_CLASS_EXCHANGE,   "Exchange"},
+    {AMQP_0_9_CLASS_QUEUE,      "Queue"},
+    {AMQP_0_9_CLASS_BASIC,      "Basic"},
+    {AMQP_0_9_CLASS_FILE,       "File"},
+    {AMQP_0_9_CLASS_STREAM,     "Stream"},
+    {AMQP_0_9_CLASS_TX,         "Tx"},
+    {AMQP_0_9_CLASS_DTX,        "Dtx"},
+    {AMQP_0_9_CLASS_TUNNEL,     "Tunnel"},
     {0, NULL}
 };
 
@@ -972,139 +1811,3983 @@ static const value_string amqp_method_tunnel_methods [] = {
     {0, NULL}
 };
 
+/*  AMQP 0-10 Type Info  */
+static struct amqp_typeinfo amqp_0_10_fixed_types[] = {
+    { 0x00, "bin8",    format_amqp_0_10_bin,     1 },
+    { 0x01, "int8",    format_amqp_0_10_int,     1 },
+    { 0x02, "uint8",   format_amqp_0_10_uint,    1 },
+    { 0x04, "char",    format_amqp_0_10_char,    1 },
+    { 0x08, "boolean", format_amqp_0_10_boolean, 1 },
+    { 0x10, "bin16",   format_amqp_0_10_bin,     2 },
+    { 0x11, "int16",   format_amqp_0_10_int,     2 },
+    { 0x12, "uint16",  format_amqp_0_10_uint,    2 },
+    { 0x20, "bin32",   format_amqp_0_10_bin,     4 },
+    { 0x21, "int32",   format_amqp_0_10_int,     4 },
+    { 0x22, "uint32",  format_amqp_0_10_uint,    4 },
+    { 0xff, "end", 0, 0 }
+};
+
+static struct amqp_typeinfo amqp_0_10_var_types[] = {
+    { 0x80, "vbin8",   format_amqp_0_10_vbin, 1 },
+    { 0x95, "str16",   format_amqp_0_10_str, 2 },
+    { 0xff, "end", 0, 0 }
+};
+
+
 /*  Main dissection routine  */
 
 static void
 dissect_amqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
+    conversation_t *conv;
+    amqp_conv *conn;
+    guint fixed_length;
+    guint (*length_getter)(packet_info *, tvbuff_t *, int);
+    dissector_t dissector;
+
     /*  Minimal frame size is 8 bytes - smaller frames are malformed  */
-    DISSECTOR_ASSERT (tvb_length (tvb) >= 8);
+    if (tvb_reported_length (tvb) < 8) {
+        expert_add_info_format(pinfo, NULL, PI_MALFORMED, PI_ERROR,
+                               "Require frame at least 8 bytes long");
+        return;
+    }
+
+    /* Find (or build) conversation to remember the protocol version */
+    conv = find_or_create_conversation(pinfo);
+    conn = conversation_get_proto_data(conv, proto_amqp);
+    if (conn == NULL) {
+        conn = se_alloc0(sizeof(amqp_conv));
+        conversation_add_proto_data(conv, proto_amqp, conn);
+    }
+    check_amqp_version(tvb, conn);
+    switch(conn->version) {
+    case AMQP_V0_9:
+        length_getter = &get_amqp_0_9_message_len;
+        dissector = dissect_amqp_0_9_frame;
+        fixed_length = 7;
+        break;
+    case AMQP_V0_10:
+        length_getter = &get_amqp_0_10_message_len;
+        dissector = dissect_amqp_0_10_frame;
+        fixed_length = 8;
+        break;
+    default:
+        if (tree != 0 && check_col(pinfo->cinfo, COL_INFO)) {
+            col_append_str(pinfo->cinfo, COL_INFO, "AMQP (unknown version)");
+            col_set_fence(pinfo->cinfo, COL_INFO);
+        }
+        return;
+    }
+    tcp_dissect_pdus(tvb, pinfo, tree, TRUE, fixed_length,
+                     length_getter, dissector);
+}
+
+static void
+check_amqp_version(tvbuff_t *tvb, amqp_conv *conn)
+{
+    guint8 proto_major;
+    guint8 proto_minor;
+    guint32 f0_9_length;
+
+    /*
+     * If we already know and the version and this isn't a protocol header,
+     * return ok. 0-10 and up can run protocol headers in each direction,
+     * so if it looks like a protocol header, snag the version even if one
+     * is already recorded. Multi-protocol brokers can negotiate down.
+     */
+    if (conn->version != 0 && tvb_get_guint8(tvb, 0) != 'A')
+        return;
+
+    if (tvb_get_guint8(tvb, 0) == 'A' &&
+        tvb_get_guint8(tvb, 1) == 'M' &&
+        tvb_get_guint8(tvb, 2) == 'Q' &&
+        tvb_get_guint8(tvb, 3) == 'P') {
+
+        proto_major = tvb_get_guint8(tvb, 6);
+        proto_minor = tvb_get_guint8(tvb, 7);
+        if (proto_major == 0) {
+            if (proto_minor == 9)
+                conn->version = AMQP_V0_9;
+            else if (proto_minor == 10)
+                conn->version = AMQP_V0_10;
+        }
+        return;
+    }
 
-    tcp_dissect_pdus(tvb, pinfo, tree, TRUE, 7,
-        get_amqp_message_len, dissect_amqp_frame);
+    /*
+     * It's not a protocol header and the AMQP version isn't known. Try to
+     * deduce it from the content. First indicator is the frame length. 0-9
+     * has a 32-bit length in octets 3-7. If the frame length is the same
+     * as the PDU length and there's a frame end where it should be, this
+     * is 0-9. Else assume 0-10.
+     */
+    f0_9_length = tvb_get_ntohl(tvb, 3) + 7 + 1; /* Add header and end */
+    if (f0_9_length == tvb_reported_length(tvb) &&
+        tvb_get_guint8(tvb, f0_9_length - 1) == 0xCE)
+        conn->version = AMQP_V0_9;
+    else
+        conn->version = AMQP_V0_10;
+    return;
 }
 
 static guint
-get_amqp_message_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset)
+get_amqp_0_10_message_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset)
 {
     /*  Heuristic - protocol initialisation frame starts with 'AMQP'  */
-    if (tvb_get_guint8(tvb, 0) == 'A' &&
-          tvb_get_guint8(tvb, 1) == 'M' &&
-          tvb_get_guint8(tvb, 2) == 'Q' &&
-          tvb_get_guint8(tvb, 3) == 'P')
+    if (tvb_get_guint8(tvb, offset + 0) == 'A' &&
+        tvb_get_guint8(tvb, offset + 1) == 'M' &&
+        tvb_get_guint8(tvb, offset + 2) == 'Q' &&
+        tvb_get_guint8(tvb, offset + 3) == 'P')
+        return 8;
+
+    return (guint) tvb_get_ntohs(tvb, offset + 2);
+}
+
+static guint
+get_amqp_0_9_message_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset)
+{
+    guint32 length;
+
+    /*  Heuristic - protocol initialisation frame starts with 'AMQP'  */
+    if (tvb_get_guint8(tvb, offset + 0) == 'A' &&
+          tvb_get_guint8(tvb, offset + 1) == 'M' &&
+          tvb_get_guint8(tvb, offset + 2) == 'Q' &&
+          tvb_get_guint8(tvb, offset + 3) == 'P')
         return 8;
 
-    return (guint) tvb_get_ntohl(tvb, offset + 3) + 8;
+    /*
+     * XXX - the location of the length differs from protocol version to
+     * protocol version; for now, we only handle version 0-9, and we
+     * clamp the length at 1MB so we don't go nuts if we get a bogus
+     * length due to dissecting the wrong version (or getting a malformed
+     * packet).
+     */
+    length = tvb_get_ntohl(tvb, offset + 3);
+    if (length > 1048576)
+        length = 1048576;
+    return length + 8;
 }
 
-/*  Dissection routine for AMQP field tables  */
+/*  Dissection routine for AMQP 0-9 field tables  */
 
 static void
-dissect_amqp_field_table(tvbuff_t *tvb, int offset, int bound, int length, proto_item *item)
+dissect_amqp_0_9_field_table(tvbuff_t *tvb, packet_info *pinfo, int offset, guint length, proto_item *item)
 {
-    proto_item *field_table_tree;
-    char *buff;
+    proto_tree *field_table_tree;
     guint namelen, vallen;
     guint8 type;
     const char *name;
     const char *typename;
     const char *value;
     int field_start;
-
-    buff = ep_alloc(64);
+    proto_item *ti;
 
     field_table_tree = proto_item_add_subtree(item, ett_amqp);
 
-    while (length > 0) {
+    while (length != 0) {
         field_start = offset;
         namelen = tvb_get_guint8(tvb, offset);
-        AMQP_INCREMENT(offset, 1, bound);
+        offset += 1;
         length -= 1;
+        if (length < namelen)
+            goto too_short;
         name = (char*) tvb_get_ephemeral_string(tvb, offset, namelen);
-        AMQP_INCREMENT(offset, namelen, bound);
+        offset += namelen;
         length -= namelen;
+        if (length < 1)
+            goto too_short;
         type = tvb_get_guint8(tvb, offset);
-        AMQP_INCREMENT(offset, 1, bound);
+        offset += 1;
         length -= 1;
         switch (type) {
         case 'S':
             typename = "string";
+            if (length < 4)
+                goto too_short;
             vallen = tvb_get_ntohl(tvb, offset);
-            AMQP_INCREMENT(offset, 4, bound);
+            offset += 4;
             length -= 4;
+            if (length < vallen)
+                goto too_short;
             value = (char*) tvb_get_ephemeral_string(tvb, offset, vallen);
-            AMQP_INCREMENT(offset, vallen, bound);
+            offset += vallen;
             length -= vallen;
             break;
         case 'I':
             typename = "integer";
-            g_snprintf(buff, 64, "%ld", (long) tvb_get_ntohl(tvb, offset));
-            value = buff;
-            AMQP_INCREMENT(offset, 4, bound);
-            length -= 4;  
+            if (length < 4)
+                goto too_short;
+            value = ep_strdup_printf("%d", tvb_get_ntohl(tvb, offset));
+            offset += 4;
+            length -= 4;
             break;
         case 'D':
             typename = "decimal";
+            if (length < 5)
+                goto too_short;
             value = "...";
-            AMQP_INCREMENT(offset, 5, bound);
-            length -= 5; 
+            offset += 5;
+            length -= 5;
             break;
         case 'T':
             typename =  "timestamp";
+            if (length < 8)
+                goto too_short;
             value = "...";
-            AMQP_INCREMENT(offset, 8, bound);
-            length -= 8; 
+            offset += 8;
+            length -= 8;
             break;
         case 'F':
             /*  TODO: make it recursive here  */
             typename =  "field table";
+            if (length < 4)
+                goto too_short;
             vallen = tvb_get_ntohl(tvb, offset);
-            AMQP_INCREMENT(offset, 4, bound);
+            offset += 4;
             length -= 4;
             value = "...";
-            AMQP_INCREMENT(offset, vallen, bound);
+            if (length < vallen)
+                goto too_short;
+            offset += vallen;
             length -= vallen;
             break;
         case 'V':
             typename = "void";
             value = "";
+            break;
         default:
             typename = "";
+            value = NULL;
+            break;
+        }
+
+        if (value != NULL)
+            proto_tree_add_none_format(field_table_tree, hf_amqp_field, tvb,
+                                       field_start, offset - field_start,
+                                       "%s (%s): %s", name, typename,
+                                       value);
+        else
+            proto_tree_add_none_format(field_table_tree, hf_amqp_field, tvb,
+                                       field_start, offset - field_start,
+                                       "%s: unknown type %x (%c)",
+                                       name, type, type);
+    }
+    return;
+
+too_short:
+    ti = proto_tree_add_text(field_table_tree, tvb, field_start,
+                        offset - field_start,
+                        "Field is cut off by the end of the field table");
+    expert_add_info_format(pinfo, ti,
+                           PI_PROTOCOL, PI_ERROR,
+                           "Field is cut off by the end of the field table");
+    return;
+}
+
+/*  Dissection routine for AMQP 0-10 maps  */
+
+static void
+dissect_amqp_0_10_map(tvbuff_t *tvb,
+                      int offset,          /* Start of map in tvb */
+                      int bound,           /* How far into tvb we can go */
+                      int length,          /* Length of map */
+                      proto_item *item)
+{
+    proto_item *map_tree;
+    guint namelen, size;
+    guint8 type;
+    const char *name;
+    const char *typename;
+    const char *value;
+    gint field_start, field_length;
+    guint32 field_count;
+    type_formatter formatter;
+
+    field_length = 0;
+    map_tree = proto_item_add_subtree(item, ett_amqp_0_10_map);
+    field_count = tvb_get_ntohl(tvb, offset);
+    AMQP_INCREMENT(offset, 4, bound);
+    length -= 4;
+    proto_item_append_text(item, " (%d entries)", field_count);
+    while (field_count > 0 && length > 0) {
+        field_start = offset;
+        namelen = tvb_get_guint8(tvb, offset);
+        AMQP_INCREMENT(offset, 1, bound);
+        length -= 1;
+        name = (char*) tvb_get_ephemeral_string(tvb, offset, namelen);
+        AMQP_INCREMENT(offset, namelen, bound);
+        length -= namelen;
+        type = tvb_get_guint8(tvb, offset);
+        AMQP_INCREMENT(offset, 1, bound);
+        length -= 1;
+        if (get_amqp_0_10_type_formatter(type, &typename, &formatter, &size)) {
+            field_length = formatter(tvb, offset, bound, size, &value);
+            proto_tree_add_none_format(map_tree,
+                                       hf_amqp_field,
+                                       tvb,
+                                       field_start,
+                                       field_length,
+                                       "%s (%s): %s",
+                                       name, typename, value);
+            AMQP_INCREMENT(offset, field_length, bound);
+            length -= field_length;
+        }
+        else {
+            switch (type) {
+            case AMQP_0_10_TYPE_MAP:
+            case AMQP_0_10_TYPE_LIST:
+            case AMQP_0_10_TYPE_ARRAY:
+                field_length = tvb_get_ntohl(tvb, offset);
+                proto_tree_add_none_format(map_tree, hf_amqp_field,
+                                           tvb, field_start, field_length,
+                                           "%s (composite): %d bytes",
+                                           name, field_length);
+                AMQP_INCREMENT(offset, field_length, bound);
+                length -= field_length;
+                break;
+
+            default:
+                typename = "unimplemented";
+                if ((type & 0x80) == 0) {
+                    field_length = 2 ^ ((type & 0x70) >> 4);
+                }
+                else if ((type & 0xd0) == 0xd0) {
+                    field_length = 9;
+                }
+                else if ((type & 0xc0) == 0xc0) {
+                    field_length = 5;
+                }
+                else if ((type & 0x80) == 0x80) {
+                    switch (2 ^ ((type & 0x70) >> 4)) {
+                    case 1:
+                        field_length += tvb_get_guint8(tvb, offset);
+                        break;
+                    case 2:
+                        field_length += tvb_get_ntohs(tvb, offset);
+                        break;
+                    case 4:
+                        field_length += tvb_get_ntohl(tvb, offset);
+                        break;
+                    default:
+                        field_length = 1;    /* Reserved... skip 1 */
+                        typename = "reserved";
+                        break;
+                    }
+                }
+                else {
+                    field_length = 1;    /* Reserved... skip 1 */
+                    typename = "reserved";
+                }
+                proto_tree_add_none_format(map_tree, hf_amqp_field,
+                                           tvb, field_start, field_length,
+                                           "%s (%s): %d bytes",
+                                           name, typename, field_length);
+                AMQP_INCREMENT(offset, field_length, bound);
+                length -= field_length;
+            }
+        }
+
+        field_count -= 1;
+    }
+}
+
+/*  Dissection routine for AMQP 0-10 maps  */
+
+static void
+dissect_amqp_0_10_array(tvbuff_t *tvb,
+                        int offset,          /* Start of array in tvb */
+                        int bound,           /* How far into tvb we can go */
+                        int length,          /* Length of array */
+                        proto_item *item)
+{
+    proto_item *array_tree;
+    proto_item *sub;
+    guint8 type;
+    guint16 len16;
+    const char *typename;
+    const char *value;
+    int element_start;
+    int externally_formatted;
+    guint32 element_count;
+    guint32 struct_length;
+
+    array_tree = 0;
+    type = tvb_get_guint8(tvb, offset);
+    AMQP_INCREMENT(offset, 1, bound);
+    length -= 1;
+    element_count = tvb_get_ntohl(tvb, offset);
+    AMQP_INCREMENT(offset, 4, bound);
+    length -= 4;
+    proto_item_append_text(item, " (%d elements)", element_count);
+    if (element_count > 1)
+        array_tree = proto_item_add_subtree(item, ett_amqp_0_10_array);
+    while (element_count > 0 && length > 0) {
+        element_start = offset;
+        externally_formatted = 0;
+        switch (type) {
+        case AMQP_0_10_TYPE_STR16:
+            typename = "str16";
+            len16 = tvb_get_ntohs(tvb, offset);
+            AMQP_INCREMENT(offset, 2, bound);
+            length -= 2;
+            value = (char*) tvb_get_ephemeral_string(tvb, offset, len16);
+            AMQP_INCREMENT(offset, len16, bound);
+            length -= len16;
+            break;
+
+        case AMQP_0_10_TYPE_STRUCT32:
+            typename = "struct32";
+            externally_formatted = 1;
+            struct_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, bound);
+            length -= 4;
+            /*
+             * Always add a tree for structs - the struct formatter will
+             * change the item text to the struct type then add elements to it.
+             */
+            if (array_tree == 0)
+                array_tree = proto_item_add_subtree(item, ett_amqp_0_10_array);
+            sub = proto_tree_add_none_format(array_tree, hf_amqp_field, tvb,
+                                             element_start,
+                                             offset - element_start,
+                                             "(%s): ", typename);
+            dissect_amqp_0_10_struct32(tvb, sub, offset, struct_length);
+            AMQP_INCREMENT(offset, struct_length, bound);
+            length -= struct_length;
+            break;
+
+        default:
+            typename = 0;
             value = "";
-            DISSECTOR_ASSERT(FALSE);
         }
-
-        proto_tree_add_none_format(field_table_tree, hf_amqp_field, tvb,
-            field_start, offset - field_start, "%s (%s): %s", name, typename,
-            value);
+
+        element_count -= 1;
+        if (externally_formatted)
+            continue;
+
+        if (array_tree != 0) {
+            if (typename != 0)
+                proto_tree_add_none_format(array_tree, hf_amqp_field, tvb,
+                                           element_start,
+                                           offset - element_start,
+                                           "(%s): %s",
+                                           typename,
+                                           value);
+            else
+                proto_tree_add_none_format(array_tree, hf_amqp_field, tvb,
+                                           element_start,
+                                           offset - element_start,
+                                           "(unknown type %d)",
+                                           type);
+        }
+        else {
+            if (typename != 0)
+                proto_item_append_text(item, ": (%s): %s", typename, value);
+            else
+                proto_item_append_text(item, ": (unknown type %d)", type);
+        }
+    }
+}
+
+static void
+dissect_amqp_0_10_xid (tvbuff_t *tvb,
+                       int offset,
+                       guint16 xid_length,
+                       proto_item *ti)
+{
+    proto_item *xid_tree;
+    guint8 flag1, flag2;
+    guint8 len8;
+    int max_length;
+
+    max_length = offset + xid_length;
+    xid_tree = proto_item_add_subtree(ti, ett_args);
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    proto_tree_add_item(xid_tree, hf_amqp_0_10_argument_packing_flags,
+                        tvb, offset, 2, FALSE);
+    AMQP_INCREMENT(offset, 2, max_length);
+    if (flag1 & 0x01) {
+        /*  format (uint32) */
+        proto_tree_add_item(xid_tree,
+                            hf_amqp_0_10_dtx_xid_format,
+                            tvb, offset, 4, FALSE);
+        AMQP_INCREMENT(offset, 4, max_length);
+    }
+    if (flag1 & 0x02) {
+        /* global-id (vbin8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        if ((offset + 1 + len8) > max_length)
+            THROW(ReportedBoundsError);
+        proto_tree_add_item(xid_tree,
+                            hf_amqp_0_10_dtx_xid_global_id,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);            
+    }
+    if (flag1 & 0x04) {
+        /* branch-id (vbin8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        if ((offset + 1 + len8) > max_length)
+            THROW(ReportedBoundsError);
+        proto_tree_add_item(xid_tree,
+                            hf_amqp_0_10_dtx_xid_branch_id,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);            
+    }
+}
+
+/*  Dissection routine for AMQP 0-10 frames  */
+
+static void
+dissect_amqp_0_10_connection(tvbuff_t *tvb,
+                             packet_info *pinfo,
+                             proto_tree *tree,
+                             int offset, guint16 length)
+{
+    proto_item *args_tree;
+    proto_item *ti;
+    proto_item *flags_item;
+    guint8 method;
+    guint8 flag1, flag2;           /* args struct packing flags */
+    guint32 arg_length;
+    int flags_offset;
+    const gchar* method_name;
+
+    method = tvb_get_guint8(tvb, offset+1);
+    method_name = match_strval(method, amqp_0_10_connection_methods);
+    if (method_name == NULL)
+        method_name = "<invalid connection method>";
+    if (check_col(pinfo->cinfo, COL_INFO)) {
+        col_append_str(pinfo->cinfo, COL_INFO, method_name);
+        col_append_str(pinfo->cinfo, COL_INFO, " ");
+        col_set_fence(pinfo->cinfo, COL_INFO);
+    }
+
+    proto_tree_add_item(tree, hf_amqp_0_10_connection_method,
+                        tvb, offset+1, 1, FALSE);              
+    ti = proto_tree_add_item(tree, hf_amqp_method_arguments,
+                             tvb, offset + 2, length - 2, FALSE);
+    args_tree = proto_item_add_subtree(ti, ett_args);
+    AMQP_INCREMENT(offset, 2, length);
+    /*
+     * The flag bits are a simple bit string, not a net-byte-order
+     * field. tvb_get_bits16() doesn't know how to do little-endian
+     * at this time, so just pick out two bytes.
+     */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    AMQP_INCREMENT(offset, 2, length);    
+    switch (method) {
+    case AMQP_0_10_METHOD_CONNECTION_START:
+        if ((flag1 & ~0x07) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  server-properties (map)  */
+            arg_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_method_connection_start_server_properties,
+                                     tvb,
+                                     offset,
+                                     arg_length, FALSE);
+            dissect_amqp_0_10_map (tvb,
+                                   offset,
+                                   offset + arg_length,
+                                   arg_length,
+                                   ti);
+            AMQP_INCREMENT(offset, arg_length, length);
+        }
+        if (flag1 & 0x02) {
+            /*  mechanisms (str16-array)  */
+            arg_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_connection_start_mechanisms,
+                                     tvb,
+                                     offset,
+                                     arg_length, FALSE);
+            dissect_amqp_0_10_array (tvb,
+                                     offset,
+                                     offset + arg_length,
+                                     arg_length,
+                                     ti);
+            AMQP_INCREMENT(offset, arg_length, length);
+        }
+        if (flag1 & 0x04) {
+            /*  locales (str16-array)  */
+            arg_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_connection_start_locales,
+                                     tvb,
+                                     offset,
+                                     arg_length, FALSE);
+            dissect_amqp_0_10_array (tvb,
+                                     offset,
+                                     offset + arg_length,
+                                     arg_length,
+                                     ti);
+            AMQP_INCREMENT(offset, arg_length, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_CONNECTION_START_OK:
+        if ((flag1 & ~0x0f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  client-properties (map)  */
+            arg_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_method_connection_start_ok_client_properties,
+                                     tvb,
+                                     offset,
+                                     arg_length, FALSE);
+            dissect_amqp_0_10_map (tvb,
+                                   offset,
+                                   offset + arg_length,
+                                   arg_length,
+                                   ti);
+            AMQP_INCREMENT(offset, arg_length, length);
+        }
+        if (flag1 & 0x02) {
+            /*  mechanism (str8)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_method_connection_start_ok_mechanism,
+                                tvb, offset + 1, tvb_get_guint8(tvb, offset),
+                                FALSE);
+            AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), length);
+        }
+        if (flag1 & 0x04) {
+            /*  response (vbin32)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_method_connection_start_ok_response,
+                                tvb, offset + 4, tvb_get_ntohl(tvb, offset),
+                                FALSE);
+            AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), length);
+        }
+        if (flag1 & 0x08) {
+            /*  locale (str8)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_method_connection_start_ok_locale,
+                                tvb, offset + 1, tvb_get_guint8(tvb, offset),
+                                FALSE);
+            AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_CONNECTION_SECURE:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  challenge (vbin32)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_method_connection_secure_challenge,
+                                tvb, offset + 4, tvb_get_ntohl(tvb, offset),
+                                FALSE);
+            AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_CONNECTION_SECURE_OK:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  response (vbin32)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_method_connection_secure_ok_response,
+                                tvb, offset + 4, tvb_get_ntohl(tvb, offset),
+                                FALSE);
+            AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_CONNECTION_TUNE:
+        if ((flag1 & ~0x0f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  channel-max (uint16)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_method_connection_tune_channel_max,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+        }
+        if (flag1 & 0x02) {
+            /*  max-frame-size (uint16)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_connection_tune_frame_max,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+        }
+        if (flag1 & 0x04) {
+            /*  heartbeat-min (uint16)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_connection_tune_heartbeat_min,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+        }
+        if (flag1 & 0x08) {
+            /*  heartbeat-max (uint16)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_connection_tune_heartbeat_max,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_CONNECTION_TUNE_OK:
+        if ((flag1 & ~0x07) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  channel-max (uint16)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_method_connection_tune_ok_channel_max,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+        }
+        if (flag1 & 0x02) {
+            /*  max-frame-size (uint16)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_connection_tune_ok_frame_max,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+        }
+        if (flag1 & 0x04) {
+            /*  heartbeat (uint16)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_method_connection_tune_ok_heartbeat,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_CONNECTION_OPEN:
+        if ((flag1 & ~0x07) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  virtual-host (str8)  */
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_method_connection_open_virtual_host,
+                                     tvb,
+                                     offset + 1,
+                                     tvb_get_guint8(tvb, offset), FALSE);
+            AMQP_INCREMENT(offset, tvb_get_guint8(tvb, offset) + 1, length);
+        }
+        if (flag1 & 0x02) {
+            /*  capabilities (str16-array)  */
+            arg_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_connection_open_capabilities,
+                                     tvb,
+                                     offset,
+                                     arg_length, FALSE);
+            dissect_amqp_0_10_array (tvb,
+                                     offset,
+                                     offset + arg_length,
+                                     arg_length,
+                                     ti);
+            AMQP_INCREMENT(offset, arg_length, length);
+        }
+        /*
+         * 3rd argument is an optional bit, insist.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_connection_open_insist,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_CONNECTION_OPEN_OK:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  known-hosts (amqp-host-array)  */
+            arg_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_connection_open_ok_known_hosts,
+                                     tvb,
+                                     offset,
+                                     arg_length, FALSE);
+            dissect_amqp_0_10_array (tvb,
+                                     offset,
+                                     offset + arg_length,
+                                     arg_length,
+                                     ti);
+            AMQP_INCREMENT(offset, arg_length, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_CONNECTION_REDIRECT:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  host (amqp-host-url [str16])  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_method_connection_redirect_host,
+                                tvb, offset + 2, tvb_get_ntohs(tvb, offset),
+                                FALSE);
+            AMQP_INCREMENT(offset, 2 + tvb_get_ntohs(tvb, offset), length);
+        }
+        if (flag1 & 0x02) {
+            /*  known-hosts (amqp-host-array)  */
+            arg_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_connection_redirect_known_hosts,
+                                     tvb,
+                                     offset,
+                                     arg_length, FALSE);
+            dissect_amqp_0_10_array (tvb,
+                                     offset,
+                                     offset + arg_length,
+                                     arg_length,
+                                     ti);
+            AMQP_INCREMENT(offset, arg_length, length);
+        }
+        break;
+        
+    case AMQP_0_10_METHOD_CONNECTION_HEARTBEAT:
+        break;
+
+    case AMQP_0_10_METHOD_CONNECTION_CLOSE:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  reply-code (uint16)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_connection_close_reply_code,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+        }
+        if (flag1 & 0x02) {
+            /*  reply-text (str8)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_method_connection_close_reply_text,
+                                tvb, offset + 1, tvb_get_guint8(tvb, offset),
+                                FALSE);
+            AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), length);
+        }
+        break;
+        
+    case AMQP_0_10_METHOD_CONNECTION_CLOSE_OK:
+        break;
+    }
+}
+
+static void
+dissect_amqp_0_10_session(tvbuff_t *tvb,
+                          packet_info *pinfo,
+                          proto_tree *tree,
+                          int offset, guint16 length)
+{
+    proto_item *args_tree;
+    proto_item *ti;
+    proto_item *flags_item;
+    guint8 method;
+    guint8 flag1, flag2;
+    guint16 size;
+    guint32 array_size;
+    int flags_offset;
+    const gchar* method_name;
+
+    method = tvb_get_guint8(tvb, offset+1);
+    method_name = match_strval(method, amqp_0_10_session_methods);
+    if (method_name == NULL)
+        method_name = "<invalid session method>";
+    if (check_col(pinfo->cinfo, COL_INFO)) {
+        col_append_str(pinfo->cinfo, COL_INFO, method_name);
+        col_append_str(pinfo->cinfo, COL_INFO, " ");
+        col_set_fence(pinfo->cinfo, COL_INFO);
+    }
+
+    proto_tree_add_item(tree, hf_amqp_0_10_session_method,
+                        tvb, offset+1, 1, FALSE);              
+    AMQP_INCREMENT(offset, 2, length);
+
+    ti = proto_tree_add_item(tree, hf_amqp_method_arguments,
+                             tvb, offset, length - 2, FALSE);
+    args_tree = proto_item_add_subtree(ti, ett_args);
+    /*
+     * The flag bits are a simple bit string, not a net-byte-order
+     * field. tvb_get_bits16() doesn't know how to do little-endian
+     * at this time, so just pick out two bytes.
+     */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+    switch (method) {
+    case AMQP_0_10_METHOD_SESSION_ATTACH:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  name (vbin16)  */
+            size = tvb_get_ntohs(tvb, offset);
+            AMQP_INCREMENT(offset, 2, length);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_session_attach_name,
+                                tvb, offset, size, FALSE);
+            AMQP_INCREMENT(offset, size, length);
+        }
+        /*
+         * 2nd argument is an optional bit, force.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_session_attach_force,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_SESSION_ATTACHED:
+    case AMQP_0_10_METHOD_SESSION_DETACH:
+        if ((flag1 != 0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  name (vbin16)  */
+            size = tvb_get_ntohs(tvb, offset);
+            AMQP_INCREMENT(offset, 2, length);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_session_attach_name,
+                                tvb, offset, size, FALSE);
+            AMQP_INCREMENT(offset, size, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_SESSION_DETACHED:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  name (vbin16)  */
+            size = tvb_get_ntohs(tvb, offset);
+            AMQP_INCREMENT(offset, 2, length);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_session_attach_name,
+                                tvb, offset, size, FALSE);
+            AMQP_INCREMENT(offset, size, length);
+        }
+        if (flag1 & 0x02) {
+            /*  code (detach-code [uint8]) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_session_detached_code,
+                                tvb, offset, 1, FALSE);
+            AMQP_INCREMENT(offset, 1, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_SESSION_REQUEST_TIMEOUT:
+    case AMQP_0_10_METHOD_SESSION_TIMEOUT:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  timeout (uint32)  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_session_timeout,
+                                tvb, offset, 4, FALSE);
+            AMQP_INCREMENT(offset, 4, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_SESSION_COMMAND_POINT:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  command-id (sequence-no [uint32])  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_session_command_point_id,
+                                tvb, offset, 4, FALSE);
+            AMQP_INCREMENT(offset, 4, length);
+        }
+        if (flag1 & 0x02) {
+            /*  command-offset (uint64) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_session_command_point_offset,
+                                tvb, offset, 8, FALSE);
+            AMQP_INCREMENT(offset, 8, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_SESSION_EXPECTED:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  commands (commands [sequence-set])  */
+            size = tvb_get_ntohs(tvb, offset);
+            if ((offset + 2 + size) > length)
+                THROW(ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_session_commands,
+                                     tvb, offset, size + 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+            format_amqp_0_10_sequence_set(tvb, offset, size, ti);
+            AMQP_INCREMENT(offset, size + 2, length);
+        }
+        if (flag1 & 0x02) {
+            /*  fragments (command-fragments [array of command-fragment]) */
+            array_size = tvb_get_ntohl(tvb, offset);
+            if ((offset + 4 + array_size) > length)
+                THROW(ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_session_fragments,
+                                     tvb, offset, array_size + 4, FALSE);
+            AMQP_INCREMENT(offset, 4, length);
+            dissect_amqp_0_10_array(tvb,
+                                    offset,
+                                    offset + array_size,
+                                    length,
+                                    ti);
+            AMQP_INCREMENT(offset, array_size, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_SESSION_CONFIRMED:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  commands (commands [sequence-set])  */
+            size = tvb_get_ntohs(tvb, offset);
+            if ((offset + 2 + size) > length)
+                THROW(ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_session_commands,
+                                     tvb, offset, size + 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+            format_amqp_0_10_sequence_set(tvb, offset, size, ti);
+            AMQP_INCREMENT(offset, size + 2, length);
+        }
+        if (flag1 & 0x02) {
+            /*  fragments (command-fragments [array of command-fragment]) */
+            array_size = tvb_get_ntohl(tvb, offset);
+            if ((offset + 4 + array_size) > length)
+                THROW(ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_session_fragments,
+                                     tvb, offset, array_size + 4, FALSE);
+            AMQP_INCREMENT(offset, 4, length);
+            dissect_amqp_0_10_array(tvb,
+                                    offset,
+                                    offset + array_size,
+                                    length,
+                                    ti);
+            AMQP_INCREMENT(offset, array_size, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_SESSION_COMPLETED:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  commands (commands [sequence-set])  */
+            size = tvb_get_ntohs(tvb, offset);
+            if ((offset + 2 + size) > length)
+                THROW(ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_session_commands,
+                                     tvb, offset, size + 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+            format_amqp_0_10_sequence_set(tvb, offset, size, ti);
+            AMQP_INCREMENT(offset, size, length);
+        }
+        /*
+         * 2nd argument is an optional bit, timely-reply.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_session_completed_timely,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_SESSION_KNOWN_COMPLETED:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  commands (commands [sequence-set])  */
+            size = tvb_get_ntohs(tvb, offset);
+            if ((offset + 2 + size) > length)
+                THROW(ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_session_commands,
+                                     tvb, offset, size + 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+            format_amqp_0_10_sequence_set(tvb, offset, size, ti);
+            AMQP_INCREMENT(offset, size, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_SESSION_FLUSH:
+        if ((flag1 & ~0x07) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_session_flush_expected,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_session_flush_confirmed,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_session_flush_completed,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_SESSION_GAP:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  commands (commands [sequence-set])  */
+            size = tvb_get_ntohs(tvb, offset);
+            if ((offset + 2 + size) > length)
+                THROW(ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_session_commands,
+                                     tvb, offset, size + 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+            format_amqp_0_10_sequence_set(tvb, offset, size, ti);
+            AMQP_INCREMENT(offset, size + 2, length);
+        }
+        break;
+
+    }
+}
+
+static void
+dissect_amqp_0_10_execution(tvbuff_t *tvb,
+                            packet_info *pinfo,
+                            proto_tree *tree,
+                            int offset, guint16 length)
+{
+    proto_item *args_tree;
+    proto_item *ti;
+    proto_item *flags_item;
+    guint8 class = 0, method;
+    guint8 flag1, flag2;
+    guint16 size;
+    guint32 struct_size;
+    int class_hf, flags_offset;
+    const gchar* method_name;
+
+    method = tvb_get_guint8(tvb, offset+1);
+    method_name = match_strval(method, amqp_0_10_execution_methods);
+    if (method_name == NULL)
+        method_name = "<invalid execution method>";
+    if (check_col(pinfo->cinfo, COL_INFO)) {
+        col_append_str(pinfo->cinfo, COL_INFO, method_name);
+        col_append_str(pinfo->cinfo, COL_INFO, " ");
+        col_set_fence(pinfo->cinfo, COL_INFO);
+    }
+
+    proto_tree_add_item(tree, hf_amqp_0_10_execution_method,
+                        tvb, offset+1, 1, FALSE);              
+    AMQP_INCREMENT(offset, 2, length);
+    /*
+     * Session header is 2 bytes; one that tells it's 1 byte long, then
+     * the byte itself. Bit 0 is sync.
+     */
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    if (flag1 != 1 || (flag2 & 0xfe) != 0)
+        proto_tree_add_text(tree, tvb, offset, 2, "Invalid session header");
+    else
+        proto_tree_add_item(tree, hf_amqp_0_10_session_header_sync,
+                            tvb, offset + 1, 1, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+
+    ti = proto_tree_add_item(tree, hf_amqp_method_arguments,
+                             tvb, offset, length - 4, FALSE);
+    args_tree = proto_item_add_subtree(ti, ett_args);
+    /*
+     * The flag bits are a simple bit string, not a net-byte-order
+     * field. tvb_get_bits16() doesn't know how to do little-endian
+     * at this time, so just pick out two bytes.
+     */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+    switch (method) {
+    case AMQP_0_10_METHOD_EXECUTION_SYNC:
+        if (flag1 != 0 || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        break;
+
+    case AMQP_0_10_METHOD_EXECUTION_RESULT:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  command-id (sequence-no [uint32])  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_execution_command_id,
+                                tvb, offset, 4, FALSE);
+            AMQP_INCREMENT(offset, 4, length);
+        }
+        if (flag1 & 0x02) {
+            /*  value (struct32) */
+            struct_size = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            if ((offset + struct_size) > length)
+                THROW(ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_undissected_struct32,
+                                     tvb, offset, struct_size, FALSE);
+            dissect_amqp_0_10_struct32(tvb, ti, offset, struct_size);
+            AMQP_INCREMENT(offset, struct_size, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_EXECUTION_EXCEPTION:
+        if ((flag1 & ~0x7f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /* error-code (error-code [uint16]) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_execution_exception_error,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+        }
+        if (flag1 & 0x02) {
+            /*  command-id (sequence-no [uint32])  */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_execution_command_id,
+                                tvb, offset, 4, FALSE);
+            AMQP_INCREMENT(offset, 4, length);
+        }
+        if (flag1 & 0x04) {
+            /*  class-code (uint8) */
+            class = tvb_get_guint8(tvb, offset);
+            proto_tree_add_item(args_tree, hf_amqp_0_10_class,
+                                tvb, offset, 1, FALSE);
+            AMQP_INCREMENT(offset, 1, length);
+        }
+        if (flag1 & 0x08) {
+            /*  command-code (uint8) */
+            switch(class) {
+            case AMQP_0_10_CLASS_CONNECTION:
+                class_hf = hf_amqp_0_10_connection_method;
+                break;
+            case AMQP_0_10_CLASS_SESSION:
+                class_hf = hf_amqp_0_10_session_method;
+                break;
+            case AMQP_0_10_CLASS_EXECUTION:
+                class_hf = hf_amqp_0_10_execution_method;
+                break;
+            case AMQP_0_10_CLASS_MESSAGE:
+                class_hf = hf_amqp_0_10_message_method;
+                break;
+            case AMQP_0_10_CLASS_TX:
+                class_hf = hf_amqp_0_10_tx_method;
+                break;
+            case AMQP_0_10_CLASS_DTX:
+                class_hf = hf_amqp_0_10_dtx_method;
+                break;
+            case AMQP_0_10_CLASS_EXCHANGE:
+                class_hf = hf_amqp_0_10_exchange_method;
+                break;
+            case AMQP_0_10_CLASS_QUEUE:
+                class_hf = hf_amqp_0_10_queue_method;
+                break;
+            case AMQP_0_10_CLASS_FILE:
+                class_hf = hf_amqp_0_10_file_method;
+                break;
+            case AMQP_0_10_CLASS_STREAM:
+                class_hf = hf_amqp_0_10_stream_method;
+                break;
+            default:
+                class_hf = -1;
+                break;
+            }
+            if (class_hf != -1)
+                proto_tree_add_item(args_tree, class_hf,
+                                    tvb, offset, 1, FALSE);
+            else
+                expert_add_info_format(pinfo, args_tree, PI_PROTOCOL, PI_WARN,
+                                       "Invalid class code %x", class);
+            AMQP_INCREMENT(offset, 1, length);
+        }
+        if (flag1 & 0x10) {
+            /*  field-index (uint8) */
+            proto_tree_add_item(args_tree, hf_amqp_0_10_method_execution_field_index,
+                                tvb, offset, 1, FALSE);
+            AMQP_INCREMENT(offset, 1, length);
+        }
+        if (flag1 & 0x20) {
+            /*  description (str16) */
+            size = tvb_get_ntohs(tvb, offset);
+            if ((offset + 2 + size) > length)
+                THROW(ReportedBoundsError);
+            proto_tree_add_item(args_tree, hf_amqp_0_10_method_execution_description,
+                                tvb, offset + 2, size, FALSE);
+            AMQP_INCREMENT(offset, (2 + size), length);
+        }
+        if (flag1 & 0x40) {
+            /*  error-info (map) */
+            struct_size = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_execution_error_info,
+                                     tvb,
+                                     offset,
+                                     struct_size, FALSE);
+            dissect_amqp_0_10_map (tvb,
+                                   offset,
+                                   offset + struct_size,
+                                   struct_size,
+                                   ti);
+            AMQP_INCREMENT(offset, struct_size, length);
+        }
+        break;
+    }
+}
+
+static void
+dissect_amqp_0_10_message(tvbuff_t *tvb,
+                          packet_info *pinfo,
+                          proto_tree *tree,
+                          int offset, guint16 length)
+{
+    proto_item *args_tree;
+    proto_item *ti;
+    proto_item *flags_item;
+    guint8 method, str_size;
+    guint8 flag1, flag2;
+    guint16 size;
+    guint32 map_size;
+    int flags_offset;
+    const gchar* method_name;
+
+    method = tvb_get_guint8(tvb, offset+1);
+    method_name = match_strval(method, amqp_0_10_message_methods);
+    if (method_name == NULL)
+        method_name = "<invalid message method>";
+    if (check_col(pinfo->cinfo, COL_INFO)) {
+        col_append_str(pinfo->cinfo, COL_INFO, method_name);
+        col_append_str(pinfo->cinfo, COL_INFO, " ");
+        col_set_fence(pinfo->cinfo, COL_INFO);
+    }
+
+    proto_tree_add_item(tree, hf_amqp_0_10_message_method,
+                        tvb, offset+1, 1, FALSE);              
+    AMQP_INCREMENT(offset, 2, length);
+    /*
+     * Session header is 2 bytes; one that tells it's 1 byte long, then
+     * the byte itself. Bit 0 is sync.
+     */
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    if (flag1 != 1 || (flag2 & 0xfe) != 0)
+        proto_tree_add_text(tree, tvb, offset, 2, "Invalid session header");
+    else
+        proto_tree_add_item(tree, hf_amqp_0_10_session_header_sync,
+                            tvb, offset + 1, 1, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+
+    ti = proto_tree_add_item(tree, hf_amqp_method_arguments,
+                             tvb, offset, length - 4, FALSE);
+    args_tree = proto_item_add_subtree(ti, ett_args);
+    /*
+     * The flag bits are a simple bit string, not a net-byte-order
+     * field. tvb_get_bits16() doesn't know how to do little-endian
+     * at this time, so just pick out two bytes.
+     */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+    switch (method) {
+    case AMQP_0_10_METHOD_MESSAGE_TRANSFER:
+        if ((flag1 & ~0x07) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* destination (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            if ((offset + 1 + str_size) > length)
+                THROW(ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_transfer_destination,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* accept-mode (accept-mode [uint8]) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_transfer_accept_mode,
+                                tvb, offset, 1, FALSE);
+            AMQP_INCREMENT(offset, 1, length);            
+        }
+        if (flag1 & 0x04) {     /* acquire-mode (acquire-mode [uint8]) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_transfer_acquire_mode,
+                                tvb, offset, 1, FALSE);
+            AMQP_INCREMENT(offset, 1, length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_MESSAGE_ACCEPT:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  transfers (session.commands [sequence-set])  */
+            size = tvb_get_ntohs(tvb, offset);
+            if ((offset + 2 + size) > length)
+                THROW(ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_message_accept_transfers,
+                                     tvb, offset, size + 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+            format_amqp_0_10_sequence_set(tvb, offset, size, ti);
+            AMQP_INCREMENT(offset, size, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_MESSAGE_REJECT:
+        if ((flag1 & ~0x07) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  transfers (session.commands [sequence-set])  */
+            size = tvb_get_ntohs(tvb, offset);
+            THROW_ON(((offset + 2 + size) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_message_accept_transfers,
+                                     tvb, offset, size + 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+            format_amqp_0_10_sequence_set(tvb, offset, size, ti);
+            AMQP_INCREMENT(offset, size, length);
+        }
+        if (flag1 & 0x02) {     /* reject-code (reject-code [uint16]) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_transfer_reject_code,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);            
+        }
+        if (flag1 & 0x04) {     /* text (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_reject_text,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_MESSAGE_RELEASE:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  transfers (session.commands [sequence-set])  */
+            size = tvb_get_ntohs(tvb, offset);
+            THROW_ON(((offset + 2 + size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_accept_transfers,
+                                tvb, offset, size + 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+            format_amqp_0_10_sequence_set(tvb, offset, size, ti);
+            AMQP_INCREMENT(offset, size, length);
+        }
+        /*
+         * 2nd argument is an optional bit, set-redelivered.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_message_release_set_redelivered,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_MESSAGE_ACQUIRE:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  transfers (session.commands [sequence-set])  */
+            size = tvb_get_ntohs(tvb, offset);
+            THROW_ON(((offset + 2 + size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_accept_transfers,
+                                tvb, offset, size + 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);
+            format_amqp_0_10_sequence_set(tvb, offset, size, ti);
+            AMQP_INCREMENT(offset, size, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_MESSAGE_RESUME:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  destination (destination [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_dest,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, 1 + str_size, length);
+        }
+        if (flag1 & 0x02) {
+            /*  resume-id (resume-id [str16]) */
+            size = tvb_get_ntohs(tvb, offset);
+            THROW_ON(((offset + 2 + size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_resume_id,
+                                tvb, offset + 2, size, FALSE);
+            AMQP_INCREMENT(offset, 2 + size, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_MESSAGE_SUBSCRIBE:
+        if (flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  queue (queue.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_subscribe_queue,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, 1 + str_size, length);
+        }
+        if (flag1 & 0x02) {
+            /*  destination (destination [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_dest,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, 1 + str_size, length);
+        }
+        if (flag1 & 0x04) {     /* accept-mode (accept-mode [uint8]) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_transfer_accept_mode,
+                                tvb, offset, 1, FALSE);
+            AMQP_INCREMENT(offset, 1, length);            
+        }
+        if (flag1 & 0x08) {     /* acquire-mode (acquire-mode [uint8]) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_transfer_acquire_mode,
+                                tvb, offset, 1, FALSE);
+            AMQP_INCREMENT(offset, 1, length);            
+        }
+        /*
+         * 5th argument is an optional bit, exclusive.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_message_subscribe_exclusive,
+                            tvb, flags_offset, 1, FALSE);
+        if (flag1 & 0x20) {
+            /*  resume-id (resume-id [str16]) */
+            size = tvb_get_ntohs(tvb, offset);
+            THROW_ON(((offset + 2 + size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_resume_id,
+                                tvb, offset, 2 + size, FALSE);
+            AMQP_INCREMENT(offset, 2 + size, length);
+        }
+        if (flag1 & 0x40) {
+            /*  resume-ttl (uint64) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_subscribe_resume_ttl,
+                                tvb, offset, 8, FALSE);
+            AMQP_INCREMENT(offset, 8, length);
+        }
+        if (flag1 & 0x80) {
+            /*  arguments (map) */
+            map_size = tvb_get_ntohl(tvb, offset);
+            THROW_ON(((offset + 4 + map_size) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_message_subscribe_args,
+                                     tvb,
+                                     offset,
+                                     4 + map_size, FALSE);
+            dissect_amqp_0_10_map (tvb,
+                                   offset + 4,
+                                   offset + 4 + map_size,
+                                   map_size,
+                                   ti);
+            AMQP_INCREMENT(offset, 4 + map_size, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_MESSAGE_CANCEL:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  destination (destination [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_dest,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, 1 + str_size, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_MESSAGE_SET_FLOW_MODE:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  destination (destination [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_dest,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, 1 + str_size, length);
+        }
+        if (flag1 & 0x02) {
+            /*  flow-mode (flow-mode [uint8]) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_flow_mode,
+                                tvb, offset, 1, FALSE);
+            AMQP_INCREMENT(offset, 1, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_MESSAGE_FLOW:
+        if ((flag1 & ~0x07) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  destination (destination [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_dest,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, 1 + str_size, length);
+        }
+        if (flag1 & 0x02) {
+            /*  unit (credit-unit [uint8]) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_credit_unit,
+                                tvb, offset, 1, FALSE);
+            AMQP_INCREMENT(offset, 1, length);
+        }
+        if (flag1 & 0x04) {
+            /*  value (uint32) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_credit_value,
+                                tvb, offset, 4, FALSE);
+            AMQP_INCREMENT(offset, 4, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_MESSAGE_FLUSH:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  destination (destination [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_dest,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, 1 + str_size, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_MESSAGE_STOP:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {
+            /*  destination (destination [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_message_dest,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, 1 + str_size, length);
+        }
+        break;
+    }
+}
+
+static void
+dissect_amqp_0_10_tx(tvbuff_t *tvb,
+                     packet_info *pinfo,
+                     proto_tree *tree,
+                     int offset, guint16 length)
+{
+    guint8 method;
+    guint8 flag1, flag2;
+    const gchar* method_name;
+
+    method = tvb_get_guint8(tvb, offset+1);
+    method_name = match_strval(method, amqp_0_10_tx_methods);
+    if (method_name == NULL)
+        method_name = "<invalid tx method>";
+    if (check_col(pinfo->cinfo, COL_INFO)) {
+        col_append_str(pinfo->cinfo, COL_INFO, method_name);
+        col_append_str(pinfo->cinfo, COL_INFO, " ");
+        col_set_fence(pinfo->cinfo, COL_INFO);
+    }
+
+    proto_tree_add_item(tree, hf_amqp_0_10_tx_method,
+                        tvb, offset+1, 1, FALSE);              
+    AMQP_INCREMENT(offset, 2, length);
+    /*
+     * Session header is 2 bytes; one that tells it's 1 byte long, then
+     * the byte itself. Bit 0 is sync.
+     */
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    if (flag1 != 1 || (flag2 & 0xfe) != 0)
+        proto_tree_add_text(tree, tvb, offset, 2, "Invalid session header");
+    else
+        proto_tree_add_item(tree, hf_amqp_0_10_session_header_sync,
+                            tvb, offset + 1, 1, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+
+    /* No args on any method in this class */
+}
+
+static void
+dissect_amqp_0_10_dtx(tvbuff_t *tvb,
+                      packet_info *pinfo,
+                      proto_tree *tree,
+                      int offset, guint16 length)
+{
+    proto_item *args_tree;
+    proto_item *ti;
+    proto_item *flags_item;
+    guint8 method;
+    guint8 flag1, flag2;
+    guint16 xid_length;
+    int flags_offset;
+    const gchar* method_name;
+
+    method = tvb_get_guint8(tvb, offset+1);
+    method_name = match_strval(method, amqp_0_10_dtx_methods);
+    if (method_name == NULL)
+        method_name = "<invalid dtx method>";
+    if (check_col(pinfo->cinfo, COL_INFO)) {
+        col_append_str(pinfo->cinfo, COL_INFO, method_name);
+        col_append_str(pinfo->cinfo, COL_INFO, " ");
+        col_set_fence(pinfo->cinfo, COL_INFO);
+    }
+
+    proto_tree_add_item(tree, hf_amqp_0_10_dtx_method,
+                        tvb, offset+1, 1, FALSE);              
+    AMQP_INCREMENT(offset, 2, length);
+    /*
+     * Session header is 2 bytes; one that tells it's 1 byte long, then
+     * the byte itself. Bit 0 is sync.
+     */
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    if (flag1 != 1 || (flag2 & 0xfe) != 0)
+        proto_tree_add_text(tree, tvb, offset, 2, "Invalid session header");
+    else
+        proto_tree_add_item(tree, hf_amqp_0_10_session_header_sync,
+                            tvb, offset + 1, 1, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+
+    /* No args for dtx.select or dtx.recover */
+    if (method == AMQP_0_10_METHOD_DTX_SELECT ||
+        method == AMQP_0_10_METHOD_DTX_RECOVER)
+        return;
+
+    ti = proto_tree_add_item(tree, hf_amqp_method_arguments,
+                             tvb, offset, length - 4, FALSE);
+    args_tree = proto_item_add_subtree(ti, ett_args);
+
+    /*
+     * The flag bits are a simple bit string, not a net-byte-order
+     * field. tvb_get_bits16() doesn't know how to do little-endian
+     * at this time, so just pick out two bytes.
+     */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+    switch (method) {
+    case AMQP_0_10_METHOD_DTX_START:
+        if ((flag1 & ~0x07) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* xid (xid) */
+            xid_length = tvb_get_ntohs(tvb, offset);
+            AMQP_INCREMENT(offset, 2, length);
+            THROW_ON(((offset + xid_length) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_dtx_xid,
+                                     tvb,
+                                     offset - 2,
+                                     xid_length + 2, FALSE);
+            dissect_amqp_0_10_xid (tvb,
+                                   offset,
+                                   xid_length,
+                                   ti);
+            AMQP_INCREMENT(offset, xid_length, length);
+        }
+        /*
+         * 2nd, 3rd arguments are optional bits.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_dtx_start_join,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_dtx_start_resume,
+                            tvb, flags_offset, 1, FALSE);
+
+        break;
+
+    case AMQP_0_10_METHOD_DTX_END:
+        if ((flag1 & ~0x07) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* xid (xid) */
+            xid_length = tvb_get_ntohs(tvb, offset);
+            AMQP_INCREMENT(offset, 2, length);
+            THROW_ON(((offset + xid_length) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_dtx_xid,
+                                     tvb,
+                                     offset - 2,
+                                     xid_length + 2, FALSE);
+            dissect_amqp_0_10_xid (tvb,
+                                   offset,
+                                   xid_length,
+                                   ti);
+            AMQP_INCREMENT(offset, xid_length, length);
+        }
+        /*
+         * 2nd, 3rd arguments are optional bits.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_dtx_end_fail,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_dtx_end_suspend,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_DTX_COMMIT:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* xid (xid) */
+            xid_length = tvb_get_ntohs(tvb, offset);
+            AMQP_INCREMENT(offset, 2, length);
+            THROW_ON(((offset + xid_length) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_dtx_xid,
+                                     tvb,
+                                     offset - 2,
+                                     xid_length + 2, FALSE);
+            dissect_amqp_0_10_xid (tvb,
+                                   offset,
+                                   xid_length,
+                                   ti);
+            AMQP_INCREMENT(offset, xid_length, length);
+        }
+        /*
+         * 2nd argument is an optional bit.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_dtx_commit_one_phase,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_DTX_FORGET:
+    case AMQP_0_10_METHOD_DTX_GET_TIMEOUT:
+    case AMQP_0_10_METHOD_DTX_PREPARE:
+    case AMQP_0_10_METHOD_DTX_ROLLBACK:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* xid (xid) */
+            xid_length = tvb_get_ntohs(tvb, offset);
+            AMQP_INCREMENT(offset, 2, length);
+            THROW_ON(((offset + xid_length) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_dtx_xid,
+                                     tvb,
+                                     offset - 2,
+                                     xid_length + 2, FALSE);
+            dissect_amqp_0_10_xid (tvb,
+                                   offset,
+                                   xid_length,
+                                   ti);
+            AMQP_INCREMENT(offset, xid_length, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_DTX_SET_TIMEOUT:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* xid (xid) */
+            xid_length = tvb_get_ntohs(tvb, offset);
+            AMQP_INCREMENT(offset, 2, length);
+            THROW_ON(((offset + xid_length) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_dtx_xid,
+                                     tvb,
+                                     offset - 2,
+                                     xid_length + 2, FALSE);
+            dissect_amqp_0_10_xid (tvb,
+                                   offset,
+                                   xid_length,
+                                   ti);
+            AMQP_INCREMENT(offset, xid_length, length);
+        }
+        if (flag1 & 0x02) {    /* timeout (uint32) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_dtx_set_timeout_timeout,
+                                tvb, offset, 4, FALSE);
+            AMQP_INCREMENT(offset, 4, length);            
+        }
+        break;
+
+    }
+}
+
+static void
+dissect_amqp_0_10_exchange(tvbuff_t *tvb,
+                           packet_info *pinfo,
+                           proto_tree *tree,
+                           int offset, guint16 length)
+{
+    proto_item *args_tree;
+    proto_item *ti;
+    proto_item *flags_item;
+    guint8 method;
+    guint8 flag1, flag2;
+    guint8 str_size;
+    guint32 map_length;
+    int flags_offset;
+    const gchar* method_name;
+
+    method = tvb_get_guint8(tvb, offset+1);
+    method_name = match_strval(method, amqp_0_10_exchange_methods);
+    if (method_name == NULL)
+        method_name = "<invalid exchange method>";
+    if (check_col(pinfo->cinfo, COL_INFO)) {
+        col_append_str(pinfo->cinfo, COL_INFO, method_name);
+        col_append_str(pinfo->cinfo, COL_INFO, " ");
+        col_set_fence(pinfo->cinfo, COL_INFO);
+    }
+
+    proto_tree_add_item(tree, hf_amqp_0_10_exchange_method,
+                        tvb, offset+1, 1, FALSE);              
+    AMQP_INCREMENT(offset, 2, length);
+    /*
+     * Session header is 2 bytes; one that tells it's 1 byte long, then
+     * the byte itself. Bit 0 is sync.
+     */
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    if (flag1 != 1 || (flag2 & 0xfe) != 0)
+        proto_tree_add_text(tree, tvb, offset, 2, "Invalid session header");
+    else
+        proto_tree_add_item(tree, hf_amqp_0_10_session_header_sync,
+                            tvb, offset + 1, 1, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+
+    ti = proto_tree_add_item(tree, hf_amqp_method_arguments,
+                             tvb, offset, length - 4, FALSE);
+    args_tree = proto_item_add_subtree(ti, ett_args);
+
+    /*
+     * The flag bits are a simple bit string, not a net-byte-order
+     * field. tvb_get_bits16() doesn't know how to do little-endian
+     * at this time, so just pick out two bytes.
+     */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+    switch (method) {
+    case AMQP_0_10_METHOD_EXCHANGE_DECLARE:
+        if ((flag1 & ~0x7f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* exchange (name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_declare_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* type (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_declare_type,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x04) {     /* alternate-exchange (name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_declare_alt_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        /*
+         * 4th-6th arguments are optional bits.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_exchange_declare_passive,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_exchange_declare_durable,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_exchange_declare_auto_delete,
+                            tvb, flags_offset, 1, FALSE);
+        if (flag1 & 0x40) {     /* arguments (map) */
+            map_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            THROW_ON(((offset + map_length) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_exchange_declare_arguments,
+                                     tvb,
+                                     offset - 4,
+                                     map_length + 4, FALSE);
+            dissect_amqp_0_10_map (tvb,
+                                   offset,
+                                   offset + map_length,
+                                   map_length,
+                                   ti);
+            AMQP_INCREMENT(offset, map_length, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_EXCHANGE_DELETE:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* exchange (name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_declare_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        /*
+         * 2nd argument is an optional bit.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_exchange_delete_if_unused,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_EXCHANGE_QUERY:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* exchange (name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_declare_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_EXCHANGE_BIND:
+        if ((flag1 & ~0x0f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* queue (queue.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_bind_queue,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* exchange (name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_declare_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x04) {     /* binding-key (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_binding_key,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x08) {     /* arguments (map) */
+            map_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            THROW_ON(((offset + map_length) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_exchange_declare_arguments,
+                                     tvb,
+                                     offset - 4,
+                                     map_length + 4, FALSE);
+            dissect_amqp_0_10_map (tvb,
+                                   offset,
+                                   offset + map_length,
+                                   map_length,
+                                   ti);
+            AMQP_INCREMENT(offset, map_length, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_EXCHANGE_UNBIND:
+        if ((flag1 & ~0x07) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* queue (queue.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_bind_queue,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* exchange (name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_declare_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x04) {     /* binding-key (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_binding_key,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_EXCHANGE_BOUND:
+        if ((flag1 & ~0x0f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* exchange (name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_declare_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* queue (queue.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_bind_queue,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x04) {     /* binding-key (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_exchange_binding_key,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x08) {     /* arguments (map) */
+            map_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            THROW_ON(((offset + map_length) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_exchange_declare_arguments,
+                                     tvb,
+                                     offset - 4,
+                                     map_length + 4, FALSE);
+            dissect_amqp_0_10_map (tvb,
+                                   offset,
+                                   offset + map_length,
+                                   map_length,
+                                   ti);
+            AMQP_INCREMENT(offset, map_length, length);
+        }
+        break;
+    }
+}
+
+static void
+dissect_amqp_0_10_queue(tvbuff_t *tvb,
+                        packet_info *pinfo,
+                        proto_tree *tree,
+                        int offset, guint16 length)
+{
+    proto_item *args_tree;
+    proto_item *ti;
+    proto_item *flags_item;
+    guint8 method;
+    guint8 flag1, flag2;
+    guint8 str_size;
+    guint32 map_length;
+    int flags_offset;
+    const gchar* method_name;
+
+    method = tvb_get_guint8(tvb, offset+1);
+    method_name = match_strval(method, amqp_0_10_queue_methods);
+    if (method_name == NULL)
+        method_name = "<invalid queue method>";
+    if (check_col(pinfo->cinfo, COL_INFO)) {
+        col_append_str(pinfo->cinfo, COL_INFO, method_name);
+        col_append_str(pinfo->cinfo, COL_INFO, " ");
+        col_set_fence(pinfo->cinfo, COL_INFO);
+    }
+
+    proto_tree_add_item(tree, hf_amqp_0_10_queue_method,
+                        tvb, offset+1, 1, FALSE);              
+    AMQP_INCREMENT(offset, 2, length);
+    /*
+     * Session header is 2 bytes; one that tells it's 1 byte long, then
+     * the byte itself. Bit 0 is sync.
+     */
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    if (flag1 != 1 || (flag2 & 0xfe) != 0)
+        proto_tree_add_text(tree, tvb, offset, 2, "Invalid session header");
+    else
+        proto_tree_add_item(tree, hf_amqp_0_10_session_header_sync,
+                            tvb, offset + 1, 1, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+
+    ti = proto_tree_add_item(tree, hf_amqp_method_arguments,
+                             tvb, offset, length - 4, FALSE);
+    args_tree = proto_item_add_subtree(ti, ett_args);
+
+    /*
+     * The flag bits are a simple bit string, not a net-byte-order
+     * field. tvb_get_bits16() doesn't know how to do little-endian
+     * at this time, so just pick out two bytes.
+     */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+    switch (method) {
+    case AMQP_0_10_METHOD_QUEUE_DECLARE:
+        if ((flag1 & ~0x7f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* queue (name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_queue_name,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* alternate-exchange (exchange.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_queue_alt_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        /*
+         * 3rd-6th arguments are optional bits.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_queue_declare_passive,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_queue_declare_durable,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_queue_declare_exclusive,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_queue_declare_auto_delete,
+                            tvb, flags_offset, 1, FALSE);
+        if (flag1 & 0x40) {     /* arguments (map) */
+            map_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            THROW_ON(((offset + map_length) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_queue_declare_arguments,
+                                     tvb,
+                                     offset - 4,
+                                     map_length + 4, FALSE);
+            dissect_amqp_0_10_map (tvb,
+                                   offset,
+                                   offset + map_length,
+                                   map_length,
+                                   ti);
+            AMQP_INCREMENT(offset, map_length, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_QUEUE_DELETE:
+        if ((flag1 & ~0x07) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* queue (name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_queue_name,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        /*
+         * 2nd-3rd arguments are optional bits.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_queue_delete_if_unused,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_queue_delete_if_empty,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_QUEUE_PURGE:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* queue (name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_queue_name,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_QUEUE_QUERY:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* queue (name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_queue_name,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        break;
+    }
+}
+
+static void
+dissect_amqp_0_10_file(tvbuff_t *tvb,
+                       packet_info *pinfo,
+                       proto_tree *tree,
+                       int offset, guint16 length)
+{
+    proto_item *args_tree;
+    proto_item *ti;
+    proto_item *flags_item;
+    guint8 method;
+    guint8 flag1, flag2;
+    guint8 str_size;
+    guint32 map_length;
+    int flags_offset;
+    const gchar* method_name;
+
+    method = tvb_get_guint8(tvb, offset+1);
+    method_name = match_strval(method, amqp_0_10_file_methods);
+    if (method_name == NULL)
+        method_name = "<invalid file method>";
+    if (check_col(pinfo->cinfo, COL_INFO)) {
+        col_append_str(pinfo->cinfo, COL_INFO, method_name);
+        col_append_str(pinfo->cinfo, COL_INFO, " ");
+        col_set_fence(pinfo->cinfo, COL_INFO);
+    }
+
+    proto_tree_add_item(tree, hf_amqp_0_10_file_method,
+                        tvb, offset+1, 1, FALSE);              
+    AMQP_INCREMENT(offset, 2, length);
+    /*
+     * Session header is 2 bytes; one that tells it's 1 byte long, then
+     * the byte itself. Bit 0 is sync.
+     */
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    if (flag1 != 1 || (flag2 & 0xfe) != 0)
+        proto_tree_add_text(tree, tvb, offset, 2, "Invalid session header");
+    else
+        proto_tree_add_item(tree, hf_amqp_0_10_session_header_sync,
+                            tvb, offset + 1, 1, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+
+    ti = proto_tree_add_item(tree, hf_amqp_method_arguments,
+                             tvb, offset, length - 4, FALSE);
+    args_tree = proto_item_add_subtree(ti, ett_args);
+
+    /*
+     * The flag bits are a simple bit string, not a net-byte-order
+     * field. tvb_get_bits16() doesn't know how to do little-endian
+     * at this time, so just pick out two bytes.
+     */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+    switch (method) {
+    case AMQP_0_10_METHOD_FILE_QOS:
+        if ((flag1 & ~0x07) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* prefetch-size (uint32) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_qos_prefetch_size,
+                                tvb, offset, 4, FALSE);
+            AMQP_INCREMENT(offset, 4, length);            
+        }
+        if (flag1 & 0x02) {     /* prefetch-count (uint16) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_qos_prefetch_count,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);            
+        }
+        /*
+         * 3rd argument is an optional bit.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_file_qos_global,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_FILE_QOS_OK:
+    case AMQP_0_10_METHOD_FILE_STAGE:
+        /* No args */
+        break;
+
+    case AMQP_0_10_METHOD_FILE_CONSUME:
+        if ((flag1 & ~0x7f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* queue (queue.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) <= length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_queue_name,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* consumer-tag (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_consumer_tag,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        /*
+         * 3rd-6th arguments are optional bits.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_file_consume_no_local,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_file_consume_no_ack,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_file_consume_exclusive,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_file_consume_nowait,
+                            tvb, flags_offset, 1, FALSE);
+        if (flag1 & 0x40) {     /* arguments (map) */
+            map_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            THROW_ON(((offset + map_length) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_file_consume_arguments,
+                                     tvb,
+                                     offset - 4,
+                                     map_length + 4, FALSE);
+            dissect_amqp_0_10_map (tvb,
+                                   offset,
+                                   offset + map_length,
+                                   map_length,
+                                   ti);
+            AMQP_INCREMENT(offset, map_length, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_FILE_CONSUME_OK:
+    case AMQP_0_10_METHOD_FILE_CANCEL:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* consumer-tag (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_consumer_tag,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_FILE_OPEN:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* identifier (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_identifier,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* content-size (uint64) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_open_content_size,
+                                tvb, offset, 8, FALSE);
+            AMQP_INCREMENT(offset, 8, length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_FILE_OPEN_OK:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* staged-size (uint64) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_open_ok_staged_size,
+                                tvb, offset, 8, FALSE);
+            AMQP_INCREMENT(offset, 8, length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_FILE_PUBLISH:
+        if ((flag1 & ~0x1f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* exchange (exchange.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_publish_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* routing-key (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_publish_routing_key,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        /*
+         * 3rd-4th arguments are optional bits.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_file_publish_mandatory,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_file_publish_immediate,
+                            tvb, flags_offset, 1, FALSE);
+        if (flag1 & 0x10) {     /* identifier (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_identifier,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_FILE_RETURN:
+        if ((flag1 & ~0x0f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* reply-code (return-code [uint16]) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_return_reply_code,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);            
+        }
+        if (flag1 & 0x02) {     /* reply-text (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_return_reply_text,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x04) {     /* exchange (exchange.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_return_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x08) {     /* routing-key (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_return_routing_key,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_FILE_DELIVER:
+        if ((flag1 & ~0x3f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* consumer-tag (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_deliver_consumer_tag,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* delivery-tag (uint64) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_deliver_delivery_tag,
+                                tvb, offset, 8, FALSE);
+            AMQP_INCREMENT(offset, 8, length);            
+        }
+        /*
+         * 3rd argument is an optional bit.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_file_deliver_redelivered,
+                            tvb, flags_offset, 1, FALSE);
+        if (flag1 & 0x08) {     /* exchange (exchange.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_deliver_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x10) {     /* routing-key (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_deliver_routing_key,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x20) {     /* identifier (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_identifier,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_FILE_ACK:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* delivery-tag (uint64) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_ack_delivery_tag,
+                                tvb, offset, 8, FALSE);
+            AMQP_INCREMENT(offset, 8, length);            
+        }
+        /*
+         * 2nd argument is an optional bit.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_file_ack_multiple,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_FILE_REJECT:
+        if ((flag1 & ~0x03) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* delivery-tag (uint64) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_file_reject_delivery_tag,
+                                tvb, offset, 8, FALSE);
+            AMQP_INCREMENT(offset, 8, length);            
+        }
+        /*
+         * 2nd argument is an optional bit.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_file_reject_requeue,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+    }
+}
+
+static void
+dissect_amqp_0_10_stream(tvbuff_t *tvb,
+                         packet_info *pinfo,
+                         proto_tree *tree,
+                         int offset, guint16 length)
+{
+    proto_item *args_tree;
+    proto_item *ti;
+    proto_item *flags_item;
+    guint8 method;
+    guint8 flag1, flag2;
+    guint8 str_size;
+    guint32 map_length;
+    int flags_offset;
+    const gchar* method_name;
+
+    method = tvb_get_guint8(tvb, offset+1);
+    method_name = match_strval(method, amqp_0_10_stream_methods);
+    if (method_name == NULL)
+        method_name = "<invalid stream method>";
+    if (check_col(pinfo->cinfo, COL_INFO)) {
+        col_append_str(pinfo->cinfo, COL_INFO, method_name);
+        col_append_str(pinfo->cinfo, COL_INFO, " ");
+        col_set_fence(pinfo->cinfo, COL_INFO);
+    }
+
+    proto_tree_add_item(tree, hf_amqp_0_10_stream_method,
+                        tvb, offset+1, 1, FALSE);              
+    AMQP_INCREMENT(offset, 2, length);
+    /*
+     * Session header is 2 bytes; one that tells it's 1 byte long, then
+     * the byte itself. Bit 0 is sync.
+     */
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    if (flag1 != 1 || (flag2 & 0xfe) != 0)
+        proto_tree_add_text(tree, tvb, offset, 2, "Invalid session header");
+    else
+        proto_tree_add_item(tree, hf_amqp_0_10_session_header_sync,
+                            tvb, offset + 1, 1, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+
+    ti = proto_tree_add_item(tree, hf_amqp_method_arguments,
+                             tvb, offset, length - 4, FALSE);
+    args_tree = proto_item_add_subtree(ti, ett_args);
+
+    /*
+     * The flag bits are a simple bit string, not a net-byte-order
+     * field. tvb_get_bits16() doesn't know how to do little-endian
+     * at this time, so just pick out two bytes.
+     */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    AMQP_INCREMENT(offset, 2, length);
+    switch (method) {
+    case AMQP_0_10_METHOD_STREAM_QOS:
+        if ((flag1 & ~0x0f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* prefetch-size (uint32) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_qos_prefetch_size,
+                                tvb, offset, 4, FALSE);
+            AMQP_INCREMENT(offset, 4, length);            
+        }
+        if (flag1 & 0x02) {     /* prefetch-count (uint16) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_qos_prefetch_count,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);            
+        }
+        if (flag1 & 0x04) {     /* consume-rate (uint32) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_qos_prefetch_size,
+                                tvb, offset, 4, FALSE);
+            AMQP_INCREMENT(offset, 4, length);            
+        }
+        /*
+         * 4th argument is an optional bit.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_stream_qos_global,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_STREAM_QOS_OK:
+        /* No args */
+        break;
+
+    case AMQP_0_10_METHOD_STREAM_CONSUME:
+        if ((flag1 & ~0x3f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* queue (queue.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_queue_name,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* consumer-tag (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_consumer_tag,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        /*
+         * 3rd-5th arguments are optional bits.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_stream_consume_no_local,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_stream_consume_exclusive,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_stream_consume_nowait,
+                            tvb, flags_offset, 1, FALSE);
+        if (flag1 & 0x20) {     /* arguments (map) */
+            map_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(offset, 4, length);
+            THROW_ON(((offset + map_length) > length), ReportedBoundsError);
+            ti = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_method_stream_consume_arguments,
+                                     tvb,
+                                     offset - 4,
+                                     map_length + 4, FALSE);
+            dissect_amqp_0_10_map (tvb,
+                                   offset,
+                                   offset + map_length,
+                                   map_length,
+                                   ti);
+            AMQP_INCREMENT(offset, map_length, length);
+        }
+        break;
+
+    case AMQP_0_10_METHOD_STREAM_CONSUME_OK:
+    case AMQP_0_10_METHOD_STREAM_CANCEL:
+        if ((flag1 & ~0x01) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* consumer-tag (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_consumer_tag,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_STREAM_PUBLISH:
+        if ((flag1 & ~0x0f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* exchange (exchange.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) <= length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_publish_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* routing-key (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_publish_routing_key,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        /*
+         * 3rd-4th arguments are optional bits.
+         */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_stream_publish_mandatory,
+                            tvb, flags_offset, 1, FALSE);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_stream_publish_immediate,
+                            tvb, flags_offset, 1, FALSE);
+        break;
+
+    case AMQP_0_10_METHOD_STREAM_RETURN:
+        if ((flag1 & ~0x0f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* reply-code (return-code [uint16]) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_return_reply_code,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(offset, 2, length);            
+        }
+        if (flag1 & 0x02) {     /* reply-text (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_return_reply_text,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x04) {     /* exchange (exchange.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_return_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x08) {     /* routing-key (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_return_routing_key,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        break;
+
+    case AMQP_0_10_METHOD_STREAM_DELIVER:
+        if ((flag1 & ~0x0f) || flag2 != 0)
+            proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+        if (flag1 & 0x01) {     /* consumer-tag (str8) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_deliver_consumer_tag,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x02) {     /* delivery-tag (uint64) */
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_deliver_delivery_tag,
+                                tvb, offset, 8, FALSE);
+            AMQP_INCREMENT(offset, 8, length);            
+        }
+        if (flag1 & 0x04) {     /* exchange (exchange.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_deliver_exchange,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        if (flag1 & 0x08) {     /* queue (queue.name [str8]) */
+            str_size = tvb_get_guint8(tvb, offset);
+            THROW_ON(((offset + 1 + str_size) > length), ReportedBoundsError);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_method_stream_deliver_queue,
+                                tvb, offset + 1, str_size, FALSE);
+            AMQP_INCREMENT(offset, (1 + str_size), length);            
+        }
+        break;
+    }
+}
+
+static void
+dissect_amqp_0_10_struct_delivery_properties(tvbuff_t *tvb,
+                                             proto_tree *tree,
+                                             int offset,
+                                             guint32 struct_length)
+{
+    proto_item *args_tree;
+    proto_item *flags_item;
+    guint8 flag1, flag2;
+    guint8 len8;
+    guint16 len16;
+    guint64 timestamp;
+    int flags_offset;
+    int max_length;
+    nstime_t tv;
+
+    max_length = offset + struct_length;
+    args_tree = proto_item_add_subtree(tree, ett_args);
+    AMQP_INCREMENT(offset, 2, max_length);  /* Skip class and struct codes */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    if (flag2 & ~0x0f)
+        proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+    AMQP_INCREMENT(offset, 2, max_length);
+
+    /* First 3 fields are bits */
+    proto_tree_add_item(args_tree,
+                        hf_amqp_0_10_struct_delivery_properties_discard_unroutable,
+                        tvb, flags_offset, 1, FALSE);
+    proto_tree_add_item(args_tree,
+                        hf_amqp_0_10_struct_delivery_properties_immediate,
+                        tvb, flags_offset, 1, FALSE);
+    proto_tree_add_item(args_tree,
+                        hf_amqp_0_10_struct_delivery_properties_redelivered,
+                        tvb, flags_offset, 1, FALSE);
+    if (flag1 & 0x08) {
+        /* delivery-priority (delivery-priority [uint8]) */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_struct_delivery_properties_priority,
+                            tvb, offset, 1, FALSE);
+        AMQP_INCREMENT(offset, 1, max_length);
+    }
+    if (flag1 & 0x10) {
+        /* delivery-mode (delivery-mode [uint8]) */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_struct_delivery_properties_mode,
+                            tvb, offset, 1, FALSE);
+        AMQP_INCREMENT(offset, 1, max_length);
+    }
+    if (flag1 & 0x20) {
+        /* ttl (uint64) */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_struct_delivery_properties_ttl,
+                            tvb, offset, 8, FALSE);
+        AMQP_INCREMENT(offset, 8, max_length);
+    }
+    if (flag1 & 0x40) {
+        /* timestamp (datetime [uint64]) */
+        timestamp = tvb_get_ntoh64(tvb, offset);
+        tv.secs = (time_t)timestamp;
+        tv.nsecs = 0;
+        proto_tree_add_time(args_tree,
+                            hf_amqp_0_10_struct_delivery_properties_timestamp,
+                            tvb, offset, 8, &tv);
+        AMQP_INCREMENT(offset, 8, max_length);
+    }
+    if (flag1 & 0x80) {
+        /* expiration (datetime [uint64]) */
+        timestamp = tvb_get_ntoh64(tvb, offset);
+        tv.secs = (time_t)timestamp;
+        tv.nsecs = 0;
+        proto_tree_add_time(args_tree,
+                            hf_amqp_0_10_struct_delivery_properties_expiration,
+                            tvb, offset, 8, &tv);
+        AMQP_INCREMENT(offset, 8, max_length);
+    }
+    if (flag2 & 0x01) {
+        /* exchange (exchange.name [str8]) */
+        len8 = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_struct_delivery_properties_exchange,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);
+    }
+    if (flag2 & 0x02) {
+        /* routing-key (str8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_struct_delivery_properties_routing_key,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);
+    }
+    if (flag2 & 0x04) {
+        /*  resume-id (resume-id [str16]) */
+        len16 = tvb_get_ntohs(tvb, offset);
+        THROW_ON(((offset + 2 + len16) > max_length), ReportedBoundsError);
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_method_message_resume_id,
+                            tvb, offset + 2, len16, FALSE);
+        AMQP_INCREMENT(offset, (2 + len16), max_length);
+    }
+    if (flag2 & 0x08) {
+        /*  resume-ttl (uint64) */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_struct_delivery_properties_resume_ttl,
+                            tvb, offset, 8, FALSE);
+        AMQP_INCREMENT(offset, 8, max_length);
+    }
+}
+
+static void
+dissect_amqp_0_10_struct_fragment_properties(tvbuff_t *tvb,
+                                             proto_tree *tree,
+                                             int offset,
+                                             guint32 struct_length)
+{
+    proto_item *args_tree;
+    proto_item *flags_item;
+    guint8 flag1, flag2;
+    int flags_offset;
+    int max_length;
+
+    max_length = offset + struct_length;
+    args_tree = proto_item_add_subtree(tree, ett_args);
+    AMQP_INCREMENT(offset, 2, max_length);  /* Skip class and struct codes */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(args_tree,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    if ((flag1 & ~0x07) || flag2 != 0)
+        proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+    AMQP_INCREMENT(offset, 2, max_length);
+
+    /* First 2 fields are bits */
+    proto_tree_add_item(args_tree,
+                        hf_amqp_0_10_struct_fragment_properties_first,
+                        tvb, flags_offset, 1, FALSE);
+    proto_tree_add_item(args_tree,
+                        hf_amqp_0_10_struct_fragment_properties_last,
+                        tvb, flags_offset, 1, FALSE);
+    if (flag1 & 0x04) {
+        /* fragment-size (uint64) */
+        proto_tree_add_item(args_tree,
+                            hf_amqp_0_10_struct_fragment_properties_size,
+                            tvb, offset, 8, FALSE);
+        AMQP_INCREMENT(offset, 8, max_length);
+    }
+}
+
+static void
+dissect_amqp_0_10_struct_message_properties(tvbuff_t *tvb,
+                                            proto_tree *tree,
+                                            int offset,
+                                            guint32 struct_length)
+{
+    proto_item *ti;
+    proto_item *frag;
+    proto_item *args_tree;
+    proto_item *flags_item, *subflags_item;
+    guint8 flag1, flag2;
+    guint8 subflag1, subflag2;
+    guint8 len8;
+    guint16 len16;
+    guint32 map_length;
+    e_guid_t uuid;
+    int flags_offset, subflags_offset;
+    int max_length;
+
+    max_length = offset + struct_length;
+    frag = proto_item_add_subtree(tree, ett_args);
+    AMQP_INCREMENT(offset, 2, max_length);  /* Skip class and struct codes */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(frag,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    if (flag2 & ~0x01)
+        proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+    AMQP_INCREMENT(offset, 2, max_length);
+    if (flag1 & 0x01) {
+        /*  content-length (uint64) */
+        proto_tree_add_item(frag,
+                            hf_amqp_0_10_struct_message_properties_content_len,
+                            tvb, offset, 8, FALSE);
+        AMQP_INCREMENT(offset, 8, max_length);
+    }
+    if (flag1 & 0x02) {
+        /* message-id (uuid) */
+        tvb_get_guid(tvb, offset, &uuid, FALSE);
+        proto_tree_add_guid(frag,
+                            hf_amqp_0_10_struct_message_properties_message_id,
+                            tvb, offset, 16, &uuid);
+        AMQP_INCREMENT(offset, 16, max_length);
+    }
+    if (flag1 & 0x04) {
+        /* correlation-id (vbin16) */
+        len16 = tvb_get_ntohs(tvb, offset);
+        proto_tree_add_item(frag,
+                            hf_amqp_0_10_struct_message_properties_correlation,
+                            tvb, offset + 2, len16, FALSE);
+        AMQP_INCREMENT(offset, (2 + len16), max_length);
+    }
+    if (flag1 & 0x08) {
+        /* reply-to (reply-to) */
+        /* This is another struct, length 2, packing 2 */
+        len16 = tvb_get_ntohs(tvb, offset);
+        AMQP_INCREMENT(offset, 2, max_length);
+        ti = proto_tree_add_item(frag,
+                                 hf_amqp_0_10_struct_message_properties_reply_to,
+                                 tvb, offset, len16, FALSE);
+        args_tree = proto_item_add_subtree(ti, ett_args);
+        subflags_item = proto_tree_add_item(args_tree,
+                                            hf_amqp_0_10_argument_packing_flags,
+                                            tvb, offset, 2, FALSE);
+        subflags_offset = offset;
+        subflag1 = tvb_get_guint8(tvb, offset);
+        subflag2 = tvb_get_guint8(tvb, offset + 1);
+        if ((subflag1 & ~0x03) || subflag2 != 0)
+            proto_item_set_expert_flags(subflags_item, PI_PROTOCOL, PI_WARN);
+        AMQP_INCREMENT(offset, 2, max_length);
+        if (subflag1 & 0x01) {
+            /* exchange (str8) */
+            len8 = tvb_get_guint8(tvb, offset);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_struct_reply_to_exchange,
+                                tvb, offset + 1, len8, FALSE);
+            AMQP_INCREMENT(offset, (1 + len8), max_length);
+        }
+        if (subflag1 & 0x02) {
+            /* routing-key (str8) */
+            len8 = tvb_get_guint8(tvb, offset);
+            proto_tree_add_item(args_tree,
+                                hf_amqp_0_10_struct_reply_to_routing_key,
+                                tvb, offset + 1, len8, FALSE);
+            AMQP_INCREMENT(offset, (1 + len8), max_length);
+        }
+    }
+    if (flag1 & 0x10) {
+        /* content-type (str8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item(frag,
+                            hf_amqp_0_10_struct_message_properties_content_type,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);
+    }
+    if (flag1 & 0x20) {
+        /* content-encoding (str8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item(frag,
+                            hf_amqp_0_10_struct_message_properties_content_encoding,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);
+    }
+    if (flag1 & 0x40) {
+        /* user-id (vbin16 ) */
+        len16 = tvb_get_ntohs(tvb, offset);
+        proto_tree_add_item(frag,
+                            hf_amqp_0_10_struct_message_properties_user_id,
+                            tvb, offset + 2, len16, FALSE);
+        AMQP_INCREMENT(offset, (2 + len16), max_length);
+    }
+    if (flag1 & 0x80) {
+        /* app-id (vbin16 ) */
+        len16 = tvb_get_ntohs(tvb, offset);
+        proto_tree_add_item(frag,
+                            hf_amqp_0_10_struct_message_properties_app_id,
+                            tvb, offset + 2, len16, FALSE);
+        AMQP_INCREMENT(offset, (2 + len16), max_length);
+    }
+    if (flag2 & 0x01) {
+        /* application-headers (map) */
+        map_length = tvb_get_ntohl(tvb, offset);
+        AMQP_INCREMENT(offset, 4, max_length);
+        ti = proto_tree_add_item(frag,
+                                 hf_amqp_0_10_struct_message_properties_application_headers,
+                                 tvb,
+                                 offset,
+                                 map_length, FALSE);
+        dissect_amqp_0_10_map (tvb,
+                               offset,
+                               offset + map_length,
+                               map_length,
+                               ti);
+        AMQP_INCREMENT(offset, map_length, max_length);
+    }
+}
+
+static void
+dissect_amqp_0_10_struct_exchange_query_result(tvbuff_t *tvb,
+                                               proto_item *tree,
+                                               int offset,
+                                               guint32 struct_length)
+{
+    proto_item *ti;
+    proto_item *result;
+    proto_item *flags_item;
+    guint8 flag1, flag2;
+    guint8 len8;
+    guint32 map_length;
+    int flags_offset;
+    int max_length;
+
+    max_length = offset + struct_length;
+    result = proto_item_add_subtree(tree, ett_args);
+    AMQP_INCREMENT(offset, 2, max_length);  /* Skip class and struct codes */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(result,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    if (flag2 & ~0x0f)
+        proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+    AMQP_INCREMENT(offset, 2, max_length);
+    if (flag1 & 0x01) {
+        /*  type (str8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        THROW_ON(((offset + 1 + len8) > max_length), ReportedBoundsError);
+        proto_tree_add_item(result,
+                            hf_amqp_0_10_method_exchange_declare_type,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);            
+    }
+    proto_tree_add_item(result,
+                        hf_amqp_0_10_struct_exchange_query_result_durable,
+                        tvb, flags_offset, 1, FALSE);
+    proto_tree_add_item(result,
+                        hf_amqp_0_10_struct_exchange_query_result_not_found,
+                        tvb, flags_offset, 1, FALSE);
+    if (flag1 & 0x08) {
+        /*  arguments (map) */
+        map_length = tvb_get_ntohl(tvb, offset);
+        AMQP_INCREMENT(offset, 4, max_length);
+        THROW_ON(((offset + (int)map_length) > max_length), ReportedBoundsError);
+        ti = proto_tree_add_item(result,
+                                 hf_amqp_0_10_method_exchange_declare_arguments,
+                                 tvb,
+                                 offset - 4,
+                                 map_length + 4, FALSE);
+        dissect_amqp_0_10_map (tvb,
+                               offset,
+                               offset + map_length,
+                               map_length,
+                               ti);
+        AMQP_INCREMENT(offset, map_length, max_length);
+    }
+}
+
+static void
+dissect_amqp_0_10_struct_queue_query_result(tvbuff_t *tvb,
+                                            proto_item *tree,
+                                            int offset,
+                                            guint32 struct_length)
+{
+    proto_item *ti;
+    proto_item *result;
+    proto_item *flags_item;    
+    guint8 flag1, flag2;
+    guint8 len8;
+    guint32 map_length;
+    int flags_offset;
+    int max_length;
+
+    max_length = offset + struct_length;
+    result = proto_item_add_subtree(tree, ett_args);
+    AMQP_INCREMENT(offset, 2, max_length);  /* Skip class and struct codes */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(result,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+
+    if (flag2 != 0)
+        proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+    AMQP_INCREMENT(offset, 2, max_length);
+    if (flag1 & 0x01) {
+        /*  queue (name [str8]) */
+        len8 = tvb_get_guint8(tvb, offset);
+        THROW_ON(((offset + 1 + len8) > max_length), ReportedBoundsError);
+        proto_tree_add_item(result,
+                            hf_amqp_0_10_method_queue_name,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);            
+    }
+    if (flag1 & 0x02) {     /* alternate-exchange (exchange.name [str8]) */
+        len8 = tvb_get_guint8(tvb, offset);
+        THROW_ON(((offset + 1 + len8) > max_length), ReportedBoundsError);
+        proto_tree_add_item(result,
+                            hf_amqp_0_10_method_queue_alt_exchange,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);            
+    }
+    /*
+     * 3rd-5th arguments are optional bits.
+     */
+    proto_tree_add_item(result,
+                        hf_amqp_0_10_struct_queue_query_result_durable,
+                        tvb, flags_offset, 1, FALSE);
+    proto_tree_add_item(result,
+                        hf_amqp_0_10_struct_queue_query_result_exclusive,
+                        tvb, flags_offset, 1, FALSE);
+    proto_tree_add_item(result,
+                        hf_amqp_0_10_struct_queue_query_result_auto_delete,
+                        tvb, flags_offset, 1, FALSE);
+    if (flag1 & 0x20) {     /* arguments (map) */
+        map_length = tvb_get_ntohl(tvb, offset);
+        AMQP_INCREMENT(offset, 4, max_length);
+        THROW_ON(((offset + (int)map_length) > max_length), ReportedBoundsError);
+        ti = proto_tree_add_item(result,
+                                 hf_amqp_0_10_method_queue_declare_arguments,
+                                 tvb,
+                                 offset - 4,
+                                 map_length + 4, FALSE);
+        dissect_amqp_0_10_map (tvb,
+                               offset,
+                               offset + map_length,
+                               map_length,
+                               ti);
+        AMQP_INCREMENT(offset, (int)map_length, max_length);
+    }
+    if (flag1 & 0x40) {     /* message-count (uint32) */
+        proto_tree_add_item(result,
+                            hf_amqp_0_10_struct_queue_query_result_message_count,
+                            tvb, offset, 4, FALSE);
+        AMQP_INCREMENT(offset, 4, max_length);
+    }
+    if (flag1 & 0x80) {     /* subscriber-count (uint32) */
+        proto_tree_add_item(result,
+                            hf_amqp_0_10_struct_queue_query_result_subscriber_count,
+                            tvb, offset, 4, FALSE);
+        AMQP_INCREMENT(offset, 4, max_length);
+    }
+}
+
+static void
+dissect_amqp_0_10_struct_file_properties(tvbuff_t *tvb,
+                                         proto_tree *tree,
+                                         int offset,
+                                         guint32 struct_length)
+{
+    proto_item *ti;
+    proto_item *props;
+    proto_item *flags_item;
+    guint8 flag1, flag2;
+    guint8 len8;
+    guint32 map_length;
+    guint64 timestamp;
+    int flags_offset;
+    int max_length;
+    nstime_t tv;
+
+    max_length = offset + struct_length;
+    props = proto_item_add_subtree(tree, ett_args);
+    AMQP_INCREMENT(offset, 2, max_length);  /* Skip class and struct codes */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(props,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    if (flag2 & ~0x01)
+        proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+    AMQP_INCREMENT(offset, 2, max_length);
+    if (flag1 & 0x01) {
+        /*  content-type (str8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item(props,
+                            hf_amqp_0_10_struct_file_properties_content_type,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);
+    }
+    if (flag1 & 0x02) {
+        /*  content-encoding (str8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item(props,
+                            hf_amqp_0_10_struct_file_properties_content_encoding,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);
+    }
+    if (flag1 & 0x04) {
+        /* headers (map) */
+        map_length = tvb_get_ntohl(tvb, offset);
+        AMQP_INCREMENT(offset, 4, max_length);
+        ti = proto_tree_add_item(props,
+                                 hf_amqp_0_10_struct_file_properties_headers,
+                                 tvb,
+                                 offset,
+                                 map_length, FALSE);
+        dissect_amqp_0_10_map (tvb,
+                               offset,
+                               offset + map_length,
+                               map_length,
+                               ti);
+        AMQP_INCREMENT(offset, map_length, max_length);
+    }
+    if (flag1 & 0x08) {
+        /* priority (uint8) */
+        proto_tree_add_item(props,
+                            hf_amqp_0_10_struct_file_properties_priority,
+                            tvb, offset, 1, FALSE);
+        AMQP_INCREMENT(offset, 1, max_length);
+    }
+    if (flag1 & 0x10) {
+        /* reply-to (str8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item(props,
+                            hf_amqp_0_10_struct_file_properties_reply_to,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);
+    }
+    if (flag1 & 0x20) {
+        /* message-id (str8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item(props,
+                            hf_amqp_0_10_struct_file_properties_message_id,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);
+    }
+    if (flag1 & 0x40) {
+        /* filename (str8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item(props,
+                            hf_amqp_0_10_struct_file_properties_filename,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);
+    }
+    if (flag1 & 0x80) {
+        /* timestamp (datetime [uint64]) */
+        timestamp = tvb_get_ntoh64(tvb, offset);
+        tv.secs = (time_t)timestamp;
+        tv.nsecs = 0;
+        proto_tree_add_time(props,
+                            hf_amqp_0_10_struct_file_properties_timestamp,
+                            tvb, offset, 8, &tv);
+        AMQP_INCREMENT(offset, 8, max_length);
+    }
+    if (flag2 & 0x01) {
+        /* cluster-id (str8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item(props,
+                            hf_amqp_0_10_struct_file_properties_cluster_id,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);
+    }
+}
+
+static void
+dissect_amqp_0_10_struct_stream_properties(tvbuff_t *tvb,
+                                           proto_tree *tree,
+                                           int offset,
+                                           guint32 struct_length)
+{
+    proto_item *ti;
+    proto_item *props;
+    proto_item *flags_item;
+    guint8 flag1, flag2;
+    guint8 len8;
+    guint32 map_length;
+    guint64 timestamp;
+    int flags_offset;
+    int max_length;
+    nstime_t tv;
+
+    max_length = offset + struct_length;
+    props = proto_item_add_subtree(tree, ett_args);
+    AMQP_INCREMENT(offset, 2, max_length);  /* Skip class and struct codes */
+    flags_offset = offset;
+    flag1 = tvb_get_guint8(tvb, offset);
+    flag2 = tvb_get_guint8(tvb, offset+1);
+    flags_item = proto_tree_add_item(props,
+                                     hf_amqp_0_10_argument_packing_flags,
+                                     tvb, offset, 2, FALSE);
+    if ((flag1 & ~0x1f) || flag2 != 0)
+        proto_item_set_expert_flags(flags_item, PI_PROTOCOL, PI_WARN);
+    AMQP_INCREMENT(offset, 2, max_length);
+    if (flag1 & 0x01) {
+        /*  content-type (str8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item(props,
+                            hf_amqp_0_10_struct_stream_properties_content_type,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);
+    }
+    if (flag1 & 0x02) {
+        /*  content-encoding (str8) */
+        len8 = tvb_get_guint8(tvb, offset);
+        proto_tree_add_item(props,
+                            hf_amqp_0_10_struct_stream_properties_content_encoding,
+                            tvb, offset + 1, len8, FALSE);
+        AMQP_INCREMENT(offset, (1 + len8), max_length);
+    }
+    if (flag1 & 0x04) {
+        /* headers (map) */
+        map_length = tvb_get_ntohl(tvb, offset);
+        AMQP_INCREMENT(offset, 4, max_length);
+        ti = proto_tree_add_item(props,
+                                 hf_amqp_0_10_struct_stream_properties_headers,
+                                 tvb,
+                                 offset,
+                                 map_length, FALSE);
+        dissect_amqp_0_10_map (tvb,
+                               offset,
+                               offset + map_length,
+                               map_length,
+                               ti);
+        AMQP_INCREMENT(offset, map_length, max_length);
+    }
+    if (flag1 & 0x08) {
+        /* priority (uint8) */
+        proto_tree_add_item(props,
+                            hf_amqp_0_10_struct_stream_properties_priority,
+                            tvb, offset, 1, FALSE);
+        AMQP_INCREMENT(offset, 1, max_length);
+    }
+    if (flag1 & 0x10) {
+        /* timestamp (datetime [uint64]) */
+        timestamp = tvb_get_ntoh64(tvb, offset);
+        tv.secs = (time_t)timestamp;
+        tv.nsecs = 0;
+        proto_tree_add_time(props,
+                            hf_amqp_0_10_struct_stream_properties_timestamp,
+                            tvb, offset, 8, &tv);
+        AMQP_INCREMENT(offset, 8, max_length);
+    }
+}
+
+static void
+dissect_amqp_0_10_struct32(tvbuff_t *tvb,
+                           proto_tree *tree,
+                           int offset,
+                           guint32 struct_length)
+{
+    guint8 class_code;
+    guint8 struct_code;
+    guint8 flag1, flag2;
+    guint16 size;
+    guint16 value;
+    guint32 array_length;
+    guint32 consumed;
+    proto_tree *ti;
+    proto_tree *result;
+
+    consumed = 0;
+    class_code = tvb_get_guint8(tvb, offset);
+    struct_code = tvb_get_guint8(tvb, offset + 1);
+    switch(class_code) {
+    case AMQP_0_10_CLASS_MESSAGE:
+        switch (struct_code) {
+        case AMQP_0_10_STRUCT_MESSAGE_DELIVERY_PROPERTIES:
+            proto_item_set_text(tree, "message.delivery-properties");
+            dissect_amqp_0_10_struct_delivery_properties(tvb,
+                                                         tree,
+                                                         offset,
+                                                         struct_length);
+            break;
+        case AMQP_0_10_STRUCT_MESSAGE_FRAGMENT_PROPERTIES:
+            proto_item_set_text(tree, "message.fragment-properties");
+            dissect_amqp_0_10_struct_fragment_properties(tvb,
+                                                         tree,
+                                                         offset,
+                                                         struct_length);
+            break;
+        case AMQP_0_10_STRUCT_MESSAGE_MESSAGE_PROPERTIES:
+            proto_item_set_text(tree, "message.message-properties");
+            dissect_amqp_0_10_struct_message_properties(tvb,
+                                                        tree,
+                                                        offset,
+                                                        struct_length);
+            break;
+        case AMQP_0_10_STRUCT_MESSAGE_ACQUIRED:
+            proto_item_set_text(tree, "message.acquired");
+            result = proto_item_add_subtree(tree, ett_args);
+            AMQP_INCREMENT(consumed, 2, struct_length);  /* Class/type codes */
+            offset += 2;
+            flag1 = tvb_get_guint8(tvb, offset);
+            flag2 = tvb_get_guint8(tvb, offset+1);
+            proto_tree_add_item(result, hf_amqp_0_10_argument_packing_flags,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(consumed, 2, struct_length);
+            offset += 2;
+            if (flag1 & 0x01) {
+                /*  transfers (commands [sequence-set])  */
+                size = tvb_get_ntohs(tvb, offset);
+                THROW_ON(((consumed + size) > struct_length), ReportedBoundsError);
+                ti = proto_tree_add_item(result,
+                                         hf_amqp_0_10_struct_acquired_transfers,
+                                         tvb, offset, size + 2, FALSE);
+                format_amqp_0_10_sequence_set(tvb, offset + 2, size, ti);
+            }
+            break;
+        case AMQP_0_10_STRUCT_MESSAGE_RESUME_RESULT:
+            proto_item_set_text(tree, "message.resume-result");
+            result = proto_item_add_subtree(tree, ett_args);
+            AMQP_INCREMENT(consumed, 2, struct_length);  /* Class/type codes */
+            offset += 2;
+            flag1 = tvb_get_guint8(tvb, offset);
+            flag2 = tvb_get_guint8(tvb, offset+1);
+            proto_tree_add_item(result, hf_amqp_0_10_argument_packing_flags,
+                                tvb, offset, 2, FALSE);
+            AMQP_INCREMENT(consumed, 2, struct_length);
+            offset += 2;
+            if (flag1 & 0x01) {
+                /*  offset (uint64)  */
+                proto_tree_add_item(result,
+                                    hf_amqp_0_10_struct_resume_result_offset,
+                                    tvb, offset, 8, FALSE);
+            }
+            break;
+        }
+        break;
+
+    case AMQP_0_10_CLASS_DTX:
+        switch (struct_code) {
+        case AMQP_0_10_STRUCT_DTX_XA_RESULT:
+            AMQP_INCREMENT(consumed, 2, struct_length);  /* Class/type codes */
+            offset += 2;
+            flag1 = tvb_get_guint8(tvb, offset);
+            flag2 = tvb_get_guint8(tvb, offset+1);
+            AMQP_INCREMENT(consumed, 2, struct_length);  /* Packing bytes */
+            offset += 2;
+            value = tvb_get_ntohs(tvb, offset);
+            AMQP_INCREMENT(consumed, 2, struct_length);  /* xa status value */
+            offset += 2;
+            proto_item_set_text(tree, "dtx.xa-status: %s",
+                                val_to_str(value,
+                                           amqp_0_10_xa_status,
+                                           "Invalid xa-status %d"));
+            break;
+
+        case AMQP_0_10_STRUCT_DTX_RECOVER_RESULT:
+            proto_item_set_text(tree, "dtx.recover-result");
+            AMQP_INCREMENT(consumed, 2, struct_length);  /* Class/type codes */
+            offset += 2;
+            flag1 = tvb_get_guint8(tvb, offset);
+            flag2 = tvb_get_guint8(tvb, offset+1);
+            AMQP_INCREMENT(consumed, 2, struct_length);  /* Packing bytes */
+            offset += 2;
+            array_length = tvb_get_ntohl(tvb, offset);
+            AMQP_INCREMENT(consumed, 4, struct_length);
+            offset += 4;
+            dissect_amqp_0_10_array(tvb,
+                                    offset,
+                                    offset + array_length,
+                                    array_length,
+                                    tree);
+            break;
+        }
+        break;
+
+    case AMQP_0_10_CLASS_EXCHANGE:
+        switch (struct_code) {
+        case AMQP_0_10_STRUCT_EXCHANGE_QUERY_RESULT:
+            proto_item_set_text(tree, "exchange.exchange-query-result");
+            dissect_amqp_0_10_struct_exchange_query_result(tvb,
+                                                           tree,
+                                                           offset,
+                                                           struct_length);
+            break;
+
+        case AMQP_0_10_STRUCT_EXCHANGE_BOUND_RESULT:
+            proto_item_set_text(tree, "exchange.exchange-bound-result");
+            result = proto_item_add_subtree(tree, ett_args);
+            AMQP_INCREMENT(consumed, 2, struct_length);  /* Class/type codes */
+            offset += 2;
+            proto_tree_add_item(result,
+                                hf_amqp_0_10_struct_exchange_bound_result_exchange_not_found,
+                                tvb, offset, 1, FALSE);
+            proto_tree_add_item(result,
+                                hf_amqp_0_10_struct_exchange_bound_result_queue_not_found,
+                                tvb, offset, 1, FALSE);
+            proto_tree_add_item(result,
+                                hf_amqp_0_10_struct_exchange_bound_result_queue_not_matched,
+                                tvb, offset, 1, FALSE);
+            proto_tree_add_item(result,
+                                hf_amqp_0_10_struct_exchange_bound_result_key_not_matched,
+                                tvb, offset, 1, FALSE);
+            proto_tree_add_item(result,
+                                hf_amqp_0_10_struct_exchange_bound_result_args_not_matched,
+                                tvb, offset, 1, FALSE);
+            break;
+        }
+        break;
+
+    case AMQP_0_10_CLASS_QUEUE:
+        switch (struct_code) {
+        case AMQP_0_10_STRUCT_QUEUE_QUERY_RESULT:
+            proto_item_set_text(tree, "queue.queue-query-result");
+            dissect_amqp_0_10_struct_queue_query_result(tvb,
+                                                        tree,
+                                                        offset,
+                                                        struct_length);
+            break;
+        }
+        break;
+
+    case AMQP_0_10_CLASS_FILE:
+        switch (struct_code) {
+        case AMQP_0_10_STRUCT_FILE_PROPERTIES:
+            proto_item_set_text(tree, "file.file-properties");
+            dissect_amqp_0_10_struct_file_properties(tvb,
+                                                     tree,
+                                                     offset,
+                                                     struct_length);
+            break;
+        }
+        break;
+
+    case AMQP_0_10_CLASS_STREAM:
+        switch (struct_code) {
+        case AMQP_0_10_STRUCT_STREAM_PROPERTIES:
+            proto_item_set_text(tree, "stream.stream-properties");
+            dissect_amqp_0_10_struct_stream_properties(tvb,
+                                                       tree,
+                                                       offset,
+                                                       struct_length);
+            break;
+        }
+        break;
+    }
+}
+
+static void
+dissect_amqp_0_10_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+    proto_item *ti;
+    proto_item *amqp_tree;
+    guint8 frame_type;
+    guint8 proto_major;
+    guint8 proto_minor;
+    guint16 length;
+    guint32 struct_length;
+    int offset;
+    emem_strbuf_t *strbuf;
+    conversation_t *conv;
+    amqp_conv *conn;
+
+    /* Find (or build) conversation to remember the protocol version */
+    conv = find_or_create_conversation(pinfo);
+    conn = conversation_get_proto_data(conv, proto_amqp);
+
+    col_set_str(pinfo->cinfo, COL_PROTOCOL, "AMQP");
+    col_clear(pinfo->cinfo, COL_INFO);
+
+    if (tree) {
+        /*  Heuristic - protocol initialisation frame starts with 'AMQP'  */
+        if (tvb_get_guint8(tvb, 0) == 'A' &&
+            tvb_get_guint8(tvb, 1) == 'M' &&
+            tvb_get_guint8(tvb, 2) == 'Q' &&
+            tvb_get_guint8(tvb, 3) == 'P') {
+
+            proto_major = tvb_get_guint8(tvb, 6);
+            proto_minor = tvb_get_guint8(tvb, 7);
+            if (check_col(pinfo->cinfo, COL_INFO)) {
+                strbuf = ep_strbuf_new_label("");
+                ep_strbuf_append_printf(strbuf,
+                                        "Protocol-Header %d-%d ",
+                                        proto_major,
+                                        proto_minor);
+                col_append_str(pinfo->cinfo, COL_INFO, strbuf->str);
+                col_set_fence(pinfo->cinfo, COL_INFO);
+            }
+
+            ti = proto_tree_add_item(tree, proto_amqp, tvb, 0, -1, FALSE);
+            amqp_tree = proto_item_add_subtree(ti, ett_amqp_init);
+            proto_tree_add_item(amqp_tree, hf_amqp_init_protocol, tvb, 0, 4, FALSE);
+            proto_tree_add_item(amqp_tree, hf_amqp_init_id_major, tvb, 4, 1, FALSE);
+            proto_tree_add_item(amqp_tree, hf_amqp_init_id_minor, tvb, 5, 1, FALSE);
+            proto_tree_add_item(amqp_tree, hf_amqp_init_version_major, tvb, 6, 1, FALSE);
+            proto_tree_add_item(amqp_tree, hf_amqp_init_version_minor, tvb, 7, 1, FALSE);
+
+            return;
+        }
+
+        /* Protocol frame */
+        ti = proto_tree_add_item(tree, proto_amqp, tvb, 0, -1, FALSE);
+        amqp_tree = proto_item_add_subtree(ti, ett_amqp);
+        proto_tree_add_item(amqp_tree, hf_amqp_0_10_format, tvb, 0, 1, FALSE);
+        proto_tree_add_item(amqp_tree, hf_amqp_0_10_position, tvb, 0, 1, FALSE);
+        frame_type = tvb_get_guint8(tvb, 1);
+        proto_tree_add_item(amqp_tree, hf_amqp_0_10_type, tvb, 1, 1, FALSE);
+        proto_tree_add_item(amqp_tree, hf_amqp_0_10_size, tvb, 2, 2, FALSE);
+        proto_tree_add_item(amqp_tree, hf_amqp_0_10_track, tvb, 5, 1, FALSE);
+        proto_tree_add_item(amqp_tree, hf_amqp_channel, tvb, 6, 2, FALSE);
+        length = tvb_get_ntohs(tvb, 2);
+        offset = 12;
+        THROW_ON((length <= 13), ReportedBoundsError);
+
+        switch(frame_type) {
+        case AMQP_0_10_FRAME_COMMAND:
+          /* Fall through */
+        case AMQP_0_10_FRAME_CONTROL:
+            proto_tree_add_item(amqp_tree, hf_amqp_0_10_class, tvb, offset+0, 1, FALSE);
+            switch(tvb_get_guint8(tvb, offset + 0)) {
+            case AMQP_0_10_CLASS_CONNECTION:
+                dissect_amqp_0_10_connection(tvb, pinfo, amqp_tree,
+                                             offset, length);
+                break;
+            case AMQP_0_10_CLASS_SESSION:
+                dissect_amqp_0_10_session(tvb, pinfo, amqp_tree,
+                                          offset, length);
+                break;
+            case AMQP_0_10_CLASS_EXECUTION:
+                dissect_amqp_0_10_execution(tvb, pinfo, amqp_tree,
+                                            offset, length);
+                break;
+            case AMQP_0_10_CLASS_MESSAGE:
+                dissect_amqp_0_10_message(tvb, pinfo, amqp_tree,
+                                          offset, length);
+                break;
+            case AMQP_0_10_CLASS_TX:
+                dissect_amqp_0_10_tx(tvb, pinfo, amqp_tree,
+                                     offset, length);
+                break;
+            case AMQP_0_10_CLASS_DTX:
+                dissect_amqp_0_10_dtx(tvb, pinfo, amqp_tree,
+                                      offset, length);
+                break;
+            case AMQP_0_10_CLASS_EXCHANGE:
+                dissect_amqp_0_10_exchange(tvb, pinfo, amqp_tree,
+                                           offset, length);
+                break;
+            case AMQP_0_10_CLASS_QUEUE:
+                dissect_amqp_0_10_queue(tvb, pinfo, amqp_tree,
+                                        offset, length);
+                break;
+            case AMQP_0_10_CLASS_FILE:
+                dissect_amqp_0_10_file(tvb, pinfo, amqp_tree,
+                                       offset, length);
+                break;
+            case AMQP_0_10_CLASS_STREAM:
+                dissect_amqp_0_10_stream(tvb, pinfo, amqp_tree,
+                                         offset, length);
+                break;
+            default:
+              expert_add_info_format(pinfo, amqp_tree, PI_PROTOCOL, PI_ERROR,
+                                     "Unknown command/control class %d",
+                                     tvb_get_guint8(tvb, offset + 0));
+            }
+            break;
+
+        case AMQP_0_10_FRAME_HEADER:
+            if (check_col(pinfo->cinfo, COL_INFO)) {
+                col_append_str(pinfo->cinfo, COL_INFO, "header ");
+                col_set_fence(pinfo->cinfo, COL_INFO);
+            }
+            do {
+                struct_length = tvb_get_ntohl(tvb, offset);
+                AMQP_INCREMENT(offset, 4, length);
+                THROW_ON((offset + struct_length > length), ReportedBoundsError);
+                
+                ti = proto_tree_add_item(amqp_tree,
+                                         hf_amqp_0_10_undissected_struct32,
+                                         tvb, offset, struct_length, FALSE);
+                dissect_amqp_0_10_struct32(tvb, ti, offset, struct_length);
+                AMQP_INCREMENT(offset, struct_length, length);
+            } while (offset < length);
+            break;
+
+        case AMQP_0_10_FRAME_BODY:
+            if (check_col(pinfo->cinfo, COL_INFO)) {
+                col_append_str(pinfo->cinfo, COL_INFO, "message-body ");
+                col_set_fence(pinfo->cinfo, COL_INFO);
+            }
+            proto_tree_add_item(amqp_tree,
+                                hf_amqp_0_10_message_body,
+                                tvb, offset, length - 12, FALSE);
+            break;
+
+        default:
+            expert_add_info_format(pinfo, amqp_tree, PI_PROTOCOL, PI_ERROR,
+                                   "Unknown frame type %d", frame_type);
+        }
     }
 }
 
-/*  Dissection routine for AMQP frames  */
+/*  Dissection routine for AMQP 0-9 frames  */
 
 static void
-dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+dissect_amqp_0_9_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
     proto_item *ti;
     proto_item *amqp_tree;
     proto_item *args_tree;
     proto_item *prop_tree;
+    guint8 proto_major;
+    guint8 proto_minor;
     guint length;
     int offset;
+    emem_strbuf_t *strbuf;
+    guint8 frame_type;
+    guint16 class_id, method_id;
 
     col_set_str(pinfo->cinfo, COL_PROTOCOL, "AMQP");
     col_clear(pinfo->cinfo, COL_INFO);
 
     if (tree) {
-
         /*  Heuristic - protocol initialisation frame starts with 'AMQP'  */
         if (tvb_get_guint8(tvb, 0) == 'A' &&
               tvb_get_guint8(tvb, 1) == 'M' &&
               tvb_get_guint8(tvb, 2) == 'Q' &&
               tvb_get_guint8(tvb, 3) == 'P') {
 
+            proto_major = tvb_get_guint8(tvb, 6);
+            proto_minor = tvb_get_guint8(tvb, 7);
             if (check_col(pinfo->cinfo, COL_INFO)) {
-                col_append_str(pinfo->cinfo, COL_INFO, "Protocol-Header ");
+                strbuf = ep_strbuf_new_label("");
+                ep_strbuf_append_printf(strbuf,
+                                        "Protocol-Header %u-%u",
+                                        proto_major,
+                                        proto_minor);
+                col_append_str(pinfo->cinfo, COL_INFO, strbuf->str);
                 col_set_fence(pinfo->cinfo, COL_INFO);
             }
 
@@ -1118,118 +5801,121 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 
             return;
         }
-        
+
         ti = proto_tree_add_item(tree, proto_amqp, tvb, 0, -1, FALSE);
         amqp_tree = proto_item_add_subtree(ti, ett_amqp);
-        proto_tree_add_item(amqp_tree, hf_amqp_type, tvb, 0, 1, FALSE);
+        frame_type = tvb_get_guint8(tvb, 0);
+        proto_tree_add_item(amqp_tree, hf_amqp_0_9_type, tvb, 0, 1, FALSE);
         proto_tree_add_item(amqp_tree, hf_amqp_channel, tvb, 1, 2, FALSE);
-        proto_tree_add_item(amqp_tree, hf_amqp_length, tvb, 3, 4, FALSE);
+        proto_tree_add_item(amqp_tree, hf_amqp_0_9_length, tvb, 3, 4, FALSE);
         length = tvb_get_ntohl(tvb, 3);
-        switch (tvb_get_guint8(tvb, 0)) {
-        case AMQP_FRAME_TYPE_METHOD:
-            proto_tree_add_item(amqp_tree, hf_amqp_method_class_id,
+        switch (frame_type) {
+        case AMQP_0_9_FRAME_TYPE_METHOD:
+            class_id = tvb_get_ntohs(tvb, 7);
+            proto_tree_add_item(amqp_tree, hf_amqp_0_9_method_class_id,
                 tvb, 7, 2, FALSE);
-            switch (tvb_get_ntohs(tvb, 7)) {
-            case AMQP_CLASS_CONNECTION:
+            switch (class_id) {
+            case AMQP_0_9_CLASS_CONNECTION:
+                method_id = tvb_get_ntohs(tvb, 9);
                 proto_tree_add_item(amqp_tree, hf_amqp_method_connection_method_id,
-                    tvb, 9, 2, FALSE);              
+                    tvb, 9, 2, FALSE);
                 ti = proto_tree_add_item(amqp_tree, hf_amqp_method_arguments,
                     tvb, 11, length - 4, FALSE);
                 args_tree = proto_item_add_subtree(ti, ett_args);
-                switch (tvb_get_ntohs(tvb, 9)) {
-                case AMQP_METHOD_CONNECTION_START:
-                    offset = dissect_amqp_method_connection_start(tvb,
-                        11, tvb_length (tvb), args_tree);
+                switch (method_id) {
+                case AMQP_0_9_METHOD_CONNECTION_START:
+                    offset = dissect_amqp_0_9_method_connection_start(tvb,
+                        pinfo, 11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Connection.Start ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CONNECTION_START_OK:
-                    offset = dissect_amqp_method_connection_start_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CONNECTION_START_OK:
+                    offset = dissect_amqp_0_9_method_connection_start_ok(tvb,
+                        pinfo, 11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Connection.Start-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CONNECTION_SECURE:
-                    offset = dissect_amqp_method_connection_secure(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CONNECTION_SECURE:
+                    offset = dissect_amqp_0_9_method_connection_secure(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Connection.Secure ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CONNECTION_SECURE_OK:
-                    offset = dissect_amqp_method_connection_secure_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CONNECTION_SECURE_OK:
+                    offset = dissect_amqp_0_9_method_connection_secure_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Connection.Secure-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CONNECTION_TUNE:
-                    offset = dissect_amqp_method_connection_tune(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CONNECTION_TUNE:
+                    offset = dissect_amqp_0_9_method_connection_tune(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Connection.Tune ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CONNECTION_TUNE_OK:
-                    offset = dissect_amqp_method_connection_tune_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CONNECTION_TUNE_OK:
+                    offset = dissect_amqp_0_9_method_connection_tune_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Connection.Tune-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CONNECTION_OPEN:
-                    offset = dissect_amqp_method_connection_open(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CONNECTION_OPEN:
+                    offset = dissect_amqp_0_9_method_connection_open(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Connection.Open ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CONNECTION_OPEN_OK:
-                    offset = dissect_amqp_method_connection_open_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CONNECTION_OPEN_OK:
+                    offset = dissect_amqp_0_9_method_connection_open_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Connection.Open-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CONNECTION_REDIRECT:
-                    offset = dissect_amqp_method_connection_redirect(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CONNECTION_REDIRECT:
+                    offset = dissect_amqp_0_9_method_connection_redirect(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Connection.Redirect ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CONNECTION_CLOSE:
-                    offset = dissect_amqp_method_connection_close(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CONNECTION_CLOSE:
+                    offset = dissect_amqp_0_9_method_connection_close(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Connection.Close ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CONNECTION_CLOSE_OK:
-                    offset = dissect_amqp_method_connection_close_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CONNECTION_CLOSE_OK:
+                    offset = dissect_amqp_0_9_method_connection_close_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Connection.Close-Ok ");
@@ -1237,100 +5923,104 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                     }
                     break;
                 default:
-                    DISSECTOR_ASSERT(FALSE);
+                    expert_add_info_format(pinfo, amqp_tree,
+                                           PI_PROTOCOL, PI_ERROR,
+                                           "Unknown connection method %u",
+                                           method_id);
                 }
                 break;
-            case AMQP_CLASS_CHANNEL:
+            case AMQP_0_9_CLASS_CHANNEL:
+                method_id = tvb_get_ntohs(tvb, 9);
                 proto_tree_add_item(amqp_tree, hf_amqp_method_channel_method_id,
-                    tvb, 9, 2, FALSE);              
+                    tvb, 9, 2, FALSE);
                 ti = proto_tree_add_item(amqp_tree, hf_amqp_method_arguments,
                     tvb, 11, length - 4, FALSE);
                 args_tree = proto_item_add_subtree(ti, ett_args);
-                switch (tvb_get_ntohs(tvb, 9)) {
-                case AMQP_METHOD_CHANNEL_OPEN:
-                    offset = dissect_amqp_method_channel_open(tvb,
-                        11, tvb_length (tvb), args_tree);
+                switch (method_id) {
+                case AMQP_0_9_METHOD_CHANNEL_OPEN:
+                    offset = dissect_amqp_0_9_method_channel_open(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Channel.Open ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CHANNEL_OPEN_OK:
-                    offset = dissect_amqp_method_channel_open_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CHANNEL_OPEN_OK:
+                    offset = dissect_amqp_0_9_method_channel_open_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Channel.Open-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CHANNEL_FLOW:
-                    offset = dissect_amqp_method_channel_flow(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CHANNEL_FLOW:
+                    offset = dissect_amqp_0_9_method_channel_flow(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Channel.Flow ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CHANNEL_FLOW_OK:
-                    offset = dissect_amqp_method_channel_flow_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CHANNEL_FLOW_OK:
+                    offset = dissect_amqp_0_9_method_channel_flow_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Channel.Flow-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CHANNEL_CLOSE:
-                    offset = dissect_amqp_method_channel_close(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CHANNEL_CLOSE:
+                    offset = dissect_amqp_0_9_method_channel_close(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Channel.Close ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CHANNEL_CLOSE_OK:
-                    offset = dissect_amqp_method_channel_close_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CHANNEL_CLOSE_OK:
+                    offset = dissect_amqp_0_9_method_channel_close_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Channel.Close-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CHANNEL_RESUME:
-                    offset = dissect_amqp_method_channel_resume(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CHANNEL_RESUME:
+                    offset = dissect_amqp_0_9_method_channel_resume(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Channel.Resume ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CHANNEL_PING:
-                    offset = dissect_amqp_method_channel_ping(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CHANNEL_PING:
+                    offset = dissect_amqp_0_9_method_channel_ping(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Channel.Ping ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CHANNEL_PONG:
-                    offset = dissect_amqp_method_channel_pong(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CHANNEL_PONG:
+                    offset = dissect_amqp_0_9_method_channel_pong(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Channel.Pong ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_CHANNEL_OK:
-                    offset = dissect_amqp_method_channel_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_CHANNEL_OK:
+                    offset = dissect_amqp_0_9_method_channel_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Channel.Ok ");
@@ -1338,28 +6028,32 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                     }
                     break;
                 default:
-                    DISSECTOR_ASSERT(FALSE);
+                    expert_add_info_format(pinfo, amqp_tree,
+                                           PI_PROTOCOL, PI_ERROR,
+                                           "Unknown channel method %u",
+                                           method_id);
                 }
                 break;
-            case AMQP_CLASS_ACCESS:
+            case AMQP_0_9_CLASS_ACCESS:
+                method_id = tvb_get_ntohs(tvb, 9);
                 proto_tree_add_item(amqp_tree, hf_amqp_method_access_method_id,
-                    tvb, 9, 2, FALSE);              
+                    tvb, 9, 2, FALSE);
                 ti = proto_tree_add_item(amqp_tree, hf_amqp_method_arguments,
                     tvb, 11, length - 4, FALSE);
                 args_tree = proto_item_add_subtree(ti, ett_args);
-                switch (tvb_get_ntohs(tvb, 9)) {
-                case AMQP_METHOD_ACCESS_REQUEST:
-                    offset = dissect_amqp_method_access_request(tvb,
-                        11, tvb_length (tvb), args_tree);
+                switch (method_id) {
+                case AMQP_0_9_METHOD_ACCESS_REQUEST:
+                    offset = dissect_amqp_0_9_method_access_request(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Access.Request ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_ACCESS_REQUEST_OK:
-                    offset = dissect_amqp_method_access_request_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_ACCESS_REQUEST_OK:
+                    offset = dissect_amqp_0_9_method_access_request_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Access.Request-Ok ");
@@ -1367,46 +6061,50 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                     }
                     break;
                 default:
-                    DISSECTOR_ASSERT(FALSE);
+                    expert_add_info_format(pinfo, amqp_tree,
+                                           PI_PROTOCOL, PI_ERROR,
+                                           "Unknown access method %u",
+                                           method_id);
                 }
                 break;
-            case AMQP_CLASS_EXCHANGE:
+            case AMQP_0_9_CLASS_EXCHANGE:
+                method_id = tvb_get_ntohs(tvb, 9);
                 proto_tree_add_item(amqp_tree, hf_amqp_method_exchange_method_id,
-                    tvb, 9, 2, FALSE);              
+                    tvb, 9, 2, FALSE);
                 ti = proto_tree_add_item(amqp_tree, hf_amqp_method_arguments,
                     tvb, 11, length - 4, FALSE);
                 args_tree = proto_item_add_subtree(ti, ett_args);
-                switch (tvb_get_ntohs(tvb, 9)) {
-                case AMQP_METHOD_EXCHANGE_DECLARE:
-                    offset = dissect_amqp_method_exchange_declare(tvb,
-                        11, tvb_length (tvb), args_tree);
+                switch (method_id) {
+                case AMQP_0_9_METHOD_EXCHANGE_DECLARE:
+                    offset = dissect_amqp_0_9_method_exchange_declare(tvb,
+                        pinfo, 11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Exchange.Declare ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_EXCHANGE_DECLARE_OK:
-                    offset = dissect_amqp_method_exchange_declare_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_EXCHANGE_DECLARE_OK:
+                    offset = dissect_amqp_0_9_method_exchange_declare_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Exchange.Declare-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_EXCHANGE_DELETE:
-                    offset = dissect_amqp_method_exchange_delete(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_EXCHANGE_DELETE:
+                    offset = dissect_amqp_0_9_method_exchange_delete(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Exchange.Delete ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_EXCHANGE_DELETE_OK:
-                    offset = dissect_amqp_method_exchange_delete_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_EXCHANGE_DELETE_OK:
+                    offset = dissect_amqp_0_9_method_exchange_delete_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Exchange.Delete-Ok ");
@@ -1414,100 +6112,104 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                     }
                     break;
                 default:
-                    DISSECTOR_ASSERT(FALSE);
+                    expert_add_info_format(pinfo, amqp_tree,
+                                           PI_PROTOCOL, PI_ERROR,
+                                           "Unknown exchange method %u",
+                                           method_id);
                 }
                 break;
-            case AMQP_CLASS_QUEUE:
+            case AMQP_0_9_CLASS_QUEUE:
+                method_id = tvb_get_ntohs(tvb, 9);
                 proto_tree_add_item(amqp_tree, hf_amqp_method_queue_method_id,
-                    tvb, 9, 2, FALSE);              
+                    tvb, 9, 2, FALSE);
                 ti = proto_tree_add_item(amqp_tree, hf_amqp_method_arguments,
                     tvb, 11, length - 4, FALSE);
                 args_tree = proto_item_add_subtree(ti, ett_args);
-                switch (tvb_get_ntohs(tvb, 9)) {
-                case AMQP_METHOD_QUEUE_DECLARE:
-                    offset = dissect_amqp_method_queue_declare(tvb,
-                        11, tvb_length (tvb), args_tree);
+                switch (method_id) {
+                case AMQP_0_9_METHOD_QUEUE_DECLARE:
+                    offset = dissect_amqp_0_9_method_queue_declare(tvb,
+                        pinfo, 11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Queue.Declare ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_QUEUE_DECLARE_OK:
-                    offset = dissect_amqp_method_queue_declare_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_QUEUE_DECLARE_OK:
+                    offset = dissect_amqp_0_9_method_queue_declare_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Queue.Declare-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_QUEUE_BIND:
-                    offset = dissect_amqp_method_queue_bind(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_QUEUE_BIND:
+                    offset = dissect_amqp_0_9_method_queue_bind(tvb,
+                        pinfo, 11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Queue.Bind ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_QUEUE_BIND_OK:
-                    offset = dissect_amqp_method_queue_bind_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_QUEUE_BIND_OK:
+                    offset = dissect_amqp_0_9_method_queue_bind_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Queue.Bind-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_QUEUE_UNBIND:
-                    offset = dissect_amqp_method_queue_unbind(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_QUEUE_UNBIND:
+                    offset = dissect_amqp_0_9_method_queue_unbind(tvb,
+                        pinfo, 11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Queue.Unbind ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_QUEUE_UNBIND_OK:
-                    offset = dissect_amqp_method_queue_unbind_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_QUEUE_UNBIND_OK:
+                    offset = dissect_amqp_0_9_method_queue_unbind_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Queue.Unbind-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_QUEUE_PURGE:
-                    offset = dissect_amqp_method_queue_purge(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_QUEUE_PURGE:
+                    offset = dissect_amqp_0_9_method_queue_purge(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Queue.Purge ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_QUEUE_PURGE_OK:
-                    offset = dissect_amqp_method_queue_purge_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_QUEUE_PURGE_OK:
+                    offset = dissect_amqp_0_9_method_queue_purge_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Queue.Purge-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_QUEUE_DELETE:
-                    offset = dissect_amqp_method_queue_delete(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_QUEUE_DELETE:
+                    offset = dissect_amqp_0_9_method_queue_delete(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Queue.Delete ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_QUEUE_DELETE_OK:
-                    offset = dissect_amqp_method_queue_delete_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_QUEUE_DELETE_OK:
+                    offset = dissect_amqp_0_9_method_queue_delete_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Queue.Delete-Ok ");
@@ -1515,145 +6217,149 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                     }
                     break;
                 default:
-                    DISSECTOR_ASSERT(FALSE);
+                    expert_add_info_format(pinfo, amqp_tree,
+                                           PI_PROTOCOL, PI_ERROR,
+                                           "Unknown queue method %u",
+                                           method_id);
                 }
                 break;
-            case AMQP_CLASS_BASIC:
+            case AMQP_0_9_CLASS_BASIC:
+                method_id = tvb_get_ntohs(tvb, 9);
                 proto_tree_add_item(amqp_tree, hf_amqp_method_basic_method_id,
-                    tvb, 9, 2, FALSE);              
+                    tvb, 9, 2, FALSE);
                 ti = proto_tree_add_item(amqp_tree, hf_amqp_method_arguments,
                     tvb, 11, length - 4, FALSE);
                 args_tree = proto_item_add_subtree(ti, ett_args);
-                switch (tvb_get_ntohs(tvb, 9)) {
-                case AMQP_METHOD_BASIC_QOS:
-                    offset = dissect_amqp_method_basic_qos(tvb,
-                        11, tvb_length (tvb), args_tree);
+                switch (method_id) {
+                case AMQP_0_9_METHOD_BASIC_QOS:
+                    offset = dissect_amqp_0_9_method_basic_qos(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Qos ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_QOS_OK:
-                    offset = dissect_amqp_method_basic_qos_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_QOS_OK:
+                    offset = dissect_amqp_0_9_method_basic_qos_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Qos-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_CONSUME:
-                    offset = dissect_amqp_method_basic_consume(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_CONSUME:
+                    offset = dissect_amqp_0_9_method_basic_consume(tvb,
+                        pinfo, 11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Consume ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_CONSUME_OK:
-                    offset = dissect_amqp_method_basic_consume_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_CONSUME_OK:
+                    offset = dissect_amqp_0_9_method_basic_consume_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Consume-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_CANCEL:
-                    offset = dissect_amqp_method_basic_cancel(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_CANCEL:
+                    offset = dissect_amqp_0_9_method_basic_cancel(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Cancel ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_CANCEL_OK:
-                    offset = dissect_amqp_method_basic_cancel_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_CANCEL_OK:
+                    offset = dissect_amqp_0_9_method_basic_cancel_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Cancel-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_PUBLISH:
-                    offset = dissect_amqp_method_basic_publish(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_PUBLISH:
+                    offset = dissect_amqp_0_9_method_basic_publish(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Publish ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_RETURN:
-                    offset = dissect_amqp_method_basic_return(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_RETURN:
+                    offset = dissect_amqp_0_9_method_basic_return(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Return ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_DELIVER:
-                    offset = dissect_amqp_method_basic_deliver(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_DELIVER:
+                    offset = dissect_amqp_0_9_method_basic_deliver(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Deliver ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_GET:
-                    offset = dissect_amqp_method_basic_get(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_GET:
+                    offset = dissect_amqp_0_9_method_basic_get(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Get ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_GET_OK:
-                    offset = dissect_amqp_method_basic_get_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_GET_OK:
+                    offset = dissect_amqp_0_9_method_basic_get_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Get-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_GET_EMPTY:
-                    offset = dissect_amqp_method_basic_get_empty(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_GET_EMPTY:
+                    offset = dissect_amqp_0_9_method_basic_get_empty(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Get-Empty ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_ACK:
-                    offset = dissect_amqp_method_basic_ack(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_ACK:
+                    offset = dissect_amqp_0_9_method_basic_ack(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Ack ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_REJECT:
-                    offset = dissect_amqp_method_basic_reject(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_REJECT:
+                    offset = dissect_amqp_0_9_method_basic_reject(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Reject ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_BASIC_RECOVER:
-                    offset = dissect_amqp_method_basic_recover(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_BASIC_RECOVER:
+                    offset = dissect_amqp_0_9_method_basic_recover(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Basic.Recover ");
@@ -1661,136 +6367,140 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                     }
                     break;
                 default:
-                    DISSECTOR_ASSERT(FALSE);
+                    expert_add_info_format(pinfo, amqp_tree,
+                                           PI_PROTOCOL, PI_ERROR,
+                                           "Unknown basic method %u",
+                                           method_id);
                 }
                 break;
-            case AMQP_CLASS_FILE:
+            case AMQP_0_9_CLASS_FILE:
+                method_id = tvb_get_ntohs(tvb, 9);
                 proto_tree_add_item(amqp_tree, hf_amqp_method_file_method_id,
-                    tvb, 9, 2, FALSE);              
+                    tvb, 9, 2, FALSE);
                 ti = proto_tree_add_item(amqp_tree, hf_amqp_method_arguments,
                     tvb, 11, length - 4, FALSE);
                 args_tree = proto_item_add_subtree(ti, ett_args);
-                switch (tvb_get_ntohs(tvb, 9)) {
-                case AMQP_METHOD_FILE_QOS:
-                    offset = dissect_amqp_method_file_qos(tvb,
-                        11, tvb_length (tvb), args_tree);
+                switch (method_id) {
+                case AMQP_0_9_METHOD_FILE_QOS:
+                    offset = dissect_amqp_0_9_method_file_qos(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Qos ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_QOS_OK:
-                    offset = dissect_amqp_method_file_qos_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_QOS_OK:
+                    offset = dissect_amqp_0_9_method_file_qos_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Qos-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_CONSUME:
-                    offset = dissect_amqp_method_file_consume(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_CONSUME:
+                    offset = dissect_amqp_0_9_method_file_consume(tvb,
+                        pinfo, 11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Consume ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_CONSUME_OK:
-                    offset = dissect_amqp_method_file_consume_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_CONSUME_OK:
+                    offset = dissect_amqp_0_9_method_file_consume_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Consume-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_CANCEL:
-                    offset = dissect_amqp_method_file_cancel(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_CANCEL:
+                    offset = dissect_amqp_0_9_method_file_cancel(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Cancel ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_CANCEL_OK:
-                    offset = dissect_amqp_method_file_cancel_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_CANCEL_OK:
+                    offset = dissect_amqp_0_9_method_file_cancel_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Cancel-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_OPEN:
-                    offset = dissect_amqp_method_file_open(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_OPEN:
+                    offset = dissect_amqp_0_9_method_file_open(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Open ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_OPEN_OK:
-                    offset = dissect_amqp_method_file_open_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_OPEN_OK:
+                    offset = dissect_amqp_0_9_method_file_open_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Open-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_STAGE:
-                    offset = dissect_amqp_method_file_stage(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_STAGE:
+                    offset = dissect_amqp_0_9_method_file_stage(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Stage ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_PUBLISH:
-                    offset = dissect_amqp_method_file_publish(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_PUBLISH:
+                    offset = dissect_amqp_0_9_method_file_publish(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Publish ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_RETURN:
-                    offset = dissect_amqp_method_file_return(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_RETURN:
+                    offset = dissect_amqp_0_9_method_file_return(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Return ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_DELIVER:
-                    offset = dissect_amqp_method_file_deliver(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_DELIVER:
+                    offset = dissect_amqp_0_9_method_file_deliver(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Deliver ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_ACK:
-                    offset = dissect_amqp_method_file_ack(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_ACK:
+                    offset = dissect_amqp_0_9_method_file_ack(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Ack ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_FILE_REJECT:
-                    offset = dissect_amqp_method_file_reject(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_FILE_REJECT:
+                    offset = dissect_amqp_0_9_method_file_reject(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "File.Reject ");
@@ -1798,91 +6508,95 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                     }
                     break;
                 default:
-                    DISSECTOR_ASSERT(FALSE);
+                    expert_add_info_format(pinfo, amqp_tree,
+                                           PI_PROTOCOL, PI_ERROR,
+                                           "Unknown file method %u",
+                                           method_id);
                 }
                 break;
-            case AMQP_CLASS_STREAM:
+            case AMQP_0_9_CLASS_STREAM:
+                method_id = tvb_get_ntohs(tvb, 9);
                 proto_tree_add_item(amqp_tree, hf_amqp_method_stream_method_id,
-                    tvb, 9, 2, FALSE);              
+                    tvb, 9, 2, FALSE);
                 ti = proto_tree_add_item(amqp_tree, hf_amqp_method_arguments,
                     tvb, 11, length - 4, FALSE);
                 args_tree = proto_item_add_subtree(ti, ett_args);
-                switch (tvb_get_ntohs(tvb, 9)) {
-                case AMQP_METHOD_STREAM_QOS:
-                    offset = dissect_amqp_method_stream_qos(tvb,
-                        11, tvb_length (tvb), args_tree);
+                switch (method_id) {
+                case AMQP_0_9_METHOD_STREAM_QOS:
+                    offset = dissect_amqp_0_9_method_stream_qos(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Stream.Qos ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_STREAM_QOS_OK:
-                    offset = dissect_amqp_method_stream_qos_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_STREAM_QOS_OK:
+                    offset = dissect_amqp_0_9_method_stream_qos_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Stream.Qos-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_STREAM_CONSUME:
-                    offset = dissect_amqp_method_stream_consume(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_STREAM_CONSUME:
+                    offset = dissect_amqp_0_9_method_stream_consume(tvb,
+                        pinfo, 11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Stream.Consume ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_STREAM_CONSUME_OK:
-                    offset = dissect_amqp_method_stream_consume_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_STREAM_CONSUME_OK:
+                    offset = dissect_amqp_0_9_method_stream_consume_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Stream.Consume-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_STREAM_CANCEL:
-                    offset = dissect_amqp_method_stream_cancel(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_STREAM_CANCEL:
+                    offset = dissect_amqp_0_9_method_stream_cancel(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Stream.Cancel ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_STREAM_CANCEL_OK:
-                    offset = dissect_amqp_method_stream_cancel_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_STREAM_CANCEL_OK:
+                    offset = dissect_amqp_0_9_method_stream_cancel_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Stream.Cancel-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_STREAM_PUBLISH:
-                    offset = dissect_amqp_method_stream_publish(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_STREAM_PUBLISH:
+                    offset = dissect_amqp_0_9_method_stream_publish(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Stream.Publish ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_STREAM_RETURN:
-                    offset = dissect_amqp_method_stream_return(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_STREAM_RETURN:
+                    offset = dissect_amqp_0_9_method_stream_return(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Stream.Return ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_STREAM_DELIVER:
-                    offset = dissect_amqp_method_stream_deliver(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_STREAM_DELIVER:
+                    offset = dissect_amqp_0_9_method_stream_deliver(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Stream.Deliver ");
@@ -1890,64 +6604,68 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                     }
                     break;
                 default:
-                    DISSECTOR_ASSERT(FALSE);
+                    expert_add_info_format(pinfo, amqp_tree,
+                                           PI_PROTOCOL, PI_ERROR,
+                                           "Unknown stream method %u",
+                                           method_id);
                 }
                 break;
-            case AMQP_CLASS_TX:
+            case AMQP_0_9_CLASS_TX:
+                method_id = tvb_get_ntohs(tvb, 9);
                 proto_tree_add_item(amqp_tree, hf_amqp_method_tx_method_id,
-                    tvb, 9, 2, FALSE);              
+                    tvb, 9, 2, FALSE);
                 ti = proto_tree_add_item(amqp_tree, hf_amqp_method_arguments,
                     tvb, 11, length - 4, FALSE);
                 args_tree = proto_item_add_subtree(ti, ett_args);
-                switch (tvb_get_ntohs(tvb, 9)) {
-                case AMQP_METHOD_TX_SELECT:
-                    offset = dissect_amqp_method_tx_select(tvb,
-                        11, tvb_length (tvb), args_tree);
+                switch (method_id) {
+                case AMQP_0_9_METHOD_TX_SELECT:
+                    offset = dissect_amqp_0_9_method_tx_select(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Tx.Select ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_TX_SELECT_OK:
-                    offset = dissect_amqp_method_tx_select_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_TX_SELECT_OK:
+                    offset = dissect_amqp_0_9_method_tx_select_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Tx.Select-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_TX_COMMIT:
-                    offset = dissect_amqp_method_tx_commit(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_TX_COMMIT:
+                    offset = dissect_amqp_0_9_method_tx_commit(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Tx.Commit ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_TX_COMMIT_OK:
-                    offset = dissect_amqp_method_tx_commit_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_TX_COMMIT_OK:
+                    offset = dissect_amqp_0_9_method_tx_commit_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Tx.Commit-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_TX_ROLLBACK:
-                    offset = dissect_amqp_method_tx_rollback(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_TX_ROLLBACK:
+                    offset = dissect_amqp_0_9_method_tx_rollback(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Tx.Rollback ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_TX_ROLLBACK_OK:
-                    offset = dissect_amqp_method_tx_rollback_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_TX_ROLLBACK_OK:
+                    offset = dissect_amqp_0_9_method_tx_rollback_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Tx.Rollback-Ok ");
@@ -1955,46 +6673,50 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                     }
                     break;
                 default:
-                    DISSECTOR_ASSERT(FALSE);
+                    expert_add_info_format(pinfo, amqp_tree,
+                                           PI_PROTOCOL, PI_ERROR,
+                                           "Unknown tx method %u",
+                                           method_id);
                 }
                 break;
-            case AMQP_CLASS_DTX:
+            case AMQP_0_9_CLASS_DTX:
+                method_id = tvb_get_ntohs(tvb, 9);
                 proto_tree_add_item(amqp_tree, hf_amqp_method_dtx_method_id,
-                    tvb, 9, 2, FALSE);              
+                    tvb, 9, 2, FALSE);
                 ti = proto_tree_add_item(amqp_tree, hf_amqp_method_arguments,
                     tvb, 11, length - 4, FALSE);
                 args_tree = proto_item_add_subtree(ti, ett_args);
-                switch (tvb_get_ntohs(tvb, 9)) {
-                case AMQP_METHOD_DTX_SELECT:
-                    offset = dissect_amqp_method_dtx_select(tvb,
-                        11, tvb_length (tvb), args_tree);
+                switch (method_id) {
+                case AMQP_0_9_METHOD_DTX_SELECT:
+                    offset = dissect_amqp_0_9_method_dtx_select(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Dtx.Select ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_DTX_SELECT_OK:
-                    offset = dissect_amqp_method_dtx_select_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_DTX_SELECT_OK:
+                    offset = dissect_amqp_0_9_method_dtx_select_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Dtx.Select-Ok ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_DTX_START:
-                    offset = dissect_amqp_method_dtx_start(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_DTX_START:
+                    offset = dissect_amqp_0_9_method_dtx_start(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Dtx.Start ");
                         col_set_fence(pinfo->cinfo, COL_INFO);
                     }
                     break;
-                case AMQP_METHOD_DTX_START_OK:
-                    offset = dissect_amqp_method_dtx_start_ok(tvb,
-                        11, tvb_length (tvb), args_tree);
+                case AMQP_0_9_METHOD_DTX_START_OK:
+                    offset = dissect_amqp_0_9_method_dtx_start_ok(tvb,
+                        11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Dtx.Start-Ok ");
@@ -2002,19 +6724,23 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                     }
                     break;
                 default:
-                    DISSECTOR_ASSERT(FALSE);
+                    expert_add_info_format(pinfo, amqp_tree,
+                                           PI_PROTOCOL, PI_ERROR,
+                                           "Unknown dtx method %u",
+                                           method_id);
                 }
                 break;
-            case AMQP_CLASS_TUNNEL:
+            case AMQP_0_9_CLASS_TUNNEL:
+                method_id = tvb_get_ntohs(tvb, 9);
                 proto_tree_add_item(amqp_tree, hf_amqp_method_tunnel_method_id,
-                    tvb, 9, 2, FALSE);              
+                    tvb, 9, 2, FALSE);
                 ti = proto_tree_add_item(amqp_tree, hf_amqp_method_arguments,
                     tvb, 11, length - 4, FALSE);
                 args_tree = proto_item_add_subtree(ti, ett_args);
-                switch (tvb_get_ntohs(tvb, 9)) {
-                case AMQP_METHOD_TUNNEL_REQUEST:
-                    offset = dissect_amqp_method_tunnel_request(tvb,
-                        11, tvb_length (tvb), args_tree);
+                switch (method_id) {
+                case AMQP_0_9_METHOD_TUNNEL_REQUEST:
+                    offset = dissect_amqp_0_9_method_tunnel_request(tvb,
+                        pinfo, 11, args_tree);
                     if (check_col(pinfo->cinfo, COL_INFO)) {
                         col_append_str(pinfo->cinfo, COL_INFO,
                             "Tunnel.Request ");
@@ -2022,14 +6748,21 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                     }
                     break;
                 default:
-                    DISSECTOR_ASSERT(FALSE);
+                    expert_add_info_format(pinfo, amqp_tree,
+                                           PI_PROTOCOL, PI_ERROR,
+                                           "Unknown tunnel method %u",
+                                           method_id);
                 }
                 break;
             default:
-                DISSECTOR_ASSERT(FALSE);
+                expert_add_info_format(pinfo, amqp_tree,
+                                       PI_PROTOCOL, PI_ERROR,
+                                       "Unknown method class %u",
+                                       class_id);
             }
             break;
-        case AMQP_FRAME_TYPE_CONTENT_HEADER:
+        case AMQP_0_9_FRAME_TYPE_CONTENT_HEADER:
+            class_id = tvb_get_ntohs(tvb, 7);
             proto_tree_add_item(amqp_tree, hf_amqp_header_class_id,
                 tvb, 7, 2, FALSE);
             proto_tree_add_item(amqp_tree, hf_amqp_header_weight,
@@ -2042,32 +6775,35 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                 tvb, 21, length - 14, FALSE);
             prop_tree = proto_item_add_subtree(ti, ett_props);
             offset = 21;
-            switch (tvb_get_ntohs(tvb, 7)) {
-            case AMQP_CLASS_BASIC:
-                offset = dissect_amqp_content_header_basic(tvb,
-                    offset, tvb_length (tvb), prop_tree);
+            switch (class_id) {
+            case AMQP_0_9_CLASS_BASIC:
+                offset = dissect_amqp_0_9_content_header_basic(tvb,
+                    pinfo, offset, prop_tree);
                 break;
-            case AMQP_CLASS_FILE:
-                offset = dissect_amqp_content_header_file(tvb,
-                    offset, tvb_length (tvb), prop_tree);
+            case AMQP_0_9_CLASS_FILE:
+                offset = dissect_amqp_0_9_content_header_file(tvb,
+                    pinfo, offset, prop_tree);
                 break;
-            case AMQP_CLASS_STREAM:
-                offset = dissect_amqp_content_header_stream(tvb,
-                    offset, tvb_length (tvb), prop_tree);
+            case AMQP_0_9_CLASS_STREAM:
+                offset = dissect_amqp_0_9_content_header_stream(tvb,
+                    pinfo, offset, prop_tree);
                 break;
-            case AMQP_CLASS_TUNNEL:
-                offset = dissect_amqp_content_header_tunnel(tvb,
-                    offset, tvb_length (tvb), prop_tree);
+            case AMQP_0_9_CLASS_TUNNEL:
+                offset = dissect_amqp_0_9_content_header_tunnel(tvb,
+                    pinfo, offset, prop_tree);
                 break;
             default:
-                DISSECTOR_ASSERT(FALSE);
+                expert_add_info_format(pinfo, amqp_tree,
+                                       PI_PROTOCOL, PI_ERROR,
+                                       "Unknown header class %u",
+                                       class_id);
             }
             if (check_col(pinfo->cinfo, COL_INFO)) {
                 col_append_str(pinfo->cinfo, COL_INFO, "Content-Header ");
                 col_set_fence(pinfo->cinfo, COL_INFO);
             }
             break;
-        case AMQP_FRAME_TYPE_CONTENT_BODY:
+        case AMQP_0_9_FRAME_TYPE_CONTENT_BODY:
             proto_tree_add_item(amqp_tree, hf_amqp_payload,
                 tvb, 7, length, FALSE);
             if (check_col(pinfo->cinfo, COL_INFO)) {
@@ -2076,7 +6812,10 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
             }
             break;
         default:
-            DISSECTOR_ASSERT(FALSE);
+            expert_add_info_format(pinfo, amqp_tree,
+                                   PI_PROTOCOL, PI_ERROR,
+                                   "Unknown frame type %u",
+                                   frame_type);
         }
     }
 }
@@ -2084,37 +6823,36 @@ dissect_amqp_frame(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 /*  Dissection routine for method Connection.Start                        */
 
 static int
-dissect_amqp_method_connection_start(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree)
+dissect_amqp_0_9_method_connection_start(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree)
 {
     proto_item *ti;
     /*  version-major (octet)    */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_start_version_major,
         tvb, offset, 1, FALSE);
-    AMQP_INCREMENT(offset, 1, bound);
+    offset += 1;
 
     /*  version-minor (octet)    */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_start_version_minor,
         tvb, offset, 1, FALSE);
-    AMQP_INCREMENT(offset, 1, bound);
+    offset += 1;
 
     /*  server-properties (table)  */
     ti = proto_tree_add_item(
         args_tree, hf_amqp_method_connection_start_server_properties,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     /*  mechanisms (longstr)     */
-    proto_tree_add_item(args_tree, hf_amqp_method_connection_start_mechanisms,
+    proto_tree_add_item(args_tree, hf_amqp_0_9_method_connection_start_mechanisms,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     /*  locales (longstr)        */
-    proto_tree_add_item(args_tree, hf_amqp_method_connection_start_locales,
+    proto_tree_add_item(args_tree, hf_amqp_0_9_method_connection_start_locales,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -2122,32 +6860,31 @@ dissect_amqp_method_connection_start(tvbuff_t *tvb,
 /*  Dissection routine for method Connection.Start-Ok                     */
 
 static int
-dissect_amqp_method_connection_start_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree)
+dissect_amqp_0_9_method_connection_start_ok(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree)
 {
     proto_item *ti;
     /*  client-properties (table)  */
     ti = proto_tree_add_item(
         args_tree, hf_amqp_method_connection_start_ok_client_properties,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     /*  mechanism (shortstr)     */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_start_ok_mechanism,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  response (longstr)       */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_start_ok_response,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     /*  locale (shortstr)        */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_start_ok_locale,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -2155,13 +6892,13 @@ dissect_amqp_method_connection_start_ok(tvbuff_t *tvb,
 /*  Dissection routine for method Connection.Secure                       */
 
 static int
-dissect_amqp_method_connection_secure(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree)
+dissect_amqp_0_9_method_connection_secure(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree)
 {
     /*  challenge (longstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_secure_challenge,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -2169,13 +6906,13 @@ dissect_amqp_method_connection_secure(tvbuff_t *tvb,
 /*  Dissection routine for method Connection.Secure-Ok                    */
 
 static int
-dissect_amqp_method_connection_secure_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree)
+dissect_amqp_0_9_method_connection_secure_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree)
 {
     /*  response (longstr)       */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_secure_ok_response,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -2183,23 +6920,23 @@ dissect_amqp_method_connection_secure_ok(tvbuff_t *tvb,
 /*  Dissection routine for method Connection.Tune                         */
 
 static int
-dissect_amqp_method_connection_tune(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree)
+dissect_amqp_0_9_method_connection_tune(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree)
 {
     /*  channel-max (short)      */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_tune_channel_max,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  frame-max (long)         */
-    proto_tree_add_item(args_tree, hf_amqp_method_connection_tune_frame_max,
+    proto_tree_add_item(args_tree, hf_amqp_0_9_method_connection_tune_frame_max,
         tvb, offset, 4, FALSE);
-    AMQP_INCREMENT(offset, 4, bound);
+    offset += 4;
 
     /*  heartbeat (short)        */
-    proto_tree_add_item(args_tree, hf_amqp_method_connection_tune_heartbeat,
+    proto_tree_add_item(args_tree, hf_amqp_0_9_method_connection_tune_heartbeat,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     return offset;
 }
@@ -2207,23 +6944,23 @@ dissect_amqp_method_connection_tune(tvbuff_t *tvb,
 /*  Dissection routine for method Connection.Tune-Ok                      */
 
 static int
-dissect_amqp_method_connection_tune_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree)
+dissect_amqp_0_9_method_connection_tune_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree)
 {
     /*  channel-max (short)      */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_tune_ok_channel_max,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  frame-max (long)         */
-    proto_tree_add_item(args_tree, hf_amqp_method_connection_tune_ok_frame_max,
+    proto_tree_add_item(args_tree, hf_amqp_0_9_method_connection_tune_ok_frame_max,
         tvb, offset, 4, FALSE);
-    AMQP_INCREMENT(offset, 4, bound);
+    offset += 4;
 
     /*  heartbeat (short)        */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_tune_ok_heartbeat,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     return offset;
 }
@@ -2231,21 +6968,21 @@ dissect_amqp_method_connection_tune_ok(tvbuff_t *tvb,
 /*  Dissection routine for method Connection.Open                         */
 
 static int
-dissect_amqp_method_connection_open(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree)
+dissect_amqp_0_9_method_connection_open(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree)
 {
     /*  virtual-host (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_open_virtual_host,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  capabilities (shortstr)  */
-    proto_tree_add_item(args_tree, hf_amqp_method_connection_open_capabilities,
+    proto_tree_add_item(args_tree, hf_amqp_0_9_method_connection_open_capabilities,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  insist (bit)             */
-    proto_tree_add_item(args_tree, hf_amqp_method_connection_open_insist,
+    proto_tree_add_item(args_tree, hf_amqp_0_9_method_connection_open_insist,
         tvb, offset, 1, FALSE);
 
     return offset;
@@ -2254,13 +6991,13 @@ dissect_amqp_method_connection_open(tvbuff_t *tvb,
 /*  Dissection routine for method Connection.Open-Ok                      */
 
 static int
-dissect_amqp_method_connection_open_ok(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *args_tree)
+dissect_amqp_0_9_method_connection_open_ok(tvbuff_t *tvb,
+    int offset, proto_tree *args_tree)
 {
     /*  known-hosts (shortstr)   */
-    proto_tree_add_item(args_tree, hf_amqp_method_connection_open_ok_known_hosts,
+    proto_tree_add_item(args_tree, hf_amqp_0_9_method_connection_open_ok_known_hosts,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -2268,18 +7005,18 @@ dissect_amqp_method_connection_open_ok(tvbuff_t *tvb,
 /*  Dissection routine for method Connection.Redirect                     */
 
 static int
-dissect_amqp_method_connection_redirect(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_connection_redirect(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  host (shortstr)          */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_redirect_host,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  known-hosts (shortstr)   */
-    proto_tree_add_item(args_tree, hf_amqp_method_connection_redirect_known_hosts,
+    proto_tree_add_item(args_tree, hf_amqp_0_9_method_connection_redirect_known_hosts,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -2287,28 +7024,28 @@ dissect_amqp_method_connection_redirect(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Connection.Close                        */
 
 static int
-dissect_amqp_method_connection_close(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_connection_close(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  reply-code (short)       */
-    proto_tree_add_item(args_tree, hf_amqp_method_connection_close_reply_code,
+    proto_tree_add_item(args_tree, hf_amqp_0_9_method_connection_close_reply_code,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  reply-text (shortstr)    */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_close_reply_text,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  class-id (short)         */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_close_class_id,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  method-id (short)        */
     proto_tree_add_item(args_tree, hf_amqp_method_connection_close_method_id,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     return offset;
 }
@@ -2316,8 +7053,8 @@ dissect_amqp_method_connection_close(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Connection.Close-Ok                     */
 
 static int
-dissect_amqp_method_connection_close_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_connection_close_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -2325,13 +7062,13 @@ dissect_amqp_method_connection_close_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Channel.Open                            */
 
 static int
-dissect_amqp_method_channel_open(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_channel_open(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  out-of-band (shortstr)   */
     proto_tree_add_item(args_tree, hf_amqp_method_channel_open_out_of_band,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -2339,13 +7076,13 @@ dissect_amqp_method_channel_open(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Channel.Open-Ok                         */
 
 static int
-dissect_amqp_method_channel_open_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_channel_open_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  channel-id (longstr)     */
     proto_tree_add_item(args_tree, hf_amqp_method_channel_open_ok_channel_id,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -2353,8 +7090,8 @@ dissect_amqp_method_channel_open_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Channel.Flow                            */
 
 static int
-dissect_amqp_method_channel_flow(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_channel_flow(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  active (bit)             */
     proto_tree_add_item(args_tree, hf_amqp_method_channel_flow_active,
@@ -2366,8 +7103,8 @@ dissect_amqp_method_channel_flow(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Channel.Flow-Ok                         */
 
 static int
-dissect_amqp_method_channel_flow_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_channel_flow_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  active (bit)             */
     proto_tree_add_item(args_tree, hf_amqp_method_channel_flow_ok_active,
@@ -2379,28 +7116,28 @@ dissect_amqp_method_channel_flow_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Channel.Close                           */
 
 static int
-dissect_amqp_method_channel_close(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_channel_close(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  reply-code (short)       */
     proto_tree_add_item(args_tree, hf_amqp_method_channel_close_reply_code,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  reply-text (shortstr)    */
     proto_tree_add_item(args_tree, hf_amqp_method_channel_close_reply_text,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  class-id (short)         */
     proto_tree_add_item(args_tree, hf_amqp_method_channel_close_class_id,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  method-id (short)        */
     proto_tree_add_item(args_tree, hf_amqp_method_channel_close_method_id,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     return offset;
 }
@@ -2408,8 +7145,8 @@ dissect_amqp_method_channel_close(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Channel.Close-Ok                        */
 
 static int
-dissect_amqp_method_channel_close_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_channel_close_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -2417,13 +7154,13 @@ dissect_amqp_method_channel_close_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Channel.Resume                          */
 
 static int
-dissect_amqp_method_channel_resume(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_channel_resume(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  channel-id (longstr)     */
     proto_tree_add_item(args_tree, hf_amqp_method_channel_resume_channel_id,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -2431,8 +7168,8 @@ dissect_amqp_method_channel_resume(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Channel.Ping                            */
 
 static int
-dissect_amqp_method_channel_ping(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_channel_ping(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -2440,8 +7177,8 @@ dissect_amqp_method_channel_ping(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Channel.Pong                            */
 
 static int
-dissect_amqp_method_channel_pong(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_channel_pong(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -2449,8 +7186,8 @@ dissect_amqp_method_channel_pong(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Channel.Ok                              */
 
 static int
-dissect_amqp_method_channel_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_channel_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -2458,13 +7195,13 @@ dissect_amqp_method_channel_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Access.Request                          */
 
 static int
-dissect_amqp_method_access_request(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_access_request(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  realm (shortstr)         */
     proto_tree_add_item(args_tree, hf_amqp_method_access_request_realm,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  exclusive (bit)          */
     proto_tree_add_item(args_tree, hf_amqp_method_access_request_exclusive,
@@ -2492,13 +7229,13 @@ dissect_amqp_method_access_request(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Access.Request-Ok                       */
 
 static int
-dissect_amqp_method_access_request_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_access_request_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_access_request_ok_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     return offset;
 }
@@ -2506,24 +7243,24 @@ dissect_amqp_method_access_request_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Exchange.Declare                        */
 
 static int
-dissect_amqp_method_exchange_declare(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_exchange_declare(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree)
 {
     proto_item *ti;
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_exchange_declare_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_exchange_declare_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  type (shortstr)          */
     proto_tree_add_item(args_tree, hf_amqp_method_exchange_declare_type,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  passive (bit)            */
     proto_tree_add_item(args_tree, hf_amqp_method_exchange_declare_passive,
@@ -2545,14 +7282,13 @@ dissect_amqp_method_exchange_declare(tvbuff_t *tvb _U_,
     proto_tree_add_item(args_tree, hf_amqp_method_exchange_declare_nowait,
         tvb, offset, 1, FALSE);
 
-    AMQP_INCREMENT(offset, 1, bound);
+    offset += 1;
     /*  arguments (table)        */
     ti = proto_tree_add_item(
         args_tree, hf_amqp_method_exchange_declare_arguments,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -2560,8 +7296,8 @@ dissect_amqp_method_exchange_declare(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Exchange.Declare-Ok                     */
 
 static int
-dissect_amqp_method_exchange_declare_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_exchange_declare_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -2569,18 +7305,18 @@ dissect_amqp_method_exchange_declare_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Exchange.Delete                         */
 
 static int
-dissect_amqp_method_exchange_delete(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_exchange_delete(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_exchange_delete_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_exchange_delete_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  if-unused (bit)          */
     proto_tree_add_item(args_tree, hf_amqp_method_exchange_delete_if_unused,
@@ -2596,8 +7332,8 @@ dissect_amqp_method_exchange_delete(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Exchange.Delete-Ok                      */
 
 static int
-dissect_amqp_method_exchange_delete_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_exchange_delete_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -2605,19 +7341,19 @@ dissect_amqp_method_exchange_delete_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Queue.Declare                           */
 
 static int
-dissect_amqp_method_queue_declare(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_queue_declare(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree)
 {
     proto_item *ti;
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_declare_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  queue (shortstr)         */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_declare_queue,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  passive (bit)            */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_declare_passive,
@@ -2639,14 +7375,13 @@ dissect_amqp_method_queue_declare(tvbuff_t *tvb _U_,
     proto_tree_add_item(args_tree, hf_amqp_method_queue_declare_nowait,
         tvb, offset, 1, FALSE);
 
-    AMQP_INCREMENT(offset, 1, bound);
+    offset += 1;
     /*  arguments (table)        */
     ti = proto_tree_add_item(
         args_tree, hf_amqp_method_queue_declare_arguments,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -2654,23 +7389,23 @@ dissect_amqp_method_queue_declare(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Queue.Declare-Ok                        */
 
 static int
-dissect_amqp_method_queue_declare_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_queue_declare_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  queue (shortstr)         */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_declare_ok_queue,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  message-count (long)     */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_declare_ok_message_count,
         tvb, offset, 4, FALSE);
-    AMQP_INCREMENT(offset, 4, bound);
+    offset += 4;
 
     /*  consumer-count (long)    */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_declare_ok_consumer_count,
         tvb, offset, 4, FALSE);
-    AMQP_INCREMENT(offset, 4, bound);
+    offset += 4;
 
     return offset;
 }
@@ -2678,42 +7413,41 @@ dissect_amqp_method_queue_declare_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Queue.Bind                              */
 
 static int
-dissect_amqp_method_queue_bind(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_queue_bind(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree)
 {
     proto_item *ti;
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_bind_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  queue (shortstr)         */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_bind_queue,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_bind_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  routing-key (shortstr)   */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_bind_routing_key,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  nowait (bit)             */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_bind_nowait,
         tvb, offset, 1, FALSE);
 
-    AMQP_INCREMENT(offset, 1, bound);
+    offset += 1;
     /*  arguments (table)        */
     ti = proto_tree_add_item(
         args_tree, hf_amqp_method_queue_bind_arguments,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -2721,8 +7455,8 @@ dissect_amqp_method_queue_bind(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Queue.Bind-Ok                           */
 
 static int
-dissect_amqp_method_queue_bind_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_queue_bind_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -2730,37 +7464,36 @@ dissect_amqp_method_queue_bind_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Queue.Unbind                            */
 
 static int
-dissect_amqp_method_queue_unbind(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_queue_unbind(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree)
 {
     proto_item *ti;
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_unbind_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  queue (shortstr)         */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_unbind_queue,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_unbind_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  routing-key (shortstr)   */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_unbind_routing_key,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  arguments (table)        */
     ti = proto_tree_add_item(
         args_tree, hf_amqp_method_queue_unbind_arguments,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -2768,8 +7501,8 @@ dissect_amqp_method_queue_unbind(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Queue.Unbind-Ok                         */
 
 static int
-dissect_amqp_method_queue_unbind_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_queue_unbind_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -2777,18 +7510,18 @@ dissect_amqp_method_queue_unbind_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Queue.Purge                             */
 
 static int
-dissect_amqp_method_queue_purge(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_queue_purge(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_purge_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  queue (shortstr)         */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_purge_queue,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  nowait (bit)             */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_purge_nowait,
@@ -2800,13 +7533,13 @@ dissect_amqp_method_queue_purge(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Queue.Purge-Ok                          */
 
 static int
-dissect_amqp_method_queue_purge_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_queue_purge_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  message-count (long)     */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_purge_ok_message_count,
         tvb, offset, 4, FALSE);
-    AMQP_INCREMENT(offset, 4, bound);
+    offset += 4;
 
     return offset;
 }
@@ -2814,18 +7547,18 @@ dissect_amqp_method_queue_purge_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Queue.Delete                            */
 
 static int
-dissect_amqp_method_queue_delete(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_queue_delete(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_delete_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  queue (shortstr)         */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_delete_queue,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  if-unused (bit)          */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_delete_if_unused,
@@ -2845,13 +7578,13 @@ dissect_amqp_method_queue_delete(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Queue.Delete-Ok                         */
 
 static int
-dissect_amqp_method_queue_delete_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_queue_delete_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  message-count (long)     */
     proto_tree_add_item(args_tree, hf_amqp_method_queue_delete_ok_message_count,
         tvb, offset, 4, FALSE);
-    AMQP_INCREMENT(offset, 4, bound);
+    offset += 4;
 
     return offset;
 }
@@ -2859,18 +7592,18 @@ dissect_amqp_method_queue_delete_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Qos                               */
 
 static int
-dissect_amqp_method_basic_qos(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_qos(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  prefetch-size (long)     */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_qos_prefetch_size,
         tvb, offset, 4, FALSE);
-    AMQP_INCREMENT(offset, 4, bound);
+    offset += 4;
 
     /*  prefetch-count (short)   */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_qos_prefetch_count,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  global (bit)             */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_qos_global,
@@ -2882,8 +7615,8 @@ dissect_amqp_method_basic_qos(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Qos-Ok                            */
 
 static int
-dissect_amqp_method_basic_qos_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_qos_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -2891,24 +7624,24 @@ dissect_amqp_method_basic_qos_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Consume                           */
 
 static int
-dissect_amqp_method_basic_consume(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_consume(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree)
 {
     proto_item *ti;
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_consume_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  queue (shortstr)         */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_consume_queue,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_consume_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  no-local (bit)           */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_consume_no_local,
@@ -2926,14 +7659,13 @@ dissect_amqp_method_basic_consume(tvbuff_t *tvb _U_,
     proto_tree_add_item(args_tree, hf_amqp_method_basic_consume_nowait,
         tvb, offset, 1, FALSE);
 
-    AMQP_INCREMENT(offset, 1, bound);
+    offset += 1;
     /*  filter (table)           */
     ti = proto_tree_add_item(
         args_tree, hf_amqp_method_basic_consume_filter,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -2941,13 +7673,13 @@ dissect_amqp_method_basic_consume(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Consume-Ok                        */
 
 static int
-dissect_amqp_method_basic_consume_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_consume_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_consume_ok_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -2955,13 +7687,13 @@ dissect_amqp_method_basic_consume_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Cancel                            */
 
 static int
-dissect_amqp_method_basic_cancel(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_cancel(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_cancel_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  nowait (bit)             */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_cancel_nowait,
@@ -2973,13 +7705,13 @@ dissect_amqp_method_basic_cancel(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Cancel-Ok                         */
 
 static int
-dissect_amqp_method_basic_cancel_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_cancel_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_cancel_ok_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -2987,23 +7719,23 @@ dissect_amqp_method_basic_cancel_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Publish                           */
 
 static int
-dissect_amqp_method_basic_publish(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_publish(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_publish_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_publish_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  routing-key (shortstr)   */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_publish_routing_key,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  mandatory (bit)          */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_publish_mandatory,
@@ -3019,28 +7751,28 @@ dissect_amqp_method_basic_publish(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Return                            */
 
 static int
-dissect_amqp_method_basic_return(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_return(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  reply-code (short)       */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_return_reply_code,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  reply-text (shortstr)    */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_return_reply_text,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_return_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  routing-key (shortstr)   */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_return_routing_key,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3048,33 +7780,33 @@ dissect_amqp_method_basic_return(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Deliver                           */
 
 static int
-dissect_amqp_method_basic_deliver(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_deliver(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_deliver_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  delivery-tag (longlong)  */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_deliver_delivery_tag,
         tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
+    offset += 8;
 
     /*  redelivered (bit)        */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_deliver_redelivered,
         tvb, offset, 1, FALSE);
 
-    AMQP_INCREMENT(offset, 1, bound);
+    offset += 1;
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_deliver_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  routing-key (shortstr)   */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_deliver_routing_key,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3082,18 +7814,18 @@ dissect_amqp_method_basic_deliver(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Get                               */
 
 static int
-dissect_amqp_method_basic_get(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_get(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_get_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  queue (shortstr)         */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_get_queue,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  no-ack (bit)             */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_get_no_ack,
@@ -3105,33 +7837,33 @@ dissect_amqp_method_basic_get(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Get-Ok                            */
 
 static int
-dissect_amqp_method_basic_get_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_get_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  delivery-tag (longlong)  */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_get_ok_delivery_tag,
         tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
+    offset += 8;
 
     /*  redelivered (bit)        */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_get_ok_redelivered,
         tvb, offset, 1, FALSE);
 
-    AMQP_INCREMENT(offset, 1, bound);
+    offset += 1;
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_get_ok_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  routing-key (shortstr)   */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_get_ok_routing_key,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  message-count (long)     */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_get_ok_message_count,
         tvb, offset, 4, FALSE);
-    AMQP_INCREMENT(offset, 4, bound);
+    offset += 4;
 
     return offset;
 }
@@ -3139,13 +7871,13 @@ dissect_amqp_method_basic_get_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Get-Empty                         */
 
 static int
-dissect_amqp_method_basic_get_empty(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_get_empty(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  cluster-id (shortstr)    */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_get_empty_cluster_id,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3153,13 +7885,13 @@ dissect_amqp_method_basic_get_empty(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Ack                               */
 
 static int
-dissect_amqp_method_basic_ack(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_ack(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  delivery-tag (longlong)  */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_ack_delivery_tag,
         tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
+    offset += 8;
 
     /*  multiple (bit)           */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_ack_multiple,
@@ -3171,13 +7903,13 @@ dissect_amqp_method_basic_ack(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Reject                            */
 
 static int
-dissect_amqp_method_basic_reject(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_reject(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  delivery-tag (longlong)  */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_reject_delivery_tag,
         tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
+    offset += 8;
 
     /*  requeue (bit)            */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_reject_requeue,
@@ -3189,8 +7921,8 @@ dissect_amqp_method_basic_reject(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Basic.Recover                           */
 
 static int
-dissect_amqp_method_basic_recover(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_basic_recover(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  requeue (bit)            */
     proto_tree_add_item(args_tree, hf_amqp_method_basic_recover_requeue,
@@ -3202,18 +7934,18 @@ dissect_amqp_method_basic_recover(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Qos                                */
 
 static int
-dissect_amqp_method_file_qos(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_qos(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  prefetch-size (long)     */
     proto_tree_add_item(args_tree, hf_amqp_method_file_qos_prefetch_size,
         tvb, offset, 4, FALSE);
-    AMQP_INCREMENT(offset, 4, bound);
+    offset += 4;
 
     /*  prefetch-count (short)   */
     proto_tree_add_item(args_tree, hf_amqp_method_file_qos_prefetch_count,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  global (bit)             */
     proto_tree_add_item(args_tree, hf_amqp_method_file_qos_global,
@@ -3225,8 +7957,8 @@ dissect_amqp_method_file_qos(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Qos-Ok                             */
 
 static int
-dissect_amqp_method_file_qos_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_qos_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -3234,24 +7966,24 @@ dissect_amqp_method_file_qos_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Consume                            */
 
 static int
-dissect_amqp_method_file_consume(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_consume(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree)
 {
     proto_item *ti;
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_file_consume_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  queue (shortstr)         */
     proto_tree_add_item(args_tree, hf_amqp_method_file_consume_queue,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_file_consume_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  no-local (bit)           */
     proto_tree_add_item(args_tree, hf_amqp_method_file_consume_no_local,
@@ -3269,14 +8001,13 @@ dissect_amqp_method_file_consume(tvbuff_t *tvb _U_,
     proto_tree_add_item(args_tree, hf_amqp_method_file_consume_nowait,
         tvb, offset, 1, FALSE);
 
-    AMQP_INCREMENT(offset, 1, bound);
+    offset += 1;
     /*  filter (table)           */
     ti = proto_tree_add_item(
         args_tree, hf_amqp_method_file_consume_filter,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -3284,13 +8015,13 @@ dissect_amqp_method_file_consume(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Consume-Ok                         */
 
 static int
-dissect_amqp_method_file_consume_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_consume_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_file_consume_ok_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3298,13 +8029,13 @@ dissect_amqp_method_file_consume_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Cancel                             */
 
 static int
-dissect_amqp_method_file_cancel(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_cancel(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_file_cancel_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  nowait (bit)             */
     proto_tree_add_item(args_tree, hf_amqp_method_file_cancel_nowait,
@@ -3316,13 +8047,13 @@ dissect_amqp_method_file_cancel(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Cancel-Ok                          */
 
 static int
-dissect_amqp_method_file_cancel_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_cancel_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_file_cancel_ok_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3330,18 +8061,18 @@ dissect_amqp_method_file_cancel_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Open                               */
 
 static int
-dissect_amqp_method_file_open(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_open(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  identifier (shortstr)    */
     proto_tree_add_item(args_tree, hf_amqp_method_file_open_identifier,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  content-size (longlong)  */
     proto_tree_add_item(args_tree, hf_amqp_method_file_open_content_size,
         tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
+    offset += 8;
 
     return offset;
 }
@@ -3349,13 +8080,13 @@ dissect_amqp_method_file_open(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Open-Ok                            */
 
 static int
-dissect_amqp_method_file_open_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_open_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  staged-size (longlong)   */
     proto_tree_add_item(args_tree, hf_amqp_method_file_open_ok_staged_size,
         tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
+    offset += 8;
 
     return offset;
 }
@@ -3363,8 +8094,8 @@ dissect_amqp_method_file_open_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Stage                              */
 
 static int
-dissect_amqp_method_file_stage(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_stage(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -3372,23 +8103,23 @@ dissect_amqp_method_file_stage(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Publish                            */
 
 static int
-dissect_amqp_method_file_publish(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_publish(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_file_publish_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_file_publish_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  routing-key (shortstr)   */
     proto_tree_add_item(args_tree, hf_amqp_method_file_publish_routing_key,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  mandatory (bit)          */
     proto_tree_add_item(args_tree, hf_amqp_method_file_publish_mandatory,
@@ -3398,11 +8129,11 @@ dissect_amqp_method_file_publish(tvbuff_t *tvb _U_,
     proto_tree_add_item(args_tree, hf_amqp_method_file_publish_immediate,
         tvb, offset, 1, FALSE);
 
-    AMQP_INCREMENT(offset, 1, bound);
+    offset += 1;
     /*  identifier (shortstr)    */
     proto_tree_add_item(args_tree, hf_amqp_method_file_publish_identifier,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3410,28 +8141,28 @@ dissect_amqp_method_file_publish(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Return                             */
 
 static int
-dissect_amqp_method_file_return(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_return(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  reply-code (short)       */
     proto_tree_add_item(args_tree, hf_amqp_method_file_return_reply_code,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  reply-text (shortstr)    */
     proto_tree_add_item(args_tree, hf_amqp_method_file_return_reply_text,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_file_return_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  routing-key (shortstr)   */
     proto_tree_add_item(args_tree, hf_amqp_method_file_return_routing_key,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3439,38 +8170,38 @@ dissect_amqp_method_file_return(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Deliver                            */
 
 static int
-dissect_amqp_method_file_deliver(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_deliver(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_file_deliver_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  delivery-tag (longlong)  */
     proto_tree_add_item(args_tree, hf_amqp_method_file_deliver_delivery_tag,
         tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
+    offset += 8;
 
     /*  redelivered (bit)        */
     proto_tree_add_item(args_tree, hf_amqp_method_file_deliver_redelivered,
         tvb, offset, 1, FALSE);
 
-    AMQP_INCREMENT(offset, 1, bound);
+    offset += 1;
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_file_deliver_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  routing-key (shortstr)   */
     proto_tree_add_item(args_tree, hf_amqp_method_file_deliver_routing_key,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  identifier (shortstr)    */
     proto_tree_add_item(args_tree, hf_amqp_method_file_deliver_identifier,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3478,13 +8209,13 @@ dissect_amqp_method_file_deliver(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Ack                                */
 
 static int
-dissect_amqp_method_file_ack(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_ack(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  delivery-tag (longlong)  */
     proto_tree_add_item(args_tree, hf_amqp_method_file_ack_delivery_tag,
         tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
+    offset += 8;
 
     /*  multiple (bit)           */
     proto_tree_add_item(args_tree, hf_amqp_method_file_ack_multiple,
@@ -3496,13 +8227,13 @@ dissect_amqp_method_file_ack(tvbuff_t *tvb _U_,
 /*  Dissection routine for method File.Reject                             */
 
 static int
-dissect_amqp_method_file_reject(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_file_reject(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  delivery-tag (longlong)  */
     proto_tree_add_item(args_tree, hf_amqp_method_file_reject_delivery_tag,
         tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
+    offset += 8;
 
     /*  requeue (bit)            */
     proto_tree_add_item(args_tree, hf_amqp_method_file_reject_requeue,
@@ -3514,23 +8245,23 @@ dissect_amqp_method_file_reject(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Stream.Qos                              */
 
 static int
-dissect_amqp_method_stream_qos(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_stream_qos(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  prefetch-size (long)     */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_qos_prefetch_size,
         tvb, offset, 4, FALSE);
-    AMQP_INCREMENT(offset, 4, bound);
+    offset += 4;
 
     /*  prefetch-count (short)   */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_qos_prefetch_count,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  consume-rate (long)      */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_qos_consume_rate,
         tvb, offset, 4, FALSE);
-    AMQP_INCREMENT(offset, 4, bound);
+    offset += 4;
 
     /*  global (bit)             */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_qos_global,
@@ -3542,8 +8273,8 @@ dissect_amqp_method_stream_qos(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Stream.Qos-Ok                           */
 
 static int
-dissect_amqp_method_stream_qos_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_stream_qos_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -3551,24 +8282,24 @@ dissect_amqp_method_stream_qos_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Stream.Consume                          */
 
 static int
-dissect_amqp_method_stream_consume(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_stream_consume(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree)
 {
     proto_item *ti;
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_consume_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  queue (shortstr)         */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_consume_queue,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_consume_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  no-local (bit)           */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_consume_no_local,
@@ -3582,14 +8313,13 @@ dissect_amqp_method_stream_consume(tvbuff_t *tvb _U_,
     proto_tree_add_item(args_tree, hf_amqp_method_stream_consume_nowait,
         tvb, offset, 1, FALSE);
 
-    AMQP_INCREMENT(offset, 1, bound);
+    offset += 1;
     /*  filter (table)           */
     ti = proto_tree_add_item(
         args_tree, hf_amqp_method_stream_consume_filter,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -3597,13 +8327,13 @@ dissect_amqp_method_stream_consume(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Stream.Consume-Ok                       */
 
 static int
-dissect_amqp_method_stream_consume_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_stream_consume_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_consume_ok_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3611,13 +8341,13 @@ dissect_amqp_method_stream_consume_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Stream.Cancel                           */
 
 static int
-dissect_amqp_method_stream_cancel(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_stream_cancel(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_cancel_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  nowait (bit)             */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_cancel_nowait,
@@ -3629,13 +8359,13 @@ dissect_amqp_method_stream_cancel(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Stream.Cancel-Ok                        */
 
 static int
-dissect_amqp_method_stream_cancel_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_stream_cancel_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_cancel_ok_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3643,23 +8373,23 @@ dissect_amqp_method_stream_cancel_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Stream.Publish                          */
 
 static int
-dissect_amqp_method_stream_publish(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_stream_publish(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  ticket (short)           */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_publish_ticket,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_publish_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  routing-key (shortstr)   */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_publish_routing_key,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  mandatory (bit)          */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_publish_mandatory,
@@ -3675,28 +8405,28 @@ dissect_amqp_method_stream_publish(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Stream.Return                           */
 
 static int
-dissect_amqp_method_stream_return(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_stream_return(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  reply-code (short)       */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_return_reply_code,
         tvb, offset, 2, FALSE);
-    AMQP_INCREMENT(offset, 2, bound);
+    offset += 2;
 
     /*  reply-text (shortstr)    */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_return_reply_text,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_return_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  routing-key (shortstr)   */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_return_routing_key,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3704,28 +8434,28 @@ dissect_amqp_method_stream_return(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Stream.Deliver                          */
 
 static int
-dissect_amqp_method_stream_deliver(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_stream_deliver(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  consumer-tag (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_deliver_consumer_tag,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  delivery-tag (longlong)  */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_deliver_delivery_tag,
         tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
+    offset += 8;
 
     /*  exchange (shortstr)      */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_deliver_exchange,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     /*  queue (shortstr)         */
     proto_tree_add_item(args_tree, hf_amqp_method_stream_deliver_queue,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3733,8 +8463,8 @@ dissect_amqp_method_stream_deliver(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Tx.Select                               */
 
 static int
-dissect_amqp_method_tx_select(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_tx_select(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -3742,8 +8472,8 @@ dissect_amqp_method_tx_select(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Tx.Select-Ok                            */
 
 static int
-dissect_amqp_method_tx_select_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_tx_select_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -3751,8 +8481,8 @@ dissect_amqp_method_tx_select_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Tx.Commit                               */
 
 static int
-dissect_amqp_method_tx_commit(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_tx_commit(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -3760,8 +8490,8 @@ dissect_amqp_method_tx_commit(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Tx.Commit-Ok                            */
 
 static int
-dissect_amqp_method_tx_commit_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_tx_commit_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -3769,8 +8499,8 @@ dissect_amqp_method_tx_commit_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Tx.Rollback                             */
 
 static int
-dissect_amqp_method_tx_rollback(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_tx_rollback(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -3778,8 +8508,8 @@ dissect_amqp_method_tx_rollback(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Tx.Rollback-Ok                          */
 
 static int
-dissect_amqp_method_tx_rollback_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_tx_rollback_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -3787,8 +8517,8 @@ dissect_amqp_method_tx_rollback_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Dtx.Select                              */
 
 static int
-dissect_amqp_method_dtx_select(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_dtx_select(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -3796,8 +8526,8 @@ dissect_amqp_method_dtx_select(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Dtx.Select-Ok                           */
 
 static int
-dissect_amqp_method_dtx_select_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_dtx_select_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -3805,13 +8535,13 @@ dissect_amqp_method_dtx_select_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Dtx.Start                               */
 
 static int
-dissect_amqp_method_dtx_start(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_dtx_start(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     /*  dtx-identifier (shortstr)  */
     proto_tree_add_item(args_tree, hf_amqp_method_dtx_start_dtx_identifier,
         tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
+    offset += 1 + tvb_get_guint8(tvb, offset);
 
     return offset;
 }
@@ -3819,8 +8549,8 @@ dissect_amqp_method_dtx_start(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Dtx.Start-Ok                            */
 
 static int
-dissect_amqp_method_dtx_start_ok(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_dtx_start_ok(tvbuff_t *tvb _U_,
+    int offset _U_, proto_tree *args_tree _U_)
 {
     return offset;
 }
@@ -3828,17 +8558,17 @@ dissect_amqp_method_dtx_start_ok(tvbuff_t *tvb _U_,
 /*  Dissection routine for method Tunnel.Request                          */
 
 static int
-dissect_amqp_method_tunnel_request(tvbuff_t *tvb _U_,
-    int offset _U_, int bound _U_, proto_tree *args_tree _U_)
+dissect_amqp_0_9_method_tunnel_request(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *args_tree)
 {
     proto_item *ti;
+
     /*  meta-data (table)        */
     ti = proto_tree_add_item(
         args_tree, hf_amqp_method_tunnel_request_meta_data,
         tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
+    dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+    offset += 4 + tvb_get_ntohl(tvb, offset);
 
     return offset;
 }
@@ -3847,126 +8577,125 @@ dissect_amqp_method_tunnel_request(tvbuff_t *tvb _U_,
 /*  Dissection routine for content headers of class basic          */
 
 static int
-dissect_amqp_content_header_basic(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *prop_tree)
+dissect_amqp_0_9_content_header_basic(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *prop_tree)
 {
     proto_item *ti;
     guint16 prop_flags;
 
     prop_flags = tvb_get_ntohs(tvb, 19);
-    if (prop_flags & 0x8000) {
-    /*  content-type (shortstr)  */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_content_type,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  content-type (shortstr)  */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_content_type,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  content-encoding (shortstr)  */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_content_encoding,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  content-encoding (shortstr)  */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_content_encoding,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  headers (table)          */
-    ti = proto_tree_add_item(
-        prop_tree, hf_amqp_header_basic_headers,
-        tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  headers (table)          */
+        ti = proto_tree_add_item(
+            prop_tree, hf_amqp_header_basic_headers,
+            tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
+        dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+        offset += 4 + tvb_get_ntohl(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  delivery-mode (octet)    */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_delivery_mode,
-        tvb, offset, 1, FALSE);
-    AMQP_INCREMENT(offset, 1, bound);
 
+    if (prop_flags & 0x8000) {
+        /*  delivery-mode (octet)    */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_delivery_mode,
+            tvb, offset, 1, FALSE);
+        offset += 1;
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  priority (octet)         */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_priority,
-        tvb, offset, 1, FALSE);
-    AMQP_INCREMENT(offset, 1, bound);
 
+    if (prop_flags & 0x8000) {
+        /*  priority (octet)         */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_priority,
+            tvb, offset, 1, FALSE);
+        offset += 1;
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  correlation-id (shortstr)  */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_correlation_id,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  correlation-id (shortstr)  */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_correlation_id,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  reply-to (shortstr)      */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_reply_to,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  reply-to (shortstr)      */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_reply_to,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  expiration (shortstr)    */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_expiration,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  expiration (shortstr)    */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_expiration,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  message-id (shortstr)    */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_message_id,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  message-id (shortstr)    */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_message_id,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  timestamp (timestamp)    */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_timestamp,
-        tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
 
+    if (prop_flags & 0x8000) {
+        /*  timestamp (timestamp)    */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_timestamp,
+            tvb, offset, 8, FALSE);
+        offset += 8;
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  type (shortstr)          */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_type,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  type (shortstr)          */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_type,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  user-id (shortstr)       */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_user_id,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  user-id (shortstr)       */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_user_id,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  app-id (shortstr)        */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_app_id,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  app-id (shortstr)        */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_app_id,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  cluster-id (shortstr)    */
-    proto_tree_add_item(prop_tree, hf_amqp_header_basic_cluster_id,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  cluster-id (shortstr)    */
+        proto_tree_add_item(prop_tree, hf_amqp_header_basic_cluster_id,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
 
@@ -3975,86 +8704,84 @@ dissect_amqp_content_header_basic(tvbuff_t *tvb,
 /*  Dissection routine for content headers of class file           */
 
 static int
-dissect_amqp_content_header_file(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *prop_tree)
+dissect_amqp_0_9_content_header_file(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *prop_tree)
 {
     proto_item *ti;
     guint16 prop_flags;
 
     prop_flags = tvb_get_ntohs(tvb, 19);
-    if (prop_flags & 0x8000) {
-    /*  content-type (shortstr)  */
-    proto_tree_add_item(prop_tree, hf_amqp_header_file_content_type,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  content-type (shortstr)  */
+        proto_tree_add_item(prop_tree, hf_amqp_header_file_content_type,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  content-encoding (shortstr)  */
-    proto_tree_add_item(prop_tree, hf_amqp_header_file_content_encoding,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  content-encoding (shortstr)  */
+        proto_tree_add_item(prop_tree, hf_amqp_header_file_content_encoding,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  headers (table)          */
-    ti = proto_tree_add_item(
-        prop_tree, hf_amqp_header_file_headers,
-        tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  headers (table)          */
+        ti = proto_tree_add_item(prop_tree, hf_amqp_header_file_headers,
+            tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
+        dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+        offset += 4 + tvb_get_ntohl(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  priority (octet)         */
-    proto_tree_add_item(prop_tree, hf_amqp_header_file_priority,
-        tvb, offset, 1, FALSE);
-    AMQP_INCREMENT(offset, 1, bound);
 
+    if (prop_flags & 0x8000) {
+        /*  priority (octet)         */
+        proto_tree_add_item(prop_tree, hf_amqp_header_file_priority,
+            tvb, offset, 1, FALSE);
+        offset += 1;
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  reply-to (shortstr)      */
-    proto_tree_add_item(prop_tree, hf_amqp_header_file_reply_to,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  reply-to (shortstr)      */
+        proto_tree_add_item(prop_tree, hf_amqp_header_file_reply_to,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  message-id (shortstr)    */
-    proto_tree_add_item(prop_tree, hf_amqp_header_file_message_id,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  message-id (shortstr)    */
+        proto_tree_add_item(prop_tree, hf_amqp_header_file_message_id,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  filename (shortstr)      */
-    proto_tree_add_item(prop_tree, hf_amqp_header_file_filename,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  filename (shortstr)      */
+        proto_tree_add_item(prop_tree, hf_amqp_header_file_filename,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  timestamp (timestamp)    */
-    proto_tree_add_item(prop_tree, hf_amqp_header_file_timestamp,
-        tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
 
+    if (prop_flags & 0x8000) {
+        /*  timestamp (timestamp)    */
+        proto_tree_add_item(prop_tree, hf_amqp_header_file_timestamp,
+            tvb, offset, 8, FALSE);
+        offset += 8;
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  cluster-id (shortstr)    */
-    proto_tree_add_item(prop_tree, hf_amqp_header_file_cluster_id,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  cluster-id (shortstr)    */
+        proto_tree_add_item(prop_tree, hf_amqp_header_file_cluster_id,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
 
@@ -4063,54 +8790,52 @@ dissect_amqp_content_header_file(tvbuff_t *tvb,
 /*  Dissection routine for content headers of class stream         */
 
 static int
-dissect_amqp_content_header_stream(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *prop_tree)
+dissect_amqp_0_9_content_header_stream(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *prop_tree)
 {
     proto_item *ti;
     guint16 prop_flags;
 
     prop_flags = tvb_get_ntohs(tvb, 19);
-    if (prop_flags & 0x8000) {
-    /*  content-type (shortstr)  */
-    proto_tree_add_item(prop_tree, hf_amqp_header_stream_content_type,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  content-type (shortstr)  */
+        proto_tree_add_item(prop_tree, hf_amqp_header_stream_content_type,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  content-encoding (shortstr)  */
-    proto_tree_add_item(prop_tree, hf_amqp_header_stream_content_encoding,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  content-encoding (shortstr)  */
+        proto_tree_add_item(prop_tree, hf_amqp_header_stream_content_encoding,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  headers (table)          */
-    ti = proto_tree_add_item(
-        prop_tree, hf_amqp_header_stream_headers,
-        tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  headers (table)          */
+        ti = proto_tree_add_item(prop_tree, hf_amqp_header_stream_headers,
+            tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
+        dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+        offset += 4 + tvb_get_ntohl(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  priority (octet)         */
-    proto_tree_add_item(prop_tree, hf_amqp_header_stream_priority,
-        tvb, offset, 1, FALSE);
-    AMQP_INCREMENT(offset, 1, bound);
 
+    if (prop_flags & 0x8000) {
+        /*  priority (octet)         */
+        proto_tree_add_item(prop_tree, hf_amqp_header_stream_priority,
+            tvb, offset, 1, FALSE);
+        offset += 1;
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  timestamp (timestamp)    */
-    proto_tree_add_item(prop_tree, hf_amqp_header_stream_timestamp,
-        tvb, offset, 8, FALSE);
-    AMQP_INCREMENT(offset, 8, bound);
 
+    if (prop_flags & 0x8000) {
+        /*  timestamp (timestamp)    */
+        proto_tree_add_item(prop_tree, hf_amqp_header_stream_timestamp,
+            tvb, offset, 8, FALSE);
+        offset += 8;
     }
     prop_flags <<= 1;
 
@@ -4119,82 +8844,999 @@ dissect_amqp_content_header_stream(tvbuff_t *tvb,
 /*  Dissection routine for content headers of class tunnel         */
 
 static int
-dissect_amqp_content_header_tunnel(tvbuff_t *tvb,
-    int offset, int bound, proto_tree *prop_tree)
+dissect_amqp_0_9_content_header_tunnel(tvbuff_t *tvb, packet_info *pinfo,
+    int offset, proto_tree *prop_tree)
 {
     proto_item *ti;
     guint16 prop_flags;
 
     prop_flags = tvb_get_ntohs(tvb, 19);
-    if (prop_flags & 0x8000) {
-    /*  headers (table)          */
-    ti = proto_tree_add_item(
-        prop_tree, hf_amqp_header_tunnel_headers,
-        tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
-    dissect_amqp_field_table (tvb, offset + 4,
-        offset + 4 + tvb_get_ntohl(tvb, offset), tvb_get_ntohl(tvb, offset), ti);
-    AMQP_INCREMENT(offset, 4 + tvb_get_ntohl(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  headers (table)          */
+        ti = proto_tree_add_item(prop_tree, hf_amqp_header_tunnel_headers,
+            tvb, offset + 4, tvb_get_ntohl(tvb, offset), FALSE);
+        dissect_amqp_0_9_field_table(tvb, pinfo, offset + 4, tvb_get_ntohl(tvb, offset), ti);
+        offset += 4 + tvb_get_ntohl(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  proxy-name (shortstr)    */
-    proto_tree_add_item(prop_tree, hf_amqp_header_tunnel_proxy_name,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  proxy-name (shortstr)    */
+        proto_tree_add_item(prop_tree, hf_amqp_header_tunnel_proxy_name,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  data-name (shortstr)     */
-    proto_tree_add_item(prop_tree, hf_amqp_header_tunnel_data_name,
-        tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
-    AMQP_INCREMENT(offset, 1 + tvb_get_guint8(tvb, offset), bound);
 
+    if (prop_flags & 0x8000) {
+        /*  data-name (shortstr)     */
+        proto_tree_add_item(prop_tree, hf_amqp_header_tunnel_data_name,
+            tvb, offset + 1, tvb_get_guint8(tvb, offset), FALSE);
+        offset += 1 + tvb_get_guint8(tvb, offset);
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  durable (octet)          */
-    proto_tree_add_item(prop_tree, hf_amqp_header_tunnel_durable,
-        tvb, offset, 1, FALSE);
-    AMQP_INCREMENT(offset, 1, bound);
 
+    if (prop_flags & 0x8000) {
+        /*  durable (octet)          */
+        proto_tree_add_item(prop_tree, hf_amqp_header_tunnel_durable,
+            tvb, offset, 1, FALSE);
+        offset += 1;
     }
     prop_flags <<= 1;
-    if (prop_flags & 0x8000) {
-    /*  broadcast (octet)        */
-    proto_tree_add_item(prop_tree, hf_amqp_header_tunnel_broadcast,
-        tvb, offset, 1, FALSE);
-    AMQP_INCREMENT(offset, 1, bound);
 
+    if (prop_flags & 0x8000) {
+        /*  broadcast (octet)        */
+        proto_tree_add_item(prop_tree, hf_amqp_header_tunnel_broadcast,
+            tvb, offset, 1, FALSE);
+        offset += 1;
     }
     prop_flags <<= 1;
 
     return offset;
 }
 
+/*  AMQP 0-10 Type Decoders  */
+
+static gboolean
+get_amqp_0_10_type_formatter(guint8 code,
+                             const char **name,
+                             type_formatter *formatter,
+                             guint *length_size)
+{
+    int i;
+    struct amqp_typeinfo *table;
+    if (code & 0x80)
+        table = amqp_0_10_var_types;
+    else
+        table = amqp_0_10_fixed_types;
+    for (i = 0; table[i].typecode != 0xff; ++i) {
+        if (table[i].typecode == code) {
+            *name = ep_strdup(table[i].typename);
+            *formatter = table[i].formatter;
+            *length_size = table[i].known_size;
+            return 1;
+        }
+    }
+    return 0;
+}
+
+static int
+format_amqp_0_10_bin(tvbuff_t *tvb,
+                     guint offset, guint bound _U_, guint length,
+                     const char **value)
+{
+    *value = tvb_bytes_to_str(tvb, offset, length);
+    return length;
+}
+
+static int
+format_amqp_0_10_int(tvbuff_t *tvb,
+                     guint offset, guint bound _U_, guint length,
+                     const char **value)
+{
+    int val;
+
+    if (length == 1)
+        val = (gint8)tvb_get_guint8(tvb, offset);
+    else if (length == 2)
+        val = (gint16)tvb_get_ntohs(tvb, offset);
+    else if (length == 4)
+        val = (gint32)tvb_get_ntohl(tvb, offset);
+    else {
+        *value = ep_strdup_printf("Invalid int length %d!", length);
+        return length;
+    }
+    *value = ep_strdup_printf("%d", val);
+    return length;
+}
+
+static int
+format_amqp_0_10_uint(tvbuff_t *tvb,
+                      guint offset, guint bound _U_, guint length,
+                      const char **value)
+{
+    unsigned int val;
+
+    if (length == 1)
+        val = tvb_get_guint8(tvb, offset);
+    else if (length == 2)
+        val = tvb_get_ntohs(tvb, offset);
+    else if (length == 4)
+        val = tvb_get_ntohl(tvb, offset);
+    else {
+        *value = ep_strdup_printf("Invalid uint length %d!", length);
+        return length;
+    }
+    *value = ep_strdup_printf("%u", val);
+    return length;
+}
+
+static int
+format_amqp_0_10_char(tvbuff_t *tvb,
+                      guint offset, guint bound _U_, guint length _U_,
+                      const char **value)
+{
+    *value = tvb_format_text(tvb, offset, 1);
+    return 1;
+}
+
+static int
+format_amqp_0_10_boolean(tvbuff_t *tvb,
+                         guint offset, guint bound _U_, guint length _U_,
+                         const char **value)
+{
+    guint8 val;
+
+    val = tvb_get_guint8(tvb, offset);
+    *value = ep_strdup(val ? "true" : "false");
+    return 1;
+}
+
+static int
+format_amqp_0_10_vbin(tvbuff_t *tvb,
+                      guint offset, guint bound, guint length,
+                      const char **value)
+{
+    guint bin_length;
+
+    if (length == 1)
+        bin_length = tvb_get_guint8(tvb, offset);
+    else if (length == 2)
+        bin_length = tvb_get_ntohs(tvb, offset);
+    else if (length == 4)
+        bin_length = tvb_get_ntohl(tvb, offset);
+    else {
+        *value = ep_strdup_printf("Invalid vbin length size %d!", length);
+        return length;
+    }
+    AMQP_INCREMENT(offset, length, bound);
+    *value = tvb_bytes_to_str(tvb, offset, bin_length);
+    AMQP_INCREMENT(offset, bin_length, bound);
+    return (bin_length + length);
+}
+
+static int
+format_amqp_0_10_str(tvbuff_t *tvb,
+                     guint offset, guint bound, guint length,
+                     const char **value)
+{
+    guint string_length;
+
+    if (length == 1)
+        string_length = tvb_get_guint8(tvb, offset);
+    else if (length == 2)
+        string_length = tvb_get_ntohs(tvb, offset);
+    else if (length == 4)
+        string_length = tvb_get_ntohl(tvb, offset);
+    else {
+        *value = ep_strdup_printf("Invalid string length size %d!", length);
+        return length;
+    }
+    AMQP_INCREMENT(offset, length, bound);
+    *value = tvb_get_ephemeral_string(tvb, offset, string_length);
+    AMQP_INCREMENT(offset, string_length, bound);
+    return (string_length + length);
+}
+
+static void
+format_amqp_0_10_sequence_set(tvbuff_t *tvb, guint offset, guint length,
+                              proto_item *item)
+{
+    guint values;
+    /* Must be 4-byte values */
+    if ((length % 4) != 0) {
+        proto_item_append_text(item, "Invalid sequence set length %u",
+                               length);
+    }
+    
+    values = length / 4;
+    /* There must be pairs of values */
+    if ((values % 2) != 0) {
+        proto_item_append_text(item, "Invalid sequence set value count %u",
+                               values);
+    }
+    proto_item_append_text(item, " [");
+    while(values > 0) {
+        proto_item_append_text(item, "(%u, %u)%s",
+                               tvb_get_ntohl(tvb, offset),
+                               tvb_get_ntohl(tvb, offset + 4),
+                               values > 2 ? ", " : "");
+        offset += 8;
+        values -= 2;
+    }
+    proto_item_append_text(item, "]");
+}
+
 /*  Basic registration functions  */
 
 void
 proto_register_amqp(void)
 {
-    /*  Setup of field format array  */
+    /*
+     * Setup of field format array. A few of the 0-9 fields are reused
+     * in 0-10, but there are many separate.
+     */
     static hf_register_info hf[] = {
-        {&hf_amqp_type, {
+        {&hf_amqp_0_10_format, {
+            "Format", "amqp.format",
+            FT_UINT8, BASE_DEC, NULL, 0xc0,
+            "Framing version", HFILL}},
+        {&hf_amqp_0_10_position, {
+            "Position", "amqp.frame-position",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_frame_position), 0x0f,
+            "Framing position", HFILL}},
+        {&hf_amqp_0_10_type, {
             "Type", "amqp.type",
-            FT_UINT8, BASE_DEC, VALS(amqp_frame_types), 0x0,
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_frame_types), 0x0,
             "Frame type", HFILL}},
+        {&hf_amqp_0_10_size, {
+            "Length", "amqp.length",
+            FT_UINT16, BASE_DEC, NULL, 0x0,
+            "Length of the frame", HFILL}},
+        {&hf_amqp_0_10_track, {
+            "Track", "amqp.track-number",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_frame_tracks), 0x0,
+            "Track number", HFILL}},
+        {&hf_amqp_0_10_class, {
+            "Class", "amqp.class",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_class), 0x0,
+            "Class ID", HFILL}},
+        {&hf_amqp_0_10_connection_method, {
+            "Method", "amqp.connection.method",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_connection_methods), 0x0,
+            "Connection Class Method", HFILL}},
+        {&hf_amqp_0_10_session_method, {
+            "Method", "amqp.session.method",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_session_methods), 0x0,
+            "Session Class Method", HFILL}},
+        {&hf_amqp_0_10_execution_method, {
+            "Method", "amqp.execution.method",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_execution_methods), 0x0,
+            "Execution Class Method", HFILL}},
+        {&hf_amqp_0_10_message_method, {
+            "Method", "amqp.message.method",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_message_methods), 0x0,
+            "Message Class Method", HFILL}},
+        {&hf_amqp_0_10_tx_method, {
+            "Method", "amqp.tx.method",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_tx_methods), 0x0,
+            "Tx Class Method", HFILL}},
+        {&hf_amqp_0_10_dtx_method, {
+            "Method", "amqp.dtx.method",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_dtx_methods), 0x0,
+            "Dtx Class Method", HFILL}},
+        {&hf_amqp_0_10_exchange_method, {
+            "Method", "amqp.exchange.method",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_exchange_methods), 0x0,
+            "Exchange Class Method", HFILL}},
+        {&hf_amqp_0_10_queue_method, {
+            "Method", "amqp.queue.method",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_queue_methods), 0x0,
+            "Queue Class Method", HFILL}},
+        {&hf_amqp_0_10_file_method, {
+            "Method", "amqp.file.method",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_file_methods), 0x0,
+            "File Class Method", HFILL}},
+        {&hf_amqp_0_10_stream_method, {
+            "Method", "amqp.stream.method",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_stream_methods), 0x0,
+            "Stream Class Method", HFILL}},
+        {&hf_amqp_0_10_message_body, {
+            "Message body", "amqp.message-body",
+            FT_NONE, BASE_NONE, NULL, 0x0,
+            "Message body content", HFILL}},
+        {&hf_amqp_0_10_dtx_xid, {
+            "Xid", "amqp.dtx.xid",
+            FT_NONE, BASE_NONE, NULL, 0x0,
+            "Dtx transaction id", HFILL}},
+        {&hf_amqp_0_10_dtx_xid_format, {
+            "Format", "amqp.dtx.xid.format",
+            FT_UINT32, BASE_DEC, NULL, 0x0,
+            "Implementation-specific xid format code", HFILL}},
+        {&hf_amqp_0_10_dtx_xid_global_id, {
+            "Global-id", "amqp.dtx.xid.global-id",
+            FT_BYTES, BASE_NONE, NULL, 0x0,
+            "Global transaction id", HFILL}},
+        {&hf_amqp_0_10_dtx_xid_branch_id, {
+            "Branch-id", "amqp.dtx.xid.branch-id",
+            FT_BYTES, BASE_NONE, NULL, 0x0,
+            "Transaction branch qualifier", HFILL}},
+        {&hf_amqp_0_10_undissected_struct32, {
+            "(undissected struct)", "amqp.undissected",
+            FT_NONE, BASE_NONE, NULL, 0x0,
+            "Message header struct not yet dissected", HFILL}},
+        {&hf_amqp_0_10_struct_delivery_properties_discard_unroutable, {
+            "Discard-unroutable", "amqp.message.delivery-properties.discard-unroutable",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
+            "Discard message if unroutable", HFILL}},
+        {&hf_amqp_0_10_struct_delivery_properties_immediate, {
+            "Immediate", "amqp.message.delivery-properties.immediate",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+            "Consider unroutable if can't be routed immediately", HFILL}},
+        {&hf_amqp_0_10_struct_delivery_properties_redelivered, {
+            "Redelivered", "amqp.message.delivery-properties.redelivered",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
+            "Message may have been previously delivered", HFILL}},
+        {&hf_amqp_0_10_struct_delivery_properties_priority, {
+            "Delivery-priority", "amqp.message.delivery-properties.delivery-priority",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_struct_delivery_properties_priorities), 0x0,
+            "Message delivery priority", HFILL}},
+        {&hf_amqp_0_10_struct_delivery_properties_mode, {
+            "Delivery-mode", "amqp.message.delivery-properties.delivery-mode",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_struct_delivery_properties_modes), 0x0,
+            "Message delivery persistence mode", HFILL}},
+        {&hf_amqp_0_10_struct_delivery_properties_ttl, {
+            "TTL", "amqp.message.delivery-properties.ttl",
+            FT_UINT64, BASE_DEC, NULL, 0x0,
+            "Message time-to-live in msec", HFILL}},
+        {&hf_amqp_0_10_struct_delivery_properties_timestamp, {
+            "Timestamp", "amqp.message.delivery-properties.timestamp",
+            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
+            "Time of arrival at broker", HFILL}},
+        {&hf_amqp_0_10_struct_delivery_properties_expiration, {
+            "Expiration", "amqp.message.delivery-properties.expiration",
+            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
+            "Expiration time calculated by broker", HFILL}},
+        {&hf_amqp_0_10_struct_delivery_properties_exchange, {
+            "Exchange", "amqp.message.delivery-properties.exchange",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "Originating exchange", HFILL}},
+        {&hf_amqp_0_10_struct_delivery_properties_routing_key, {
+            "Routing-key", "amqp.message.delivery-properties.routing-key",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "Message routing key", HFILL}},
+        {&hf_amqp_0_10_struct_delivery_properties_resume_ttl, {
+            "Resume-ttl", "amqp.message.delivery-properties.resume-ttl",
+            FT_UINT64, BASE_DEC, NULL, 0x0,
+            "TTL to use when resuming", HFILL}},
+        {&hf_amqp_0_10_struct_fragment_properties_first, {
+            "First", "amqp.message.fragment-properties.first",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
+            "Fragment contains the start of the message", HFILL}},
+        {&hf_amqp_0_10_struct_fragment_properties_last, {
+            "Last", "amqp.message.fragment-properties.last",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01,
+            "Fragment contains the end of the message", HFILL}},
+        {&hf_amqp_0_10_struct_fragment_properties_size, {
+            "Fragment-size", "amqp.message.fragment-properties.fragment-size",
+            FT_UINT64, BASE_DEC, NULL, 0x0,
+            "Size of the message fragment", HFILL}},
+        {&hf_amqp_0_10_struct_message_properties, {
+            "message.message-properties", "amqp.message.message-properties",
+            FT_NONE, BASE_NONE, NULL, 0x0,
+            "Message properties struct", HFILL}},
+        {&hf_amqp_0_10_struct_message_properties_content_len, {
+            "Content-length", "amqp.message.message-properties.content-length",
+            FT_UINT64, BASE_DEC, NULL, 0x0,
+            "Length of associated message", HFILL}},
+        {&hf_amqp_0_10_struct_message_properties_message_id, {
+            "Message-id", "amqp.message.message-properties.message-id",
+            FT_GUID, BASE_NONE, NULL, 0x0,
+            "Message Id", HFILL}},
+        {&hf_amqp_0_10_struct_message_properties_correlation, {
+            "Correlation-id", "amqp.message.message-properties.correlation-id",
+            FT_BYTES, BASE_NONE, NULL, 0x0,
+            "Correlation id", HFILL}},
+        {&hf_amqp_0_10_struct_message_properties_reply_to, {
+            "Reply-to", "amqp.message.message-properties.reply-to",
+            FT_NONE, BASE_NONE, NULL, 0x0,
+            "Address to reply to", HFILL}},
+        {&hf_amqp_0_10_struct_message_properties_content_type, {
+            "Content-type", "amqp.message.message-properties.content-type",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "MIME content type", HFILL}},
+        {&hf_amqp_0_10_struct_message_properties_content_encoding, {
+            "Content-encoding", "amqp.message.message-properties.content-encoding",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "MIME content encoding method", HFILL}},
+        {&hf_amqp_0_10_struct_message_properties_user_id, {
+            "User-id", "amqp.message.message-properties.user-id",
+            FT_BYTES, BASE_NONE, NULL, 0x0,
+            "Creating user id", HFILL}},
+        {&hf_amqp_0_10_struct_message_properties_app_id, {
+            "App-id", "amqp.message.message-properties.app-id",
+            FT_BYTES, BASE_NONE, NULL, 0x0,
+            "Creating user id", HFILL}},
+        {&hf_amqp_0_10_struct_message_properties_application_headers, {
+            "Application-headers", "amqp.message.message-properties.application-headers",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "Application-private headers", HFILL}},
+        {&hf_amqp_0_10_struct_reply_to_exchange, {
+            "Exchange", "amqp.message.message-properties.reply-to.exchange",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "Exchange to reply to", HFILL}},
+        {&hf_amqp_0_10_struct_reply_to_routing_key, {
+            "Routing-key", "amqp.message.message-properties.reply-to.routing-key",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "Routing key to reply with", HFILL}},
+        {&hf_amqp_0_10_struct_acquired_transfers, {
+            "Transfers", "amqp.message.acquired.transfers",
+            FT_NONE, BASE_NONE, NULL, 0x0,
+            "Command set", HFILL}},
+        {&hf_amqp_0_10_struct_resume_result_offset, {
+            "Offset", "amqp.message.resume-result.offset",
+            FT_UINT64, BASE_DEC, NULL, 0x0,
+            "Amount of data already transferred", HFILL}},
+        {&hf_amqp_0_10_struct_exchange_query_result_durable, {
+            "Durable", "amqp.exchange.exchange-query-result.durable",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+            "Exchange is durable", HFILL}},
+        {&hf_amqp_0_10_struct_exchange_query_result_not_found, {
+            "Not-found", "amqp.exchange.exchange-query-result.not-found",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04,
+            "Exchange was not found", HFILL}},
+        {&hf_amqp_0_10_struct_exchange_bound_result_exchange_not_found, {
+            "Exchange-not-found", "amqp.exchange.exchange-bound-result.exchange-not-found",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x01,
+            "Exchange was not found", HFILL}},
+        {&hf_amqp_0_10_struct_exchange_bound_result_queue_not_found, {
+            "Queue-not-found", "amqp.exchange.exchange-bound-result.queue-not-found",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x02,
+            "Queue was not found", HFILL}},
+        {&hf_amqp_0_10_struct_exchange_bound_result_queue_not_matched, {
+            "Queue-not-matched", "amqp.exchange.exchange-bound-result.queue-not-matched",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04,
+            "No binding from exchange to queue", HFILL}},
+        {&hf_amqp_0_10_struct_exchange_bound_result_key_not_matched, {
+            "Key-not-matched", "amqp.exchange.exchange-bound-result.key-not-matched",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x08,
+            "No binding from exchange with binding-key", HFILL}},
+        {&hf_amqp_0_10_struct_exchange_bound_result_args_not_matched, {
+            "Args-not-matched", "amqp.exchange.exchange-bound-result.args-not-matched",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x10,
+            "No binding from exchange with specified arguments", HFILL}},
+        {&hf_amqp_0_10_struct_queue_query_result_durable, {
+            "Durable", "amqp.queue.queue-query-result.durable",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
+            "Queue is durable", HFILL}},
+        {&hf_amqp_0_10_struct_queue_query_result_exclusive, {
+            "Exclusive", "amqp.queue.queue-query-result.exclusive",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
+            "Queue created exclusive-use", HFILL}},
+        {&hf_amqp_0_10_struct_queue_query_result_auto_delete, {
+            "Auto-delete", "amqp.queue.queue-query-result.auto-delete",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
+            "Queue created auto-delete", HFILL}},
+        {&hf_amqp_0_10_struct_queue_query_result_message_count, {
+            "Message-count", "amqp.queue.queue-query-result.message-countt",
+            FT_UINT32, BASE_DEC, NULL, 0x0,
+            "Number of messages in the queue", HFILL}},
+        {&hf_amqp_0_10_struct_queue_query_result_subscriber_count, {
+            "Subscriber-count", "amqp.queue.queue-query-result.subscriber-count",
+            FT_UINT32, BASE_DEC, NULL, 0x0,
+            "Number of subscribers for the queue", HFILL}},
+        {&hf_amqp_0_10_struct_file_properties_content_type, {
+            "Content-type", "amqp.file.file-properties.content-type",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "MIME content type", HFILL}},
+        {&hf_amqp_0_10_struct_file_properties_content_encoding, {
+            "Content-encoding", "amqp.file.file-properties.content-encoding",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "MIME content encoding", HFILL}},
+        {&hf_amqp_0_10_struct_file_properties_headers, {
+            "Headers", "amqp.file.file-properties.headers",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "Message header fields", HFILL}},
+        {&hf_amqp_0_10_struct_file_properties_priority, {
+            "Priority", "amqp.file.file-properties.priority",
+            FT_UINT8, BASE_DEC, NULL, 0,
+            "Message priority, 0 to 9", HFILL}},
+        {&hf_amqp_0_10_struct_file_properties_reply_to, {
+            "Reply-to", "amqp.file.file-properties.reply-to",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "Destination to reply to", HFILL}},
+        {&hf_amqp_0_10_struct_file_properties_message_id, {
+            "Message-id", "amqp.file.file-properties.message-id",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "Application message identifier", HFILL}},
+        {&hf_amqp_0_10_struct_file_properties_filename, {
+            "Filename", "amqp.file.file-properties.filename",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "Message filename", HFILL}},
+        {&hf_amqp_0_10_struct_file_properties_timestamp, {
+            "Timestamp", "amqp.file.file-properties.timestamp",
+            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
+            "Message timestamp", HFILL}},
+        {&hf_amqp_0_10_struct_file_properties_cluster_id, {
+            "Cluster-id", "amqp.file.file-properties.cluster-id",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "Intra-cluster routing identifier", HFILL}},
+        {&hf_amqp_0_10_struct_stream_properties_content_type, {
+            "Content-type", "amqp.stream.stream-properties.content-type",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "MIME content type", HFILL}},
+        {&hf_amqp_0_10_struct_stream_properties_content_encoding, {
+            "Content-encoding", "amqp.stream.stream-properties.content-encoding",
+            FT_STRING, BASE_NONE, NULL, 0x0,
+            "MIME content encoding", HFILL}},
+        {&hf_amqp_0_10_struct_stream_properties_headers, {
+            "Headers", "amqp.stream.stream-properties.headers",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "Message header fields", HFILL}},
+        {&hf_amqp_0_10_struct_stream_properties_priority, {
+            "Priority", "amqp.stream.stream-properties.priority",
+            FT_UINT8, BASE_DEC, NULL, 0,
+            "Message priority, 0 to 9", HFILL}},
+        {&hf_amqp_0_10_struct_stream_properties_timestamp, {
+            "Timestamp", "amqp.stream.stream-properties.timestamp",
+            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
+            "Message timestamp", HFILL}},
+        {&hf_amqp_0_10_argument_packing_flags, {
+            "Packing Flags", "amqp.struct.packing",
+            FT_UINT16, BASE_HEX, NULL, 0xffff,
+            "Argument Struct Packing Flags", HFILL}},
+        {&hf_amqp_0_10_session_header_sync, {
+            "Sync", "amqp.session.header.sync",
+            FT_BOOLEAN, 8, TFS(&amqp_0_10_session_header_sync), 0x01,
+            "Sync requested", HFILL}},
+        {&hf_amqp_0_10_method_session_attach_name, {
+            "Name", "amqp.session.attach.name",
+            FT_BYTES, BASE_NONE, NULL, 0x0,
+            "Session name", HFILL}},
+        {&hf_amqp_0_10_method_session_attach_force, {
+            "Force", "amqp.session.attach.force",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+            "Session forced", HFILL}},
+        {&hf_amqp_0_10_method_session_detached_code, {
+            "Code", "amqp.session.detached.code",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_method_session_detached_codes), 0x0,
+            "Reason for detach", HFILL}},
+        {&hf_amqp_0_10_method_session_timeout, {
+            "Timeout", "amqp.session.timeout",
+            FT_UINT32, BASE_DEC, NULL, 0x0,
+            "Session timeout (seconds)", HFILL}},
+        {&hf_amqp_0_10_method_session_completed_timely, {
+            "Timely-reply", "amqp.session.completed.timely-reply",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+            "Timely reply requested", HFILL}},
+        {&hf_amqp_0_10_method_session_flush_expected, {
+            "Expected", "amqp.session.flush.expected",
+            FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x01,
+            "Request notification of expected commands", HFILL}},
+        {&hf_amqp_0_10_method_session_flush_confirmed, {
+            "Confirmed", "amqp.session.flush.confirmed",
+            FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x02,
+            "Request notification of confirmed commands", HFILL}},
+        {&hf_amqp_0_10_method_session_flush_completed, {
+            "Completed", "amqp.session.flush.completed",
+            FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x04,
+            "Request notification of completed commands", HFILL}},
+        {&hf_amqp_0_10_method_session_command_point_id, {
+            "Command-id", "amqp.session.command_point.command_id",
+            FT_UINT32, BASE_DEC, NULL, 0x0,
+            "Next command's sequence number", HFILL}},
+        {&hf_amqp_0_10_method_session_command_point_offset, {
+            "Command-offset", "amqp.session.command_point.command_offset",
+            FT_UINT64, BASE_DEC, NULL, 0x0,
+            "Byte offset within command", HFILL}},
+        {&hf_amqp_0_10_method_session_commands, {
+            "Commands", "amqp.session.expected.commands",
+            FT_NONE, BASE_NONE, NULL, 0x0,
+            "Command set", HFILL}},
+        {&hf_amqp_0_10_method_session_fragments, {
+            "Fragments", "amqp.session.expected.fragments",
+            FT_NONE, BASE_NONE, NULL, 0x0,
+            "Command Fragments", HFILL}},
+        {&hf_amqp_0_10_method_execution_command_id, {
+            "Command-id", "amqp.execution.command_id",
+            FT_UINT32, BASE_DEC, NULL, 0x0,
+            "Command's sequence number", HFILL}},
+        {&hf_amqp_0_10_method_execution_exception_error, {
+            "Error-code", "amqp.execution.exception.error-code",
+            FT_UINT16, BASE_DEC, VALS(amqp_0_10_method_execution_exception_errors), 0x0,
+            "Exception error code", HFILL}},
+        {&hf_amqp_0_10_method_execution_field_index, {
+            "Field-index", "amqp.execution.exception.field-index",
+            FT_UINT8, BASE_DEC, NULL, 0x0,
+            "0-based index of exceptional field", HFILL}},
+        {&hf_amqp_0_10_method_execution_description, {
+            "Description", "amqp.execution.exception.description",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Description of exception", HFILL}},
+        {&hf_amqp_0_10_method_execution_error_info, {
+            "Error-info", "amqp.execution.exception.error-info",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "client-properties", HFILL}},
+        {&hf_amqp_0_10_method_message_transfer_destination, {
+            "Description", "amqp.message.transfer.destination",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Message destination", HFILL}},
+        {&hf_amqp_0_10_method_message_transfer_accept_mode, {
+            "Accept-mode", "amqp.message.transfer.accept-mode",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_message_transfer_accept_modes), 0x0,
+            "Message accept mode", HFILL}},
+        {&hf_amqp_0_10_method_message_transfer_acquire_mode, {
+            "Acquire-mode", "amqp.message.transfer.acquire-mode",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_message_transfer_acquire_modes), 0x0,
+            "Message acquire mode", HFILL}},
+        {&hf_amqp_0_10_method_message_accept_transfers, {
+            "Commands", "amqp.message.accept.transfers",
+            FT_NONE, BASE_NONE, NULL, 0x0,
+            "Previously transferred messages", HFILL}},
+        {&hf_amqp_0_10_method_message_transfer_reject_code, {
+            "Reject-code", "amqp.message.reject.reject-code",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_message_transfer_reject_codes), 0x0,
+            "Message reject code", HFILL}},
+        {&hf_amqp_0_10_method_message_reject_text, {
+            "Text", "amqp.message.reject.text",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Reject description", HFILL}},
+        {&hf_amqp_0_10_method_message_release_set_redelivered, {
+            "Set-redelivered", "amqp.message.release.set-redelivered",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+            "Mark redelivered on next transfer from queue", HFILL}},
+        {&hf_amqp_0_10_method_message_dest, {
+            "Destination", "amqp.message.destination",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Message destination", HFILL}},
+        {&hf_amqp_0_10_method_message_resume_id, {
+            "Resume-Id", "amqp.message.resume.id",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Message id to resume", HFILL}},
+        {&hf_amqp_0_10_method_message_subscribe_queue, {
+            "Queue", "amqp.message.subscribe.queue",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Queue to subscribe to", HFILL}},
+        {&hf_amqp_0_10_method_message_subscribe_exclusive, {
+            "Exclusive", "amqp.message.subscribe.exclusive",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
+            "Request exclusive subscription", HFILL}},
+        {&hf_amqp_0_10_method_message_subscribe_resume_ttl, {
+            "Resume-ttl", "amqp.message.subscribe.resume_ttl",
+            FT_UINT64, BASE_DEC, NULL, 0x0,
+            "TTL to use when resuming", HFILL}},
+        {&hf_amqp_0_10_method_message_subscribe_args, {
+            "Extended arguments", "amqp.message.subscribe.arguments",
+            FT_NONE, BASE_NONE, NULL, 0x0,
+            "Implementation-specific arguments", HFILL}},
+        {&hf_amqp_0_10_method_message_flow_mode, {
+            "Flow-mode", "amqp.message.flow-mode",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_message_flow_modes), 0x0,
+            "Method for allocating message flow credit", HFILL}},
+        {&hf_amqp_0_10_method_message_credit_unit, {
+            "Credit-unit", "amqp.message.flow.credit-unit",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_10_message_credit_units), 0x0,
+            "Unit of message flow value", HFILL}},
+        {&hf_amqp_0_10_method_message_credit_value, {
+            "Value", "amqp.message.flow.value",
+            FT_UINT32, BASE_DEC, NULL, 0x0,
+            "Message flow value", HFILL}},
+        {&hf_amqp_0_10_method_dtx_start_join, {
+            "Join", "amqp.dtx.start.join",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+            "Join with existing xid", HFILL}},
+        {&hf_amqp_0_10_method_dtx_start_resume, {
+            "Resume", "amqp.dtx.start.resume",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
+            "Resume suspended transaction", HFILL}},
+        {&hf_amqp_0_10_method_dtx_end_fail, {
+            "Fail", "amqp.dtx.end.fail",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+            "This portion of work has failed", HFILL}},
+        {&hf_amqp_0_10_method_dtx_end_suspend, {
+            "Suspend", "amqp.dtx.end.suspend",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
+            "Temporarily suspending transaction", HFILL}},
+        {&hf_amqp_0_10_method_dtx_commit_one_phase, {
+            "One-phase", "amqp.dtx.commit.one-phase",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+            "Use one-phase optimization", HFILL}},
+        {&hf_amqp_0_10_method_dtx_set_timeout_timeout, {
+            "Timeout", "amqp.dtx.set-timeout.timeout",
+            FT_UINT32, BASE_DEC, NULL, 0x0,
+            "Transaction timeout value in seconds", HFILL}},
+        {&hf_amqp_0_10_method_exchange_declare_exchange, {
+            "Exchange", "amqp.exchange.declare.exchange",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Exchange to declare", HFILL}},
+        {&hf_amqp_0_10_method_exchange_declare_type, {
+            "Type", "amqp.exchange.declare.type",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Type of exchange to declare", HFILL}},
+        {&hf_amqp_0_10_method_exchange_declare_alt_exchange, {
+            "Alternate-exchange", "amqp.exchange.declare.alternate-exchange",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Alternate exchange for unroutable messages", HFILL}},
+        {&hf_amqp_0_10_method_exchange_declare_passive, {
+            "Passive", "amqp.exchange.declare.passive",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
+            "Do not create the exchange", HFILL}},
+        {&hf_amqp_0_10_method_exchange_declare_durable, {
+            "Durable", "amqp.exchange.declare.durable",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
+            "Create a durable exchange", HFILL}},
+        {&hf_amqp_0_10_method_exchange_declare_auto_delete, {
+            "Auto-delete", "amqp.exchange.declare.auto-delete",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
+            "Delete exchange when last binding removed", HFILL}},
+        {&hf_amqp_0_10_method_exchange_declare_arguments, {
+            "Arguments", "amqp.exchange.declare.arguments",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "Declaration arguments", HFILL}},
+        {&hf_amqp_0_10_method_exchange_delete_if_unused, {
+            "If-unused", "amqp.exchange.delete.if-unused",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+            "Delete exchange only if it has no queue bindings", HFILL}},
+        {&hf_amqp_0_10_method_exchange_bind_queue, {
+            "Queue", "amqp.exchange.bind.queue",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Queue to bind to", HFILL}},
+        {&hf_amqp_0_10_method_exchange_binding_key, {
+            "Binding-key", "amqp.exchange.bind.binding-key",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Binding between exchange and queue", HFILL}},
+        {&hf_amqp_0_10_method_queue_name, {
+            "Queue", "amqp.queue.declare.queue",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Queue name", HFILL}},
+        {&hf_amqp_0_10_method_queue_alt_exchange, {
+            "Alternate-exchange", "amqp.queue.declare.alternate-exchange",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Alternate Exchange", HFILL}},
+        {&hf_amqp_0_10_method_queue_declare_passive, {
+            "Passive", "amqp.queue.declare.passive",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
+            "Do not create the queue", HFILL}},
+        {&hf_amqp_0_10_method_queue_declare_durable, {
+            "Durable", "amqp.queue.declare.durable",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
+            "Create a durable queue", HFILL}},
+        {&hf_amqp_0_10_method_queue_declare_exclusive, {
+            "Exclusive", "amqp.queue.declare.exclusive",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
+            "Create a queue usable from only one session", HFILL}},
+        {&hf_amqp_0_10_method_queue_declare_auto_delete, {
+            "Auto-delete", "amqp.queue.declare.auto-delete",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
+            "Delete queue when all uses completed", HFILL}},
+        {&hf_amqp_0_10_method_queue_declare_arguments, {
+            "Arguments", "amqp.queue.declare.arguments",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "Declaration arguments", HFILL}},
+        {&hf_amqp_0_10_method_queue_delete_if_unused, {
+            "If-unused", "amqp.queue.delete.if-unused",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x02,
+            "Delete the queue only if there are no consumers", HFILL}},
+        {&hf_amqp_0_10_method_queue_delete_if_empty, {
+            "If-empty", "amqp.queue.delete.if-empty",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04,
+            "Delete queue only if empty", HFILL}},
+        {&hf_amqp_0_10_method_file_qos_prefetch_size, {
+            "Prefetch-size", "amqp.file.qos.prefetch-size",
+            FT_UINT32, BASE_DEC, NULL, 0x0,
+            "Pre-fetch window size in octets", HFILL}},
+        {&hf_amqp_0_10_method_file_qos_prefetch_count, {
+            "Prefetch-count", "amqp.file.qos.prefetch-count",
+            FT_UINT16, BASE_DEC, NULL, 0x0,
+            "Pre-fetch window size in messages", HFILL}},
+        {&hf_amqp_0_10_method_file_qos_global, {
+            "Global", "amqp.file.qos.global",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04,
+            "Apply QoS to entire connection", HFILL}},
+        {&hf_amqp_0_10_method_file_consumer_tag, {
+            "Consumer-tag", "amqp.file.consumer-tag",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Consumer tag", HFILL}},
+        {&hf_amqp_0_10_method_file_consume_no_local, {
+            "No-local", "amqp.file.consume.no-local",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04,
+            "Don't send messages to connection that publishes them", HFILL}},
+        {&hf_amqp_0_10_method_file_consume_no_ack, {
+            "No-ack", "amqp.file.consume.no-ack",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x08,
+            "No acknowledgement needed", HFILL}},
+        {&hf_amqp_0_10_method_file_consume_exclusive, {
+            "Exclusive", "amqp.file.consume.exclusive",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x10,
+            "Request exclusive access", HFILL}},
+        {&hf_amqp_0_10_method_file_consume_nowait, {
+            "Nowait", "amqp.file.consume.nowait",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x20,
+            "Do not send a reply", HFILL}},
+        {&hf_amqp_0_10_method_file_consume_arguments, {
+            "Arguments", "amqp.file.consume.arguments",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "Arguments for consuming", HFILL}},
+        {&hf_amqp_0_10_method_file_identifier, {
+            "Identifier", "amqp.file.identifier",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Staging identifier", HFILL}},
+        {&hf_amqp_0_10_method_file_open_content_size, {
+            "Content-size", "amqp.file.open.content-size",
+            FT_UINT64, BASE_DEC, NULL, 0x0,
+            "Message content size in octets", HFILL}},
+        {&hf_amqp_0_10_method_file_open_ok_staged_size, {
+            "Staged-size", "amqp.file.open_ok.staged-size",
+            FT_UINT64, BASE_DEC, NULL, 0x0,
+            "Amount of previously staged content in octets", HFILL}},
+        {&hf_amqp_0_10_method_file_publish_exchange, {
+            "Exchange", "amqp.file.publish.exchange",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Exchange to publish to", HFILL}},
+        {&hf_amqp_0_10_method_file_publish_routing_key, {
+            "Routing-key", "amqp.file.publish.routing-key",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Message routing key", HFILL}},
+        {&hf_amqp_0_10_method_file_publish_mandatory, {
+            "Mandatory", "amqp.file.publish.mandatory",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04,
+            "Mandatory routing", HFILL}},
+        {&hf_amqp_0_10_method_file_publish_immediate, {
+            "Immediate", "amqp.file.publish.immediate",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x08,
+            "Request immediate delivery", HFILL}},
+        {&hf_amqp_0_10_method_file_return_reply_code, {
+            "Reply-code", "amqp.file.return.reply-code",
+            FT_UINT16, BASE_DEC, VALS(amqp_0_10_file_return_codes), 0x0,
+            "Reply code", HFILL}},
+        {&hf_amqp_0_10_method_file_return_reply_text, {
+            "Reply-text", "amqp.file.return.reply-text",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Localized reply text", HFILL}},
+        {&hf_amqp_0_10_method_file_return_exchange, {
+            "Exchange", "amqp.file.return.exchange",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Exchange the original message was published to", HFILL}},
+        {&hf_amqp_0_10_method_file_return_routing_key, {
+            "Routing-key", "amqp.file.return.routing-key",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Message routing key", HFILL}},
+        {&hf_amqp_0_10_method_file_deliver_consumer_tag, {
+            "Consumer-tag", "amqp.file.deliver.consumer-tag",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Consumer tag", HFILL}},
+        {&hf_amqp_0_10_method_file_deliver_delivery_tag, {
+            "Delivery-tag", "amqp.file.deliver.delivery-tag",
+            FT_UINT64, BASE_HEX, NULL, 0,
+            "Server-assigned, session-specific delivery tag", HFILL}},
+        {&hf_amqp_0_10_method_file_deliver_redelivered, {
+            "Redelivered", "amqp.file.deliver.redelivered",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
+            "Possible duplicate delivery", HFILL}},
+        {&hf_amqp_0_10_method_file_deliver_exchange, {
+            "Exchange", "amqp.file.deliver.exchange",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Exchange the original message was published to", HFILL}},
+        {&hf_amqp_0_10_method_file_deliver_routing_key, {
+            "Routing-key", "amqp.file.deliver.routing-key",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Message routing key", HFILL}},
+        {&hf_amqp_0_10_method_file_ack_delivery_tag, {
+            "Delivery-tag", "amqp.file.ack.delivery-tag",
+            FT_UINT64, BASE_HEX, NULL, 0,
+            "Identifier of message being acknowledged", HFILL}},
+        {&hf_amqp_0_10_method_file_ack_multiple, {
+            "Multiple", "amqp.file.ack.multiple",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x02,
+            "Acknowledge multiple messages", HFILL}},
+        {&hf_amqp_0_10_method_file_reject_delivery_tag, {
+            "Delivery-tag", "amqp.file.reject.delivery-tag",
+            FT_UINT64, BASE_HEX, NULL, 0,
+            "Identifier of message to be rejected", HFILL}},
+        {&hf_amqp_0_10_method_file_reject_requeue, {
+            "Requeue", "amqp.file.reject.multiple",
+            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
+            "Requeue the message", HFILL}},
+        {&hf_amqp_0_10_method_stream_qos_prefetch_size, {
+            "Prefetch-size", "amqp.stream.qos.prefetch-size",
+            FT_UINT32, BASE_DEC, NULL, 0x0,
+            "Pre-fetch window size in octets", HFILL}},
+        {&hf_amqp_0_10_method_stream_qos_prefetch_count, {
+            "Prefetch-count", "amqp.stream.qos.prefetch-count",
+            FT_UINT16, BASE_DEC, NULL, 0x0,
+            "Pre-fetch window size in messages", HFILL}},
+        {&hf_amqp_0_10_method_stream_qos_consume_rate, {
+            "Prefetch-size", "amqp.stream.qos.consume_rate",
+            FT_UINT32, BASE_DEC, NULL, 0x0,
+            "Desired transfer rate in octets/second", HFILL}},
+        {&hf_amqp_0_10_method_stream_qos_global, {
+            "Global", "amqp.stream.qos.global",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x08,
+            "Apply QoS to entire connection", HFILL}},
+        {&hf_amqp_0_10_method_stream_consumer_tag, {
+            "Consumer-tag", "amqp.stream.consumer-tag",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Consumer tag", HFILL}},
+        {&hf_amqp_0_10_method_stream_consume_no_local, {
+            "No-local", "amqp.stream.consume.no-local",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04,
+            "Don't send messages to connection that publishes them", HFILL}},
+        {&hf_amqp_0_10_method_stream_consume_exclusive, {
+            "Exclusive", "amqp.stream.consume.exclusive",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x08,
+            "Request exclusive access", HFILL}},
+        {&hf_amqp_0_10_method_stream_consume_nowait, {
+            "Nowait", "amqp.stream.consume.nowait",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x10,
+            "Do not send a reply", HFILL}},
+        {&hf_amqp_0_10_method_stream_consume_arguments, {
+            "Arguments", "amqp.stream.consume.arguments",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "Arguments for consuming", HFILL}},
+        {&hf_amqp_0_10_method_stream_publish_exchange, {
+            "Exchange", "amqp.stream.publish.exchange",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Exchange to publish to", HFILL}},
+        {&hf_amqp_0_10_method_stream_publish_routing_key, {
+            "Routing-key", "amqp.stream.publish.routing-key",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Message routing key", HFILL}},
+        {&hf_amqp_0_10_method_stream_publish_mandatory, {
+            "Mandatory", "amqp.stream.publish.mandatory",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x04,
+            "Mandatory routing", HFILL}},
+        {&hf_amqp_0_10_method_stream_publish_immediate, {
+            "Immediate", "amqp.stream.publish.immediate",
+            FT_BOOLEAN, 8, TFS(&tfs_true_false), 0x08,
+            "Request immediate delivery", HFILL}},
+        {&hf_amqp_0_10_method_stream_return_reply_code, {
+            "Reply-code", "amqp.stream.return.reply-code",
+            FT_UINT16, BASE_DEC, VALS(amqp_0_10_stream_return_codes), 0x0,
+            "Reply code", HFILL}},
+        {&hf_amqp_0_10_method_stream_return_reply_text, {
+            "Reply-text", "amqp.stream.return.reply-text",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Localized reply text", HFILL}},
+        {&hf_amqp_0_10_method_stream_return_exchange, {
+            "Exchange", "amqp.stream.return.exchange",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Exchange the original message was published to", HFILL}},
+        {&hf_amqp_0_10_method_stream_return_routing_key, {
+            "Routing-key", "amqp.stream.return.routing-key",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Message routing key", HFILL}},
+        {&hf_amqp_0_10_method_stream_deliver_consumer_tag, {
+            "Consumer-tag", "amqp.stream.deliver.consumer-tag",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Consumer tag", HFILL}},
+        {&hf_amqp_0_10_method_stream_deliver_delivery_tag, {
+            "Delivery-tag", "amqp.stream.deliver.delivery-tag",
+            FT_UINT64, BASE_HEX, NULL, 0,
+            "Server-assigned, session-specific delivery tag", HFILL}},
+        {&hf_amqp_0_10_method_stream_deliver_exchange, {
+            "Exchange", "amqp.stream.deliver.exchange",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Exchange the original message was published to", HFILL}},
+        {&hf_amqp_0_10_method_stream_deliver_queue, {
+            "Queue", "amqp.stream.deliver.queue",
+            FT_STRING, BASE_NONE, NULL, 0,
+            "Name of the queue the message came from", HFILL}},
         {&hf_amqp_channel,{
             "Channel", "amqp.channel",
             FT_UINT16, BASE_DEC, NULL, 0x0,
             "Channel ID", HFILL}},
-        {&hf_amqp_length, {
+        {&hf_amqp_0_9_type, {
+            "Type", "amqp.type",
+            FT_UINT8, BASE_DEC, VALS(amqp_0_9_frame_types), 0x0,
+            "Frame type", HFILL}},
+        {&hf_amqp_0_9_length, {
             "Length", "amqp.length",
             FT_UINT32, BASE_DEC, NULL, 0x0,
             "Length of the frame", HFILL}},
-        {&hf_amqp_method_class_id, {
+        {&hf_amqp_0_9_method_class_id, {
             "Class", "amqp.method.class",
-            FT_UINT16, BASE_DEC, VALS(amqp_method_classes), 0x0,
+            FT_UINT16, BASE_DEC, VALS(amqp_0_9_method_classes), 0x0,
             "Class ID", HFILL}},
         {&hf_amqp_method_connection_method_id, {
             "Method", "amqp.method.method",
@@ -4247,806 +9889,851 @@ proto_register_amqp(void)
         {&hf_amqp_method_connection_start_version_major, {
             "Version-Major", "amqp.method.arguments.version_major",
             FT_UINT8, BASE_DEC, NULL, 0,
-            "version-major", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_connection_start_version_minor, {
             "Version-Minor", "amqp.method.arguments.version_minor",
             FT_UINT8, BASE_DEC, NULL, 0,
-            "version-minor", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_connection_start_server_properties, {
             "Server-Properties", "amqp.method.arguments.server_properties",
             FT_NONE, BASE_NONE, NULL, 0,
-            "server-properties", HFILL}},
-        {&hf_amqp_method_connection_start_mechanisms, {
+            NULL, HFILL}},
+        {&hf_amqp_0_9_method_connection_start_mechanisms, {
             "Mechanisms", "amqp.method.arguments.mechanisms",
             FT_BYTES, BASE_NONE, NULL, 0,
-            "mechanisms", HFILL}},
-        {&hf_amqp_method_connection_start_locales, {
+            NULL, HFILL}},
+        {&hf_amqp_0_10_method_connection_start_mechanisms, {
+            "Mechanisms", "amqp.method.arguments.mechanisms",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "Supported security mechanisms", HFILL}},
+        {&hf_amqp_0_9_method_connection_start_locales, {
             "Locales", "amqp.method.arguments.locales",
             FT_BYTES, BASE_NONE, NULL, 0,
-            "locales", HFILL}},
+            NULL, HFILL}},
+        {&hf_amqp_0_10_method_connection_start_locales, {
+            "Locales", "amqp.method.arguments.locales",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "Supported message locales", HFILL}},
         {&hf_amqp_method_connection_start_ok_client_properties, {
             "Client-Properties", "amqp.method.arguments.client_properties",
             FT_NONE, BASE_NONE, NULL, 0,
-            "client-properties", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_connection_start_ok_mechanism, {
             "Mechanism", "amqp.method.arguments.mechanism",
             FT_STRING, BASE_NONE, NULL, 0,
-            "mechanism", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_connection_start_ok_response, {
             "Response", "amqp.method.arguments.response",
             FT_BYTES, BASE_NONE, NULL, 0,
-            "response", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_connection_start_ok_locale, {
             "Locale", "amqp.method.arguments.locale",
             FT_STRING, BASE_NONE, NULL, 0,
-            "locale", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_connection_secure_challenge, {
             "Challenge", "amqp.method.arguments.challenge",
             FT_BYTES, BASE_NONE, NULL, 0,
-            "challenge", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_connection_secure_ok_response, {
             "Response", "amqp.method.arguments.response",
             FT_BYTES, BASE_NONE, NULL, 0,
-            "response", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_connection_tune_channel_max, {
             "Channel-Max", "amqp.method.arguments.channel_max",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "channel-max", HFILL}},
-        {&hf_amqp_method_connection_tune_frame_max, {
+            NULL, HFILL}},
+        {&hf_amqp_0_9_method_connection_tune_frame_max, {
             "Frame-Max", "amqp.method.arguments.frame_max",
             FT_UINT32, BASE_DEC, NULL, 0,
-            "frame-max", HFILL}},
-        {&hf_amqp_method_connection_tune_heartbeat, {
+            NULL, HFILL}},
+        {&hf_amqp_0_10_method_connection_tune_frame_max, {
+            "Frame-Max", "amqp.method.arguments.frame_max",
+            FT_UINT16, BASE_DEC, NULL, 0,
+            "Server-proposed maximum frame size", HFILL}},
+        {&hf_amqp_0_9_method_connection_tune_heartbeat, {
             "Heartbeat", "amqp.method.arguments.heartbeat",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "heartbeat", HFILL}},
+            NULL, HFILL}},
+        {&hf_amqp_0_10_method_connection_tune_heartbeat_min, {
+            "Heartbeat-Min", "amqp.method.arguments.heartbeat_min",
+             FT_UINT16, BASE_DEC, NULL, 0,
+            "Minimum heartbeat delay (seconds)", HFILL}},
+        {&hf_amqp_0_10_method_connection_tune_heartbeat_max, {
+            "Heartbeat-Max", "amqp.method.arguments.heartbeat_max",
+             FT_UINT16, BASE_DEC, NULL, 0,
+            "Maximum heartbeat delay (seconds)", HFILL}},
         {&hf_amqp_method_connection_tune_ok_channel_max, {
             "Channel-Max", "amqp.method.arguments.channel_max",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "channel-max", HFILL}},
-        {&hf_amqp_method_connection_tune_ok_frame_max, {
+            NULL, HFILL}},
+        {&hf_amqp_0_9_method_connection_tune_ok_frame_max, {
             "Frame-Max", "amqp.method.arguments.frame_max",
             FT_UINT32, BASE_DEC, NULL, 0,
-            "frame-max", HFILL}},
+            NULL, HFILL}},
+        {&hf_amqp_0_10_method_connection_tune_ok_frame_max, {
+            "Frame-Max", "amqp.method.arguments.frame_max",
+            FT_UINT16, BASE_DEC, NULL, 0,
+            "Negotiated maximum frame size", HFILL}},
         {&hf_amqp_method_connection_tune_ok_heartbeat, {
             "Heartbeat", "amqp.method.arguments.heartbeat",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "heartbeat", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_connection_open_virtual_host, {
             "Virtual-Host", "amqp.method.arguments.virtual_host",
             FT_STRING, BASE_NONE, NULL, 0,
-            "virtual-host", HFILL}},
-        {&hf_amqp_method_connection_open_capabilities, {
+            NULL, HFILL}},
+        {&hf_amqp_0_9_method_connection_open_capabilities, {
             "Capabilities", "amqp.method.arguments.capabilities",
             FT_STRING, BASE_NONE, NULL, 0,
-            "capabilities", HFILL}},
-        {&hf_amqp_method_connection_open_insist, {
+            NULL, HFILL}},
+        {&hf_amqp_0_10_method_connection_open_capabilities, {
+            "Capabilities", "amqp.method.arguments.capabilities",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "Required capabilities", HFILL}},
+        {&hf_amqp_0_9_method_connection_open_insist, {
             "Insist", "amqp.method.arguments.insist",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "insist", HFILL}},
-        {&hf_amqp_method_connection_open_ok_known_hosts, {
+            NULL, HFILL}},
+        {&hf_amqp_0_10_method_connection_open_insist, {
+            "Insist", "amqp.method.arguments.insist",
+            FT_BOOLEAN, 8, NULL, 0x04,
+            "Client insists on this server", HFILL}},
+        {&hf_amqp_0_9_method_connection_open_ok_known_hosts, {
             "Known-Hosts", "amqp.method.arguments.known_hosts",
             FT_STRING, BASE_NONE, NULL, 0,
-            "known-hosts", HFILL}},
+            NULL, HFILL}},
+        {&hf_amqp_0_10_method_connection_open_ok_known_hosts, {
+            "Known-Hosts", "amqp.method.arguments.known_hosts",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "Equivalent or alternate hosts for reconnection", HFILL}},
         {&hf_amqp_method_connection_redirect_host, {
             "Host", "amqp.method.arguments.host",
             FT_STRING, BASE_NONE, NULL, 0,
-            "host", HFILL}},
-        {&hf_amqp_method_connection_redirect_known_hosts, {
+            NULL, HFILL}},
+        {&hf_amqp_0_9_method_connection_redirect_known_hosts, {
             "Known-Hosts", "amqp.method.arguments.known_hosts",
             FT_STRING, BASE_NONE, NULL, 0,
-            "known-hosts", HFILL}},
-        {&hf_amqp_method_connection_close_reply_code, {
+            NULL, HFILL}},
+        {&hf_amqp_0_10_method_connection_redirect_known_hosts, {
+            "Known-Hosts", "amqp.method.arguments.known_hosts",
+            FT_NONE, BASE_NONE, NULL, 0,
+            "Equivalent or alternate hosts to redirect to", HFILL}},
+        {&hf_amqp_0_9_method_connection_close_reply_code, {
             "Reply-Code", "amqp.method.arguments.reply_code",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "reply-code", HFILL}},
+            NULL, HFILL}},
+        {&hf_amqp_0_10_method_connection_close_reply_code, {
+            "Reply-Code", "amqp.method.arguments.reply_code",
+             FT_UINT16, BASE_DEC,
+            VALS(amqp_0_10_method_connection_close_reply_codes), 0,
+            "Close reason", HFILL}},
         {&hf_amqp_method_connection_close_reply_text, {
             "Reply-Text", "amqp.method.arguments.reply_text",
             FT_STRING, BASE_NONE, NULL, 0,
-            "reply-text", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_connection_close_class_id, {
             "Class-Id", "amqp.method.arguments.class_id",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "class-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_connection_close_method_id, {
             "Method-Id", "amqp.method.arguments.method_id",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "method-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_channel_open_out_of_band, {
             "Out-Of-Band", "amqp.method.arguments.out_of_band",
             FT_STRING, BASE_NONE, NULL, 0,
-            "out-of-band", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_channel_open_ok_channel_id, {
             "Channel-Id", "amqp.method.arguments.channel_id",
             FT_BYTES, BASE_NONE, NULL, 0,
-            "channel-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_channel_flow_active, {
             "Active", "amqp.method.arguments.active",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "active", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_channel_flow_ok_active, {
             "Active", "amqp.method.arguments.active",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "active", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_channel_close_reply_code, {
             "Reply-Code", "amqp.method.arguments.reply_code",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "reply-code", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_channel_close_reply_text, {
             "Reply-Text", "amqp.method.arguments.reply_text",
             FT_STRING, BASE_NONE, NULL, 0,
-            "reply-text", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_channel_close_class_id, {
             "Class-Id", "amqp.method.arguments.class_id",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "class-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_channel_close_method_id, {
             "Method-Id", "amqp.method.arguments.method_id",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "method-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_channel_resume_channel_id, {
             "Channel-Id", "amqp.method.arguments.channel_id",
             FT_BYTES, BASE_NONE, NULL, 0,
-            "channel-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_access_request_realm, {
             "Realm", "amqp.method.arguments.realm",
             FT_STRING, BASE_NONE, NULL, 0,
-            "realm", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_access_request_exclusive, {
             "Exclusive", "amqp.method.arguments.exclusive",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "exclusive", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_access_request_passive, {
             "Passive", "amqp.method.arguments.passive",
             FT_BOOLEAN, 8, NULL, 0x02,
-            "passive", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_access_request_active, {
             "Active", "amqp.method.arguments.active",
             FT_BOOLEAN, 8, NULL, 0x04,
-            "active", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_access_request_write, {
             "Write", "amqp.method.arguments.write",
             FT_BOOLEAN, 8, NULL, 0x08,
-            "write", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_access_request_read, {
             "Read", "amqp.method.arguments.read",
             FT_BOOLEAN, 8, NULL, 0x10,
-            "read", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_access_request_ok_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_declare_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_declare_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_declare_type, {
             "Type", "amqp.method.arguments.type",
             FT_STRING, BASE_NONE, NULL, 0,
-            "type", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_declare_passive, {
             "Passive", "amqp.method.arguments.passive",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "passive", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_declare_durable, {
             "Durable", "amqp.method.arguments.durable",
             FT_BOOLEAN, 8, NULL, 0x02,
-            "durable", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_declare_auto_delete, {
             "Auto-Delete", "amqp.method.arguments.auto_delete",
             FT_BOOLEAN, 8, NULL, 0x04,
-            "auto-delete", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_declare_internal, {
             "Internal", "amqp.method.arguments.internal",
             FT_BOOLEAN, 8, NULL, 0x08,
-            "internal", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_declare_nowait, {
             "Nowait", "amqp.method.arguments.nowait",
             FT_BOOLEAN, 8, NULL, 0x10,
-            "nowait", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_declare_arguments, {
             "Arguments", "amqp.method.arguments.arguments",
             FT_NONE, BASE_NONE, NULL, 0,
-            "arguments", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_delete_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_delete_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_delete_if_unused, {
             "If-Unused", "amqp.method.arguments.if_unused",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "if-unused", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_exchange_delete_nowait, {
             "Nowait", "amqp.method.arguments.nowait",
             FT_BOOLEAN, 8, NULL, 0x02,
-            "nowait", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_declare_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_declare_queue, {
             "Queue", "amqp.method.arguments.queue",
             FT_STRING, BASE_NONE, NULL, 0,
-            "queue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_declare_passive, {
             "Passive", "amqp.method.arguments.passive",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "passive", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_declare_durable, {
             "Durable", "amqp.method.arguments.durable",
             FT_BOOLEAN, 8, NULL, 0x02,
-            "durable", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_declare_exclusive, {
             "Exclusive", "amqp.method.arguments.exclusive",
             FT_BOOLEAN, 8, NULL, 0x04,
-            "exclusive", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_declare_auto_delete, {
             "Auto-Delete", "amqp.method.arguments.auto_delete",
             FT_BOOLEAN, 8, NULL, 0x08,
-            "auto-delete", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_declare_nowait, {
             "Nowait", "amqp.method.arguments.nowait",
             FT_BOOLEAN, 8, NULL, 0x10,
-            "nowait", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_declare_arguments, {
             "Arguments", "amqp.method.arguments.arguments",
             FT_NONE, BASE_NONE, NULL, 0,
-            "arguments", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_declare_ok_queue, {
             "Queue", "amqp.method.arguments.queue",
             FT_STRING, BASE_NONE, NULL, 0,
-            "queue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_declare_ok_message_count, {
             "Message-Count", "amqp.method.arguments.message_count",
             FT_UINT32, BASE_DEC, NULL, 0,
-            "message-count", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_declare_ok_consumer_count, {
             "Consumer-Count", "amqp.method.arguments.consumer_count",
             FT_UINT32, BASE_DEC, NULL, 0,
-            "consumer-count", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_bind_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_bind_queue, {
             "Queue", "amqp.method.arguments.queue",
             FT_STRING, BASE_NONE, NULL, 0,
-            "queue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_bind_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_bind_routing_key, {
             "Routing-Key", "amqp.method.arguments.routing_key",
             FT_STRING, BASE_NONE, NULL, 0,
-            "routing-key", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_bind_nowait, {
             "Nowait", "amqp.method.arguments.nowait",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "nowait", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_bind_arguments, {
             "Arguments", "amqp.method.arguments.arguments",
             FT_NONE, BASE_NONE, NULL, 0,
-            "arguments", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_unbind_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_unbind_queue, {
             "Queue", "amqp.method.arguments.queue",
             FT_STRING, BASE_NONE, NULL, 0,
-            "queue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_unbind_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_unbind_routing_key, {
             "Routing-Key", "amqp.method.arguments.routing_key",
             FT_STRING, BASE_NONE, NULL, 0,
-            "routing-key", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_unbind_arguments, {
             "Arguments", "amqp.method.arguments.arguments",
             FT_NONE, BASE_NONE, NULL, 0,
-            "arguments", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_purge_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_purge_queue, {
             "Queue", "amqp.method.arguments.queue",
             FT_STRING, BASE_NONE, NULL, 0,
-            "queue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_purge_nowait, {
             "Nowait", "amqp.method.arguments.nowait",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "nowait", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_purge_ok_message_count, {
             "Message-Count", "amqp.method.arguments.message_count",
             FT_UINT32, BASE_DEC, NULL, 0,
-            "message-count", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_delete_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_delete_queue, {
             "Queue", "amqp.method.arguments.queue",
             FT_STRING, BASE_NONE, NULL, 0,
-            "queue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_delete_if_unused, {
             "If-Unused", "amqp.method.arguments.if_unused",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "if-unused", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_delete_if_empty, {
             "If-Empty", "amqp.method.arguments.if_empty",
             FT_BOOLEAN, 8, NULL, 0x02,
-            "if-empty", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_delete_nowait, {
             "Nowait", "amqp.method.arguments.nowait",
             FT_BOOLEAN, 8, NULL, 0x04,
-            "nowait", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_queue_delete_ok_message_count, {
             "Message-Count", "amqp.method.arguments.message_count",
             FT_UINT32, BASE_DEC, NULL, 0,
-            "message-count", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_qos_prefetch_size, {
             "Prefetch-Size", "amqp.method.arguments.prefetch_size",
             FT_UINT32, BASE_DEC, NULL, 0,
-            "prefetch-size", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_qos_prefetch_count, {
             "Prefetch-Count", "amqp.method.arguments.prefetch_count",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "prefetch-count", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_qos_global, {
             "Global", "amqp.method.arguments.global",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "global", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_consume_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_consume_queue, {
             "Queue", "amqp.method.arguments.queue",
             FT_STRING, BASE_NONE, NULL, 0,
-            "queue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_consume_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_consume_no_local, {
             "No-Local", "amqp.method.arguments.no_local",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "no-local", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_consume_no_ack, {
             "No-Ack", "amqp.method.arguments.no_ack",
             FT_BOOLEAN, 8, NULL, 0x02,
-            "no-ack", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_consume_exclusive, {
             "Exclusive", "amqp.method.arguments.exclusive",
             FT_BOOLEAN, 8, NULL, 0x04,
-            "exclusive", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_consume_nowait, {
             "Nowait", "amqp.method.arguments.nowait",
             FT_BOOLEAN, 8, NULL, 0x08,
-            "nowait", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_consume_filter, {
             "Filter", "amqp.method.arguments.filter",
             FT_NONE, BASE_NONE, NULL, 0,
-            "filter", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_consume_ok_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_cancel_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_cancel_nowait, {
             "Nowait", "amqp.method.arguments.nowait",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "nowait", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_cancel_ok_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_publish_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_publish_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_publish_routing_key, {
             "Routing-Key", "amqp.method.arguments.routing_key",
             FT_STRING, BASE_NONE, NULL, 0,
-            "routing-key", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_publish_mandatory, {
             "Mandatory", "amqp.method.arguments.mandatory",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "mandatory", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_publish_immediate, {
             "Immediate", "amqp.method.arguments.immediate",
             FT_BOOLEAN, 8, NULL, 0x02,
-            "immediate", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_return_reply_code, {
             "Reply-Code", "amqp.method.arguments.reply_code",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "reply-code", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_return_reply_text, {
             "Reply-Text", "amqp.method.arguments.reply_text",
             FT_STRING, BASE_NONE, NULL, 0,
-            "reply-text", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_return_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_return_routing_key, {
             "Routing-Key", "amqp.method.arguments.routing_key",
             FT_STRING, BASE_NONE, NULL, 0,
-            "routing-key", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_deliver_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_deliver_delivery_tag, {
             "Delivery-Tag", "amqp.method.arguments.delivery_tag",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "delivery-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_deliver_redelivered, {
             "Redelivered", "amqp.method.arguments.redelivered",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "redelivered", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_deliver_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_deliver_routing_key, {
             "Routing-Key", "amqp.method.arguments.routing_key",
             FT_STRING, BASE_NONE, NULL, 0,
-            "routing-key", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_get_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_get_queue, {
             "Queue", "amqp.method.arguments.queue",
             FT_STRING, BASE_NONE, NULL, 0,
-            "queue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_get_no_ack, {
             "No-Ack", "amqp.method.arguments.no_ack",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "no-ack", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_get_ok_delivery_tag, {
             "Delivery-Tag", "amqp.method.arguments.delivery_tag",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "delivery-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_get_ok_redelivered, {
             "Redelivered", "amqp.method.arguments.redelivered",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "redelivered", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_get_ok_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_get_ok_routing_key, {
             "Routing-Key", "amqp.method.arguments.routing_key",
             FT_STRING, BASE_NONE, NULL, 0,
-            "routing-key", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_get_ok_message_count, {
             "Message-Count", "amqp.method.arguments.message_count",
             FT_UINT32, BASE_DEC, NULL, 0,
-            "message-count", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_get_empty_cluster_id, {
             "Cluster-Id", "amqp.method.arguments.cluster_id",
             FT_STRING, BASE_NONE, NULL, 0,
-            "cluster-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_ack_delivery_tag, {
             "Delivery-Tag", "amqp.method.arguments.delivery_tag",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "delivery-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_ack_multiple, {
             "Multiple", "amqp.method.arguments.multiple",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "multiple", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_reject_delivery_tag, {
             "Delivery-Tag", "amqp.method.arguments.delivery_tag",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "delivery-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_reject_requeue, {
             "Requeue", "amqp.method.arguments.requeue",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "requeue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_basic_recover_requeue, {
             "Requeue", "amqp.method.arguments.requeue",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "requeue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_qos_prefetch_size, {
             "Prefetch-Size", "amqp.method.arguments.prefetch_size",
             FT_UINT32, BASE_DEC, NULL, 0,
-            "prefetch-size", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_qos_prefetch_count, {
             "Prefetch-Count", "amqp.method.arguments.prefetch_count",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "prefetch-count", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_qos_global, {
             "Global", "amqp.method.arguments.global",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "global", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_consume_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_consume_queue, {
             "Queue", "amqp.method.arguments.queue",
             FT_STRING, BASE_NONE, NULL, 0,
-            "queue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_consume_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_consume_no_local, {
             "No-Local", "amqp.method.arguments.no_local",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "no-local", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_consume_no_ack, {
             "No-Ack", "amqp.method.arguments.no_ack",
             FT_BOOLEAN, 8, NULL, 0x02,
-            "no-ack", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_consume_exclusive, {
             "Exclusive", "amqp.method.arguments.exclusive",
             FT_BOOLEAN, 8, NULL, 0x04,
-            "exclusive", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_consume_nowait, {
             "Nowait", "amqp.method.arguments.nowait",
             FT_BOOLEAN, 8, NULL, 0x08,
-            "nowait", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_consume_filter, {
             "Filter", "amqp.method.arguments.filter",
             FT_NONE, BASE_NONE, NULL, 0,
-            "filter", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_consume_ok_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_cancel_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_cancel_nowait, {
             "Nowait", "amqp.method.arguments.nowait",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "nowait", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_cancel_ok_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_open_identifier, {
             "Identifier", "amqp.method.arguments.identifier",
             FT_STRING, BASE_NONE, NULL, 0,
-            "identifier", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_open_content_size, {
             "Content-Size", "amqp.method.arguments.content_size",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "content-size", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_open_ok_staged_size, {
             "Staged-Size", "amqp.method.arguments.staged_size",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "staged-size", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_publish_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_publish_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_publish_routing_key, {
             "Routing-Key", "amqp.method.arguments.routing_key",
             FT_STRING, BASE_NONE, NULL, 0,
-            "routing-key", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_publish_mandatory, {
             "Mandatory", "amqp.method.arguments.mandatory",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "mandatory", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_publish_immediate, {
             "Immediate", "amqp.method.arguments.immediate",
             FT_BOOLEAN, 8, NULL, 0x02,
-            "immediate", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_publish_identifier, {
             "Identifier", "amqp.method.arguments.identifier",
             FT_STRING, BASE_NONE, NULL, 0,
-            "identifier", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_return_reply_code, {
             "Reply-Code", "amqp.method.arguments.reply_code",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "reply-code", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_return_reply_text, {
             "Reply-Text", "amqp.method.arguments.reply_text",
             FT_STRING, BASE_NONE, NULL, 0,
-            "reply-text", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_return_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_return_routing_key, {
             "Routing-Key", "amqp.method.arguments.routing_key",
             FT_STRING, BASE_NONE, NULL, 0,
-            "routing-key", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_deliver_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_deliver_delivery_tag, {
             "Delivery-Tag", "amqp.method.arguments.delivery_tag",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "delivery-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_deliver_redelivered, {
             "Redelivered", "amqp.method.arguments.redelivered",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "redelivered", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_deliver_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_deliver_routing_key, {
             "Routing-Key", "amqp.method.arguments.routing_key",
             FT_STRING, BASE_NONE, NULL, 0,
-            "routing-key", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_deliver_identifier, {
             "Identifier", "amqp.method.arguments.identifier",
             FT_STRING, BASE_NONE, NULL, 0,
-            "identifier", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_ack_delivery_tag, {
             "Delivery-Tag", "amqp.method.arguments.delivery_tag",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "delivery-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_ack_multiple, {
             "Multiple", "amqp.method.arguments.multiple",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "multiple", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_reject_delivery_tag, {
             "Delivery-Tag", "amqp.method.arguments.delivery_tag",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "delivery-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_file_reject_requeue, {
             "Requeue", "amqp.method.arguments.requeue",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "requeue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_qos_prefetch_size, {
             "Prefetch-Size", "amqp.method.arguments.prefetch_size",
             FT_UINT32, BASE_DEC, NULL, 0,
-            "prefetch-size", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_qos_prefetch_count, {
             "Prefetch-Count", "amqp.method.arguments.prefetch_count",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "prefetch-count", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_qos_consume_rate, {
             "Consume-Rate", "amqp.method.arguments.consume_rate",
             FT_UINT32, BASE_DEC, NULL, 0,
-            "consume-rate", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_qos_global, {
             "Global", "amqp.method.arguments.global",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "global", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_consume_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_consume_queue, {
             "Queue", "amqp.method.arguments.queue",
             FT_STRING, BASE_NONE, NULL, 0,
-            "queue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_consume_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_consume_no_local, {
             "No-Local", "amqp.method.arguments.no_local",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "no-local", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_consume_exclusive, {
             "Exclusive", "amqp.method.arguments.exclusive",
             FT_BOOLEAN, 8, NULL, 0x02,
-            "exclusive", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_consume_nowait, {
             "Nowait", "amqp.method.arguments.nowait",
             FT_BOOLEAN, 8, NULL, 0x04,
-            "nowait", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_consume_filter, {
             "Filter", "amqp.method.arguments.filter",
             FT_NONE, BASE_NONE, NULL, 0,
-            "filter", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_consume_ok_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_cancel_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_cancel_nowait, {
             "Nowait", "amqp.method.arguments.nowait",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "nowait", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_cancel_ok_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_publish_ticket, {
             "Ticket", "amqp.method.arguments.ticket",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "ticket", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_publish_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_publish_routing_key, {
             "Routing-Key", "amqp.method.arguments.routing_key",
             FT_STRING, BASE_NONE, NULL, 0,
-            "routing-key", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_publish_mandatory, {
             "Mandatory", "amqp.method.arguments.mandatory",
             FT_BOOLEAN, 8, NULL, 0x01,
-            "mandatory", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_publish_immediate, {
             "Immediate", "amqp.method.arguments.immediate",
             FT_BOOLEAN, 8, NULL, 0x02,
-            "immediate", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_return_reply_code, {
             "Reply-Code", "amqp.method.arguments.reply_code",
              FT_UINT16, BASE_DEC, NULL, 0,
-            "reply-code", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_return_reply_text, {
             "Reply-Text", "amqp.method.arguments.reply_text",
             FT_STRING, BASE_NONE, NULL, 0,
-            "reply-text", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_return_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_return_routing_key, {
             "Routing-Key", "amqp.method.arguments.routing_key",
             FT_STRING, BASE_NONE, NULL, 0,
-            "routing-key", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_deliver_consumer_tag, {
             "Consumer-Tag", "amqp.method.arguments.consumer_tag",
             FT_STRING, BASE_NONE, NULL, 0,
-            "consumer-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_deliver_delivery_tag, {
             "Delivery-Tag", "amqp.method.arguments.delivery_tag",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "delivery-tag", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_deliver_exchange, {
             "Exchange", "amqp.method.arguments.exchange",
             FT_STRING, BASE_NONE, NULL, 0,
-            "exchange", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_stream_deliver_queue, {
             "Queue", "amqp.method.arguments.queue",
             FT_STRING, BASE_NONE, NULL, 0,
-            "queue", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_dtx_start_dtx_identifier, {
             "Dtx-Identifier", "amqp.method.arguments.dtx_identifier",
             FT_STRING, BASE_NONE, NULL, 0,
-            "dtx-identifier", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_method_tunnel_request_meta_data, {
             "Meta-Data", "amqp.method.arguments.meta_data",
             FT_NONE, BASE_NONE, NULL, 0,
-            "meta-data", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_field, {
-            "AMQP", "amqp",
+            "AMQP", "amqp.field",
             FT_NONE, BASE_NONE, NULL, 0,
             NULL, HFILL}},
         {&hf_amqp_header_class_id, {
             "Class ID", "amqp.header.class",
-            FT_UINT16, BASE_DEC, VALS(amqp_method_classes), 0,
+            FT_UINT16, BASE_DEC, VALS(amqp_0_9_method_classes), 0,
             NULL, HFILL}},
         {&hf_amqp_header_weight, {
             "Weight", "amqp.header.weight",
@@ -5067,135 +10754,135 @@ proto_register_amqp(void)
         {&hf_amqp_header_basic_content_type, {
             "Content-Type", "amqp.method.properties.content_type",
             FT_STRING, BASE_NONE, NULL, 0,
-            "content-type", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_content_encoding, {
             "Content-Encoding", "amqp.method.properties.content_encoding",
             FT_STRING, BASE_NONE, NULL, 0,
-            "content-encoding", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_headers, {
             "Headers", "amqp.method.properties.headers",
             FT_NONE, BASE_NONE, NULL, 0,
-            "headers", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_delivery_mode, {
             "Delivery-Mode", "amqp.method.properties.delivery_mode",
             FT_UINT8, BASE_DEC, NULL, 0,
-            "delivery-mode", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_priority, {
             "Priority", "amqp.method.properties.priority",
             FT_UINT8, BASE_DEC, NULL, 0,
-            "priority", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_correlation_id, {
             "Correlation-Id", "amqp.method.properties.correlation_id",
             FT_STRING, BASE_NONE, NULL, 0,
-            "correlation-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_reply_to, {
             "Reply-To", "amqp.method.properties.reply_to",
             FT_STRING, BASE_NONE, NULL, 0,
-            "reply-to", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_expiration, {
             "Expiration", "amqp.method.properties.expiration",
             FT_STRING, BASE_NONE, NULL, 0,
-            "expiration", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_message_id, {
             "Message-Id", "amqp.method.properties.message_id",
             FT_STRING, BASE_NONE, NULL, 0,
-            "message-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_timestamp, {
             "Timestamp", "amqp.method.properties.timestamp",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "timestamp", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_type, {
             "Type", "amqp.method.properties.type",
             FT_STRING, BASE_NONE, NULL, 0,
-            "type", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_user_id, {
             "User-Id", "amqp.method.properties.user_id",
             FT_STRING, BASE_NONE, NULL, 0,
-            "user-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_app_id, {
             "App-Id", "amqp.method.properties.app_id",
             FT_STRING, BASE_NONE, NULL, 0,
-            "app-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_basic_cluster_id, {
             "Cluster-Id", "amqp.method.properties.cluster_id",
             FT_STRING, BASE_NONE, NULL, 0,
-            "cluster-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_file_content_type, {
             "Content-Type", "amqp.method.properties.content_type",
             FT_STRING, BASE_NONE, NULL, 0,
-            "content-type", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_file_content_encoding, {
             "Content-Encoding", "amqp.method.properties.content_encoding",
             FT_STRING, BASE_NONE, NULL, 0,
-            "content-encoding", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_file_headers, {
             "Headers", "amqp.method.properties.headers",
             FT_NONE, BASE_NONE, NULL, 0,
-            "headers", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_file_priority, {
             "Priority", "amqp.method.properties.priority",
             FT_UINT8, BASE_DEC, NULL, 0,
-            "priority", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_file_reply_to, {
             "Reply-To", "amqp.method.properties.reply_to",
             FT_STRING, BASE_NONE, NULL, 0,
-            "reply-to", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_file_message_id, {
             "Message-Id", "amqp.method.properties.message_id",
             FT_STRING, BASE_NONE, NULL, 0,
-            "message-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_file_filename, {
             "Filename", "amqp.method.properties.filename",
             FT_STRING, BASE_NONE, NULL, 0,
-            "filename", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_file_timestamp, {
             "Timestamp", "amqp.method.properties.timestamp",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "timestamp", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_file_cluster_id, {
             "Cluster-Id", "amqp.method.properties.cluster_id",
             FT_STRING, BASE_NONE, NULL, 0,
-            "cluster-id", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_stream_content_type, {
             "Content-Type", "amqp.method.properties.content_type",
             FT_STRING, BASE_NONE, NULL, 0,
-            "content-type", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_stream_content_encoding, {
             "Content-Encoding", "amqp.method.properties.content_encoding",
             FT_STRING, BASE_NONE, NULL, 0,
-            "content-encoding", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_stream_headers, {
             "Headers", "amqp.method.properties.headers",
             FT_NONE, BASE_NONE, NULL, 0,
-            "headers", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_stream_priority, {
             "Priority", "amqp.method.properties.priority",
             FT_UINT8, BASE_DEC, NULL, 0,
-            "priority", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_stream_timestamp, {
             "Timestamp", "amqp.method.properties.timestamp",
             FT_UINT64, BASE_DEC, NULL, 0,
-            "timestamp", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_tunnel_headers, {
             "Headers", "amqp.method.properties.headers",
             FT_NONE, BASE_NONE, NULL, 0,
-            "headers", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_tunnel_proxy_name, {
             "Proxy-Name", "amqp.method.properties.proxy_name",
             FT_STRING, BASE_NONE, NULL, 0,
-            "proxy-name", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_tunnel_data_name, {
             "Data-Name", "amqp.method.properties.data_name",
             FT_STRING, BASE_NONE, NULL, 0,
-            "data-name", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_tunnel_durable, {
             "Durable", "amqp.method.properties.durable",
             FT_UINT8, BASE_DEC, NULL, 0,
-            "durable", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_header_tunnel_broadcast, {
             "Broadcast", "amqp.method.properties.broadcast",
             FT_UINT8, BASE_DEC, NULL, 0,
-            "broadcast", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_payload, {
             "Payload", "amqp.payload",
             FT_BYTES, BASE_NONE, NULL, 0,
@@ -5207,11 +10894,11 @@ proto_register_amqp(void)
         {&hf_amqp_init_id_major, {
             "Protocol ID Major", "amqp.init.id_major",
             FT_UINT8, BASE_DEC, NULL, 0,
-            "Protocol ID major", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_init_id_minor, {
             "Protocol ID Minor", "amqp.init.id_minor",
             FT_UINT8, BASE_DEC, NULL, 0,
-            "Protocol ID minor", HFILL}},
+            NULL, HFILL}},
         {&hf_amqp_init_version_major, {
             "Version Major", "amqp.init.version_major",
             FT_UINT8, BASE_DEC, NULL, 0,
@@ -5226,10 +10913,13 @@ proto_register_amqp(void)
 
     static gint *ett [] = {
          &ett_amqp,
+         &ett_header,
          &ett_args,
          &ett_props,
          &ett_field_table,
-         &ett_amqp_init
+         &ett_amqp_init,
+         &ett_amqp_0_10_map,
+         &ett_amqp_0_10_array
     };
 
     proto_amqp = proto_register_protocol(
@@ -5241,6 +10931,6 @@ proto_register_amqp(void)
 void
 proto_reg_handoff_amqp(void)
 {
-    dissector_add("tcp.port", amqp_port,
+    dissector_add_uint("tcp.port", amqp_port,
         create_dissector_handle(dissect_amqp, proto_amqp));
 }