diff --git a/agent_based/huawei_bgp_peer.py b/agent_based/huawei_bgp_peer.py
new file mode 100644
index 0000000000000000000000000000000000000000..7c5fff3ff2dd5e02498d653f2643e5f93c3fd2d3
--- /dev/null
+++ b/agent_based/huawei_bgp_peer.py
@@ -0,0 +1,213 @@
+#!/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-06-22
+#
+# Huawei BGP Peer
+#
+# Monitor status of Huawei BGP Peers (IPv4 and IPv6)
+#
+# 2020-07-20: added BGP prefix counter
+#
+# snmpwalk sample
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.1.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Gauge32: 4
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.2.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Gauge32: 16374
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.4.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = STRING: "2020:9F8:19:1::14F6:7"
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.5.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = INTEGER: 6
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.6.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Gauge32: 1
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.7.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Gauge32: 3456508
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.9.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Hex-STRING: 00 00
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.10.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Gauge32: 0
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.11.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = INTEGER: 2
+#
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.1.0.1.1.1.4.79.200.120.2 = Gauge32: 4
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.2.0.1.1.1.4.79.200.120.2 = Gauge32: 20676
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.4.0.1.1.1.4.79.200.120.2 = STRING: "79.200.120.2"
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.5.0.1.1.1.4.79.200.120.2 = INTEGER: 6
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.6.0.1.1.1.4.79.200.120.2 = Gauge32: 16
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.7.0.1.1.1.4.79.200.120.2 = Gauge32: 2293069
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.9.0.1.1.1.4.79.200.120.2 = Hex-STRING: 06 05
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.10.0.1.1.1.4.79.200.120.2 = Gauge32: 0
+# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.11.0.1.1.1.4.79.200.120.2 = INTEGER: 2
+#
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerNegotiatedVersion.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = Gauge32: 4
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerRemoteAs.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = Gauge32: 16374
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerRemoteAddr.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = STRING: "2020:9F8:19:1::14F6:7"
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerState.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = INTEGER: established(6)
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerFsmEstablishedCounter.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = Gauge32: 1
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerFsmEstablishedTime.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = Gauge32: 3456883
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerLastError.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = Hex-STRING: 00 00
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerUnAvaiReason.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = Gauge32: 0
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerEntry.11.0.ipv6.unicast.ipv6."20:20:09:f8:00:19:00:01:00:00:00:00:14:f6:00:07" = INTEGER: 2
+#
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerNegotiatedVersion.0.ipv4.unicast.ipv4."79.200.120.2" = Gauge32: 4
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerRemoteAs.0.ipv4.unicast.ipv4."79.200.120.2" = Gauge32: 20676
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerRemoteAddr.0.ipv4.unicast.ipv4."79.200.120.2" = STRING: "79.200.120.2"
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerState.0.ipv4.unicast.ipv4."79.200.120.2" = INTEGER: established(6)
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerFsmEstablishedCounter.0.ipv4.unicast.ipv4."79.200.120.2" = Gauge32: 16
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerFsmEstablishedTime.0.ipv4.unicast.ipv4."79.200.120.2" = Gauge32: 2293069
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerLastError.0.ipv4.unicast.ipv4."79.200.120.2" = Hex-STRING: 06 05 
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerUnAvaiReason.0.ipv4.unicast.ipv4."79.200.120.2" = Gauge32: 0
+# HUAWEI-BGP-VPN-MIB::hwBgpPeerEntry.11.0.ipv4.unicast.ipv4."79.200.120.2" = INTEGER: 2
+
+
+from typing import List, Dict, Optional
+
+from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+    register,
+    SNMPTree,
+    OIDEnd,
+    startswith,
+)
+from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
+    StringTable,
+)
+
+from cmk.base.plugins.agent_based.utils.bgp_peer import (
+    bgp_get_peer,
+    BgpPeer,
+    bgp_get_peer_entry,
+)
+
+
+def _huawei_get_adress_family(OID_END):
+    # HWBgpAfi ::= TEXTUAL-CONVENTION
+    #    STATUS current
+    #    DESCRIPTION
+    #        "Address Family Identifier(AFI) for BGP peer."
+    HWBgpAfi = {
+        1: 'IPv4',
+        2: 'IPv6',
+        25: 'VPLS',
+        196: 'L2VPN',
+    }
+
+    # HWBgpSafi ::= TEXTUAL-CONVENTION
+    #    STATUS current
+    #    DESCRIPTION
+    #        "Subsequent Address Family Identifier(SAFI) for BGP peer."
+    HWBgpSafi = {
+        1: 'Unicast',
+        2: 'Multicast',
+        4: 'MPL',
+        5: 'mcast-vpn',
+        65: 'VPL',
+        66: 'MDT',
+        128: 'VPN',
+        132: 'route-target',
+    }
+
+    OID_END = OID_END.split('.')
+
+    adress_family = HWBgpAfi.get(int(OID_END[1]), OID_END[1])
+    sub_family = HWBgpSafi.get(int(OID_END[2]), OID_END[2])
+
+    return '%s %s' % (adress_family, sub_family)
+
+
+def _huawei_bgp_PeerUnAvaiReason(st):
+    reason = {
+        '1': 'Configuration lead peer down',
+        '2': 'Receive notification',
+        '3': 'Receive error packet',
+        '4': 'Hold timer expire',
+        '5': 'Remote peer not reachable',
+        '6': 'Direct connect-interface down',
+        '7': 'Route limit',
+    }
+    return reason.get(st, st)
+
+
+def parse_huawei_bgp_peer(string_table: List[StringTable]) -> Dict[str, BgpPeer]:
+    hwbgpPeer2Entry, hwBgpPeerRouteEntry = string_table
+
+    peer_table = {}
+    for entry in hwbgpPeer2Entry:
+        oid_end, hwBgpPeerRemoteAddr, hwBgpPeerState, hwBgpPeerFsmEstablishedCounter, hwBgpPeerFsmEstablishedTime, \
+        hwBgpPeerUnAvaiReason = entry
+
+        bgp_peer = bgp_get_peer_entry([
+            hwBgpPeerRemoteAddr,
+            hwBgpPeerState,
+            '2',  # admin_state not admin_down
+            None,  # in_updates
+            None,  # out_updates
+            None,  # in_messages
+            None,  # out_messages
+            hwBgpPeerFsmEstablishedCounter,
+            hwBgpPeerFsmEstablishedTime,
+            None,  # in_update_elapsed_time
+            ]
+        )
+        if bgp_peer:
+            adressfamily = _huawei_get_adress_family(oid_end)
+            remote_address = list(bgp_peer.keys())[0]
+            index = f'{remote_address} {adressfamily}'
+            bgp_peer[remote_address].peer_unavail_reason = int(hwBgpPeerUnAvaiReason)
+            bgp_peer[remote_address].peer_unavail_reason_str = _huawei_bgp_PeerUnAvaiReason(int(hwBgpPeerUnAvaiReason))
+            bgp_peer = {index: bgp_peer[remote_address]}
+            peer_table.update(bgp_peer)
+
+    #     peer = {
+    #         'hwpeerunavireason': _huawei_bgp_PeerUnAvaiReason(hwBgpPeerUnAvaiReason),
+    #     }
+    #
+    # add BGP route counter
+    for entry in hwBgpPeerRouteEntry:
+        oid_end, hwBgpPeerPrefixRcvCounter, hwBgpPeerPrefixActiveCounter, hwBgpPeerPrefixAdvCounter = entry
+        counter = []
+        for key, value in [
+            ('prefixrcvcounter', hwBgpPeerPrefixRcvCounter),
+            ('prefixactivecounter', hwBgpPeerPrefixActiveCounter),
+            ('prefixadvcounter', hwBgpPeerPrefixAdvCounter),
+        ]:
+            try:
+                counter.append((key, int(value)))
+            except TypeError:
+                pass
+
+        # adjust oid_end to match cisco oid_end
+        service = '%s %s' % (bgp_get_peer(f'{oid_end[6:]}.1.1'), _huawei_get_adress_family(oid_end))
+        if service in peer_table.keys():
+            peer_table[service].metric_count += counter
+
+    return peer_table
+
+
+register.snmp_section(
+    name='huawei_bgp_peer',
+    parse_function=parse_huawei_bgp_peer,
+    parsed_section_name='bgp_peer',
+    supersedes=['bgp_peer'],
+    fetch=[
+        SNMPTree(
+            base='.1.3.6.1.4.1.2011.5.25.177.1.1.2.1',  # HUAWEI-BGP-VPN-MIB::hwBgpPeerEntry
+            oids=[
+                OIDEnd(),  # 0.ipv4/ipv6.adressFamily.ipv4/ipv6.RemotePeerIP
+                # '1',  # hwBgpPeerNegotiatedVersion
+                # '2',  # hwBgpPeerRemoteAs
+                '4',  # hwBgpPeerRemoteAddr
+                '5',  # hwBgpPeerState
+                '6',  # hwBgpPeerFsmEstablishedCounter
+                '7',  # hwBgpPeerFsmEstablishedTime
+                # '9',  # hwBgpPeerLastError
+                '10',  # hwBgpPeerUnAvaiReason
+                # '11',  # hwBgpPeerEntry
+            ]
+        ),
+        SNMPTree(
+            base='.1.3.6.1.4.1.2011.5.25.177.1.1.3.1',  # HUAWEI-BGP-VPN-MIB::hwBgpPeerRouteEntry
+            oids=[
+                OIDEnd(),  # 0.ipv4/ipv6.adressFamily.ipv4/ipv6.RemotePeerIP
+                '1',  # hwBgpPeerPrefixRcvCounter
+                '2',  # hwBgpPeerPrefixActiveCounter
+                '3',  # hwBgpPeerPrefixAdvCounter
+            ]
+        ),
+    ],
+    detect=startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2011')
+)
diff --git a/huawei_bgp_peers.mkp b/huawei_bgp_peers.mkp
index e60fb90c1dc5fbd675cba47e9e688690e18b647f..8f257de3a7a9111c1dca455af648df420c523466 100644
Binary files a/huawei_bgp_peers.mkp and b/huawei_bgp_peers.mkp differ
diff --git a/packages/huawei_bgp_peers b/packages/huawei_bgp_peers
index 4d2045d1d297c0d4c105147b7da09d94793773ef..efb10c180669e2ecea9d113e9e609146a5e881db 100644
--- a/packages/huawei_bgp_peers
+++ b/packages/huawei_bgp_peers
@@ -1,12 +1,22 @@
-{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)',
- 'description': u'Monitors Huawei BGP Peers (HUAWEI-BGP-VPN-MIB). \n\n- creates one service for each peer/address family  (IPv4 and IPv6)',
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'Monitors Huawei BGP Peers (HUAWEI-BGP-VPN-MIB). \n'
+                '\n'
+                '- creates one service for each peer/address family  (IPv4 and '
+                'IPv6)\n'
+                '\n'
+                'needs the bgp_peer.mkp (minimum version 20220418.v1.7) '
+                'package to work \n'
+                '\n'
+                'see: '
+                'https://thl-cmk.hopto.org/gitlab/checkmk/vendor-independent/bgp_peer/-/raw/master/bgp_peer.mkp\n'
+                ' \n',
  'download_url': 'https://thl-cmk.hopto.org',
