diff --git a/code/pymqi/__init__.py b/code/pymqi/__init__.py
index 989215e3380e5ab5d19efbc571adb636a1b511c1_Y29kZS9weW1xaS9fX2luaXRfXy5weQ==..1bf9647c7b7a8beb20e0a9f236f3c8fc1be0b902_Y29kZS9weW1xaS9fX2luaXRfXy5weQ== 100644
--- a/code/pymqi/__init__.py
+++ b/code/pymqi/__init__.py
@@ -97,7 +97,10 @@
 import ctypes
 import sys
 
-from typing import Any, Optional, Union, Dict
+try:
+    from typing import Any, Optional, Union, Dict
+except ImportError:
+    pass
 
 # import xml parser.  lxml/etree only available since python 2.5
 use_minidom = False
@@ -2875,4 +2878,5 @@
         parameter = None # type: Optional[MQOpts]
         group = None
         group_count = 0
+
         while (index > 0):
@@ -2878,5 +2882,6 @@
         while (index > 0):
+            parameter_type = struct.unpack(MQLONG_TYPE, message[cursor:cursor + 4])[0]
             if group_count == 0:
                 group = None
             if group is not None:
                 group_count -= 1
@@ -2879,11 +2884,11 @@
             if group_count == 0:
                 group = None
             if group is not None:
                 group_count -= 1
-            if message[cursor] == CMQCFC.MQCFT_STRING:
+            if parameter_type == CMQCFC.MQCFT_STRING:
                 parameter = CFST()
                 parameter.unpack(message[cursor:cursor + CMQCFC.MQCFST_STRUC_LENGTH_FIXED])
                 if parameter.StringLength > 1:
                     parameter = CFST(StringLength=parameter.StringLength)
                     parameter.unpack(message[cursor:cursor + parameter.StrucLength])
                 value = parameter.String
@@ -2884,10 +2889,10 @@
                 parameter = CFST()
                 parameter.unpack(message[cursor:cursor + CMQCFC.MQCFST_STRUC_LENGTH_FIXED])
                 if parameter.StringLength > 1:
                     parameter = CFST(StringLength=parameter.StringLength)
                     parameter.unpack(message[cursor:cursor + parameter.StrucLength])
                 value = parameter.String
-            elif message[cursor] == CMQCFC.MQCFT_STRING_LIST:
+            elif parameter_type == CMQCFC.MQCFT_STRING_LIST:
                 parameter = CFSL()
                 parameter.unpack(message[cursor:cursor + CMQCFC.MQCFSL_STRUC_LENGTH_FIXED])
                 if parameter.StringLength > 1:
@@ -2896,7 +2901,7 @@
                                      StrucLength=parameter.StrucLength)
                     parameter.unpack(message[cursor:cursor + parameter.StrucLength])
                 value = parameter.Strings
-            elif message[cursor] == CMQCFC.MQCFT_INTEGER:
+            elif parameter_type == CMQCFC.MQCFT_INTEGER:
                 parameter = CFIN()
                 parameter.unpack(message[cursor:cursor + CMQCFC.MQCFIN_STRUC_LENGTH])
                 value = parameter.Value
@@ -2900,7 +2905,7 @@
                 parameter = CFIN()
                 parameter.unpack(message[cursor:cursor + CMQCFC.MQCFIN_STRUC_LENGTH])
                 value = parameter.Value
-            elif message[cursor] == CMQCFC.MQCFT_INTEGER64:
+            elif parameter_type == CMQCFC.MQCFT_INTEGER64:
                 parameter = CFIN64()
                 parameter.unpack(message[cursor:cursor + CMQCFC.MQCFIN64_STRUC_LENGTH])
                 value = parameter.Value
@@ -2904,7 +2909,7 @@
                 parameter = CFIN64()
                 parameter.unpack(message[cursor:cursor + CMQCFC.MQCFIN64_STRUC_LENGTH])
                 value = parameter.Value
-            elif message[cursor] == CMQCFC.MQCFT_INTEGER_LIST:
+            elif parameter_type == CMQCFC.MQCFT_INTEGER_LIST:
                 parameter = CFIL()
                 parameter.unpack(message[cursor:cursor + CMQCFC.MQCFIL_STRUC_LENGTH_FIXED])
                 if parameter.Count > 0:
@@ -2912,7 +2917,7 @@
                                      StrucLength=parameter.StrucLength)
                     parameter.unpack(message[cursor:cursor + parameter.StrucLength])
                 value = parameter.Values
-            elif message[cursor] == CMQCFC.MQCFT_INTEGER64_LIST:
+            elif parameter_type == CMQCFC.MQCFT_INTEGER64_LIST:
                 parameter = CFIL64()
                 parameter.unpack(message[cursor:cursor + CMQCFC.MQCFIL64_STRUC_LENGTH_FIXED])
                 if parameter.Count > 0:
@@ -2920,7 +2925,7 @@
                                        StrucLength=parameter.StrucLength)
                     parameter.unpack(message[cursor:cursor + parameter.StrucLength])
                 value = parameter.Values
-            elif message[cursor] == CMQCFC.MQCFT_GROUP:
+            elif parameter_type == CMQCFC.MQCFT_GROUP:
                 parameter = CFGR()
                 parameter.unpack(message[cursor:cursor + parameter.StrucLength])
                 group_count = parameter.ParameterCount
@@ -2928,7 +2933,7 @@
                 group = {}
                 res[parameter.Parameter] = res.get(parameter.Parameter, [])
                 res[parameter.Parameter].append(group)
-            elif message[cursor] == CMQCFC.MQCFT_BYTE_STRING:
+            elif parameter_type == CMQCFC.MQCFT_BYTE_STRING:
                 parameter = CFBS()
                 parameter.unpack(message[cursor:cursor + CMQCFC.MQCFBS_STRUC_LENGTH_FIXED])
                 if parameter.StringLength > 1: