diff --git a/code/pymqi/CMQC.py b/code/pymqi/CMQC.py
index 3d78f749cb97d695d738454fd94a5493b90e2f1b_Y29kZS9weW1xaS9DTVFDLnB5..36d627ad6427d8c48d55eda5dbd69a482a0ab2a2_Y29kZS9weW1xaS9DTVFDLnB5 100644
--- a/code/pymqi/CMQC.py
+++ b/code/pymqi/CMQC.py
@@ -804,6 +804,7 @@
 MQCA_BASE_OBJECT_NAME = 2002
 MQCA_BASE_Q_NAME = 2002
 MQCA_BATCH_INTERFACE_ID = 2068
+MQCA_CERT_LABEL = 2121
 MQCA_CF_STRUC_DESC = 2052
 MQCA_CF_STRUC_NAME = 2039
 MQCA_CHANNEL_AUTO_DEF_EXIT = 2026
@@ -886,6 +887,7 @@
 MQCA_TRIGGER_TRANS_ID = 2061
 MQCA_USER_DATA = 2021
 MQCA_USER_LIST = 4000
+MQCA_VERSION = 2120
 MQCA_XCF_GROUP_NAME = 2043
 MQCA_XCF_MEMBER_NAME = 2044
 MQCA_XMIT_Q_NAME = 2024
@@ -913,6 +915,7 @@
 MQIA_CHANNEL_AUTO_DEF = 55
 MQIA_CHANNEL_AUTO_DEF_EVENT = 56
 MQIA_CHANNEL_EVENT = 73
+MQIA_CHECK_CLIENT_BINDING = 258
 MQIA_CHINIT_ADAPTERS = 101
 MQIA_CHINIT_CONTROL = 119
 MQIA_CHINIT_DISPATCHERS = 105
@@ -2079,6 +2082,13 @@
 MQWS_TOPIC = 2
 MQRR_DEFAULT = MQCC_OK, MQRC_NONE
 
+MQUSRC_MAP = 0
+MQUSRC_NOACCESS = 1
+MQUSRC_CHANNEL = 2
+
+MQWARN_YES = 1
+MQWARN_NO = 0
+
 # Manually added
 
 MQGS_NOT_IN_GROUP = ord(' ')
diff --git a/code/pymqi/CMQCFC.py b/code/pymqi/CMQCFC.py
index 3d78f749cb97d695d738454fd94a5493b90e2f1b_Y29kZS9weW1xaS9DTVFDRkMucHk=..36d627ad6427d8c48d55eda5dbd69a482a0ab2a2_Y29kZS9weW1xaS9DTVFDRkMucHk= 100644
--- a/code/pymqi/CMQCFC.py
+++ b/code/pymqi/CMQCFC.py
@@ -169,6 +169,37 @@
 MQCMD_INQUIRE_TOPIC_STATUS = 183
 MQCMD_CLEAR_TOPIC_STRING = 184
 MQCMD_INQUIRE_PUBSUB_STATUS = 185
+MQCMD_INQUIRE_SMDS = 186
+MQCMD_CHANGE_SMDS = 187
+MQCMD_RESET_SMDS = 188
+MQCMD_CREATE_COMM_INFO = 190
+MQCMD_INQUIRE_COMM_INFO = 191
+MQCMD_CHANGE_COMM_INFO = 192
+MQCMD_COPY_COMM_INFO = 193
+MQCMD_DELETE_COMM_INFO = 194
+MQCMD_PURGE_CHANNEL = 195
+MQCMD_MQXR_DIAGNOSTICS = 196
+MQCMD_START_SMDSCONN = 197
+MQCMD_STOP_SMDSCONN = 198
+MQCMD_INQUIRE_SMDSCONN = 199
+MQCMD_INQUIRE_MQXR_STATUS = 200
+MQCMD_START_CLIENT_TRACE = 201
+MQCMD_STOP_CLIENT_TRACE = 202
+MQCMD_SET_CHLAUTH_REC = 203
+MQCMD_INQUIRE_CHLAUTH_RECS = 204
+MQCMD_INQUIRE_PROT_POLICY = 205
+MQCMD_CREATE_PROT_POLICY = 206
+MQCMD_DELETE_PROT_POLICY = 207
+MQCMD_CHANGE_PROT_POLICY = 208
+MQCMD_SET_PROT_POLICY = 208
+MQCMD_ACTIVITY_TRACE = 209
+MQCMD_RESET_CF_STRUC = 213
+MQCMD_INQUIRE_XR_CAPABILITY = 214
+MQCMD_INQUIRE_AMQP_CAPABILITY = 216
+MQCMD_AMQP_DIAGNOSTICS = 217
+MQCMD_INTER_Q_MGR_STATUS = 218
+MQCMD_INTER_Q_MGR_BALANCE = 219
+MQCMD_INQUIRE_APPL_STATUS = 220
 MQCFC_LAST = 1
 MQCFC_NOT_LAST = 0
 MQRCCF_CFH_TYPE_ERROR = 3001
@@ -370,6 +401,72 @@
 MQRCCF_DEST_NAME_ERROR = 3316
 MQRCCF_INVALID_DESTINATION = 3317
 MQRCCF_PUBSUB_INHIBITED = 3318
