diff --git a/README.md b/README.md
index 48a86791f8377a66b8dd4f7f4a24b3ce6b557473..6d9a5d3d3681a63cd3be05758c82ecf30ba89d96 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[PACKAGE]: ../../raw/master/mkp/cisco_bgp_peer-1.0.2-20241220.mkp "cisco_bgp_peer-1.0.2-20241220.mkp"
+[PACKAGE]: ../../raw/master/mkp/cisco_bgp_peer-1.0.3-20250324.mkp "cisco_bgp_peer-1.0.3-20250324.mkp"
 # Cisco BGP Peer
 
 Monitors status of Cisco BGP peers (IPv4 and IPv6, with basic support for VRFs on NXOS)
diff --git a/mkp/cisco_bgp_peer-1.0.3-20250324.mkp b/mkp/cisco_bgp_peer-1.0.3-20250324.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..700d5c0c5ef55c0a76b51af8f882ae7c6e85a9db
Binary files /dev/null and b/mkp/cisco_bgp_peer-1.0.3-20250324.mkp differ
diff --git a/source/agent_based/cisco_bgp_peer.py b/source/cmk_addons_plugins/bgp_peer/agent_based/cisco_bgp_peer.py
similarity index 91%
rename from source/agent_based/cisco_bgp_peer.py
rename to source/cmk_addons_plugins/bgp_peer/agent_based/cisco_bgp_peer.py
index a39204b1b212205ec1e7d40f81fe13f7fd60df2e..9e9d7353e6375a16edfdf757ef44431442e7d8a4 100644
--- a/source/agent_based/cisco_bgp_peer.py
+++ b/source/cmk_addons_plugins/bgp_peer/agent_based/cisco_bgp_peer.py
@@ -63,23 +63,25 @@ from dataclasses import dataclass
 from typing import List, Dict, Optional, Tuple
 import copy
 
-from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+from cmk.agent_based.v2 import (
     OIDBytes,
     OIDEnd,
+    SNMPSection,
     SNMPTree,
+    StringByteTable,
     all_of,
     contains,
     exists,
-    register,
 )
