diff --git a/agent_based/checkpoint_vsx_system.py b/agent_based/checkpoint_vsx_system.py
index 9c7114fb669e80b97d72c54603053ee6b1188a87..d9069908a0f13ef9cf511e07c885bb988153c7b3 100644
--- a/agent_based/checkpoint_vsx_system.py
+++ b/agent_based/checkpoint_vsx_system.py
@@ -22,6 +22,7 @@
 #             the active connections (suggested by raulcurro[at]gmail[dot]com)
 #             moved Main IP to details, if it is not an IPv4 address
 # 2022-10-23: fixed warning on upgrade "non-empty params vanished" for policyname and ha_state
+# 2023-05-29: moved gui files to ~/local/lib/check_mk/gui/plugins/...
 #
 # snmpwalk sample
 #
diff --git a/checkman/checkpoint_vsx_system b/checkman/checkpoint_vsx_system
index a94a9218cc2b911170951c36ab3c2917dcbc2e67..7cf5bf2c41c8f5444e29bf36e30a7640b7ee790f 100644
--- a/checkman/checkpoint_vsx_system
+++ b/checkman/checkpoint_vsx_system
@@ -6,11 +6,11 @@ license: GPL
 distribution: check_mk
 description:
  This plugin monitors the state of Check Point VSX gateways.
- With default settings the VSX system gets {critical} if the H/A state is other than activ/standby, 
- the SIC trust is not established or the policy type is not active. The monitoring state becomes 
- {warning} if the policy name or the H/A state is differnet from discovery time. All this states are 
+ With default settings the VSX system gets {critical} if the H/A state is other than activ/standby,
+ the SIC trust is not established or the policy type is not active. The monitoring state becomes
+ {warning} if the policy name or the H/A state is differnet from discovery time. All this states are
  configurable via WATO.
- 
+
 item:
  The system name.
 
@@ -41,4 +41,3 @@ Here you can define all the monitoring states.
          'state_policy_changed': 1,  # policy name changed
          'state_ha_changed': 1,  # H/A state changed
         }
