diff --git a/proto/bfd/bfd.c b/proto/bfd/bfd.c
index 315d132..7bbe8c2 100644
--- a/proto/bfd/bfd.c
+++ b/proto/bfd/bfd.c
@@ -477,8 +477,15 @@ bfd_remove_session(struct bfd_proto *p, struct bfd_session *s)
 {
   ip_addr ip = s->addr;
 
+  /* Caller should ensure that request list is empty */
+
   birdloop_enter(p->loop);
 
+  /* Remove session from notify list if scheduled for notification */
+  /* No need for bfd_lock_sessions(), we are already protected by birdloop_enter() */
+  if (NODE_VALID(&s->n))
+    rem_node(&s->n);
+
   bfd_free_iface(s->ifa);
 
   rfree(s->tx_timer);
