diff --git a/tests/actions.py b/tests/actions.py
index 68b2e1b..6bb6a8a 100644
--- a/tests/actions.py
+++ b/tests/actions.py
@@ -88,7 +88,7 @@
         request = ofp.message.features_request()
         (reply, pkt) = self.controller.transact(request)
         self.assertTrue(reply is not None, "Failed to get any reply")
-        self.assertEqual(reply.header.type, ofp.OFPT_FEATURES_REPLY,'Response is not Features_reply')
+        self.assertEqual(reply.type, ofp.OFPT_FEATURES_REPLY,'Response is not Features_reply')
         
         supported_actions =[]
         if(reply.actions &1<<ofp.OFPAT_OUTPUT):
diff --git a/tests/basic.py b/tests/basic.py
index 83291fc..66e0355 100644
--- a/tests/basic.py
+++ b/tests/basic.py
@@ -41,9 +41,9 @@
         response, pkt = self.controller.transact(request)
         self.assertTrue(response is not None,
                         "Did not get echo reply")
-        self.assertEqual(response.header.type, ofp.OFPT_ECHO_REPLY,
+        self.assertEqual(response.type, ofp.OFPT_ECHO_REPLY,
                          'response is not echo_reply')
-        self.assertEqual(request.header.xid, response.header.xid,
+        self.assertEqual(request.xid, response.xid,
                          'response xid != request xid')
         self.assertEqual(len(response.data), 0, 'response data non-empty')
 
@@ -56,9 +56,9 @@
         response, pkt = self.controller.transact(request)
         self.assertTrue(response is not None,
                         "Did not get echo reply (with data)")
-        self.assertEqual(response.header.type, ofp.OFPT_ECHO_REPLY,
+        self.assertEqual(response.type, ofp.OFPT_ECHO_REPLY,
                          'response is not echo_reply')
-        self.assertEqual(request.header.xid, response.header.xid,
+        self.assertEqual(request.xid, response.xid,
                          'response xid != request xid')
         self.assertEqual(request.data, response.data,
                          'response data does not match request')
@@ -391,9 +391,11 @@
         request = illegal_message.illegal_message_type()
 
         reply, pkt = self.controller.transact(request)
+        logging.info(repr(pkt))
         self.assertTrue(reply is not None, "Did not get response to bad req")
-        self.assertTrue(reply.header.type == ofp.OFPT_ERROR,
+        self.assertTrue(reply.type == ofp.OFPT_ERROR,
                         "reply not an error message")
+        logging.info(reply.err_type)
         self.assertTrue(reply.err_type == ofp.OFPET_BAD_REQUEST,
                         "reply error type is not bad request")
         self.assertTrue(reply.code == ofp.OFPBRC_BAD_TYPE,
diff --git a/tests/flow_query.py b/tests/flow_query.py
index 9c53ab6..68d4e1f 100644
--- a/tests/flow_query.py
+++ b/tests/flow_query.py
@@ -1203,16 +1203,12 @@
 
     def error_handler(self, controller, msg, rawmsg):
         logging.info("Got an ERROR message, type=%d, code=%d" \
-                          % (msg.type, msg.code) \
+                          % (msg.err_type, msg.code) \
                           )
-        logging.info("Message header:")
-        logging.info(msg.header.show())
         self.error_msgs.append(msg)
 
     def removed_handler(self, controller, msg, rawmsg):
         logging.info("Got a REMOVED message")
-        logging.info("Message header:")
-        logging.info(msg.header.show())
         self.removed_msgs.append(msg)
 
     def controller_set(self, controller):
@@ -1360,9 +1356,9 @@
             flow_mod_msg.flags = flow_mod_msg.flags | ofp.OFPFF_CHECK_OVERLAP
         if flow_cfg.send_rem:
             flow_mod_msg.flags = flow_mod_msg.flags | ofp.OFPFF_SEND_FLOW_REM
-        flow_mod_msg.header.xid = random.randrange(1,0xffffffff)
+        flow_mod_msg.xid = random.randrange(1,0xffffffff)
         logging.info("Sending flow_mod(add), xid=%d"
-                        % (flow_mod_msg.header.xid)
+                        % (flow_mod_msg.xid)
                         )
         self.controller.message_send(flow_mod_msg)
         return True
@@ -1373,9 +1369,9 @@
                                    else ofp.OFPFC_MODIFY
         flow_mod_msg.buffer_id   = 0xffffffff
         flow_cfg.to_flow_mod_msg(flow_mod_msg)
-        flow_mod_msg.header.xid = random.randrange(1,0xffffffff)
+        flow_mod_msg.xid = random.randrange(1,0xffffffff)
         logging.info("Sending flow_mod(mod), xid=%d"
-                        % (flow_mod_msg.header.xid)
+                        % (flow_mod_msg.xid)
                         )
         self.controller.message_send(flow_mod_msg)
         return True
@@ -1388,9 +1384,9 @@
         # TBD - "out_port" filtering of deletes needs to be tested
         flow_mod_msg.out_port    = ofp.OFPP_NONE
         flow_cfg.to_flow_mod_msg(flow_mod_msg)
-        flow_mod_msg.header.xid = random.randrange(1,0xffffffff)
+        flow_mod_msg.xid = random.randrange(1,0xffffffff)
         logging.info("Sending flow_mod(del), xid=%d"
-                        % (flow_mod_msg.header.xid)
+                        % (flow_mod_msg.xid)
                         )
         self.controller.message_send(flow_mod_msg)
         return True
@@ -1416,7 +1412,7 @@
                             )
             f = False
             for e in self.error_msgs:
-                if e.type == type and e.code == code:
+                if e.err_type == type and e.code == code:
                     logging.info("Got it")
                     f = True
             if not f:
diff --git a/tests/load.py b/tests/load.py
index 3b72f72..2f0c05f 100644
--- a/tests/load.py
+++ b/tests/load.py
@@ -195,7 +195,7 @@
         self.assertNotEqual(msg, None, "Barrier failed")
         while self.controller.packets:
            msg = self.controller.packets.pop(0)[0]
-           self.assertNotEqual(msg.header.type, ofp.message.OFPT_ERROR,
+           self.assertNotEqual(msg.type, ofp.message.OFPT_ERROR,
                                "Error received")
 
     def runTest(self):
diff --git a/tests/message_types.py b/tests/message_types.py
index eacaee6..8e97b64 100644
--- a/tests/message_types.py
+++ b/tests/message_types.py
@@ -45,7 +45,7 @@
         self.assertTrue(response is not None, 
                                'Switch did not exchange hello message in return') 
         self.assertEqual(len(response.data), 0, 'Response data field non-empty')
-        self.assertTrue(response.header.version == 0x01, 'Openflow-version field is not 1.0.0')
+        self.assertTrue(response.version == 0x01, 'Openflow-version field is not 1.0.0')
 
 
 class EchoWithData(base_tests.SimpleProtocol):
@@ -69,9 +69,9 @@
                                                timeout=1)
         self.assertTrue(response is not None,
                         "Did not get echo reply (with data)")
-        self.assertEqual(response.header.type, ofp.OFPT_ECHO_REPLY,
+        self.assertEqual(response.type, ofp.OFPT_ECHO_REPLY,
                          'Response is not echo_reply')
-        self.assertEqual(request.header.xid, response.header.xid,
+        self.assertEqual(request.xid, response.xid,
                          'Response xid does not match the request Xid')
         self.assertEqual(request.data, response.data,
                          'Response data does not match request data')
@@ -95,7 +95,7 @@
         #Send Echo Request
         logging.info("Sending a Echo request with a version which is not supported by the switch")
         request=ofp.message.echo_request()
-        request.header.version=0  
+        request.version=0  
         self.controller.message_send(request)
 
         logging.info("Waiting for a OFPT_ERROR msg on the control plane...") 
@@ -126,8 +126,8 @@
         request = ofp.message.features_request()
         (reply, pkt) = self.controller.transact(request)
         self.assertTrue(reply is not None, "Failed to get any reply")
-        self.assertEqual(reply.header.type, ofp.OFPT_FEATURES_REPLY,'Response is not Features_reply')
-        self.assertEqual(reply.header.xid,request.header.xid,'Transaction id does not match')
+        self.assertEqual(reply.type, ofp.OFPT_FEATURES_REPLY,'Response is not Features_reply')
+        self.assertEqual(reply.xid,request.xid,'Transaction id does not match')
         
         supported_actions =[]
         if(reply.actions &1<<ofp.OFPAT_OUTPUT):
@@ -211,8 +211,8 @@
         #Verify get_config_reply is recieved
         logging.info("Expecting GetConfigReply ")
         self.assertTrue(reply is not None, "Failed to get any reply")
-        self.assertEqual(reply.header.type, ofp.OFPT_GET_CONFIG_REPLY,'Response is not Config Reply')
-        self.assertEqual(reply.header.xid,request.header.xid,'Transaction id does not match')
+        self.assertEqual(reply.type, ofp.OFPT_GET_CONFIG_REPLY,'Response is not Config Reply')
+        self.assertEqual(reply.xid,request.xid,'Transaction id does not match')
 
         if reply.miss_send_len == 0 :
            logging.info ("the switch must send zero-size packet_in message")
@@ -244,7 +244,7 @@
         request = ofp.message.get_config_request()
         (reply, pkt) = self.controller.transact(request)
         self.assertTrue(reply is not None, "Failed to get any reply")
-        self.assertEqual(reply.header.type, ofp.OFPT_GET_CONFIG_REPLY,'Response is not Config Reply')
+        self.assertEqual(reply.type, ofp.OFPT_GET_CONFIG_REPLY,'Response is not Config Reply')
 
         miss_send_len = 0
         miss_send_len = reply.miss_send_len
@@ -277,7 +277,7 @@
 
         (rep, pkt) = self.controller.transact(request)
         self.assertTrue(rep is not None, "Failed to get any reply")
-        self.assertEqual(rep.header.type, ofp.OFPT_GET_CONFIG_REPLY,'Response is not Config Reply')
+        self.assertEqual(rep.type, ofp.OFPT_GET_CONFIG_REPLY,'Response is not Config Reply')
         self.assertEqual(rep.miss_send_len,new_miss_send_len, "miss_send_len configuration parameter could not be set")
         self.assertEqual(rep.flags,new_flags, "frag flags could not be set")
       
@@ -717,10 +717,10 @@
         response, pkt = self.controller.transact(request)
         self.assertTrue(response is not None,
                         "Did not get reply ")
-        self.assertTrue(response.header.type == ofp.OFPT_QUEUE_GET_CONFIG_REPLY, "Reply is not Queue Config Reply")
+        self.assertTrue(response.type == ofp.OFPT_QUEUE_GET_CONFIG_REPLY, "Reply is not Queue Config Reply")
 
         #Verify Reply Body
-        self.assertEqual(response.header.xid, request.header.xid , "Transaction Id in reply is not same as request")
+        self.assertEqual(response.xid, request.xid , "Transaction Id in reply is not same as request")
         self.assertEqual(response.port,request.port , "Port queried does not match ")
         queues = []
         queues = response.queues
diff --git a/tests/openflow_protocol_messages.py b/tests/openflow_protocol_messages.py
index 7ab49a2..c961f2e 100644
--- a/tests/openflow_protocol_messages.py
+++ b/tests/openflow_protocol_messages.py
@@ -300,7 +300,7 @@
                                                timeout=1)
         self.assertTrue(response is not None, 
                                'Switch did not exchange hello message in return') 
-        self.assertTrue(response.header.version == 0x01, 'switch openflow-version field is not 1.0.0')
+        self.assertTrue(response.version == 0x01, 'switch openflow-version field is not 1.0.0')
 
 
 
@@ -320,10 +320,10 @@
         # Send echo_request
         request = ofp.message.echo_request()
         (response, pkt) = self.controller.transact(request)
-        self.assertEqual(response.header.type, ofp.OFPT_ECHO_REPLY,'response is not echo_reply')
-        self.assertEqual(request.header.xid, response.header.xid,
+        self.assertEqual(response.type, ofp.OFPT_ECHO_REPLY,'response is not echo_reply')
+        self.assertEqual(request.xid, response.xid,
                          'response xid != request xid')
-        self.assertTrue(response.header.version == 0x01, 'switch openflow-version field is not 1.0.1')
+        self.assertTrue(response.version == 0x01, 'switch openflow-version field is not 1.0.1')
         self.assertEqual(len(response.data), 0, 'response data non-empty')
 
 
@@ -343,8 +343,8 @@
         #Send Barrier Request
         request = ofp.message.barrier_request()
         (response,pkt) = self.controller.transact(request)
-        self.assertEqual(response.header.type, ofp.OFPT_BARRIER_REPLY,'response is not barrier_reply')
-        self.assertEqual(request.header.xid, response.header.xid,
+        self.assertEqual(response.type, ofp.OFPT_BARRIER_REPLY,'response is not barrier_reply')
+        self.assertEqual(request.xid, response.xid,
                          'response xid != request xid')
 
 
diff --git a/tests/pktact.py b/tests/pktact.py
index 457d652..ad98812 100644
--- a/tests/pktact.py
+++ b/tests/pktact.py
@@ -372,7 +372,7 @@
         request.queue_id = ofp.OFPQ_ALL
         (queue_stats, p) = self.controller.transact(request)
         self.assertNotEqual(queue_stats, None, "Queue stats request failed")
-        if queue_stats.header.type == ofp.OFPT_ERROR:
+        if queue_stats.type == ofp.OFPT_ERROR:
             skip_message_emit(self, "Enqueue packet to controller")
             return
 
