diff --git a/agent_based/cisco_cellular_lte.py b/agent_based/cisco_cellular_lte.py
index 449c72dee0ed45d5f8e86f27d13118bbf6118f5d..a53be97a4567e77a7ca969863f90a12d5cf255c4 100644
--- a/agent_based/cisco_cellular_lte.py
+++ b/agent_based/cisco_cellular_lte.py
@@ -12,6 +12,7 @@
 # Monitor status of Cisco cellular modems/connections/interfaces
 #
 # 2022-09-20: added WATO options
+# 2022-11-10: added upper_levels to perfdata for scalars in metrics
 #
 # sample snmpwalk
 #
@@ -83,14 +84,14 @@ class CiscoCellular3g:
     modem_status: str
     network: str
     channel: int
-    rssi: int
     band: str
+    rssi: Optional[int]
 
 
 @dataclass
 class CiscoCellularRadio:
-    lte_rsrp: int
-    lte_rsrq: int
+    lte_rsrp: Optional[int]
+    lte_rsrq: Optional[int]
 
 
 @dataclass
@@ -141,6 +142,7 @@ _cisco_gsm_service_type = {
 }
 
 _cisco_gsm_band = {
+    '0': 'UMTS',  # not part of the Cisco MIB
     '1': 'unknown',
     '2': 'invalid',
     '3': 'none',
@@ -152,7 +154,7 @@ _cisco_gsm_band = {
     '9': 'WCDMA-850',
     '10': 'WCDMA-1900',
     '11': 'WCDMA-2100',
-    '12': 'LTE Band',
+    '12': 'LTE',
 }
 
 _cisco_roaming_status = {
@@ -198,8 +200,8 @@ def parse_cisco_cellular_lte(string_table: List[StringByteTable]) -> Optional[Di
 
     for radio_oid_end, current_rsrp, current_rsrq in radio_table:
         radios[radio_oid_end] = CiscoCellularRadio(
-                lte_rsrp=int(current_rsrp),
-                lte_rsrq=int(current_rsrq)  # // 10,  # See Cisco bug ID CSCvt55347
+                lte_rsrp=int(current_rsrp) if current_rsrp.lstrip('-').isdigit() else None,
+                lte_rsrq=int(current_rsrq) if current_rsrq.lstrip('-').isdigit() else None,  # // 10,  # See Cisco bug ID CSCvt55347
             )
 
     for profile_oid_end, apn_type, apn in profile_table:
@@ -213,6 +215,12 @@ def parse_cisco_cellular_lte(string_table: List[StringByteTable]) -> Optional[Di
     for modem_oid_end, modem_state, service_type, roaming_status, modem_time, conn_status,\
          modem_status, network, totyl_bytes_tx, total_bytes_rx, rssi, channel, band in modem_table:
 
+        if band == 1:
+            if channel in ['2938', '2961', '2963', '3011', '3027', '3087']:
+                band = '0'
+            elif channel in ['6200']:
+                band = '12'
+
         modems[modem_oid_end] = CiscoCellular3g(
             modem_state=modem_state,
             service_type=str(service_type[0]*256 + service_type[1]),
@@ -223,7 +231,7 @@ def parse_cisco_cellular_lte(string_table: List[StringByteTable]) -> Optional[Di
             total_bytes_rx=int(total_bytes_rx),
             modem_status=modem_status,
             network=network,
-            rssi=int(rssi),
+            rssi=int(rssi) if rssi.lstrip('-').isdigit() else None,
             channel=int(channel),
             band=band,
         )
@@ -317,19 +325,59 @@ def check_cisco_cellular_lte(item, params, section: Dict[str, CiscoCellularInter
     else:
         yield Result(state=State(params['roaming_state']), notice=text)
 
-    for value, label, render_func, levels_lower, metric in [
-        (interface.radio.lte_rsrp, 'RSRP', lambda v: f'{v} dBm', params['rsrp_levels_lower'], 'rsrp'),
-        (interface.radio.lte_rsrq if params['CSCvt55347_fixed'] else interface.radio.lte_rsrq // 10,  # handle Cisco BugID CSCvt55347
-         'RSRQ', lambda v: f'{v} dB', params['rsrp_levels_lower'], 'rsrq',),
-        (interface.modem.rssi, 'RSSI', lambda v: f'{v} dBm', params['rssi_levels_lower'], 'rssi'),
+    if not params['CSCvt55347_fixed'] and interface.radio.lte_rsrq:
+        interface.radio.lte_rsrq = interface.radio.lte_rsrq / 10  # handle Cisco BugID CSCvt55347
+
+    if interface.radio.lte_rsrp < -111:
+        lte_rsrp_quality = 'Poor'
+    elif interface.radio.lte_rsrp <= -103:
+        lte_rsrp_quality = 'Fair'
+    elif interface.radio.lte_rsrp <= -85:
+        lte_rsrp_quality = 'Good'
+    elif interface.radio.lte_rsrp >= -84:
+        lte_rsrp_quality = 'Excellent'
+
+    if interface.radio.lte_rsrq < -12:
+        lte_rsrq_quality = 'Poor'
+    elif interface.radio.lte_rsrq <= -9:
+        lte_rsrq_quality = 'Fair'
+    elif interface.radio.lte_rsrq <= -5:
+        lte_rsrq_quality = 'Good'
+    elif interface.radio.lte_rsrq > -5:
+        lte_rsrq_quality = 'Excellent'
+
+    if interface.modem.rssi < -85:
+        rssi_quality = 'Poor'
+    elif interface.modem.rssi <= -75:
+        rssi_quality = 'Fair'
+    elif interface.modem.rssi <= -65:
+        rssi_quality = 'Good'
+    elif interface.modem.rssi >= -65:
+        rssi_quality = 'Excellent'
+
+    for value, label, render_func, levels_lower, metric, in [
+        (interface.radio.lte_rsrp, 'RSRP', lambda v: f'{v} dBm ({lte_rsrp_quality})', params['rsrp_levels_lower'], 'rsrp'),
+        (interface.radio.lte_rsrq, 'RSRQ', lambda v: f'{v} dB ({lte_rsrq_quality})', params['rsrp_levels_lower'], 'rsrq'),
+        (interface.modem.rssi, 'RSSI', lambda v: f'{v} dBm ({rssi_quality})', params['rssi_levels_lower'], 'rssi'),
     ]:
-        yield from check_levels(
-            value=value,
-            label=label,
-            render_func=render_func,
-            levels_lower=levels_lower,
-            metric_name=f'{metric_prefix}{metric}',
-        )
+        if value:
+            warn, crit = levels_lower
+            if warn:
+                warn = warn * -1
+            if crit:
+                crit = crit * -1
+            yield from check_levels(
+                value=value,
+                label=label,
+                render_func=render_func,
+                levels_upper=(warn, crit),  # used for scalars in metrics
+                levels_lower=levels_lower,
+                metric_name=f'{metric_prefix}{metric}',
+            )
+
+    if interface.radio.lte_rsrp or interface.radio.lte_rsrq:
+        if not interface.radio.lte_rsrq or not interface.radio.lte_rsrp:
+            yield Result(state=State.OK, notice='Channel changed while polling')
 
     now_time = time.time()
     value_store = get_value_store()
@@ -355,6 +403,7 @@ def check_cisco_cellular_lte(item, params, section: Dict[str, CiscoCellularInter
         yield Result(state=State.OK, notice=f'IPv6 Address: {interface.ipv6_addr}')
 
     yield Result(state=State.OK, notice=f'Networkcode: {interface.modem.network}')
+
     expected_band = params['expected_band']
     if interface.modem.band == expected_band:
         yield Result(state=State.OK, summary=f'Band: {_cisco_gsm_band.get(interface.modem.band)}')
@@ -363,6 +412,7 @@ def check_cisco_cellular_lte(item, params, section: Dict[str, CiscoCellularInter
             state=State(params['state_not_expected_band']),
             summary=f'Band: {_cisco_gsm_band.get(interface.modem.band)} (expected: {_cisco_gsm_band.get(expected_band)})'
         )
+
     yield Result(state=State.OK, notice=f'Channel: {interface.modem.channel}')
     yield Result(state=State.OK, notice=f'Service type: {_cisco_gsm_service_type.get(interface.modem.service_type)}')
     yield Result(state=State.OK, notice=f'Provider Time: {interface.modem.current_system_time}')
@@ -448,8 +498,8 @@ register.check_plugin(
     },
     check_function=check_cisco_cellular_lte,
     check_default_parameters={
-        'rsrp_levels_lower': (-100, -115),
-        'rsrq_levels_lower': (-8, -15),
+        'rsrp_levels_lower': (-103, -112),
+        'rsrq_levels_lower': (-9, -13),
         'rssi_levels_lower': (-75, -85),
         'roaming_state': 1,
         'no_profile_state': 1,
diff --git a/cisco_cellular_lte.mkp b/cisco_cellular_lte.mkp
index 8856b2e231159e3f9908b6007de6cf5a07aa4eeb..4ba640e57dc1f03ba4d8165c9196cd9c6f93d6e2 100644
Binary files a/cisco_cellular_lte.mkp and b/cisco_cellular_lte.mkp differ
diff --git a/packages/cisco_cellular_lte b/packages/cisco_cellular_lte
index b197fed6af17032fa3d0b4ff9b95f46a4f43a7b9..86e04f18c4e58e2707f6d32d011303229475b337 100644
--- a/packages/cisco_cellular_lte
+++ b/packages/cisco_cellular_lte
@@ -11,7 +11,7 @@
  'name': 'cisco_cellular_lte',
  'num_files': 6,
  'title': 'Cisco cellular LTE',
- 'version': '20220920.v0.0.1',
+ 'version': '20221110.v0.0.1a',
  'version.min_required': '2.0.0',
  'version.packaged': '2021.09.20',
  'version.usable_until': None}
\ No newline at end of file
diff --git a/web/plugins/metrics/cisco_cellular_lte.py b/web/plugins/metrics/cisco_cellular_lte.py
index 0164494e65efddd3512bb4fd7e2a4b4c46bd1c37..495c52e05f9ae1e51362f1ac4f5212ba6c5f873c 100644
--- a/web/plugins/metrics/cisco_cellular_lte.py
+++ b/web/plugins/metrics/cisco_cellular_lte.py
@@ -10,6 +10,9 @@
 #
 # Cisco Cellular LTE metrics plugin
 #
+# 2022-11-10: fixed range for RSRP and RSRQ
+#             added range for RSSI
+#             added scalars for all
 #
 from cmk.gui.i18n import _
 
@@ -40,7 +43,11 @@ graph_info['cisco_cellular.rsrp'] = {
     'metrics': [
         ('cisco_cellular_rsrp', 'area'),
     ],
-    'range': (0, 'cisco_cellular_rsrp:max'),
+    'scalars': [
+        ('cisco_cellular_rsrp:crit,-1,*', 'Critical'),
+        ('cisco_cellular_rsrp:warn,-1,*', 'Warning'),
+    ],
+    'range': ('cisco_cellular_rsrp:max,-', 1),
 }
 
 graph_info['cisco_cellular.rsrq'] = {
@@ -49,10 +56,10 @@ graph_info['cisco_cellular.rsrq'] = {
         ('cisco_cellular_rsrq', 'area'),
     ],
     'scalars': [
-        ('cisco_cellular_rsrq:crit', _('crit')),
-        ('cisco_cellular_rsrq:warn', _('warn')),
+        ('cisco_cellular_rsrq:crit,-1,*', 'Critical'),
+        ('cisco_cellular_rsrq:warn,-1,*', 'Critical'),
     ],
-    'range': (0, 'cisco_cellular_rsrq:max'),
+     'range': ('cisco_cellular_rsrq:max,-', 1),
 }
 
 graph_info['cisco_cellular.rssi'] = {
@@ -60,4 +67,9 @@ graph_info['cisco_cellular.rssi'] = {
     'metrics': [
         ('cisco_cellular_rssi', 'area'),
     ],
+    'scalars': [
+        ('cisco_cellular_rssi:crit,-1,*', 'Critical'),
+        ('cisco_cellular_rsrq:warn,-1,*', 'Critical'),
+    ],
+    'range': ('cisco_cellular_rssi:max,-', 1)
 }
diff --git a/web/plugins/wato/cisco_cellular_lte.py b/web/plugins/wato/cisco_cellular_lte.py
index 66d86980f80b2ce59d64bdc096e0e378a4f62833..46a86f06b82594fae16b5420a154a2e80a3b2511 100644
--- a/web/plugins/wato/cisco_cellular_lte.py
+++ b/web/plugins/wato/cisco_cellular_lte.py
@@ -37,16 +37,16 @@ def _parameter_valuespec_cisco_cellular_lte():
                  title=_('Lower levels for RSRP'),
                  help=_('Lower levels for RSRP (Reference Signal Received Power) in dBm'),
                  elements=[
-                     Integer(title=_('Warning below'), default_value=-100, unit=_('dBm')),
-                     Integer(title=_('Critical below'), default_value=-115, unit=_('dBm')),
+                     Integer(title=_('Warning below'), default_value=-103, unit=_('dBm')),
+                     Integer(title=_('Critical below'), default_value=-112, unit=_('dBm')),
                  ])),
             ('rsrq_levels_lower',
              Tuple(
                  title=_('Lower levels for RSRQ'),
                  help=_('Lower levels for RSRQ (Reference Signal Received Quality) in dB'),
                  elements=[
-                     Integer(title=_('Warning below'), default_value=-8, unit=_('dB')),
-                     Integer(title=_('Critical below'), default_value=-15, unit=_('dB')),
+                     Integer(title=_('Warning below'), default_value=-9, unit=_('dB')),
+                     Integer(title=_('Critical below'), default_value=-13, unit=_('dB')),
                  ])),
             ('rssi_levels_lower',
              Tuple(
@@ -62,7 +62,8 @@ def _parameter_valuespec_cisco_cellular_lte():
                  help=_('The expected cellular band.'),
                  default_value='12',
                  choices=[
-                     ('12', 'LTE Band'),
+                     ('12', 'LTE'),
+                     ('0', 'UMTS'),
                      ('11', 'WCDMA-2100'),
                      ('10', 'WCDMA-1900'),
                      ('9', 'WCDMA-850'),