diff --git a/checks/cisco_bgp_peer b/checks/cisco_bgp_peer
index 9fd01f2ec4beb8d68f740e2075fc801d2992fdbf..64a2a7ae2b7020d4cc2439aaeab9a649d4c44534 100644
--- a/checks/cisco_bgp_peer
+++ b/checks/cisco_bgp_peer
@@ -19,7 +19,7 @@
 # 02.11.2018: modified scanfunction (from "find 'cisco' =-1"  to "'cisco' in OID"
 # 02.18.2019: added fix for empty values ("" instead of "0") sugested by Laurent Barbier (lbarbier[at]arkane-studios[dot]com)
 # 24.02.2020: added workaround for missing cbgpPeer2AddrFamily (example L2VPN EVPN peers, Fix for jonale82[at]gmail[dot]com)
-#
+# 02.03.2020: changed handling of perfdata, add only data the are really there (not None, instead of setting them to 0)
 #
 
 #
@@ -263,7 +263,6 @@ def parse_cisco_bgp_peer(info):
 
         return names[int(byte1, 16)].get(int(byte2, 16))
 
-
     # bgp not active
     if info == [[], []]:
         return None
@@ -277,64 +276,34 @@ def parse_cisco_bgp_peer(info):
             oid_end, addrfamilyname, acceptedprefixes, deniedprefixes, prefixadminlimit, prefixthreshold, \
             prefixclearthreshold, advertisedprefixes, suppressedprefixes, withdrawnprefixes = entry
 
-            remoteaddr = cisco_bgp_get_peer(oid_end)
+            remoteaddr = cisco_bgp_get_peer(entry[0])
+            peer = {'remoteaddr': remoteaddr}
+
+            peer.update({'addrfamilyname': addrfamilyname})
 
-            # check if prefixadminlimit is set
             if prefixadminlimit.isdigit():
-                prefixadminlimit = int(prefixadminlimit)
-            else:
-                prefixadminlimit = 0
+                peer.update({'prefixadminlimit':int(prefixadminlimit)})
 
-            # check if prefixthreshold is set
             if prefixthreshold.isdigit():
-                prefixthreshold = int(prefixthreshold)
-            else:
-                prefixthreshold = 0
+                peer.update({'prefixthreshold':int(prefixthreshold)})
 
-            # check if prefixclearthreshold is set
             if prefixclearthreshold.isdigit():
-                prefixclearthreshold = int(prefixclearthreshold)
-            else:
-                prefixclearthreshold = 0
+                peer.update({'prefixclearthreshold':int(prefixclearthreshold)})
 
             if acceptedprefixes.isdigit():
-                acceptedprefixes = int(acceptedprefixes)
-            else:
-                acceptedprefixes = 0
+                peer.update({'acceptedprefixes':int(acceptedprefixes)})
 
             if advertisedprefixes.isdigit():
-                advertisedprefixes = int(advertisedprefixes)
-            else:
-                advertisedprefixes = 0
+                peer.update({'advertisedprefixes':int(advertisedprefixes)})
 
-            # fix sugested by Laurent Barbier (lbarbier[at]arkane-studios[dot]com)
-            # some Cisco devices report not "0" if the value is 0, instead the report "". for example Nexus devices behave like this.
             if deniedprefixes.isdigit():
-                deniedprefixes = int(deniedprefixes)
-            else:
-                deniedprefixes = 0
+                peer.update({'deniedprefixes':int(deniedprefixes)})
 
             if suppressedprefixes.isdigit():
-                suppressedprefixes = int(suppressedprefixes)
-            else:
-                suppressedprefixes = 0
+                peer.update({'suppressedprefixes':int(suppressedprefixes)})
 
             if withdrawnprefixes.isdigit():
-                withdrawnprefixes = int(withdrawnprefixes)
-            else:
-                withdrawnprefixes = 0
-
-
-            peer = {'remoteaddr': remoteaddr,
-                    'addrfamilyname': addrfamilyname,
-                    'acceptedprefixes': acceptedprefixes,
-                    'deniedprefixes': deniedprefixes,
-                    'prefixadminlimit': prefixadminlimit,
-                    'prefixthreshold': prefixthreshold,
-                    'prefixclearthreshold': prefixclearthreshold,
-                    'advertisedprefixes': advertisedprefixes,
-                    'suppressedprefixes': suppressedprefixes,
-                    'withdrawnprefixes': withdrawnprefixes, }
+                peer.update({'withdrawnprefixes':int(withdrawnprefixes)})
 
             peer_prefixes.update({'%s %s' % (remoteaddr, addrfamilyname): peer})
 