- 'files': {'checks': ['huawei_bgp_peers'],
-           'web': ['plugins/wato/huawei_bgp_peers.py',
-                   'plugins/metrics/huawei_bgp_peers.py']},
+ 'files': {'agent_based': ['huawei_bgp_peer.py'],
+           'web': ['plugins/metrics/huawei_bgp_peer.py']},
  'name': 'huawei_bgp_peers',
- 'num_files': 3,
- 'title': u'Huawei BGP Peer',
- 'version': '20200720.v.0.1a',
+ 'num_files': 2,
+ 'title': 'Huawei BGP Peer',
+ 'version': '20220418.v.0.2',
  'version.min_required': '1.2.8b8',
- 'version.packaged': '1.4.0p38'}
\ No newline at end of file
+ 'version.packaged': '2021.09.20',
+ 'version.usable_until': None}
\ No newline at end of file
diff --git a/web/plugins/metrics/huawei_bgp_peer.py b/web/plugins/metrics/huawei_bgp_peer.py
new file mode 100644
index 0000000000000000000000000000000000000000..851538e2b8c757e2af5d57ba82db1d160e3ac954
--- /dev/null
+++ b/web/plugins/metrics/huawei_bgp_peer.py
@@ -0,0 +1,48 @@
+#!/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-06-22
+#
+# Huawei BGP Peer
+#
+# 2020-07-20: added BGP prefix counter
+#
+#
+from cmk.gui.i18n import _
+
+from cmk.gui.plugins.metrics import (
+    metric_info,
+    graph_info,
+    perfometer_info
+)
+
+
+metric_info['bgp_peer_prefixrcvcounter'] = {
+    'title': _('Prefixes received'),
+    'unit': 'count',
+    'color': '11/a',
+}
+metric_info['bgp_peer_prefixactivecounter'] = {
+    'title': _('Prefixes active'),
+    'unit': 'count',
+    'color': '33/a',
+}
+metric_info['bgp_peer_prefixadvcounter'] = {
+    'title': _('Prefixes advertised'),
+    'unit': 'count',
+    'color': '43/a',
+}
+
+
+graph_info['huawei_bgp_peer_counter']= {
+    'title': _('BGP prefix counter'),
+    'metrics': [
+        ('bgp_peer_prefixrcvcounter', 'line'),
+        ('bgp_peer_prefixactivecounter', 'line'),
+        ('bgp_peer_prefixadvcounter', 'line'),
+    ]
+}