diff --git a/checks/cisco_wlc b/checks/cisco_wlc
index 320d05e61cba93dc3a9f70fbc2484cc33d92a603..df95a6c4c93ca71f56487f7113339f3e9100e918 100644
--- a/checks/cisco_wlc
+++ b/checks/cisco_wlc
@@ -1,17 +1,17 @@
 #!/usr/bin/python
 # -*- encoding: utf-8; py-indent-offset: 4 -*-
 #
-# 03.04.2016 : rewrite by Th.L.
-# 24.05.2016 : added admin/operational state, fix for missing ap_name parameter
-# 01.07.2016 : added long output
-# 06.07.2016 : fixed: missing ap
-# 05.01.2018 : cosmetic changes, added metrics/cisco_wlc.py
-# 23.05.2018 : changed scan function, changed return values to yield
-#              code cleanup, removed unused oid's
-# 26.07.2018 : added code for incomplete ap data (missing lwap, data)
-# 03.08.2018 : changed cdp info: short interface name, dropped neighbor domain name, added S/N and Model to longoutput
-# 14.09.2018 : fixed issue with missing AP, fixed issue with SSH check
-#
+# 2016-04-03: rewrite by Th.L.
+# 2016-05-24: added admin/operational state, fix for missing ap_name parameter
+# 2016-07-01: added long output
+# 2016-07-06: fixed: missing ap
+# 2018-01-05: cosmetic changes, added metrics/cisco_wlc.py
+# 2018-05-23: changed scan function, changed return values to yield
+#             code cleanup, removed unused oid's
+# 2018-07-26: added code for incomplete ap data (missing lwap, data)
+# 2018-08-03: changed cdp info: short interface name, dropped neighbor domain name, added S/N and Model to longoutput
+# 2018-09-14: fixed issue with missing AP, fixed issue with SSH check
+# 2021-10-29: added basic suppoert for Catalyst 9800 Controllers
 
 
 factory_settings['cisco_wlc_defaults'] = {
@@ -87,27 +87,28 @@ def parse_cisco_wlc(info):
             ap_assocfailcountforrssilow, ap_assocfailtimes, ap_echorequestcount, ap_echoresponselosscount = lwapapentry
 
             if lwap_oid_end == OID_END:
-                lwapap_info = {'ap_uptime': int(ap_uptime),
-                               'ap_encryptionenable': int(ap_encryptionenable),
-                               'ap_powerstatus': int(ap_powerstatus),
-                               'ap_telnetenable': int(ap_telnetenable),
-                               'ap_sshenable': int(ap_sshenable),
-                               'ap_wipsenable': int(ap_wipsenable),
-                               'ap_encryptionsupported': int(ap_encryptionsupported),
-                               'ap_dataencryptionstatus': int(ap_dataencryptionstatus),
-                               'ap_adminstatus': int(ap_adminstatus),
-
-                               'ap_assoccount': int(ap_assoccount),
-                               'ap_associatedclientcount': int(ap_associatedclientcount),
-                               'ap_maxclientlimitnumbertrap': int(ap_maxclientlimitnumbertrap),
-                               'ap_reassocsucccount': int(ap_reassocsucccount),
-                               'ap_reassocfailcount': int(ap_reassocfailcount),
-                               'ap_activeclientcount': int(ap_activeclientcount),
-                               'ap_assocfailcountforrssilow': int(ap_assocfailcountforrssilow),
-                               'ap_assocfailtimes': int(ap_assocfailtimes),
-                               'ap_echorequestcount': int(ap_echorequestcount),
-                               'ap_echoresponselosscount': int(ap_echoresponselosscount)
-                               }
+                lwapap_info = {
+                    'ap_uptime': int(ap_uptime),
+                    'ap_encryptionenable': int(ap_encryptionenable),
+                    'ap_powerstatus': int(ap_powerstatus),
+                    'ap_telnetenable': int(ap_telnetenable),
+                    'ap_sshenable': int(ap_sshenable),
+                    'ap_wipsenable': int(ap_wipsenable),
+                    'ap_encryptionsupported': int(ap_encryptionsupported),
+                    'ap_dataencryptionstatus': int(ap_dataencryptionstatus),
+                    'ap_adminstatus': int(ap_adminstatus),
+
+                    'ap_assoccount': int(ap_assoccount) if ap_assoccount.isdigit() else None,
+                    'ap_associatedclientcount': int(ap_associatedclientcount) if ap_associatedclientcount.isdigit() else None,
+                    'ap_maxclientlimitnumbertrap': int(ap_maxclientlimitnumbertrap) if ap_maxclientlimitnumbertrap.isdigit() else None,
+                    'ap_reassocsucccount': int(ap_reassocsucccount) if ap_reassocsucccount.isdigit() else None,
+                    'ap_reassocfailcount': int(ap_reassocfailcount) if ap_reassocfailcount.isdigit() else None,
+                    'ap_activeclientcount': int(ap_activeclientcount) if ap_activeclientcount.isdigit() else None,
+                    'ap_assocfailcountforrssilow': int(ap_assocfailcountforrssilow) if ap_assocfailcountforrssilow.isdigit() else None,
+                    'ap_assocfailtimes': int(ap_assocfailtimes) if ap_assocfailtimes.isdigit() else None,
+                    'ap_echorequestcount': int(ap_echorequestcount) if ap_echorequestcount.isdigit() else None,
+                    'ap_echoresponselosscount': int(ap_echoresponselosscount) if ap_echoresponselosscount.isdigit() else None,
+                }
         return lwapap_info
 
     if len(info) != 0:
@@ -205,7 +206,9 @@ def check_cisco_wlc(item, params, parsed):
         else:
             ap_uptime = 'unknown'
 
-        infotext = 'up since: %s, clients: %s' % (ap_uptime, ap.get('ap_activeclientcount', 'unknown'))
+        infotext = 'up since: %s' % ap_uptime
+        if ap.get('ap_activeclientcount'):
+            infotext += ', clients: %s' % ap.get('ap_activeclientcount', 'unknown')
 
         longoutput = '\nBase data:'
         longoutput += '\n - IP address: %s' % ap.get('ap_ipaddress')
@@ -262,7 +265,7 @@ def check_cisco_wlc(item, params, parsed):
             if not params.get('ignore_ap_powerstatus'):
                 yield 2, 'Not on full power'
 
-        if ap.get('cdp_neigh_duplex', 3) == 3:
+        if ap.get('cdp_neigh_duplex', None) == 3:
             longoutput += '\n - CPD duplex state is half duplex (check network connection).'
             if not params.get('ignore_cdp_duplex'):
                 yield 2, 'CDP state is half duplex'
@@ -336,7 +339,8 @@ check_info['cisco_wlc'] = {
     'has_perfdata': True,
     'default_levels_variable': 'cisco_wlc_defaults',
     'parse_function': parse_cisco_wlc,
-    'snmp_scan_function': lambda oid: oid('.1.3.6.1.2.1.1.1.0') == 'Cisco Controller',
+    'snmp_scan_function': lambda oid: oid('.1.3.6.1.2.1.1.1.0') == 'Cisco Controller' or
+                                      oid('.1.3.6.1.2.1.1.1.0').lower().find('c9800_iosxe') != -1,
     'snmp_info': [('.1.3.6.1.4.1.14179.2.2.1.1', [  # AIRESPACE-WIRELESS-MIB::bsnAPEntry
                     OID_END,
                     '3',   # 1 bsnAPName
diff --git a/cisco_wlc.mkp b/cisco_wlc.mkp
index d7f14cea69fa22cf395ab74fd739333bd4647f4d..e8806f3d6c2eb8bbb247f322b4600b87e7799a6f 100644
Binary files a/cisco_wlc.mkp and b/cisco_wlc.mkp differ
diff --git a/packages/cisco_wlc b/packages/cisco_wlc
index fffcb654d76ae28605f36b8963e14047266cd90e..a9a5e28a0370c758d87feec6dc0465707d40a781 100644
--- a/packages/cisco_wlc
+++ b/packages/cisco_wlc
@@ -1,21 +1,13 @@
-{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
- 'description': 'Monitors Cisco WLC APs. \nservice checks for:\n - missing APs\n - ssh/telnet enabled\n - encryption disabled\n - not on full PoE\n - admin/operational state\nPerfdata: Clientcount, clientfail, uptime, ...',
+{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': u'Monitors Cisco WLC APs. \nservice checks for:\n - missing APs\n - ssh/telnet enabled\n - encryption disabled\n - not on full PoE\n - admin/operational state\nPerfdata: Clientcount, clientfail, uptime, ...\n\n',
  'download_url': 'http://thl-cmk.hopto.org',
- 'files': {'agents': [],
-           'bin': [],
-           'checkman': [],
-           'checks': ['cisco_wlc'],
-           'doc': [],
-           'inventory': [],
-           'lib': [],
-           'notifications': [],
-           'pnp-templates': [],
+ 'files': {'checks': ['cisco_wlc'],
            'web': ['plugins/wato/cisco_wlc.py',
                    'plugins/metrics/cisco_wlc.py']},
  'name': 'cisco_wlc',
  'num_files': 3,
- 'title': 'monitor Cisco WLC APs',
- 'version': '20180914.v04c',
+ 'title': u'monitor Cisco WLC APs',
+ 'version': '20211029.v04d',
  'version.min_required': '1.2.8b8',
- 'version.packaged': '1.4.0p38',
+ 'version.packaged': '1.6.0p25',
  'version.usable_until': None}
\ No newline at end of file