diff --git a/agent_based/checkpoint_asg_smo_counters.py b/agent_based/checkpoint_asg_smo_counters.py
index f67256fb873ba0241c9218c82c8a635ef0f05c47..f35d377177eae57ea7df25cb06c26c5e8bffec3b 100644
--- a/agent_based/checkpoint_asg_smo_counters.py
+++ b/agent_based/checkpoint_asg_smo_counters.py
@@ -10,7 +10,7 @@
 # Monitor Check Point Maestro SMO SGM Counters
 #
 # 2021-09-10: rewritten for CMK 2.0
-#
+# 2021-09-11: added metrics file
 #
 # sample snmpwalk 
 # .1.3.6.1.4.1.2620.1.48.20.1.0 = STRING: "111802"
@@ -35,12 +35,12 @@
 # .1.3.6.1.4.1.2620.1.48.20.20.0 = STRING: "0"
 # .1.3.6.1.4.1.2620.1.48.20.21.0 = STRING: "N/A"
 #
-# sample info
-# [[u'111802', u'0', u'84', u'91', u'N/A', u'0', u'0', u'9', u'79', u'1', u'0', u'0', u'0', u'1', u'0', u'7', u'0', u'0', u'0', u'0', u'N/A']]
+# sample string_table
+# [['111802', '0', '84', '91', 'N/A', '0', '0', '9', '79', '1', '0', '0', '0', '1', '0', '7', '0', '0', '0', '0', 'N/A']]
 #
-import time
+
 from dataclasses import dataclass
-from typing import List, Dict, NamedTuple, Optional
+from typing import Dict
 
 from cmk.base.plugins.agent_based.agent_based_api.v1 import (
     register,
@@ -53,8 +53,6 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import (
     startswith,
     any_of,
     equals,
-    check_levels,
-    render,
 )
 from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
     DiscoveryResult,
@@ -63,7 +61,15 @@ from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
 )
 
 
-def parse_checkpoint_asg_smo_counters(string_table: StringTable) -> Dict[str, Dict[str, int]]:
+@dataclass
+class CheckpointAsgSmoCounters:
+    counters: Dict[str, int]
+    label: str
+    unit: str
+    text: str
+
+
+def parse_checkpoint_asg_smo_counters(string_table: StringTable) -> Dict[str, CheckpointAsgSmoCounters]:
     items = {}
     for entry in string_table:
         asgThroughput, asgConnectionRate, asgPacketRate, asgConcurrConn, asgClearConn, asgAccelConnectionRate, \