+MQRCCF_GROUPUR_CHECKS_FAILED = 3319
+MQRCCF_COMM_INFO_TYPE_ERROR = 3320
+MQRCCF_USE_CLIENT_ID_ERROR = 3321
+MQRCCF_CLIENT_ID_NOT_FOUND = 3322
+MQRCCF_CLIENT_ID_ERROR = 3323
+MQRCCF_PORT_IN_USE = 3324
+MQRCCF_SSL_ALT_PROVIDER_REQD = 3325
+MQRCCF_CHLAUTH_TYPE_ERROR = 3326
+MQRCCF_CHLAUTH_ACTION_ERROR = 3327
+MQRCCF_POLICY_NOT_FOUND = 3328
+MQRCCF_ENCRYPTION_ALG_ERROR = 3329
+MQRCCF_SIGNATURE_ALG_ERROR = 3330
+MQRCCF_TOLERATION_POL_ERROR = 3331
+MQRCCF_POLICY_VERSION_ERROR = 3332
+MQRCCF_RECIPIENT_DN_MISSING = 3333
+MQRCCF_POLICY_NAME_MISSING = 3334
+MQRCCF_CHLAUTH_USERSRC_ERROR = 3335
+MQRCCF_WRONG_CHLAUTH_TYPE = 3336
+MQRCCF_CHLAUTH_ALREADY_EXISTS = 3337
+MQRCCF_CHLAUTH_NOT_FOUND = 3338
+MQRCCF_WRONG_CHLAUTH_ACTION = 3339
+MQRCCF_WRONG_CHLAUTH_USERSRC = 3340
+MQRCCF_CHLAUTH_WARN_ERROR = 3341
+MQRCCF_WRONG_CHLAUTH_MATCH = 3342
+MQRCCF_IPADDR_RANGE_CONFLICT = 3343
+MQRCCF_CHLAUTH_MAX_EXCEEDED = 3344
+MQRCCF_IPADDR_ERROR = 3345
+MQRCCF_ADDRESS_ERROR = 3345
+MQRCCF_IPADDR_RANGE_ERROR = 3346
+MQRCCF_PROFILE_NAME_MISSING = 3347
+MQRCCF_CHLAUTH_CLNTUSER_ERROR = 3348
+MQRCCF_CHLAUTH_NAME_ERROR = 3349
+MQRCCF_CHLAUTH_RUNCHECK_ERROR = 3350
+MQRCCF_CF_STRUC_ALREADY_FAILED = 3351
+MQRCCF_CFCONLOS_CHECKS_FAILED = 3352
+MQRCCF_SUITE_B_ERROR = 3353
+MQRCCF_CHANNEL_NOT_STARTED = 3354
+MQRCCF_CUSTOM_ERROR = 3355
+MQRCCF_BACKLOG_OUT_OF_RANGE = 3356
+MQRCCF_CHLAUTH_DISABLED = 3357
+MQRCCF_SMDS_REQUIRES_DSGROUP = 3358
+MQRCCF_PSCLUS_DISABLED_TOPDEF = 3359
+MQRCCF_PSCLUS_TOPIC_EXISTS = 3360
+MQRCCF_SSL_CIPHER_SUITE_ERROR = 3361
+MQRCCF_SOCKET_ERROR = 3362
+MQRCCF_CLUS_XMIT_Q_USAGE_ERROR = 3363
+MQRCCF_CERT_VAL_POLICY_ERROR = 3364
+MQRCCF_INVALID_PROTOCOL = 3365
+MQRCCF_REVDNS_DISABLED = 3366
+MQRCCF_CLROUTE_NOT_ALTERABLE = 3367
+MQRCCF_CLUSTER_TOPIC_CONFLICT = 3368
+MQRCCF_DEFCLXQ_MODEL_Q_ERROR = 3369
+MQRCCF_CHLAUTH_CHKCLI_ERROR = 3370
+MQRCCF_CERT_LABEL_NOT_ALLOWED = 3371
+MQRCCF_Q_MGR_ATTR_CONFLICT = 3372
+MQRCCF_ENTITY_TYPE_MISSING = 3373
+MQRCCF_CLWL_EXIT_NAME_ERROR = 3374
+MQRCCF_SERVICE_NAME_ERROR = 3375
+MQRCCF_REMOTE_CHL_TYPE_ERROR = 3376
+MQRCCF_TOPIC_RESTRICTED = 3377
+MQRCCF_CURRENT_LOG_EXTENT = 3378
+MQRCCF_LOG_EXTENT_NOT_FOUND = 3379
+MQRCCF_LOG_NOT_REDUCED = 3380
+MQRCCF_LOG_EXTENT_ERROR = 3381
+MQRCCF_ACCESS_BLOCKED = 3382
+MQRCCF_PS_REQUIRED_MQUC = 3383
 MQRCCF_OBJECT_ALREADY_EXISTS = 4001
 MQRCCF_OBJECT_WRONG_TYPE = 4002
 MQRCCF_LIKE_OBJECT_WRONG_TYPE = 4003
@@ -907,7 +1004,121 @@
 MQIACF_PUBSUB_STATUS = 1311
 MQIACF_PS_STATUS_TYPE = 1314
 MQIACF_PUBSUB_STATUS_ATTRS = 1318
