diff --git a/agent_based/huawei_bgp_peer.py b/agent_based/huawei_bgp_peer.py
index 7c5fff3ff2dd5e02498d653f2643e5f93c3fd2d3..7746ade3df0a246d4e0c5e753c958c4a8858df75 100644
--- a/agent_based/huawei_bgp_peer.py
+++ b/agent_based/huawei_bgp_peer.py
@@ -12,7 +12,9 @@
 # Monitor status of Huawei BGP Peers (IPv4 and IPv6)
 #
 # 2020-07-20: added BGP prefix counter
+# 2022-04-30: code cleanup/streamlining
 #
+
 # 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
@@ -55,7 +57,7 @@
 # HUAWEI-BGP-VPN-MIB::hwBgpPeerEntry.11.0.ipv4.unicast.ipv4."79.200.120.2" = INTEGER: 2
 
 
-from typing import List, Dict, Optional
+from typing import List, Dict
 
 from cmk.base.plugins.agent_based.agent_based_api.v1 import (
     register,
@@ -68,13 +70,13 @@ from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
 )
 
 from cmk.base.plugins.agent_based.utils.bgp_peer import (
-    bgp_get_peer,
+    bgp_get_ip_address_from_oid,
     BgpPeer,
     bgp_get_peer_entry,
 )
 
 
-def _huawei_get_adress_family(OID_END):
+def _huawei_get_adress_family(afi, safi):
     # HWBgpAfi ::= TEXTUAL-CONVENTION
     #    STATUS current
     #    DESCRIPTION
@@ -101,15 +103,13 @@ def _huawei_get_adress_family(OID_END):
         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])
+    address_family = HWBgpAfi.get(int(afi), afi)
+    sub_family = HWBgpSafi.get(int(safi), safi)
 
-    return '%s %s' % (adress_family, sub_family)
+    return f'{address_family} {sub_family}'
 
 
-def _huawei_bgp_PeerUnAvaiReason(st):
+def _huawei_bgp_peer_unavail_reason(st):
     reason = {
         '1': 'Configuration lead peer down',
         '2': 'Receive notification',
@@ -127,43 +127,39 @@ def parse_huawei_bgp_peer(string_table: List[StringTable]) -> Dict[str, BgpPeer]
 
     peer_table = {}
     for entry in hwbgpPeer2Entry:
-        oid_end, hwBgpPeerRemoteAddr, hwBgpPeerState, hwBgpPeerFsmEstablishedCounter, hwBgpPeerFsmEstablishedTime, \
-        hwBgpPeerUnAvaiReason = entry
+        oid_end, remote_address, state, fsm_established_counter, fsm_established_time, unavail_reason = entry
 
         bgp_peer = bgp_get_peer_entry([
-            hwBgpPeerRemoteAddr,
-            hwBgpPeerState,
+            remote_address,
+            state,
             '2',  # admin_state not admin_down
             None,  # in_updates
             None,  # out_updates
             None,  # in_messages
             None,  # out_messages
-            hwBgpPeerFsmEstablishedCounter,
-            hwBgpPeerFsmEstablishedTime,
+            fsm_established_counter,
+            fsm_established_time,
             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]}
+            afi, safi = oid_end.split('.')[1:3]
+            adress_family = _huawei_get_adress_family(afi, safi)
+            item = f'{remote_address} {adress_family}'
+            bgp_peer[remote_address].peer_unavail_reason = int(unavail_reason)
+            bgp_peer[remote_address].peer_unavail_reason_str = _huawei_bgp_peer_unavail_reason(int(unavail_reason))
+            bgp_peer = {item: 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
+        oid_end, prefix_rcv_counter, prefix_active_counter, prefix_adv_counter = entry
+        afi, safi = oid_end.split('.')[1:3]
         counter = []
         for key, value in [
-            ('prefixrcvcounter', hwBgpPeerPrefixRcvCounter),
-            ('prefixactivecounter', hwBgpPeerPrefixActiveCounter),
-            ('prefixadvcounter', hwBgpPeerPrefixAdvCounter),
+            ('prefixrcvcounter', prefix_rcv_counter),
+            ('prefixactivecounter', prefix_active_counter),
+            ('prefixadvcounter', prefix_adv_counter),
         ]:
             try:
                 counter.append((key, int(value)))
@@ -171,9 +167,9 @@ def parse_huawei_bgp_peer(string_table: List[StringTable]) -> Dict[str, BgpPeer]
                 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
+        item = f'{bgp_get_ip_address_from_oid(f"{oid_end[6:]}.1.1")} {_huawei_get_adress_family(afi, safi)}'
+        if item in peer_table.keys():
+            peer_table[item].metric_count += counter
 
     return peer_table
 
@@ -187,7 +183,7 @@ register.snmp_section(
         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
+                OIDEnd(),  # 0.afi.safi.adresstype.length.RemotePeerIP
                 # '1',  # hwBgpPeerNegotiatedVersion
                 # '2',  # hwBgpPeerRemoteAs
                 '4',  # hwBgpPeerRemoteAddr
@@ -202,12 +198,23 @@ register.snmp_section(
         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
+                OIDEnd(),  # 0.afi.safi.adresstype.length.RemotePeerIP
                 '1',  # hwBgpPeerPrefixRcvCounter
                 '2',  # hwBgpPeerPrefixActiveCounter
                 '3',  # hwBgpPeerPrefixAdvCounter
             ]
         ),
+        # ToDo: sample need to add counters :-(
+        # SNMPTree(
+        #     base='.1.3.6.1.4.1.2011.5.25.177.1.1.4.1',  # HUAWEI-BGP-VPN-MIB::hwBgpPeerMessageEntry
+        #     oids=[
+        #         OIDEnd(),  # 0.afi.safi.adresstype.length.RemotePeerIP(?)
+        #         '1',  # hwBgpPeerInTotalMsgCounter
+        #         '2',  # hwBgpPeerOutTotalMsgCounter
+        #         '4',  # hwBgpPeerInUpdateMsgCounter
+        #         '9',  # hwBgpPeerOutUpdateMsgCounter
+        #     ]
+        # ),
     ],
     detect=startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2011')
 )
diff --git a/huawei_bgp_peer.mkp b/huawei_bgp_peer.mkp
index 0daaee78511b9f9e8a49389f2c78a3bbb26fb746..f675408e006c0873df195f239d39afc3ee38a059 100644
Binary files a/huawei_bgp_peer.mkp and b/huawei_bgp_peer.mkp differ