@@ -357,23 +326,35 @@ def parse_cisco_bgp_peer(info):
         inupdateelapsedtime, lasterrortxt, prevstate = entry
 
         peer = {'remoteaddr': cisco_bgp_get_peer(oid_end),
-                'state': int(state),
-                'adminstate': int(adminstatus),
                 'localaddr': bgp_render_ip_address(localaddr),
-                'localas': int(localas),
                 'localid': localidentifier,
-                'remoteas': int(remoteas),
                 'remoteid': remoteidentifier,
-                'inupdates': int(inupdates),
-                'outupdates': int(outupdates),
-                'intotalmessages': int(intotalmessages),
-                'outtotalmessages': int(outtotalmessages),
                 'lasterror': cisco_bgp_errors(lasterror),
-                'fsmestablishedtransitions': int(fsmestablishedtransitions),
-                'fsmestablishedtime': int(fsmestablishedtime),
                 'inupdateelapsedtime': inupdateelapsedtime,
                 'lasterrortxt': lasterrortxt,
-                'prevstate': int(prevstate),}
+                'prevstate': int(prevstate),
+                }
+
+        if state.isdigit():
+            peer.update({'state': int(state)})
+        if adminstatus.isdigit():
+            peer.update({'adminstate': int(adminstatus)})
+        if localas.isdigit():
+            peer.update({'localas': int(localas)})
+        if remoteas.isdigit():
+            peer.update({'remoteas': int(remoteas)})
+        if inupdates.isdigit():
+            peer.update({'inupdates':int(inupdates)})
+        if outupdates.isdigit():
+            peer.update({'outupdates': int(outupdates)})
+        if intotalmessages.isdigit():
+            peer.update({'intotalmessages': int(intotalmessages)})
+        if outtotalmessages.isdigit():
+            peer.update({'outtotalmessages': int(outtotalmessages)})
+        if fsmestablishedtransitions.isdigit():
+            peer.update({'fsmestablishedtransitions': int(fsmestablishedtransitions)})
+        if inupdates.isdigit():
+            peer.update({'fsmestablishedtime': int(fsmestablishedtime)})
 
         peer_table.update({'%s' % cisco_bgp_get_peer(oid_end): peer})
 
@@ -442,7 +423,7 @@ def check_cisco_bgp_peer(item, params, parsed):
             peer_not_found_state = not_found_state
 
     if prefixes:
-        state = 0
+        # state = 0
         perfdata = []
         infotext = ''
         longoutput = ''
@@ -496,11 +477,6 @@ def check_cisco_bgp_peer(item, params, parsed):
             else:
                 bgptype = ' (eBGP)'
 
-        acceptedprefixes = prefixes.get('acceptedprefixes', 0)
-        prefixadminlimit = prefixes.get('prefixadminlimit', 0)
-        prefixthreshold = prefixes.get('prefixthreshold', 0)
-        warnthreshold = prefixadminlimit / 100.0 * prefixthreshold  # use float (100.0) to get xx.xx in division
-
         longoutput_data = [
             ['IP-address (remote/local)', peer.get('remoteaddr'), peer.get('localaddr')],
             ['Router-ID (remote/local)', peer.get('remoteid'), peer.get('localid')],
@@ -511,11 +487,20 @@ def check_cisco_bgp_peer(item, params, parsed):
             ['Last error text', peer.get('lasterrortxt'), ''],
             ['Previous state', cisco_bgp_peerstate(peer.get('prevstate')), ''],
             ['Address family name', prefixes.get('addrfamilyname', 'unknown'), ''],
-            ['Prefix admin limit (prefixes)', '%.0d' % prefixadminlimit, ''],
-            ['Prefix threshold (prefixes/%)', '%.0d' % warnthreshold, '%.0d' % prefixthreshold],
             ['Prefix clear threshold (%)', '%.0d' % prefixes.get('prefixclearthreshold', 0), '']
+            ,
            ]
 
+        acceptedprefixes = prefixes.get('acceptedprefixes', None)
+        prefixadminlimit = prefixes.get('prefixadminlimit', None)
+        prefixthreshold = prefixes.get('prefixthreshold', None)
+
+        if prefixadminlimit is not None and prefixthreshold is not None:
+            warnthreshold = prefixadminlimit / 100.0 * prefixthreshold  # use float (100.0) to get xx.xx in division
+            longoutput_data.append(['Prefix admin limit (prefixes)', '%.0d' % prefixadminlimit, ''])
+            longoutput_data.append(['Prefix threshold (prefixes/%)', '%.0d' % warnthreshold, '%.0d' % prefixthreshold])
+        else:
+            warnthreshold = None
         if params.get('htmloutput', False):
             #
             # disable 'Escape HTML codes in plugin output' in wato --> global settings