-MQIACF_LAST_USED = 1318
+MQIACF_SELECTOR_TYPE = 1321
+MQIACF_LOG_COMPRESSION = 1322
+MQIACF_GROUPUR_CHECK_ID = 1323
+MQIACF_MULC_CAPTURE = 1324
+MQIACF_PERMIT_STANDBY = 1325
+MQIACF_OPERATION_MODE = 1326
+MQIACF_COMM_INFO_ATTRS = 1327
+MQIACF_CF_SMDS_BLOCK_SIZE = 1328
+MQIACF_CF_SMDS_EXPAND = 1329
+MQIACF_USAGE_FREE_BUFF = 1330
+MQIACF_USAGE_FREE_BUFF_PERC = 1331
+MQIACF_CF_STRUC_ACCESS = 1332
+MQIACF_CF_STATUS_SMDS = 1333
+MQIACF_SMDS_ATTRS = 1334
+MQIACF_USAGE_SMDS = 1335
+MQIACF_USAGE_BLOCK_SIZE = 1336
+MQIACF_USAGE_DATA_BLOCKS = 1337
+MQIACF_USAGE_EMPTY_BUFFERS = 1338
+MQIACF_USAGE_INUSE_BUFFERS = 1339
+MQIACF_USAGE_LOWEST_FREE = 1340
+MQIACF_USAGE_OFFLOAD_MSGS = 1341
+MQIACF_USAGE_READS_SAVED = 1342
+MQIACF_USAGE_SAVED_BUFFERS = 1343
+MQIACF_USAGE_TOTAL_BLOCKS = 1344
+MQIACF_USAGE_USED_BLOCKS = 1345
+MQIACF_USAGE_USED_RATE = 1346
+MQIACF_USAGE_WAIT_RATE = 1347
+MQIACF_SMDS_OPENMODE = 1348
+MQIACF_SMDS_STATUS = 1349
+MQIACF_SMDS_AVAIL = 1350
+MQIACF_MCAST_REL_INDICATOR = 1351
+MQIACF_CHLAUTH_TYPE = 1352
+MQIACF_MQXR_DIAGNOSTICS_TYPE = 1354
+MQIACF_CHLAUTH_ATTRS = 1355
+MQIACF_OPERATION_ID = 1356
+MQIACF_API_CALLER_TYPE = 1357
+MQIACF_API_ENVIRONMENT = 1358
+MQIACF_TRACE_DETAIL = 1359
+MQIACF_HOBJ = 1360
+MQIACF_CALL_TYPE = 1361
+MQIACF_MQCB_OPERATION = 1362
+MQIACF_MQCB_TYPE = 1363
+MQIACF_MQCB_OPTIONS = 1364
+MQIACF_CLOSE_OPTIONS = 1365
+MQIACF_CTL_OPERATION = 1366
+MQIACF_GET_OPTIONS = 1367
+MQIACF_RECS_PRESENT = 1368
+MQIACF_KNOWN_DEST_COUNT = 1369
+MQIACF_UNKNOWN_DEST_COUNT = 1370
+MQIACF_INVALID_DEST_COUNT = 1371
+MQIACF_RESOLVED_TYPE = 1372
+MQIACF_PUT_OPTIONS = 1373
+MQIACF_BUFFER_LENGTH = 1374
+MQIACF_TRACE_DATA_LENGTH = 1375
+MQIACF_SMDS_EXPANDST = 1376
+MQIACF_STRUC_LENGTH = 1377
+MQIACF_ITEM_COUNT = 1378
+MQIACF_EXPIRY_TIME = 1379
+MQIACF_CONNECT_TIME = 1380
+MQIACF_DISCONNECT_TIME = 1381
+MQIACF_HSUB = 1382
+MQIACF_SUBRQ_OPTIONS = 1383
+MQIACF_XA_RMID = 1384
+MQIACF_XA_FLAGS = 1385
+MQIACF_XA_RETCODE = 1386
+MQIACF_XA_HANDLE = 1387
+MQIACF_XA_RETVAL = 1388
+MQIACF_STATUS_TYPE = 1389
+MQIACF_XA_COUNT = 1390
+MQIACF_SELECTOR_COUNT = 1391
+MQIACF_SELECTORS = 1392
+MQIACF_INTATTR_COUNT = 1393
+MQIACF_INT_ATTRS = 1394
+MQIACF_SUBRQ_ACTION = 1395
+MQIACF_NUM_PUBS = 1396
+MQIACF_POINTER_SIZE = 1397
+MQIACF_REMOVE_AUTHREC = 1398
+MQIACF_XR_ATTRS = 1399
+MQIACF_APPL_FUNCTION_TYPE = 1400
+MQIACF_AMQP_ATTRS = 1401
+MQIACF_EXPORT_TYPE = 1402
+MQIACF_EXPORT_ATTRS = 1403
+MQIACF_SYSTEM_OBJECTS = 1404
+MQIACF_CONNECTION_SWAP = 1405
+MQIACF_AMQP_DIAGNOSTICS_TYPE = 1406
+MQIACF_BUFFER_POOL_LOCATION = 1408
+MQIACF_LDAP_CONNECTION_STATUS = 1409
+MQIACF_SYSP_MAX_ACE_POOL = 1410
+MQIACF_PAGECLAS = 1411
+MQIACF_AUTH_REC_TYPE = 1412
+MQIACF_SYSP_MAX_CONC_OFFLOADS = 1413
+MQIACF_SYSP_ZHYPERWRITE = 1414
+MQIACF_Q_MGR_STATUS_LOG = 1415
+MQIACF_ARCHIVE_LOG_SIZE = 1416
+MQIACF_MEDIA_LOG_SIZE = 1417
+MQIACF_RESTART_LOG_SIZE = 1418
+MQIACF_REUSABLE_LOG_SIZE = 1419
+MQIACF_LOG_IN_USE = 1420
+MQIACF_LOG_UTILIZATION = 1421
+MQIACF_LOG_REDUCTION = 1422
+MQIACF_IGNORE_STATE = 1423
+MQIACF_MOVABLE_APPL_COUNT = 1424
+MQIACF_APPL_INFO_ATTRS = 1425
+MQIACF_APPL_MOVABLE = 1426
+MQIACF_REMOTE_QMGR_ACTIVE = 1427
+MQIACF_APPL_INFO_TYPE = 1428
+MQIACF_APPL_INFO_APPL = 1429
+MQIACF_APPL_INFO_QMGR = 1430
+MQIACF_APPL_INFO_LOCAL = 1431
+MQIACF_APPL_IMMOVABLE_COUNT = 1432
+MQIACF_BALANCED = 1433
+MQIACF_BALSTATE = 1434
+MQIACF_APPL_IMMOVABLE_REASON = 1435
+MQIACF_DS_ENCRYPTED = 1436
+MQIACF_LAST_USED = 1436
 MQIACH_FIRST = 1501
 MQIACH_XMIT_PROTOCOL_TYPE = 1501
 MQIACH_BATCH_SIZE = 1502
