--- a/conf/conf.c
+++ b/conf/conf.c
@@ -106,6 +106,7 @@ config_alloc(const char *name)
   c->tf_route = c->tf_proto = TM_ISO_SHORT_MS;
   c->tf_base = c->tf_log = TM_ISO_LONG_MS;
   c->gr_wait = DEFAULT_GR_WAIT;
+  c->bfd_vrf = 0;
 
   return c;
 }
--- a/conf/conf.h
+++ b/conf/conf.h
@@ -38,6 +38,7 @@ struct config {
   struct timeformat tf_log;		/* Time format for the logfile */
   struct timeformat tf_base;		/* Time format for other purposes */
   u32 gr_wait;				/* Graceful restart wait timeout (sec) */
+  int bfd_vrf;				/* There are BFD protocols in VRF */
 
   int cli_debug;			/* Tracing of CLI connections and commands */
   int latency_debug;			/* I/O loop tracks duration of each event */
--- a/proto/bfd/bfd.c
+++ b/proto/bfd/bfd.c
@@ -624,7 +624,10 @@ bfd_request_notify(struct bfd_request *req, u8 state, u8 diag)
 static int
 bfd_add_request(struct bfd_proto *p, struct bfd_request *req)
 {
-  if (p->p.vrf && (p->p.vrf != req->vrf))
+  struct config *gc = p->p.cf->global;
+
+  /* Compare VRFs if protocol VRF is defined or there any BFDs in VRF */
+  if ((p->p.vrf || gc->bfd_vrf) && (p->p.vrf != req->vrf))
     return 0;
 
   struct bfd_session *s = bfd_find_session_by_addr(p, req->addr);
@@ -1033,10 +1036,14 @@ static int
 bfd_reconfigure(struct proto *P, struct proto_config *c)
 {
   struct bfd_proto *p = (struct bfd_proto *) P;
-  // struct bfd_config *old = (struct bfd_config *) (P->cf);
+  struct bfd_config *old = (struct bfd_config *) (P->cf);
   struct bfd_config *new = (struct bfd_config *) c;
   struct bfd_iface *ifa;
 
+  /* Restart protocols if default catch all status changed */
+  if (old->c.global->bfd_vrf != new->c.global->bfd_vrf)
+    return 0;
+
   birdloop_mask_wakeups(p->loop);
 
   WALK_LIST(ifa, p->iface_list)
@@ -1056,6 +1063,14 @@ bfd_reconfigure(struct proto *P, struct proto_config *c)
   return 1;
 }
 
+/* Remember if there are BFD protocols in VRF */
+static void
+bfd_postconfig(struct proto_config *c)
+{
+  if (c->vrf)
+    c->global->bfd_vrf = 1;
+}
+
 static void
 bfd_copy_config(struct proto_config *dest, struct proto_config *src UNUSED)
 {
@@ -1119,5 +1134,6 @@ struct protocol proto_bfd = {
   .start =		bfd_start,
   .shutdown =		bfd_shutdown,
   .reconfigure =	bfd_reconfigure,
+  .postconfig =		bfd_postconfig,
   .copy_config =	bfd_copy_config,
 };