-
diff --git a/checkpoint_vsx_system-0.4.0-20230529.mkp b/checkpoint_vsx_system-0.4.0-20230529.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..016ade099771945f98c99a34b47b1cba44f23d7b
Binary files /dev/null and b/checkpoint_vsx_system-0.4.0-20230529.mkp differ
diff --git a/checkpoint_vsx_system.mkp b/checkpoint_vsx_system.mkp
index f335a03ae8961d13940c10c580473ea43cfaba67..016ade099771945f98c99a34b47b1cba44f23d7b 100644
Binary files a/checkpoint_vsx_system.mkp and b/checkpoint_vsx_system.mkp differ
diff --git a/gui/metrics/checkpoint_vsx_system.py b/gui/metrics/checkpoint_vsx_system.py
new file mode 100644
index 0000000000000000000000000000000000000000..55692d0d9914e8c028ecc47f1b0ed33f71ae49ad
--- /dev/null
+++ b/gui/metrics/checkpoint_vsx_system.py
@@ -0,0 +1,138 @@
+#!/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  : 2018-03-13
+#
+# Check Point VSX status metrics plugin
+# checkpoint_vsx
+#
+from cmk.gui.i18n import _
+
+from cmk.gui.plugins.metrics.utils import (
+    metric_info,
+    graph_info,
+    perfometer_info,
+    check_metrics,
+)
+
+metric_info['checkpoint_vsx_connections'] = {
+    'title': _('Connections active'),
+    'unit': 'count',
+    'color': '26/a',
+}
+metric_info['checkpoint_vsx_connections_peak'] = {
+    'title': _('Connections peak'),
+    'unit': 'count',
+    'color': '21/a',
+}
+metric_info['checkpoint_vsx_connections_limit'] = {
+    'title': _('Connections limit'),
+    'unit': 'count',
+    'color': '31/a',
+}
+
+metric_info['checkpoint_vsx_packets_processed'] = {
+    'title': _('Packets processed'),
+    'unit': '1/s',
+    'color': '12/a',
+}
+metric_info['checkpoint_vsx_packets_dropped'] = {
+    'title': _('Packets dropped'),
+    'unit': '1/s',
+    'color': '22/a',
+}
+metric_info['checkpoint_vsx_packets_accepted'] = {
+    'title': _('Packets accepted'),
+    'unit': '1/s',
+    'color': '32/a',
+}
+metric_info['checkpoint_vsx_packets_rejected'] = {
+    'title': _('Packets rejected'),
+    'unit': '1/s',
+    'color': '42/a',
+}
+
+metric_info['checkpoint_vsx_bytes_accepted'] = {
+    'title': _('Bytes accepted'),
+    'unit': 'bytes/s',
+    'color': '13/a',
+}
+metric_info['checkpoint_vsx_bytes_dropped'] = {
+    'title': _('Bytes dropped'),
+    'unit': 'bytes/s',
+    'color': '23/a',
+}
+metric_info['checkpoint_vsx_bytes_rejected'] = {
+    'title': _('Bytes rejected'),
+    'unit': 'bytes/s',
+    'color': '33/a',
+}
+
+metric_info['checkpoint_vsx_loggs_send'] = {
+    'title': _('Loggs send'),
+    'unit': '1/s',
+    'color': '14/a',
+}
+
+check_metrics['check_mk-checkpoint_vsx_system'] = {
+    'checkpoint_vsx_connections_peak':  {'auto_graph': False},
+    'checkpoint_vsx_connections_limit':  {'auto_graph': False},
+}
+
+graph_info['checkpoint_vsx_connections'] = {
+    'title': _('Check Point VSX: Connections'),
+    'metrics': [
+        ('checkpoint_vsx_connections', 'area'),
+    ],
+    'scalars': [
+        ('checkpoint_vsx_connections:crit', _('crit')),
+        ('checkpoint_vsx_connections:warn', _('warn')),
+        ('checkpoint_vsx_connections_limit', _('limit')),
+        ('checkpoint_vsx_connections_peak', _('peak')),
+    ],
+}
+
+graph_info['checkpoint_vsx_packets'] = {
+    'title': _('Check Point VSX: Packets'),
+    'metrics': [
+        ('checkpoint_vsx_packets_rejected', 'stack'),
+        ('checkpoint_vsx_packets_dropped', 'stack'),
+        ('checkpoint_vsx_packets_accepted', 'stack'),
+        ('checkpoint_vsx_packets_processed', 'line'),
+    ]
+}
+
+graph_info['checkpoint_vsx_bytes'] = {
+    'title': _('Check Point VSX: Bytes'),
+    'metrics': [
+        ('checkpoint_vsx_bytes_rejected', 'line'),
+        ('checkpoint_vsx_bytes_dropped', 'line'),
+        ('checkpoint_vsx_bytes_accepted', 'line'),
+    ]
+}
+
+graph_info['checkpoint_vsx_loggs_send'] = {
+    'title': _('Check Point VSX: Logs'),
+    'metrics': [
+        ('checkpoint_vsx_loggs_send', 'area'),
+    ]
+}
+
+perfometer_info.append(('stacked', [
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_vsx_connections',
+        'half_value': 50000.0,
+        'exponent': 2,
+    },
+    {
+        'type': 'logarithmic',
+        'metric': 'checkpoint_vsx_packets_processed',
+        'half_value': 50000.0,
+        'exponent': 2,
+    },
+]))
diff --git a/gui/wato/checkpoint_vsx_system.py b/gui/wato/checkpoint_vsx_system.py
new file mode 100644
index 0000000000000000000000000000000000000000..2f1e6d39a26f4bfac71dd374ef244809c87adabb
--- /dev/null
+++ b/gui/wato/checkpoint_vsx_system.py
@@ -0,0 +1,131 @@
+#!/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  : 2021-09-07
+#
+from cmk.gui.i18n import _
+from cmk.gui.valuespec import (
+    Dictionary,
+    TextAscii,
+    Tuple,
+    Integer,
+    MonitoringState,
+    ListChoice,
+    TextUnicode,
+)
+
+from cmk.gui.plugins.wato.utils import (
+    CheckParameterRulespecWithItem,
+    rulespec_registry,
+    RulespecGroupCheckParametersNetworking,
+    RulespecGroupCheckParametersDiscovery,
+    HostRulespec,
+)
+
+
+def _parameter_valuespec_checkpoint_vsx_system():
+    return Dictionary(
+        elements=[
+            ('levels_upper_absolute',
+             Tuple(
+                 title=_('Maximum number of firewall connections'),
+                 help=_('This rule sets upper limits to the current number of connections through '
+                        'a Checkpoint firewall.'),
+                 elements=[
+                     Integer(title=_('Warning at'), minvalue=0, unit=_('connections')),
+                     Integer(title=_('Critical at'), minvalue=0, unit=_('connections')),
+                 ])),
+            ('levels_lower_absolute',
+             Tuple(
+                 title=_('Minimum number of firewall connections'),
+                 help=_('This rule sets lower limits to the current number of connections through '
+                        'a Checkpoint firewall.'),
+                 elements=[
+                     Integer(title=_('Warning blow'), minvalue=0, unit=_('connections')),
+                     Integer(title=_('Critical below'), minvalue=0, unit=_('connections')),
+                 ])),
+            ('state_sic_not_established',
+             MonitoringState(
+                 title=_('State if SIC is not established'),
+                 help=_('Monitoring state if SIC is not established'),
+                 default_value=2,
+             )),
+            ('state_ha_not_act_stb',
+             MonitoringState(
+                 title=_('State if H/A state not active/standby'),
+                 help=_('Monitoring state if H/A state not active or standby'),
+                 default_value=2,
+             )),
+            ('state_policy_not_installed',
+             MonitoringState(
+                 title=_('State if no policy is installed'),
+                 help=_('Monitoring state if no policy is installed'),
+                 default_value=2,
+             )),
+            ('state_policy_changed',
+             MonitoringState(
+                 title=_('State on policy name change'),
+                 help=_('Monitoring status on policy name change'),
+                 default_value=1,
+             )),
+            ('state_ha_changed',
+             MonitoringState(
+                 title=_('State on H/A state change'),
+                 help=_('Monitoring status on H/A state change'),
+                 default_value=1,
+             )),
+            ('policyname',  # added by plugin discovery function
+             TextUnicode()),
+            ('ha_state',  # added by plugin discovery function
+             TextUnicode()),
+        ],
+        hidden_keys=['policyname', 'ha_state'],
+    )
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithItem(
+        check_group_name='checkpoint_vsx_system',
+        group=RulespecGroupCheckParametersNetworking,
+        match_type='dict',
+        parameter_valuespec=_parameter_valuespec_checkpoint_vsx_system,
+        title=lambda: _('Check Point VSX system'),
+        item_spec=lambda: TextAscii(title=_('VSX System name'), ),
+    ))
+
+
+def _valuespec_discovery_checkpoint_vsx_system():
+    _vs_types = [
+        ('virtual system', 'Virtual System'),
+        ('vsx gateway', 'VSX Gateway'),
+        ('virtual switch', 'Virtual Switch'),
+        ('virtual router', 'Virtual Router'),
+    ]
+    return Dictionary(
+            title=_('Check Point VSX system'),
+            elements=[
+                ('vs_type',
+                 ListChoice(
+                     title=_('VS types to discover'),
+                     help=_('Virtual system types to discover. Note: if you select "VSX Gateway", '
+                            'this will also discover ClusterXL systems.'),
+                     choices=_vs_types,
+                     default_value=[
+                         'virtual system',
+                     ],
+                 )),
+            ],
+        )
+
+
+rulespec_registry.register(
+    HostRulespec(
+        group=RulespecGroupCheckParametersDiscovery,
+        match_type='dict',
+        name='discovery_checkpoint_vsx_system',
+        valuespec=_valuespec_discovery_checkpoint_vsx_system,
+    ))
diff --git a/packages/checkpoint_vsx_system b/packages/checkpoint_vsx_system
index 917e539eb4d5b8ca6e366a0fc6139962ad46bd1d..ee4de64a5fa57ed921fe5d0ed11345996671e18d 100644
--- a/packages/checkpoint_vsx_system
+++ b/packages/checkpoint_vsx_system
@@ -13,12 +13,12 @@
                 'checkpoint_vsx_status\n',
  'download_url': 'https://thl-cmk.hopto.org/gitlab/checkmk/check-point/gateway/checkpoint_vsx_system',
  'files': {'agent_based': ['checkpoint_vsx_system.py'],
-           'web': ['plugins/metrics/checkpoint_vsx_system.py',
-                   'plugins/wato/checkpoint_vsx_system.py']},
+           'checkman': ['checkpoint_vsx_system'],
+           'gui': ['metrics/checkpoint_vsx_system.py',
+                   'wato/checkpoint_vsx_system.py']},
  'name': 'checkpoint_vsx_system',
- 'num_files': 3,
  'title': 'Check Point VSX system status and counter',
- 'version': '20221023.v.0.3c',
- 'version.min_required': '2.0.0',
- 'version.packaged': '2021.09.20',
+ 'version': '0.4.0-20230529',
+ 'version.min_required': '2.1.0b1',
+ 'version.packaged': '2.1.0p21',
  'version.usable_until': None}
\ No newline at end of file