@@ -1015,7 +1226,31 @@
 MQIACH_MAX_INSTS_PER_CLIENT = 1619
 MQIACH_CLIENT_CHANNEL_WEIGHT = 1620
 MQIACH_CONNECTION_AFFINITY = 1621
-MQIACH_LAST_USED = 1621
+MQIACH_RESET_REQUESTED = 1623
+MQIACH_BATCH_DATA_LIMIT = 1624
+MQIACH_MSG_HISTORY = 1625
+MQIACH_MULTICAST_PROPERTIES = 1626
+MQIACH_NEW_SUBSCRIBER_HISTORY = 1627
+MQIACH_MC_HB_INTERVAL = 1628
+MQIACH_USE_CLIENT_ID = 1629
+MQIACH_MQTT_KEEP_ALIVE = 1630
+MQIACH_IN_DOUBT_IN = 1631
+MQIACH_IN_DOUBT_OUT = 1632
+MQIACH_MSGS_SENT = 1633
+MQIACH_MSGS_RECEIVED = 1634
+MQIACH_MSGS_RCVD = 1634
+MQIACH_PENDING_OUT = 1635
+MQIACH_AVAILABLE_CIPHERSPECS = 1636
+MQIACH_MATCH = 1637
+MQIACH_USER_SOURCE = 1638
+MQIACH_WARNING = 1639
+MQIACH_DEF_RECONNECT = 1640
+MQIACH_CHANNEL_SUMMARY_ATTRS = 1642
+MQIACH_PROTOCOL = 1643
+MQIACH_AMQP_KEEP_ALIVE = 1644
+MQIACH_SECURITY_PROTOCOL = 1645
+MQIACH_SPL_PROTECTION = 1646
+MQIACH_LAST_USED = 1646
 MQCAMO_FIRST = 2701
 MQCAMO_CLOSE_DATE = 2701
 MQCAMO_CLOSE_TIME = 2702
@@ -1244,7 +1479,26 @@
 MQCACH_LISTENER_START_TIME = 3557
 MQCACH_SSL_KEY_RESET_DATE = 3558
 MQCACH_SSL_KEY_RESET_TIME = 3559
-MQCACH_LAST_USED = 3559
+MQCACH_REMOTE_VERSION = 3560
+MQCACH_REMOTE_PRODUCT = 3561
+MQCACH_GROUP_ADDRESS = 3562
+MQCACH_JAAS_CONFIG = 3563
+MQCACH_CLIENT_ID = 3564
+MQCACH_SSL_KEY_PASSPHRASE = 3565
+MQCACH_CONNECTION_NAME_LIST = 3566
+MQCACH_CLIENT_USER_ID = 3567
+MQCACH_MCA_USER_ID_LIST = 3568
+MQCACH_SSL_CIPHER_SUITE = 3569
+MQCACH_WEBCONTENT_PATH = 3570
+MQCACH_TOPIC_ROOT = 3571
+MQCACH_LAST_USED = 3571
+MQCAUT_ALL = 0
+MQCAUT_BLOCKUSER = 1
+MQCAUT_BLOCKADDR = 2
+MQCAUT_SSLPEERMAP = 3
+MQCAUT_ADDRESSMAP = 4
+MQCAUT_USERMAP = 5
+MQCAUT_QMGRMAP = 6
 MQGACF_FIRST = 8001
 MQGACF_COMMAND_CONTEXT = 8001
 MQGACF_COMMAND_DATA = 8002
@@ -1263,6 +1517,13 @@
 MQACT_ADVANCE_LOG = 2
 MQACT_COLLECT_STATISTICS = 3
 MQACT_PUBSUB = 4
+MQACT_ADD = 5
+MQACT_REPLACE = 6
+MQACT_REMOVE = 7
+MQACT_REMOVEALL = 8
+MQACT_FAIL = 9
+MQACT_REDUCE_LOG = 10
+MQACT_ARCHIVE_LOG = 11
 MQAS_NONE = 0
 MQAS_STARTED = 1
 MQAS_START_WAIT = 2
@@ -1513,6 +1774,12 @@
 MQSECTYPE_AUTHSERV = 1
 MQSECTYPE_SSL = 2
 MQSECTYPE_CLASSES = 3
+MQSECTYPE_CONNAUTH = 4
+MQCHK_OPTIONAL = 0
+MQCHK_NONE = 1
+MQCHK_REQUIRED_ADMIN = 2
+MQCHK_REQUIRED = 3
+MQCHK_AS_Q_MGR = 4
 MQSUS_YES = 1
 MQSUS_NO = 0
 MQSYNCPOINT_YES = 0
diff --git a/code/pymqi/__init__.py b/code/pymqi/__init__.py
index 3d78f749cb97d695d738454fd94a5493b90e2f1b_Y29kZS9weW1xaS9fX2luaXRfXy5weQ==..36d627ad6427d8c48d55eda5dbd69a482a0ab2a2_Y29kZS9weW1xaS9fX2luaXRfXy5weQ== 100644
--- a/code/pymqi/__init__.py
+++ b/code/pymqi/__init__.py
@@ -976,8 +976,8 @@
                      ['FipsRequired', py23long(0), MQLONG_TYPE]]
 
         if '7.0' in pymqe.__mqlevels__:
