diff --git a/agent_based/checkpoint_asg_vsls.py b/agent_based/checkpoint_asg_vsls.py
new file mode 100644
index 0000000000000000000000000000000000000000..43ce98e5f83cc9469e02a64323956ef659f3e281
--- /dev/null
+++ b/agent_based/checkpoint_asg_vsls.py
@@ -0,0 +1,189 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2020-11-07
+#
+# Monitor Check Point Maestro SMO Vsls Chassis status
+#
+# 2021-09-11: rewritten for CMK 2.0
+#
+# sample snmpwalk 
+# .1.3.6.1.4.1.2620.1.48.30.20.1.0 = Gauge32: 50
+# .1.3.6.1.4.1.2620.1.48.30.20.2.0 = STRING: "1 2 "
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.1.1.0 = Gauge32: 0
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.2.1.0 = STRING: "k01001s11-017500009"
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.3.1.0 = Gauge32: 1
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.4.1.0 = Gauge32: 1
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.5.1.0 = STRING: "OK"
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.6.1.0 = STRING: "Primary chassis health is good."
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.7.1.0 = Gauge32: 0
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.8.1.0 = Gauge32: 0
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.9.1.0 = Gauge32: 2
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.10.1.0 = Gauge32: 2
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.21.1.0 = Gauge32: 0
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.22.1.0 = Gauge32: 0
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.23.1.0 = Gauge32: 1
+# .1.3.6.1.4.1.2620.1.48.30.20.10.1.24.1.0 = Gauge32: 1
+#
+# sample string_table
+# [
+#  [
+#   ['50', '1 2']
+#  ], 
+#  [
+#   ['0', 'k01001s11-017500009', '1', '1', 'OK', 'Primary chassis health is good.', '2', '2', '1', '1', '', '']
+#  ]
+# ]
+#
+#
+# sample section
+# CheckpointAsgVsls(SgmRatio='50', SystemPrimaryChassis='1 2 ', Vsid='0', VsName='k01001s11-017500009',
+#                   VsPrimaryChassis='1', VsActiveChassis='1', VsHealth='OK',
+#                   VsReason='Primary chassis health is good.', ChassisState=[(2, 2), (1, 1)])
+
+from typing import List, Tuple, Optional
+from dataclasses import dataclass
+from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
+    DiscoveryResult,
+    CheckResult,
+    StringTable,
+)
+
+from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+    register,
+    Service,
+    equals,
+    Result,
+    State,
+    SNMPTree,
+    startswith,
+    all_of,
+    any_of,
+)
+
+
+@dataclass
+class CheckpointAsgVsls:
+    SgmRatio: str
+    SystemPrimaryChassis: str
+    Vsid: str
+    VsName: str
+    VsPrimaryChassis: str
+    VsActiveChassis: str
+    VsHealth: str
+    VsReason: str
+    ChassisState: List[Tuple[int, int]]
+
+
+def parse_checkpoint_asg_vsls(string_table: List[StringTable]) -> Optional[CheckpointAsgVsls]:
+    chassis_info, chassis_state = string_table
+    try:
+        SgmRatio, SystemPrimaryChassis = chassis_info[0]
+    except (IndexError, ValueError):
+        return
+
+    try:
+        Vsid, VsName, VsPrimaryChassis, VsActiveChassis, VsHealth, VsReason, VsChassis1FwksUp, VsChassis1FwksTotal, \
+        VsChassis2FwksUp, VsChassis2FwksTotal, VsChassis3FwksUp, VsChassis3FwksTotal = chassis_state[0]
+    except (IndexError, ValueError):
+        return
+
+    return CheckpointAsgVsls(
+        SgmRatio=SgmRatio,
+        SystemPrimaryChassis=SystemPrimaryChassis,
+        Vsid=Vsid,
+        VsName=VsName,
+        VsPrimaryChassis=VsPrimaryChassis,
+        VsActiveChassis=VsActiveChassis,
+        VsHealth=VsHealth,
+        VsReason=VsReason,
+        ChassisState=[
+            (int(VsChassis1FwksUp), int(VsChassis1FwksTotal)),
+            (int(VsChassis2FwksUp), int(VsChassis2FwksTotal)),
+           # (int(VsChassis3FwksUp), int(VsChassis3FwksTotal)),
+        ]
+    )
+
+
+def discovery_checkpoint_asg_vsls(section: CheckpointAsgVsls) -> DiscoveryResult:
+    yield Service(parameters={'discovery_active_chassis': section.VsActiveChassis})
+
+
+def check_checkpoint_asg_vsls(params, section: CheckpointAsgVsls) -> CheckResult:
+    SystemPrimaryChassis = section.SystemPrimaryChassis.strip().split(' ')
+    inv_asgVslsVsActiveChassis = params['discovery_active_chassis']
+
+    longoutput = ''
+    longoutput += f'\nSystem name: {section.VsName}'
+    longoutput += f'\nHealth status: {section.VsHealth}'
+    longoutput += f'\nHealth reason: {section.VsReason}'
+    yield Result(state=State.OK, notice=longoutput)
+
+    if section.VsHealth != 'OK':
+        yield Result(state=State.WARN, notice=f'Health: {section.VsHealth}, Reason: {section.VsReason}')
+
+    yield_text = f'Primary/Active chassis: {section.VsPrimaryChassis}/{section.VsActiveChassis}'
+    if inv_asgVslsVsActiveChassis != section.VsActiveChassis:
+        yield Result(state=State.WARN, notice=yield_text)
+    else:
+        yield Result(state=State.OK, notice=yield_text)
+
+    for chassis in SystemPrimaryChassis:
+        VsChassisFwksUp, VsChassisFwksTotal = section.ChassisState[int(chassis) - 1]
+        yield_text = f'Chassis {chassis}: {VsChassisFwksUp}/{VsChassisFwksTotal} SGMs UP'
+        if VsChassisFwksUp != VsChassisFwksTotal:
+            yield Result(state=State.CRIT, notice=yield_text)
+        else:
+            yield Result(state=State.OK, summary=yield_text)
+
+
+register.snmp_section(
+    name='checkpoint_asg_vsls',
+    parse_function=parse_checkpoint_asg_vsls,
+    fetch=[
+        SNMPTree(
+            base='.1.3.6.1.4.1.2620.1.48.30.20',  # CHECKPOINT-MIB::asgVslsInfo
+            oids=[
+                '1',  # asgVslsSgmRatio
+                '2',  # asgVslsSystemPrimaryChassis
+            ]
+        ),
+        SNMPTree(
+            base='.1.3.6.1.4.1.2620.1.48.30.20.10.1',  # CHECKPOINT-MIB::asgVslsStateEntry
+            oids=[
+                '1',  # asgVslsVsid
+                '2',  # asgVslsVsName
+                '3',  # asgVslsVsPrimaryChassis
+                '4',  # asgVslsVsActiveChassis
+                '5',  # asgVslsVsHealth
+                '6',  # asgVslsVsReason
+                '9',  # asgVslsVsChassis1FwksUp
+                '10',  # asgVslsVsChassis1FwksTotal
+                '23',  # asgVslsVsChassis2FwksUp
+                '24',  # asgVslsVsChassis2FwksTotal
+                '33',  # asgVslsVsChassis3FwksUp
+                '34',  # asgVslsVsChassis3FwksTotal
+            ]
+        ),
+    ],
+    detect=any_of(
+        startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2620'),
+        all_of(
+            equals('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.8072.3.2.10'),
+            equals('.1.3.6.1.4.1.2620.1.6.1.0', 'SVN Foundation'),
+        )
+    )
+)
+
+register.check_plugin(
+    name='checkpoint_asg_vsls',
+    service_name='ASG VSLS',
+    discovery_function=discovery_checkpoint_asg_vsls,
+    check_function=check_checkpoint_asg_vsls,
+    check_default_parameters={},
+    check_ruleset_name='checkpoint_asg_vsls',
+)
diff --git a/checkpoint_asg_vsls.mkp b/checkpoint_asg_vsls.mkp
index b3ef880568d8256383aa7cb46d180c45363ba00d..6c2bd0bc6b58a8046603c103a61fada1adfec2eb 100644
Binary files a/checkpoint_asg_vsls.mkp and b/checkpoint_asg_vsls.mkp differ
diff --git a/packages/checkpoint_asg_vsls b/packages/checkpoint_asg_vsls
index 06a26a4fef531762c34330adae574385e8cdab35..910b669ac782b86463e3bfe7cdd68a1e267c4760 100644
--- a/packages/checkpoint_asg_vsls
+++ b/packages/checkpoint_asg_vsls
@@ -1,11 +1,11 @@
-{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)',
- 'description': u'Monitor Check Point Maestro SMO VSLS Chassis status',
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'Monitor Check Point Maestro SMO VSLS Chassis status\n',
  'download_url': 'http://thl-cmk.hopto.org/',
- 'files': {'checks': ['checkpoint_asg_vsls']},
+ 'files': {'agent_based': ['checkpoint_asg_vsls.py']},
  'name': 'checkpoint_asg_vsls',
  'num_files': 1,
- 'title': u'Check Point Maestro SMO ASG VSLS Chassis',
- 'version': '20201107.v0.1',
- 'version.min_required': '1.4.0p38',
- 'version.packaged': '1.6.0p15',
+ 'title': 'Check Point Maestro SMO ASG VSLS Chassis',
+ 'version': '20210911.v0.2',
+ 'version.min_required': '2.0.0',
+ 'version.packaged': '2021.07.14',
  'version.usable_until': None}
\ No newline at end of file