diff --git a/protocols/bgp/server/fsm_established.go b/protocols/bgp/server/fsm_established.go
index e54e64533fea03560334370a7d47b7774934d98a..f1195dad2f5bc21ac16f8cfe94d3fd7a8e75b1c8 100644
--- a/protocols/bgp/server/fsm_established.go
+++ b/protocols/bgp/server/fsm_established.go
@@ -80,9 +80,16 @@ func (s *establishedState) init() {
 }
 
 func (s *establishedState) uninit() {
-	s.fsm.adjRIBOut.Unregister(s.fsm.updateSender)
-	s.fsm.rib.Unregister(s.fsm.adjRIBOut)
-	s.fsm.adjRIBIn.Unregister(s.fsm.rib)
+	s.fsm.adjRIBIn.Unregister(s.fsm.peer.importFilter)
+	s.fsm.peer.importFilter.Unregister(s.fsm.rib)
+
+	s.fsm.rib.Unregister(s.fsm.peer.exportFilter)
+	s.fsm.peer.exportFilter.Unregister(s.fsm.adjRIBOut)
+	s.fsm.updateSender.Unregister(s.fsm.adjRIBOut)
+
+	s.fsm.adjRIBIn = nil
+	s.fsm.adjRIBOut = nil
+
 	s.fsm.ribsInitialized = false
 }