-            opts += [['EncryptionPolicySuiteB', [0, 0, 0, 0], '4' + MQLONG_TYPE]]
+            opts += [['EncryptionPolicySuiteB', [1, 0, 0, 0], '4' + MQLONG_TYPE]]
 
         if '7.1' in pymqe.__mqlevels__:
             opts += [['CertificateValPolicy', py23long(0), MQLONG_TYPE]]
 
@@ -980,9 +980,7 @@
 
         if '7.1' in pymqe.__mqlevels__:
             opts += [['CertificateValPolicy', py23long(0), MQLONG_TYPE]]
 
-            if MQLONG_TYPE == 'i':
-                opts += [['pad', b'', '4s']]
 
         if '8.0.0' in pymqe.__mqlevels__:
             opts += [['CertificateLabel', b'', '64s']]
@@ -1353,8 +1351,9 @@
     connectWithOptions = connect_with_options
 
     def connect_tcp_client(self, name, cd, channel, conn_name, user, password):
+        # type: (str, CD, str, str, str, str)
         """ Connect immediately to the remote Queue Manager 'name', using
         a TCP Client connection, with channnel 'channel' and the
         TCP connection string 'conn_name'. All other connection
         optons come from 'cd'.
         """
@@ -1356,9 +1355,8 @@
         """ Connect immediately to the remote Queue Manager 'name', using
         a TCP Client connection, with channnel 'channel' and the
         TCP connection string 'conn_name'. All other connection
         optons come from 'cd'.
         """
-        # type: (str, CD, str, str, str, str)
 
         cd.ChannelName = ensure_bytes(channel)
         cd.ConnectionName = ensure_bytes(conn_name)
diff --git a/code/pymqi/pymqe.c b/code/pymqi/pymqe.c
index 3d78f749cb97d695d738454fd94a5493b90e2f1b_Y29kZS9weW1xaS9weW1xZS5j..36d627ad6427d8c48d55eda5dbd69a482a0ab2a2_Y29kZS9weW1xaS9weW1xZS5j 100644
--- a/code/pymqi/pymqe.c
+++ b/code/pymqi/pymqe.c
@@ -316,7 +316,7 @@
   char* name = NULL;
   MQHCONN handle;
   MQLONG comp_code, comp_reason;
-  char* mqcd = NULL;
+  PMQCD mqcd = NULL;
   Py_ssize_t mqcd_buf_len = 0;
   MQCNO cno = {MQCNO_DEFAULT};
   PyObject* user_password = NULL;
@@ -329,7 +329,7 @@
   long options = MQCNO_NONE;
 
 #ifdef PYMQI_FEATURE_SSL
-  char *sco = NULL;
+  MQSCO *sco = NULL;
   Py_ssize_t sco_len = 0;
 #if PY_MAJOR_VERSION==2
   if (!PyArg_ParseTuple(args, "slz#O|s#", &name, &options, &mqcd, &mqcd_buf_len, &user_password, &sco, &sco_len)) {
@@ -338,9 +338,6 @@
 #endif
     return 0;
   }