@@ -71,120 +77,103 @@ def parse_checkpoint_asg_smo_counters(string_table: StringTable) -> Dict[str, Di
         asgAccelLoadMin, asgAccelLoadMax, asgInstancesLoadAvg, asgInstancesLoadMin, asgInstancesLoadMax, \
         asgVpnThroughput, asgVpnConn, asgNatConnRate, asgNatConn, asgVsxCpu1MinAvg = entry
 
-        items['Concurrent connections'] = {
-            'asgConcurrConn': int(asgConcurrConn),
-            'asgAccelConcurrConn': int(asgAccelConcurrConn),
-            'asgNonAccelConcurrConn': int(asgNonAccelConcurrConn),
-        }
-        items['Connection rate'] = {
-            'asgConnectionRate': int(asgConnectionRate),
-            'asgAccelConnectionRate': int(asgAccelConnectionRate),
-            'asgNonAccelConnectionRate': int(asgNonAccelConnectionRate),
-        }
-
-        items['Load'] = {
-            'asgLoad': int(asgLoad),
-            'asgAccelLoadAvg': int(asgAccelLoadAvg),
-            'asgAccelLoadMin': int(asgAccelLoadMin),
-            'asgAccelLoadMax': int(asgAccelLoadMax),
-        }
-
-        items['Instances load'] = {
-            'asgInstancesLoadAvg': int(asgInstancesLoadAvg),
-            'asgInstancesLoadMin': int(asgInstancesLoadMin),
-            'asgInstancesLoadMax': int(asgInstancesLoadMax),
-        }
-        items['NAT'] = {
-            'asgNatConnRate': int(asgNatConnRate),
-            'asgNatConn': int(asgNatConn),
-        }
-        items['VPN'] = {
-            'asgVpnThroughput': int(asgVpnThroughput),
-            'asgVpnConn': int(asgVpnConn),
-        }
-        items['Throughput'] = {
-            'asgThroughput': int(asgThroughput),
-        }
-        items['Packet rate'] = {
-            'asgPacketRate': int(asgPacketRate),
-        }
-    return items
-
-
-def discovery_checkpoint_asg_smo_counters(section:Dict[str, Dict[str, int]]) -> DiscoveryResult:
-    # sample parsed
-    # {
-    #  'Load': {'asgAccelLoadAvg': 0, 'asgAccelLoadMin': 0, 'asgLoad': 1, 'asgAccelLoadMax': 0},
-    #  'Connection rate': {'asgConnectionRate': 0, 'asgNonAccelConnectionRate': 0, 'asgAccelConnectionRate': 0},
-    #  'Instances load': {'asgInstancesLoadMin': 0, 'asgInstancesLoadMax': 7, 'asgInstancesLoadAvg': 1},
-    #  'Throughput': {'asgThroughput': 111802},
-    #  'Concurrent connections': {'asgAccelConcurrConn': 9, 'asgNonAccelConcurrConn': 79, 'asgConcurrConn': 91},
-    #  'NAT': {'asgNatConn': 0, 'asgNatConnRate': 0},
-    #  'VPN': {'asgVpnConn': 0, 'asgVpnThroughput': 0},
-    #  'Packet rate': {'asgPacketRate': 84}}
-    #
+        items['Concurrent connections'] = CheckpointAsgSmoCounters(
+            counters={
+                'concurr_conn': int(asgConcurrConn),
+                'accel_concurr_conn': int(asgAccelConcurrConn),
+                'non_accel_concurr_conn': int(asgNonAccelConcurrConn),
+            },
+            label='all/accelerated/non accelerated',
+            unit='connections',
+            text=f'{int(asgConcurrConn):d}/{int(asgAccelConcurrConn):d}/{int(asgNonAccelConcurrConn):d}',
+        )
+        items['Connection rate'] = CheckpointAsgSmoCounters(
+            counters={
+                'connection_rate': int(asgConnectionRate),
+                'accel_connection_rate': int(asgAccelConnectionRate),
+                'non_accel_connection_rate': int(asgNonAccelConnectionRate),
+            },
+            label='current/average/min/max',
+            unit='connections/s',
+            text=f'{int(asgLoad):d}/{int(asgAccelLoadAvg):d}/{int(asgAccelLoadMin):d}/{int(asgAccelLoadMax):d}',
+        )
+        items['Load'] = CheckpointAsgSmoCounters(
+            counters={
+                'load': int(asgLoad),
+                'accel_load_avg': int(asgAccelLoadAvg),
+                'accel_load_min': int(asgAccelLoadMin),
+                'accel_load_max': int(asgAccelLoadMax),
+            },
+            label='current/average/min/max',
+            unit='%',
+            text=f'{int(asgLoad):d}/{int(asgAccelLoadAvg):d}/{int(asgAccelLoadMin):d}/{int(asgAccelLoadMax):d}',
+        )
+        items['Instances load'] = CheckpointAsgSmoCounters(
+            counters={
+                'instances_load_avg': int(asgInstancesLoadAvg),
+                'instances_load_min': int(asgInstancesLoadMin),
+                'instances_load_max': int(asgInstancesLoadMax),
+            },
+            label='average/min/max',
+            unit='%',
+            text=f'{int(asgInstancesLoadAvg):d}/{int(asgInstancesLoadMin):d}/{int(asgInstancesLoadMax):d}',
+        )
+        items['NAT'] = CheckpointAsgSmoCounters(
+            counters={
+                'nat_conn_rate': int(asgNatConnRate),
+                'nat_conn': int(asgNatConn),
+            },
+            label='NAT Connections/NAT connection rate',
+            unit='connections',
+            text=f'{int(asgNatConn):d}/{int(asgNatConn):d}',
+        )
+        items['VPN'] = CheckpointAsgSmoCounters(
+            counters={
+                'vpn_throughput': int(asgVpnThroughput),
+                'vpn_conn': int(asgVpnConn),
+            },
+            label='VPN Connections/VPN Throughput',
+            unit='',
+            text=f'{int(asgVpnConn):d}/{int(asgVpnThroughput):d}',
+        )
+        items['Throughput'] = CheckpointAsgSmoCounters(
+            counters={
+                'throughput': int(asgThroughput),
+            },
+            label='Throughput',
+            unit='Bytes/s',
+            text=f'{int(asgThroughput):d}'
+        )
+        items['Packet rate'] = CheckpointAsgSmoCounters(
+            counters={
+                'packet_rate': int(asgPacketRate),
+            },
+            label='Packet Rate',
+            unit='Packets/s',
+            text=f'{int(asgPacketRate):d}',
+        )
+    if items:
+        return items
+
 
+def discovery_checkpoint_asg_smo_counters(section:Dict[str, CheckpointAsgSmoCounters]) -> DiscoveryResult:
     for item in section.keys():
         yield Service(item=item)
 
 
-def check_checkpoint_asg_smo_counters(item, params, section:Dict[str, Dict[str, int]]) -> CheckResult:
+def check_checkpoint_asg_smo_counters(item, params, section: Dict[str, CheckpointAsgSmoCounters]) -> CheckResult:
     try:
         entry = section[item]
     except KeyError:
         yield Result(state=State.UNKNOWN, notice='Item not found in SNMP data')
         return
 
-    for key in entry.keys():
-        yield Metric(value=entry[key], name=f'checkpoint_asg_mso_counters_{key}')
+    for key in entry.counters.keys():
+        yield Metric(value=entry.counters[key], name=f'checkpoint_asg_smo_counters_{key}')
 
-    if item.lower() == 'concurrent connections':
-        yield Result(
-            state=State.OK,
-            summary=f'all/accelerated/non accelerated: {entry["asgConcurrConn"]:d}/{entry["asgAccelConcurrConn"]:d}/{entry["asgNonAccelConcurrConn"]:d}'
-        )
-
-    elif item.lower() == 'load':
-        yield Result(
-            state=State.OK,
-            summary=f'current/average/min/max: {entry["asgLoad"]:d}/{entry["asgAccelLoadAvg"]:d}/{entry["asgAccelLoadMin"]:d}/{entry["asgAccelLoadMax"]:d}'
-        )
+    yield Result(state=State.OK, summary=f'{entry.label}: {entry.text}')
 
-    elif item.lower() == 'connection rate':
-        yield Result(
-            state=State.OK,
-            summary=f'all/accelerated/non accelerated: {entry["asgConnectionRate"]:d}/{entry["asgAccelConnectionRate"]:d}/{entry["asgNonAccelConnectionRate"]:d}'
-        )
 
-    elif item.lower() == 'instances load':
-        yield Result(
-            state=State.OK,
-            summary=f'average/min/max: {entry["asgInstancesLoadAvg"]:d}/{entry["asgInstancesLoadMin"]:d}/{entry["asgInstancesLoadMax"]:d}'
-        )
-
-    elif item.lower() == 'throughput':
-        yield Result(
-            state=State.OK,
-            summary=f'Throughput: {entry["asgThroughput"]:d}'
-        )
-
-    elif item.lower() == 'packet rate':
-        yield Result(
-            state=State.OK,
-            summary=f'Packet Rate: {entry["asgPacketRate"]:d}'
-        )
-
-    elif item.lower() == 'nat':
-        yield Result(
-            state=State.OK,
-            summary=f'NAT Connections/NAT connection rate: {entry["asgNatConn"]:d}/{entry["asgNatConn"]:d}'
-        )
-
-    elif item.lower() == 'vpn':
-        yield Result(
-            state=State.OK,
-            summary=f'VPN Connections/VPN Throughput: {entry["asgVpnConn"]:d}/{entry["asgVpnThroughput"]:d}'
-        )
 
 
 register.snmp_section(
diff --git a/checkpoint_asg_smo_counters.mkp b/checkpoint_asg_smo_counters.mkp
index 12a3e8c8a121b008617504a9f0b1343b8d0323d2..4dd5a4a8ae1485f815bd9b8637e39ed3171fea9d 100644
Binary files a/checkpoint_asg_smo_counters.mkp and b/checkpoint_asg_smo_counters.mkp differ
diff --git a/packages/checkpoint_asg_smo_counters b/packages/checkpoint_asg_smo_counters
index aa77eade9e4db47493b64b0eb02dbe25c70b7b4c..9d0e3be02b815bb0e1e80fe9a3777052eed21ca4 100644
--- a/packages/checkpoint_asg_smo_counters
+++ b/packages/checkpoint_asg_smo_counters
@@ -1,11 +1,12 @@
 {'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
  'description': 'Monitor Check Point Maestro SMO performance counters\n',
  'download_url': 'http://thl-cmk.hopto.org/',
- 'files': {'agent_based': ['checkpoint_asg_smo_counters.py']},
+ 'files': {'agent_based': ['checkpoint_asg_smo_counters.py'],
+           'web': ['plugins/metrics/checkpoint_asg_smo_counters.py']},
  'name': 'checkpoint_asg_smo_counters',
- 'num_files': 1,
+ 'num_files': 2,
  'title': 'Check Point Maestro SMO performance counters',
- 'version': '20210910.v0.2',
+ 'version': '20210911.v0.2a',
  'version.min_required': '2.0.0',
  'version.packaged': '2021.07.14',
  'version.usable_until': None}
\ No newline at end of file
diff --git a/web/plugins/metrics/checkpoint_asg_smo_counters.py b/web/plugins/metrics/checkpoint_asg_smo_counters.py
new file mode 100644
index 0000000000000000000000000000000000000000..c59c14d0eb90196ca9b211f23a02574c88331d9d
--- /dev/null
+++ b/web/plugins/metrics/checkpoint_asg_smo_counters.py
@@ -0,0 +1,288 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+
+from cmk.gui.i18n import _
+
+from cmk.gui.plugins.metrics import (
+    metric_info,
+    graph_info,
+    perfometer_info,
+)
+
+metric_info['checkpoint_asg_smo_counters_concurr_conn'] = {
+    'title': _('Connections'),
+    'unit': 'count',
+    'color': '26/a',
+}
+metric_info['checkpoint_asg_smo_counters_accel_concurr_conn'] = {
+    'title': _('Connections Accelerated'),
+    'unit': 'count',
+    'color': '32/a',
+}
+metric_info['checkpoint_asg_smo_counters_non_accel_concurr_conn'] = {
+    'title': _('Connections non Accelerated'),
+    'unit': 'count',
+    'color': '16/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_connection_rate'] = {
+    'title': _('Connection Rate'),
+    'unit': '1/s',
+    'color': '26/a',
+}
+metric_info['checkpoint_asg_smo_counters_accel_connection_rate'] = {
+    'title': _('Connection Rate Accelerated'),
+    'unit': '1/s',
+    'color': '32/a',
+}
+metric_info['checkpoint_asg_smo_counters_non_accel_connection_rate'] = {
+    'title': _('Connection Rate non Accelerated'),
+    'unit': '1/s',
+    'color': '16/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_load'] = {
+    'title': _('Load'),
+    'unit': '%',
+    'color': '26/a',
+}
+metric_info['checkpoint_asg_smo_counters_accel_load_max'] = {
+    'title': _('Accel load (max)'),
+    'unit': '%',
+    'color': '31/a',
+}
+metric_info['checkpoint_asg_smo_counters_accel_load_avg'] = {
+    'title': _('Accel load (avg)'),
+    'unit': '%',
+    'color': '16/a',
+}
+metric_info['checkpoint_asg_smo_counters_accel_load_min'] = {
+    'title': _('Accel load (min)'),
+    'unit': '%',
+    'color': '11/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_instances_load_avg'] = {
+    'title': _('Instances load (avg)'),
+    'unit': '%',
+    'color': '26/a',
+}
+metric_info['checkpoint_asg_smo_counters_instances_load_min'] = {
+    'title': _('Instances load (min)'),
+    'unit': '%',
+    'color': '32/a',
+}
+metric_info['checkpoint_asg_smo_counters_instances_load_max'] = {
+    'title': _('Instances load (max)'),
+    'unit': '%',
+    'color': '16/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_nat_conn'] = {
+    'title': _('NAT connections'),
+    'unit': 'count',
+    'color': '26/a',
+}
+metric_info['checkpoint_asg_smo_counters_nat_conn_rate'] = {
+    'title': _('NAT Conn Rate'),
+    'unit': '1/s',
+    'color': '32/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_vpn_conn'] = {
+    'title': _('VPN connections'),
+    'unit': 'count',
+    'color': '26/a',
+}
+metric_info['checkpoint_asg_smo_counters_vpn_throughput'] = {
+    'title': _('VPN Throughput'),
+    'unit': 'bytes/s',
+    'color': '32/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_throughput'] = {
+    'title': _('Throughput'),
+    'unit': 'bytes/s',
+    'color': '26/a',
+}
+
+metric_info['checkpoint_asg_smo_counters_packet_rate'] = {
+    'title': _('Packet Rate'),
+    'unit': '1/s',
+    'color': '26/a',
+}
+
+graph_info['checkpoint_asg_smo_counters_connections'] = {
+    'title': _('Check Point SMO Concurrent Connections'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_non_accel_concurr_conn', 'line'),
+        ('checkpoint_asg_smo_counters_accel_concurr_conn', 'line'),
+        ('checkpoint_asg_smo_counters_concurr_conn', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_concurr_conn:max'),
+}
+
+graph_info['checkpoint_asg_smo_counters_connection_rate'] = {
+    'title': _('Check Point SMO Counter Connection Rate'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_non_accel_connection_rate', 'line'),
+        ('checkpoint_asg_smo_counters_accel_connection_rate', 'line'),
+        ('checkpoint_asg_smo_counters_connection_rate', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_connection_rate:max'),
+}
+
+graph_info['checkpoint_asg_smo_counters_accel_load'] = {
+    'title': _('Check Point SMO Counter Load'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_accel_load_min', 'line'),
+        ('checkpoint_asg_smo_counters_accel_load_avg', 'line'),
+        ('checkpoint_asg_smo_counters_accel_load_max', 'line'),
+        ('checkpoint_asg_smo_counters_load', 'area'),
+    ],
+    'range': (0, 110),
+}
+
+graph_info['checkpoint_asg_smo_counters_instances_load'] = {
+    'title': _('Check Point SMO Counter Instances Load'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_instances_load_min', 'line'),
+        ('checkpoint_asg_smo_counters_instances_load_avg', 'area'),
+        ('checkpoint_asg_smo_counters_instances_load_max', 'line'),
+    ],
+    'range': (0, 110),
+}
+
+graph_info['checkpoint_asg_smo_counters_nat_conn'] = {
+    'title': _('Check Point SMO Counter NAT connections'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_nat_conn', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_nat_conn:max'),
+}
+graph_info['checkpoint_asg_smo_counters_nat_conn_rate'] = {
+    'title': _('Check Point SMO Counter NAT connection rate'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_nat_conn_rate', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_nat_conn_rate:max'),
+}
+
+graph_info['checkpoint_asg_smo_counters_vpn_conn'] = {
+    'title': _('Check Point SMO Counter VPN connections'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_vpn_conn', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_vpn_conn:max'),
+}
+graph_info['checkpoint_asg_smo_counters_vpn_throughput'] = {
+    'title': _('Check Point SGM Counter VPN Throughput'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_vpn_throughput', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_vpn_throughput:max'),
+}
+
+graph_info['checkpoint_asg_smo_counters_throughput'] = {
+    'title': _('Check Point SGM Counter Throughput'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_throughput', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_throughput:max'),
+}
+
+graph_info['checkpoint_asg_smo_counters_packet_rate'] = {
+    'title': _('Check Point SMO Counter Packet Rate'),
+    'metrics': [
+        ('checkpoint_asg_smo_counters_packet_rate', 'area'),
+    ],
+    'range': (0, 'checkpoint_asg_smo_counters_packet_rate:max'),
+}
+
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_accel_concurr_conn',
+        'half_value': 100000.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_non_accel_concurr_conn',
+        'half_value': 100000.0,
+        'exponent': 2,
+    },
+]))
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_accel_connection_rate',
+        'half_value': 10000.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_non_accel_connection_rate',
+        'half_value': 10000.0,
+        'exponent': 2,
+    },
+]))
+
+perfometer_info.append({
+    'type': 'linear',
+    'segments': ['checkpoint_asg_smo_counters_accel_load_avg'],
+    'total': 100,
+})
+
+perfometer_info.append({
+    'type': 'linear',
+    'segments': ['checkpoint_asg_smo_counters_instances_load_avg'],
+    'total': 100,
+})
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_nat_conn',
+        'half_value': 10000.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_nat_conn_rate',
+        'half_value': 500.0,
+        'exponent': 2,
+    },
+]))
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_vpn_conn',
+        'half_value': 500.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_asg_smo_counters_vpn_throughput',
+        'half_value': 2592000.0,
+        'exponent': 2,
+    },
+]))
+
+perfometer_info.append({
+    'type': 'logarithmic',
+    'metric': 'checkpoint_asg_smo_counters_throughput',
+    'half_value': 500.0,
+    'exponent': 2,
+})
+
+perfometer_info.append({
+    'type': 'logarithmic',
+    'metric': 'checkpoint_asg_smo_counters_packet_rate',
+    'half_value': 100000.0,
+    'exponent': 2,
+})