diff --git a/agent_based/cisco_bgp_peer.py b/agent_based/cisco_bgp_peer.py
index 9bd148de3eece31bc11b19ffab096e22b59d8ec7..ec9544093b808a78e377727ec2bbc36a9542d906 100644
--- a/agent_based/cisco_bgp_peer.py
+++ b/agent_based/cisco_bgp_peer.py
@@ -47,8 +47,9 @@
 # 2021-11-13: fix for mixed peers (with and without prefixes on one host)
 # 2021-11-14: merged check function with bgp_peer
 #             merged parse function with bgp_peer
+#             added basic support for VRFs (cbgpPeer3Entry)
 
-from typing import List, Dict
+from typing import List, Dict, Optional
 
 from cmk.base.plugins.agent_based.agent_based_api.v1 import (
     register,
@@ -57,9 +58,11 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import (
     contains,
     all_of,
     OIDEnd,
+    OIDBytes,
 )
 from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
     StringTable,
+    StringByteTable,
 )
 
 from cmk.base.plugins.agent_based.utils.bgp_peer import (
@@ -178,6 +181,80 @@ register.snmp_section(
     ),
 )
 
+###########################################################################
+#
+#  cisco_bgp_peer (CISCO-BGP4-MIB:cbgpPeer3Entry)
+#
+###########################################################################
+
+
+# ToDo: add support for non ipv6, needs sample
+def parse_cisco_bgp_peer_3(string_table: StringByteTable) -> Optional[Dict[str, BgpPeer]]:
+    peer_table = {}
+    for entry in string_table:
+        if entry[0] == '1':  # IPv4 address
+            entry[1] = '.'.join(f'{m}' for m in entry[1])
+            if entry[2] != 'default':
+                entry[1] += f' vrf {entry[2]}'
+            entry.pop(2)  # remove vrf name
+            entry.pop(0)  # remove remote address type
+            bgp_peer = bgp_get_peer_entry(entry)
+            if bgp_peer:
+                peer_table.update(bgp_peer)
+    return peer_table
+
+
+register.snmp_section(
+    name='cisco_bgp_peer_3',
+    parse_function=parse_cisco_bgp_peer_3,
+    parsed_section_name='bgp_peer',
+    supersedes=['bgp_peer', 'cisco_bgp_peer'],
+    fetch= SNMPTree(
+            base='.1.3.6.1.4.1.9.9.187.1.2.9.1',  # CISCO-BGP4-MIB::cbgpPeer3Entry
+            oids=[
+                '2',  # cbgpPeer3Type
+                OIDBytes('3'),  # cbgpPeer3RemoteAddr
+                '4',  # cbgpPeer3VrfName
+                '5',  # cbgpPeer3State
+                '6',  # cbgpPeer3AdminStatus
+                '15',  # cbgpPeer3InUpdates
+                '16',  # cbgpPeer3OutUpdates
+                '17',  # cbgpPeer3InTotalMessages
+                '18',  # cbgpPeer3OutTotalMessages
+                '20',  # cbgpPeer3FsmEstablishedTransitions
+                '21',  # cbgpPeer3FsmEstablishedTime
+                '29',  # cbgpPeer3InUpdateElapsedTime
+            ]
+        ),
+    detect=all_of(
+        contains('.1.3.6.1.2.1.1.1.0', 'Cisco'),
+        exists('.1.3.6.1.4.1.9.9.187.1.2.9.1.3.*')
+    ),
+)
+
+# '1',  # cbgpPeer3VrfId
+# '3',  # cbgpPeer3RemoteAddr
+# '4',  # cbgpPeer3VrfName
+# '5',  # cbgpPeer3State
+# '6',  # cbgpPeer3AdminStatus
+# '7',  # cbgpPeer3NegotiatedVersion
+# '8',  # cbgpPeer3LocalAddr
+# '9',  # cbgpPeer3LocalPort
+# '10',  # cbgpPeer3LocalAs
+# '11',  # cbgpPeer3LocalIdentifier
+# '12',  # cbgpPeer3RemotePort
+# '13',  # cbgpPeer3RemoteAs
+# '14',  # cbgpPeer3RemoteIdentifier
+# '19',  # cbgpPeer3LastError
+# '22',  # cbgpPeer3ConnectRetryInterval
+# '23',  # cbgpPeer3HoldTime
+# '24',  # cbgpPeer3KeepAlive
+# '25',  # cbgpPeer3HoldTimeConfigured
+# '26',  # cbgpPeer3KeepAliveConfigured
+# '27',  # cbgpPeer3MinASOriginationInterval
+# '28',  # cbgpPeer3MinRouteAdvertisementInterval
+# '30',  # cbgpPeer3LastErrorTxt
+# '31',  # cbgpPeer3PrevState
 
 ###########################################################################
 #
diff --git a/cisco_bgp_peer.mkp b/cisco_bgp_peer.mkp
index dc782b296198ca17d24f9300c1934aa7d14b90a3..0f061c46252e7782ccaa6f84ea5bddb7657b1b3c 100644
Binary files a/cisco_bgp_peer.mkp and b/cisco_bgp_peer.mkp differ