-  if (sco && checkArgSize(sco_len, PYMQI_MQSCO_SIZEOF, "MQSCO")) {
-    return NULL;
-  }
 #else
 #if PY_MAJOR_VERSION==2
   if (!PyArg_ParseTuple(args, "sls#", &name, &options, &mqcd, &mqcd_buf_len)) {
@@ -357,7 +354,7 @@
    */
 #ifdef PYMQI_FEATURE_SSL
   cno.Version = MQCNO_VERSION_5;
-  cno.SSLConfigPtr =  (MQSCO *)sco;
+  cno.SSLConfigPtr = sco;
 #else
   cno.Version = MQCNO_VERSION_2;
 #endif
@@ -812,7 +809,7 @@
  * look like there's anything bigger than this in cmqc.h. I'm sure
  * someone will tell me if I'm wrong.
  */
-#define MAX_CHARATTR_LENGTH 129
+#define MAX_CHARATTR_LENGTH 257
 
 static PyObject *pymqe_MQINQ(PyObject *self, PyObject *args) {
   MQLONG compCode, compReason;
diff --git a/code/tests/test_setup.py b/code/tests/test_setup.py
index 3d78f749cb97d695d738454fd94a5493b90e2f1b_Y29kZS90ZXN0cy90ZXN0X3NldHVwLnB5..36d627ad6427d8c48d55eda5dbd69a482a0ab2a2_Y29kZS90ZXN0cy90ZXN0X3NldHVwLnB5 100644
--- a/code/tests/test_setup.py
+++ b/code/tests/test_setup.py
@@ -1,2 +1,3 @@
 """Setup tests environment."""
+import os.path
 import unittest
@@ -2,5 +3,6 @@
 import unittest
+import pymqi
 
 import config
 import utils
 
@@ -3,9 +5,7 @@
 
 import config
 import utils
 
-import pymqi
-
 class Tests(unittest.TestCase):
     """Setup and tearsdown tests environment."""
 
@@ -9,9 +9,48 @@
 class Tests(unittest.TestCase):
     """Setup and tearsdown tests environment."""
 
+    version = '0000000'
+
+    queue_name = ''
+    queue_manager = ''
+    channel = ''
+    host = ''
+    port = ''
+    user = ''
+    password = ''
+
+    qmgr = None
+    
+
+    @classmethod
+    def setUpClass(cls):
+        """Initialize test environment."""
+        cls.prefix = os.environ.get('PYMQI_TEST_OBJECT_PREFIX', '')
+
+        # max length of queue names is 48 characters
+        cls.queue_name = "{prefix}MSG.QUEUE".format(prefix=config.MQ.QUEUE.PREFIX)
+        cls.queue_manager = config.MQ.QM.NAME
+        cls.channel = config.MQ.QM.CHANNEL
+        cls.host = config.MQ.QM.HOST
+        cls.port = config.MQ.QM.PORT
+        cls.user = config.MQ.QM.USER
+        cls.password = config.MQ.QM.PASSWORD
+
+        cls.conn_info = "{0}({1})".format(cls.host, cls.port)
+
+        cls.qmgr = pymqi.QueueManager(None)
+        cls.qmgr.connectTCPClient(cls.queue_manager, pymqi.CD(), cls.channel, cls.conn_info, cls.user, cls.password)
+
+        cls.version = cls.inquire_qmgr_version().decode()
+
+    @classmethod
+    def tearDownClass(cls):
+        """Clear test environment."""
+        cls.qmgr.disconnect()
+
     def setUp(self):
         """Setup tests environmet.
         Configuration for setup provided by config.py
         Creates connection `self.qmgr` to Queue Manager `self.queue_manager`
         and creates queue `self.queue_name`
         """
@@ -12,22 +51,9 @@
     def setUp(self):
         """Setup tests environmet.
         Configuration for setup provided by config.py
         Creates connection `self.qmgr` to Queue Manager `self.queue_manager`
         and creates queue `self.queue_name`
         """
-        # max length of queue names is 48 characters
-        self.queue_name = "{prefix}MSG.QUEUE".format(prefix=config.MQ.QUEUE.PREFIX)
-        self.queue_manager = config.MQ.QM.NAME
-        self.channel = config.MQ.QM.CHANNEL
-        self.host = config.MQ.QM.HOST
-        self.port = config.MQ.QM.PORT
-        self.user = config.MQ.QM.USER
-        self.password = config.MQ.QM.PASSWORD
-
-        self.conn_info = "{0}({1})".format(self.host, self.port)
-
-        self.qmgr = pymqi.QueueManager(None)
-        self.qmgr.connectTCPClient(self.queue_manager, pymqi.CD(), self.channel, self.conn_info, self.user, self.password)
 
     def tearDown(self):
         """Clear test environment."""
@@ -31,8 +57,8 @@
 
     def tearDown(self):
         """Clear test environment."""
-        self.qmgr.disconnect()
-
-    def create_queue(self, queue_name, max_depth=5000):
-        queue_type = pymqi.CMQC.MQQT_LOCAL
+    
+    @classmethod
+    def inquire_qmgr_version(cls):
+        return cls.qmgr.inquire(pymqi.CMQC.MQCA_VERSION)
 
@@ -38,8 +64,12 @@
 
-        args = {pymqi.CMQC.MQCA_Q_NAME: utils.py3str2bytes(queue_name),
-                pymqi.CMQC.MQIA_Q_TYPE: queue_type,
-                pymqi.CMQC.MQIA_MAX_Q_DEPTH: max_depth,
-                pymqi.CMQCFC.MQIACF_REPLACE: pymqi.CMQCFC.MQRP_YES}
+    def create_queue(self, queue_name, max_depth=5000, args=None):
+        if args:
+            args[pymqi.CMQC.MQCA_Q_NAME] = utils.py3str2bytes(queue_name)
+        else:
+            args = {pymqi.CMQC.MQCA_Q_NAME: utils.py3str2bytes(queue_name),
+                    pymqi.CMQC.MQIA_Q_TYPE: pymqi.CMQC.MQQT_LOCAL,
+                    pymqi.CMQC.MQIA_MAX_Q_DEPTH: max_depth,
+                    pymqi.CMQCFC.MQIACF_REPLACE: pymqi.CMQCFC.MQRP_YES}
         pcf = pymqi.PCFExecute(self.qmgr)
         pcf.MQCMD_CREATE_Q(args)
 
@@ -47,4 +77,33 @@
         pcf = pymqi.PCFExecute(self.qmgr)
         args = {pymqi.CMQC.MQCA_Q_NAME: utils.py3str2bytes(queue_name),
                 pymqi.CMQCFC.MQIACF_PURGE: pymqi.CMQCFC.MQPO_YES}
-        pcf.MQCMD_DELETE_Q(args)
\ No newline at end of file
+        pcf.MQCMD_DELETE_Q(args)
+    
+    def create_channel(self, channel_name, args=None):
+        if args:
+            args[pymqi.CMQCFC.MQCACH_CHANNEL_NAME] = utils.py3str2bytes(channel_name)
+        else:
+            args = {pymqi.CMQCFC.MQCACH_CHANNEL_NAME: utils.py3str2bytes(channel_name),
+                    pymqi.CMQCFC.MQIACH_CHANNEL_TYPE: pymqi.CMQC.MQCHT_SVRCONN,
+                    pymqi.CMQCFC.MQIACF_REPLACE: pymqi.CMQCFC.MQRP_YES}
+        pcf = pymqi.PCFExecute(self.qmgr)
+        pcf.MQCMD_CREATE_CHANNEL(args)
+
+    def delete_channel(self, channel_name):
+        pcf = pymqi.PCFExecute(self.qmgr)
+        args = {pymqi.CMQCFC.MQCACH_CHANNEL_NAME: utils.py3str2bytes(channel_name)}
+        pcf.MQCMD_DELETE_CHANNEL(args)
+
+    def create_auth_rec(self, args):
+        pcf = pymqi.PCFExecute(self.qmgr)
+        pcf.MQCMD_SET_CHLAUTH_REC(args)
+    
+    def delete_auth_rec(self, args):
+        pcf = pymqi.PCFExecute(self.qmgr)
+        pcf.MQCMD_SET_CHLAUTH_REC(args)
+    
+    @classmethod
+    def edit_qmgr(cls, args):
+        pcf = pymqi.PCFExecute(cls.qmgr)
+        pcf.MQCMD_CHANGE_Q_MGR(args)
+
diff --git a/code/tests/test_tls.py b/code/tests/test_tls.py
new file mode 100644
index 0000000000000000000000000000000000000000..36d627ad6427d8c48d55eda5dbd69a482a0ab2a2_Y29kZS90ZXN0cy90ZXN0X3Rscy5weQ==
--- /dev/null
+++ b/code/tests/test_tls.py
@@ -0,0 +1,190 @@
+# pylint: disable=w1401
+"""Test connection with TLS(SSL).
+Preparation:
+Define env variable:
+PYMQI_TEST_TLS_SKIP = 0
+
+Create keydb files:
+Default keydb localtion is:
+    Server:
+        Unix: /var/mqm/qmgrs/queue_manager_name/ssl
+    Client:
+        Unix: user HOME directory
+
+Command for keydb creation (for Unix):
+
+runmqakm -keydb -create -db /var/mqm/qmgrs/MQTEST/ssl/mqtest.kdb -pw Secret13 -stash
+runmqakm -cert -create -db /var/mqm/qmgrs/MQTEST/ssl/mqtest.kdb -type kdb -pw Secret13 \
+    -label mqtest -dn CN=mqtest -size 2048 -x509version 3 -expire 365 -fips -sig_alg SHA256WithRSA
+
+runmqakm -keydb -create -db ~/client.kdb -pw Secret13 -stash
+runmqakm -cert -create -db ~/client.kdb -type kdb -pw Secret13 \
+    -label client -dn CN=client -size 2048 -x509version 3 -expire 365 -fips -sig_alg SHA256WithRSA
+
+runmqakm -cert -extract -db /var/mqm/qmgrs/MQTEST/ssl/mqtest.kdb -pw Secret13 \
+    -label mqtest -target ~/mqtest.pem
+runmqakm -cert -add -db ~/client.kdb -pw Secret13 \
+    -label mqtest -file ~/mqtest.pem
+
+runmqakm -cert -extract -db ~/client.kdb -pw Secret13 \
+    -label client -target ~/client.pem
+runmqakm -cert -add -db /var/mqm/qmgrs/MQTEST/ssl/mqtest.kdb -pw Secret13 \
+    -label client -file ~/client.pem
+"""
+
+import os.path
+import unittest
+
+from test_setup import Tests  # noqa
+import utils  # noqa
+
+import pymqi
+
+class TestTLS(Tests):
+    """Test Qeueu.get() method."""
+    tls_channel_name = 'SSL.SVRCONN'
+    cypher_spec = 'TLS_RSA_WITH_AES_256_CBC_SHA256'
+    client_dn = 'CN=client'
+    cert_label_qmgr = 'mqtest'
+    cert_label_client = 'client'
+    key_repo_location_client = os.path.expanduser('~')
+    key_repo_location_qmgr = '/var/mqm/qmgrs/{}/ssl'
+
+    @classmethod
+    def setUpClass(cls):
+        """Initialize test environment."""
+        cls.skip = int(os.environ.get(
+            'PYMQI_TEST_TLS_SKIP', 1))
+
+        if cls.skip:
+            raise unittest.SkipTest('PYMQI_TEST_TLS_SKIP initialized')
+
+        super(TestTLS, cls).setUpClass()
+        cls.tls_channel_name = os.environ.get(
+            'PYMQI_TEST_TLS_CHL_NAME',
+            cls.prefix + cls.tls_channel_name).encode()
+        cls.cypher_spec = os.environ.get(
+            'PYMQI_TEST_TLS_CYPHER_SPEC',
+            cls.cypher_spec).encode()
+        cls.client_dn = os.environ.get(
+            'PYMQI_TEST_TLS_CLIENT_DN',
+            cls.client_dn).encode()
+        cls.cert_label_qmgr = os.environ.get(
+            'PYMQI_TEST_TLS_CERT_LABEL_QMGR',
+            cls.cert_label_qmgr).encode()
+        cls.cert_label_client = os.environ.get(
+            'PYMQI_TEST_TLS_CERT_LABEL_CLIENT',
+            cls.cert_label_client).encode()
+        cls.key_repo_location_qmgr = os.environ.get(
+            'PYMQI_TEST_TLS_KEY_REPO_LOCATION_QMGR',
+            cls.key_repo_location_qmgr.format(cls.queue_manager)).encode()
+        cls.key_repo_location_client = os.environ.get(
+            'PYMQI_TEST_TLS_KEY_REPO_LOCATION_CLIENT',
+            cls.key_repo_location_client).encode()
+
+        cls.key_repo_location_client_path = os.path.join(
+            cls.key_repo_location_client,
+            cls.cert_label_client
+        )
+
+        cls.key_repo_location_qmgr_path = os.path.join(
+            cls.key_repo_location_qmgr,
+            cls.cert_label_qmgr
+        )
+
+        cls._key_repo_location_qmgr = cls.qmgr.inquire(pymqi.CMQC.MQCA_SSL_KEY_REPOSITORY)
+        cls._certificate_label_qmgr = cls.qmgr.inquire(pymqi.CMQC.MQCA_CERT_LABEL)
+
+        args = {pymqi.CMQC.MQCA_SSL_KEY_REPOSITORY: cls.key_repo_location_qmgr_path,
+                pymqi.CMQC.MQCA_CERT_LABEL: cls.cert_label_qmgr}
+        cls.edit_qmgr(args)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Clear test environment."""
+        args = {pymqi.CMQC.MQCA_SSL_KEY_REPOSITORY: cls._key_repo_location_qmgr,
+                pymqi.CMQC.MQCA_CERT_LABEL: cls._certificate_label_qmgr}
+        cls.edit_qmgr(args)
+        super(TestTLS, cls).tearDownClass()
+
+
+    def setUp(self):
+        """Initialize test environment."""
+        super(TestTLS, self).setUp()
+
+        args = {pymqi.CMQCFC.MQCACH_CHANNEL_NAME: utils.py3str2bytes(self.tls_channel_name),
+                pymqi.CMQCFC.MQIACH_CHANNEL_TYPE: pymqi.CMQC.MQCHT_SVRCONN,
+                pymqi.CMQCFC.MQCACH_SSL_CIPHER_SPEC: self.cypher_spec,
+                pymqi.CMQCFC.MQCACH_SSL_PEER_NAME: self.client_dn,
+                pymqi.CMQCFC.MQIACH_SSL_CLIENT_AUTH: pymqi.CMQXC.MQSCA_OPTIONAL,
+                pymqi.CMQC.MQCA_CERT_LABEL: self.cert_label_qmgr,
+                pymqi.CMQCFC.MQIACF_REPLACE: pymqi.CMQCFC.MQRP_YES}
+        self.create_channel(self.tls_channel_name, args)
+
+        args = {pymqi.CMQCFC.MQCACH_CHANNEL_NAME: utils.py3str2bytes(self.tls_channel_name),
+                pymqi.CMQCFC.MQIACF_CHLAUTH_TYPE: pymqi.CMQCFC.MQCAUT_USERMAP,
+                pymqi.CMQCFC.MQIACF_ACTION: pymqi.CMQCFC.MQACT_REPLACE,
+                pymqi.CMQCFC.MQCACH_CLIENT_USER_ID: self.user,
+                pymqi.CMQC.MQIA_CHECK_CLIENT_BINDING: pymqi.CMQCFC.MQCHK_REQUIRED_ADMIN,
+                pymqi.CMQCFC.MQIACH_USER_SOURCE: pymqi.CMQC.MQUSRC_CHANNEL}
+        self.create_auth_rec(args)
+
+        args = {pymqi.CMQCFC.MQCACH_CHANNEL_NAME: utils.py3str2bytes(self.tls_channel_name),
+                pymqi.CMQCFC.MQIACF_CHLAUTH_TYPE: pymqi.CMQCFC.MQCAUT_BLOCKUSER,
+                pymqi.CMQCFC.MQCACH_MCA_USER_ID_LIST: 'nobody',
+                pymqi.CMQCFC.MQIACH_WARNING: pymqi.CMQC.MQWARN_NO,
+                pymqi.CMQCFC.MQIACF_ACTION: pymqi.CMQCFC.MQACT_REPLACE}
+        self.create_auth_rec(args)
+
+
+    def tearDown(self):
+        """Delete created objects."""
+
+        args = {pymqi.CMQCFC.MQCACH_CHANNEL_NAME: utils.py3str2bytes(self.tls_channel_name),
+                pymqi.CMQCFC.MQIACF_CHLAUTH_TYPE: pymqi.CMQCFC.MQCAUT_USERMAP,
+                pymqi.CMQCFC.MQIACF_ACTION: pymqi.CMQCFC.MQACT_REMOVEALL}
+        self.delete_auth_rec(args)
+
+        args = {pymqi.CMQCFC.MQCACH_CHANNEL_NAME: utils.py3str2bytes(self.tls_channel_name),
+                pymqi.CMQCFC.MQIACF_CHLAUTH_TYPE: pymqi.CMQCFC.MQCAUT_BLOCKUSER,
+                pymqi.CMQCFC.MQIACF_ACTION: pymqi.CMQCFC.MQACT_REMOVEALL}
+        self.delete_auth_rec(args)
+
+        self.delete_channel(self.tls_channel_name)
+
+        super(TestTLS, self).tearDown()
+
+    ###########################################################################
+    #
+    # Real Tests start here
+    #
+    ###########################################################################
+
+    def test_connection_with_tls(self):
+        """Test connection to QueueManager with TLS"""
+
+        qmgr = pymqi.QueueManager(None)
+        conn_info = pymqi.ensure_bytes('{0}({1})'.format(self.host, self.port))
+
+        cd = pymqi.CD(Version=pymqi.CMQXC.MQCD_VERSION_7, # pylint: disable=C0103
+                      ChannelName=self.tls_channel_name,
+                      ConnectionName=conn_info,
+                      SSLCipherSpec=self.cypher_spec)
+
+        sco = pymqi.SCO(Version=pymqi.CMQC.MQSCO_VERSION_5,
+                        KeyRepository=os.path.join(self.key_repo_location_client,
+                                                   self.cert_label_client),
+                        CertificateLabel=self.cert_label_client)
+
+        opts = pymqi.CMQC.MQCNO_HANDLE_SHARE_NO_BLOCK
+
+        qmgr.connectWithOptions(self.queue_manager, cd, sco, opts=opts,
+                                user=self.user, password=self.password)
+        is_connected = qmgr.is_connected
+        if is_connected:
+            qmgr.disconnect()
+
+        self.assertTrue(is_connected)
+
+if __name__ == "__main__":
+    unittest.main()