diff --git a/agent_based/cisco_asa_sensors.py b/agent_based/cisco_asa_sensors.py
index 03e7c20963f5fd8af88d5b64751b6adc6b018b33..fb528a44e8d9dd447e183d1fd64a9cfb40ec3e6d 100644
--- a/agent_based/cisco_asa_sensors.py
+++ b/agent_based/cisco_asa_sensors.py
@@ -1,7 +1,8 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-#
-# License: GNU General Public License v2
+# Copyright (C) 2019 tribe29 GmbH - License: GNU General Public License v2
+# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and
+# conditions defined in the file COPYING, which is part of this source code package.
 #
 # Author: thl-cmk[at]outlook[dot]com
 # URL   : https://thl-cmk.hopto.org
@@ -10,7 +11,7 @@
 # Monitor Cisco ASA Sensors (Temperature, Fan and Power supply)
 #
 # 2021-03-21: fixed params in cisco_asa_fan, removed params from cisco_asa_power
-#
+# 2021-03-22: code improvements
 #
 # sample snmpwalk
 # .1.3.6.1.2.1.47.1.1.1.1.7.1 = STRING: "Chassis"
@@ -117,7 +118,8 @@
 #  'power': {}}
 #
 
-from typing import Dict, List, NamedTuple
+
+from typing import Dict, List, NamedTuple, Mapping
 
 from .agent_based_api.v1.type_defs import (
     DiscoveryResult,
@@ -135,6 +137,12 @@ from .agent_based_api.v1 import (
     startswith,
 )
 
+from .utils.temperature import (
+    check_temperature,
+    TempParamType,
+    to_celsius,
+)
+
 
 # ##################################################################################################
 #
@@ -145,61 +153,70 @@ from .agent_based_api.v1 import (
 
 class CiscoAsaSensor(NamedTuple):
     value: float
-    status: State
+    state: State
     state_readable: str
     unit: str
 
 
-def parse_cisco_asa_sensors(string_table: List[StringTable]) -> Dict:
-    def get_state_readable(st: str) -> str:
-        states = {
-            '1': 'Ok',
-            '2': 'unavailable',
-            '3': 'nonoperational',
-        }
-        return states.get(st, st)
-
-    def get_sensor_status(st: str) -> State:
-        states = {
-            '1': State.OK,
-            '2': State.WARN,
-            '3': State.CRIT
-        }
-        return states.get(st, State.CRIT)
-
-    sensors: dict = {
-        'fan': {},
-        'temp': {},
-        'power': {},
+class CiscoAsaPowerSensor(NamedTuple):
+    state: State
+    state_readable: str
+
+
+class CiscoasaSensors(NamedTuple):
+    fan: Mapping[str, CiscoAsaSensor]
+    temp: Mapping[str, CiscoAsaSensor]
+    power: Mapping[str, CiscoAsaPowerSensor]
+
+
+def get_state_readable(st: str) -> str:
+    states = {
+        '1': 'Ok',
+        '2': 'unavailable',
+        '3': 'nonoperational',
+    }
+    return states.get(st, st)
+
+
+def get_sensor_state(st: str) -> State:
+    states = {
+        '1': State.OK,
+        '2': State.WARN,
+        '3': State.CRIT
     }
+    return states.get(st, State.CRIT)
+
+
+def parse_cisco_asa_sensors(string_table: List[StringTable]) -> CiscoasaSensors:
+    temp = {}
+    fan = {}
+    power = {}
 
     for sensorname, sensortype, sensorvalue, sensorstatus, sensorunits in string_table[0]:
         if sensorname != '':  # for asa context, there are no real sensors.
             if sensortype == '8':  # Temperature
-                sensors['temp'].update({sensorname.replace('Temperature ', ''): CiscoAsaSensor(
+                temp.update({sensorname.replace('Temperature ', ''): CiscoAsaSensor(
                     value=to_celsius(float(sensorvalue), sensorunits),
                     unit=sensorunits,
-                    status=get_sensor_status(sensorstatus),
+                    state=get_sensor_state(sensorstatus),
                     state_readable=get_state_readable(sensorstatus),
                 )})
 
             if sensortype == '10':  # Fan
-                sensors['fan'].update({sensorname.replace('Fan ', ''): CiscoAsaSensor(
+                fan.update({sensorname.replace('Fan ', ''): CiscoAsaSensor(
                     value=int(sensorvalue),
                     unit=sensorunits,
-                    status=get_sensor_status(sensorstatus),
+                    state=get_sensor_state(sensorstatus),
                     state_readable=get_state_readable(sensorstatus),
                 )})
 
             if sensortype == '12':  # Power supply
-                sensors['power'].update({sensorname.replace('Power ', ''): CiscoAsaSensor(
-                    value=0,
-                    unit='',
-                    status=get_sensor_status(sensorstatus),
+                power.update({sensorname.replace('Power ', ''): CiscoAsaPowerSensor(
+                    state=get_sensor_state(sensorstatus),
                     state_readable=get_state_readable(sensorstatus),
                 )})
 
-    return sensors
+    return CiscoasaSensors(temp=temp, fan=fan, power=power)
 
 
 register.snmp_section(
@@ -220,40 +237,34 @@ register.snmp_section(
     detect=startswith('.1.3.6.1.2.1.1.1.0', 'cisco adaptive security appliance')
 )
 
+
 # ##################################################################################################
 #
 # ASA SENSORS TEMPERATURE
 #
 # ##################################################################################################
 
-from .utils.temperature import (
-    check_temperature,
-    TempParamType,
-    to_celsius,
-)
-
 
-def discovery_cisco_asa_temp(section: Dict) -> DiscoveryResult:
-    for key in section['temp']:
-        yield Service(item=key)
+def discovery_cisco_asa_temp(section: CiscoasaSensors) -> DiscoveryResult:
+    yield from (Service(item=item) for item in section.temp.keys())
 
 
-def check_cisco_asa_temp(item, params: TempParamType, section) -> CheckResult:
+def check_cisco_asa_temp(item, params: TempParamType, section: CiscoasaSensors) -> CheckResult:
     try:
-        sensor = section['temp'][item]
-
-        yield Result(state=sensor.status, summary='Status: %s' % sensor.state_readable)
-
-        yield from check_temperature(
-            sensor.value,
-            dev_unit=sensor.unit,
-            dev_status=sensor.status,
-            dev_status_name=sensor.state_readable,
-            params=params,
-            unique_name='check_cisco_asa_temp.%s' % item,
-        )
+        sensor = section.temp[item]
     except KeyError:
-        pass
+        return
+
+    yield Result(state=sensor.state, summary='Status: %s' % sensor.state_readable)
+
+    yield from check_temperature(
+        sensor.value,
+        dev_unit=sensor.unit,
+        dev_status=sensor.state,
+        dev_status_name=sensor.state_readable,
+        params=params,
+        unique_name='check_cisco_asa_temp.%s' % item,
+    )
 
 
 register.check_plugin(
@@ -274,28 +285,26 @@ register.check_plugin(
 # ##################################################################################################
 
 
-def discovery_cisco_asa_fan(section: Dict) -> DiscoveryResult:
-    for key in section['fan']:
-        yield Service(item=key)
+def discovery_cisco_asa_fan(section: CiscoasaSensors) -> DiscoveryResult:
+    yield from (Service(item=item) for item in section.fan.keys())
 
 
-def check_cisco_asa_fan(item, params, section) -> CheckResult:
+def check_cisco_asa_fan(item, params, section: CiscoasaSensors) -> CheckResult:
     try:
-        sensor = section['fan'][item]
-
-        yield Result(state=sensor.status, summary='Status: %s' % sensor.state_readable)
+        sensor = section.fan[item]
+    except KeyError:
+        return
 
-        yield from check_levels(
-            sensor.value,
-            label='Speed',
-            levels_lower=params.get('lower', None),
-            levels_upper=params.get('upper', None),
-            metric_name='fan' if params.get('output_metrics') else None,
-            render_func=lambda v: '%s RPM' % str(v),
-        )
+    yield Result(state=sensor.state, summary='Status: %s' % sensor.state_readable)
 
-    except KeyError:
-        pass
+    yield from check_levels(
+        sensor.value,
+        label='Speed',
+        levels_lower=params.get('lower', None),
+        levels_upper=params.get('upper', None),
+        metric_name='fan' if params.get('output_metrics') else None,
+        render_func=lambda v: '%s RPM' % str(v),
+    )
 
 
 register.check_plugin(
@@ -315,19 +324,17 @@ register.check_plugin(
 #
 # ##################################################################################################
 
-def discovery_cisco_asa_power(section: Dict) -> DiscoveryResult:
-    for key in section['power']:
-        yield Service(item=key)
+def discovery_cisco_asa_power(section: CiscoasaSensors) -> DiscoveryResult:
+    yield from (Service(item=item) for item in section.power.keys())
 
 
-def check_cisco_asa_power(item, section) -> CheckResult:
+def check_cisco_asa_power(item, section: CiscoasaSensors) -> CheckResult:
     try:
-        sensor = section['power'][item]
-
-        yield Result(state=sensor.status, summary='Status: %s' % sensor.state_readable)
-
+        sensor = section.power[item]
     except KeyError:
-        pass
+        return
+
+    yield Result(state=sensor.state, summary='Status: %s' % sensor.state_readable)
 
 
 register.check_plugin(
diff --git a/cisco_asa_sensors.mkp b/cisco_asa_sensors.mkp
index f84efb0826041f01037723c2bd8b620005c11066..58899b6953a29e18fb52a3e31257d12667aeab09 100644
Binary files a/cisco_asa_sensors.mkp and b/cisco_asa_sensors.mkp differ
diff --git a/packages/cisco_asa_sensors b/packages/cisco_asa_sensors
index c4b310dfc26a6f2ce885cf8a5a793282bd11a114..7ac90b0df89d74bbb72d02dc411b639e45c55fbe 100644
--- a/packages/cisco_asa_sensors
+++ b/packages/cisco_asa_sensors
@@ -7,7 +7,7 @@
  'name': 'cisco_asa_sensors',
  'num_files': 4,
  'title': 'Cisco ASA Sensors',
- 'version': '20210318_v0.0.1',
+ 'version': '20210322_v0.0.2',
  'version.min_required': '2.0.0',
  'version.packaged': '2.0.0p1',
  'version.usable_until': None}
\ No newline at end of file