@@ -535,49 +520,52 @@ def check_cisco_bgp_peer(item, params, parsed):
                 else:
                     longoutput += '\n{}: {}'.format(entry[0], entry[1])
 
-        if prefixadminlimit > 0:
+        if prefixadminlimit is not None and acceptedprefixes is not None and prefixadminlimit is not None and warnthreshold is not None:
             if acceptedprefixes >= prefixadminlimit:
-                state = max(2, state)
-                infotext = 'Prefix admin limit reached(!!) ' + infotext
+                yield 2, 'Prefix admin limit reached (%d/%d)' % (acceptedprefixes, prefixadminlimit)
             elif prefixthreshold > 0:
                 perfdata.append(('acceptedprefixes', acceptedprefixes, warnthreshold, prefixadminlimit))
                 if acceptedprefixes >= warnthreshold:
-                    state = max(1, state)
-                    infotext = 'Prefix warn threshold reached(!) ' + infotext
+                    yield 1, 'Prefix warn threshold reached (%d/%d)' % (acceptedprefixes, warnthreshold)
             else:
                 perfdata.append(('acceptedprefixes', acceptedprefixes, '', prefixadminlimit))
-        else:
+        elif acceptedprefixes is not None:
             perfdata.append(('acceptedprefixes', acceptedprefixes))
 
         now_time = time.time()
         rate_item = item.replace(' ', '_')
 
-        deniedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('deniedprefixes', rate_item), now_time, prefixes.get('deniedprefixes', 0), onwrap=SKIP)
-        advertisedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('advertisedprefixes', rate_item), now_time, prefixes.get('advertisedprefixes', 0), onwrap=SKIP)
-        withdrawnprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('withdrawnprefixes', rate_item), now_time, prefixes.get('withdrawnprefixes', 0), onwrap=SKIP)
-        suppressedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('suppressedprefixes', rate_item), now_time, prefixes.get('suppressedprefixes', 0), onwrap=SKIP)
-
-        inupdates = get_rate('cisco_bgp_peer.%s.%s' % ('inupdates', rate_item), now_time, peer.get('inupdates', 0), onwrap=SKIP)
-        outupdates = get_rate('cisco_bgp_peer.%s.%s' % ('outupdates', rate_item), now_time, peer.get('outupdates', 0), onwrap=SKIP)
-
-        intotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('intotalmessages', rate_item), now_time, peer.get('intotalmessages', 0), onwrap=SKIP)
-        outtotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('outtotalmessages', rate_item), now_time, peer.get('outtotalmessages', 0), onwrap=SKIP)
-
-        # prefixes
-        # 'unit', <value>, <warn-at>, <crit-at>, <min value>, <max value>
-        perfdata.append(('deniedprefixes', deniedprefixes))
-        perfdata.append(('advertisedprefixes', advertisedprefixes))
-        perfdata.append(('withdrawnprefixes', withdrawnprefixes))
-        perfdata.append(('suppressedprefixes', suppressedprefixes))
-
-        perfdata.append(('inupdates', inupdates))
-        perfdata.append(('outupdates', outupdates))
-        perfdata.append(('intotalmessages', intotalmessages))
-        perfdata.append(('outtotalmessages', outtotalmessages))
-
-        perfdata.append(('fsmestablishedtransitions', peer.get('fsmestablishedtransitions')))
-        perfdata.append(('fsmestablishedtime', peer.get('fsmestablishedtime')))
-        perfdata.append(('inupdateelapsedtime', peer.get('inupdateelapsedtime')))
+        if prefixes.get('deniedprefixes', None) is not None:
+            deniedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('deniedprefixes', rate_item), now_time, prefixes.get('deniedprefixes', 0), onwrap=SKIP)
+            perfdata.append(('deniedprefixes', deniedprefixes))
+        if prefixes.get('advertisedprefixes', None) is not None:
+            advertisedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('advertisedprefixes', rate_item), now_time, prefixes.get('advertisedprefixes', 0), onwrap=SKIP)
+            perfdata.append(('advertisedprefixes', advertisedprefixes))
+        if prefixes.get('withdrawnprefixes', None) is not None:
+            withdrawnprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('withdrawnprefixes', rate_item), now_time, prefixes.get('withdrawnprefixes', 0), onwrap=SKIP)
+            perfdata.append(('withdrawnprefixes', withdrawnprefixes))
+        if prefixes.get('suppressedprefixes', None) is not None:
+            suppressedprefixes = get_rate('cisco_bgp_peer.%s.%s' % ('suppressedprefixes', rate_item), now_time, prefixes.get('suppressedprefixes', 0), onwrap=SKIP)
+            perfdata.append(('suppressedprefixes', suppressedprefixes))
+
+        if peer.get('inupdates', None) is not None:
+            inupdates = get_rate('cisco_bgp_peer.%s.%s' % ('inupdates', rate_item), now_time, peer.get('inupdates', 0), onwrap=SKIP)
+            perfdata.append(('inupdates', inupdates))
+        if peer.get('outupdates', None) is not None:
+            outupdates = get_rate('cisco_bgp_peer.%s.%s' % ('outupdates', rate_item), now_time, peer.get('outupdates', 0), onwrap=SKIP)
+            perfdata.append(('outupdates', outupdates))
+        if peer.get('intotalmessages', None) is not None:
+            intotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('intotalmessages', rate_item), now_time, peer.get('intotalmessages', 0), onwrap=SKIP)
+            perfdata.append(('intotalmessages', intotalmessages))
+        if peer.get('outtotalmessages', None) is not None:
+            outtotalmessages = get_rate('cisco_bgp_peer.%s.%s' % ('outtotalmessages', rate_item), now_time, peer.get('outtotalmessages', 0), onwrap=SKIP)
+            perfdata.append(('outtotalmessages', outtotalmessages))
+        if peer.get('fsmestablishedtransitions', None) is not None:
+            perfdata.append(('fsmestablishedtransitions', peer.get('fsmestablishedtransitions')))
+        if peer.get('fsmestablishedtime', None) is not None:
+            perfdata.append(('fsmestablishedtime', peer.get('fsmestablishedtime')))
+        if peer.get('inupdateelapsedtime', None) is not None:
+            perfdata.append(('inupdateelapsedtime', peer.get('inupdateelapsedtime')))
 
         if infotext[0:2] == ', ':
             infotext = infotext[2:]