-from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import StringByteTable
-from cmk.base.plugins.agent_based.utils.bgp_peer import (
+
+from cmk_addons.plugins.bgp_peer.lib.bgp_peer import (
     BgpPeer,
     bgp_get_ip_address_from_oid,
     bgp_get_peer_entry,
     bgp_render_ip_address,
 )
 
+
 ###########################################################################
 #
 #  cisco_bgp_peer (CISCO-BGP4-MIB:cbgpPeer2Entry)
@@ -216,11 +218,11 @@ def parse_cisco_bgp_peer(string_table: List[StringByteTable]) -> Dict[str, BgpPe
     return peer_table
 
 
-register.snmp_section(
+snmp_section_cisco_bgp_peer = SNMPSection(
     name='cisco_bgp_peer',
     parse_function=parse_cisco_bgp_peer,
     parsed_section_name='bgp_peer',
-    supersedes=['bgp_peer'],
+    supersedes=['bgp_peer', 'cisco_bgp_peerv2'],
     fetch=[
         SNMPTree(
             base='.1.3.6.1.4.1.9.9.187.1.2.5.1',  # CISCO-BGP4-MIB::cbgpPeer2Entry
@@ -272,6 +274,7 @@ register.snmp_section(
     ),
 )
 
+
 ###########################################################################
 #
 #  cisco_bgp_peer (CISCO-BGP4-MIB:cbgpPeer3Entry)
@@ -280,9 +283,9 @@ register.snmp_section(
 
 
 # ToDo: add support for non IPv4, needs sample
-def parse_cisco_bgp_peer_3(string_table: StringByteTable) -> Optional[Dict[str, BgpPeer]]:
+def parse_cisco_bgp_peer_3(string_table: List[StringByteTable]) -> Dict[str, BgpPeer]:
     peer_table = {}
-    for entry in string_table:
+    for entry in string_table[0]:
         (
             remote_addr_type,
             remote_addr,
@@ -338,33 +341,33 @@ def parse_cisco_bgp_peer_3(string_table: StringByteTable) -> Optional[Dict[str,
     return peer_table
 
 
-register.snmp_section(
+snmp_section_cisco_bgp_peer_3 = SNMPSection(
     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
-                OIDBytes('8'),  # cbgpPeer3LocalAddr
-                '10',  # cbgpPeer3LocalAs
-                '11',  # cbgpPeer3LocalIdentifier
-                '13',  # cbgpPeer3RemoteAs
-                '14',  # cbgpPeer3RemoteIdentifier
-                '15',  # cbgpPeer3InUpdates
-                '16',  # cbgpPeer3OutUpdates
-                '17',  # cbgpPeer3InTotalMessages
-                '18',  # cbgpPeer3OutTotalMessages
-                '20',  # cbgpPeer3FsmEstablishedTransitions
-                '21',  # cbgpPeer3FsmEstablishedTime
-                '29',  # cbgpPeer3InUpdateElapsedTime
-            ]
-        ),
+    supersedes=['bgp_peer', 'cisco_bgp_peer', 'cisco_bgp_peerv2', 'cisco_bgp_peerv3'],
+    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
+            OIDBytes('8'),  # cbgpPeer3LocalAddr
+            '10',  # cbgpPeer3LocalAs
+            '11',  # cbgpPeer3LocalIdentifier
+            '13',  # cbgpPeer3RemoteAs
+            '14',  # cbgpPeer3RemoteIdentifier
+            '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.*')
diff --git a/source/agent_based/inv_cisco_bgp_peer.py b/source/cmk_addons_plugins/bgp_peer/agent_based/inv_cisco_bgp_peer.py
similarity index 93%
rename from source/agent_based/inv_cisco_bgp_peer.py
rename to source/cmk_addons_plugins/bgp_peer/agent_based/inv_cisco_bgp_peer.py
index c2db485afad5d09486b43b4c458483f65b8fb01d..982ea79da8398cb1b5f8af0f51c491d413de0c5e 100644
--- a/source/agent_based/inv_cisco_bgp_peer.py
+++ b/source/cmk_addons_plugins/bgp_peer/agent_based/inv_cisco_bgp_peer.py
@@ -11,22 +11,22 @@
 #
 # 2022-04-22: moved here from cisco_bgp_peer
 # 2022-04-30: code cleanup/streamlining
-#
+# 2025-03-24: moved to check API v2 for CMK 2.3/2.4
 
 from typing import List
-from cmk.base.plugins.agent_based.agent_based_api.v1 import (
+
+from cmk.agent_based.v2 import (
     OIDBytes,
-    OIDEnd,
+    SNMPSection,
     SNMPTree,
+    StringByteTable,
+    exists,
+    OIDEnd,
     all_of,
     contains,
-    exists,
-    register,
 )
-from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
-    StringByteTable
-)
-from cmk.base.plugins.agent_based.utils.bgp_peer import (
+
+from cmk_addons.plugins.bgp_peer.lib.bgp_peer import (
     InvBgpPeer,
     bgp_error_as_string,
     bgp_error_code_as_hex,
@@ -101,7 +101,7 @@ def parse_inv_cisco_bgp_peer(string_table: List[StringByteTable]):
     return bgp_peers
 
 
-register.snmp_section(
+snmp_section_inv_cisco_bgp_peer = SNMPSection(
     name='inv_cisco_bgp_peer',
     parse_function=parse_inv_cisco_bgp_peer,
     parsed_section_name='inv_bgp_peer',
diff --git a/source/cmk_addons_plugins/bgp_peer/checkman/cisco_bgp_peer b/source/cmk_addons_plugins/bgp_peer/checkman/cisco_bgp_peer
new file mode 100644
index 0000000000000000000000000000000000000000..b54de4350e34801e61bb60921cb406c18601bb17
--- /dev/null
+++ b/source/cmk_addons_plugins/bgp_peer/checkman/cisco_bgp_peer
@@ -0,0 +1,39 @@
+title: Cisco BGP Peers
+agents: snmp
+catalog: hw/network/cisco
+license: GPL
+distribution: https://thl-cmk.hopto.org
+description:
+ Monitors the status of BGP peers. It supports IPv4/IPv6 peers and more then one
+ address family per BGP peer.
+ 
+ critical: 
+ 
+  - if peer state is "idle" or adminstate is not "start"
+  
+  - if accepted prefixes equal or above prefix admin limit
+  
+ warning: 
+ 
+  - if peer state is not "established" or peer is not up long enough
+  
+  - if accepted prefixes equal or above warn threshold
+  
+ This check is tested with a variaity of Cisco ASR and ISR routers.
+ 
+ The "prefix admin limit" and "warn threshold" needs to be configured on the device.
+ For example: neighbor 172.17.10.10 maximum-prefix 10000 80. The threshold is in 
+ percentage of the prefix limit .
+ 
+item:
+ Is build from the Address family and IP address of the BGP peer. 
+ For example "172.17.10.10 IPv4 Unicast"
+
+perfdata:
+ Describe precisely the number and meaning of performance variables
+ the check sends. If it outputs no performance data, then leave out this
+ section.
+
+inventory:
+ Checks for "cisco" in sysDesc. If found the check creates one service for each
+ BGP peer and address family.
diff --git a/source/packages/cisco_bgp_peer b/source/packages/cisco_bgp_peer
index 16c0651c4acf24272e8f144bd8052cd17ed9e2b1..7f3969bb602b9fbea5c3449518cc3a9a02713e36 100644
--- a/source/packages/cisco_bgp_peer
+++ b/source/packages/cisco_bgp_peer
@@ -17,10 +17,12 @@
                 'plugin '
                 '(https://thl-cmk.hopto.org/gitlab/checkmk/vendor-independent/bgp_peer)\n',
  'download_url': 'https://thl-cmk.hopto.org/gitlab/checkmk/cisco/cisco_bgp_peer',
- 'files': {'agent_based': ['cisco_bgp_peer.py', 'inv_cisco_bgp_peer.py']},
+ 'files': {'cmk_addons_plugins': ['bgp_peer/agent_based/cisco_bgp_peer.py',
+                                  'bgp_peer/agent_based/inv_cisco_bgp_peer.py',
+                                  'bgp_peer/checkman/cisco_bgp_peer']},
  'name': 'cisco_bgp_peer',
  'title': 'Cisco BGP Peer',
- 'version': '1.0.2-20241220',
- 'version.min_required': '2.0.0b1',
+ 'version': '1.0.3-20250324',
+ 'version.min_required': '2.3.0b1',
  'version.packaged': 'cmk-mkp-tool 0.2.0',
- 'version.usable_until': '2.4.0b1'}
+ 'version.usable_until': '2.5.0b1'}