diff --git a/cisco_bgp_peer.mkp b/cisco_bgp_peer.mkp
index 92521c7a27cd8c8bfcb2839d5c687204a62670e6..f38a5837880c0e0eabf8b68b55b52d9765e19a5e 100644
Binary files a/cisco_bgp_peer.mkp and b/cisco_bgp_peer.mkp differ
diff --git a/packages/cisco_bgp_peer b/packages/cisco_bgp_peer
index 12fb6a27de60d4252c5ecb3679532dd8f31f3c92..43fb9401cc63dbca003bcad7583e033e953db9d1 100644
--- a/packages/cisco_bgp_peer
+++ b/packages/cisco_bgp_peer
@@ -7,6 +7,6 @@
  'name': 'cisco_bgp_peer',
  'num_files': 3,
  'title': u'Cisco BGP Peer',
- 'version': '20200224.v.0.2c',
+ 'version': '20200302.v.0.2d',
  'version.min_required': '1.2.8b8',
- 'version.packaged': '1.4.0p35'}
\ No newline at end of file
+ 'version.packaged': '1.4.0p38'}
\ No newline at end of file
diff --git a/web/plugins/wato/cisco_bgp_peer.py b/web/plugins/wato/cisco_bgp_peer.py
index ae07b0f47c4e69fb7a517c99c0b1220a89b9e7ca..a4257f74a59bd2ccd583af94c4fa2c16197e019d 100644
--- a/web/plugins/wato/cisco_bgp_peer.py
+++ b/web/plugins/wato/cisco_bgp_peer.py
@@ -68,19 +68,22 @@ register_check_parameters(
                      title=('BGP Peers'),
                      elements=[
                          TextUnicode(
-                             title=_('BGP Peer object name'),
-                             help=_('The configured value must match a BGP peer reported by the monitored '
-                                    'device.'),
+                             title=_('BGP Peer item name'),
+                             help=_('The configured value must match a BGP item reported by the monitored '
+                                    'device. For example: "10.194.115.98 IPv4 Unicast"'),
                              allow_empty=False,
                          ),
                          TextUnicode(
                              title=_('BGP Peer Alias'),
                              help=_('You can configure an individual alias here for the BGP peer matching '
-                                    'the IP-Address configured in the field above.'),
+                                    'the text configured in the "BGP Peer item name" field. The alias will '
+                                    'be shown in the infotext'),
                          ),
                          MonitoringState(
                              default_value=2,
-                             title=_('State if BGP peer is not found'),
+                             title=_('State if not found'),
+                             help=_('You can configure an individual state if the BGP peer matching the text '
+                                     'configured in the "BGP Peer item name" field is not found')
                          )]),
                  add_label=_('Add BGP peer'),
                  movable=False,