diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerDestroy.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerDestroy.swift
index 51f6092321c0b08fb24729de3e30f55abba10318..4ed8cf2c41243bd7ae6ce9ac59d6ca69a2f3490c 100644
--- a/Sources/XXMessengerClient/Messenger/Functions/MessengerDestroy.swift
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerDestroy.swift
@@ -11,6 +11,16 @@ public struct MessengerDestroy {
 extension MessengerDestroy {
   public static func live(_ env: MessengerEnvironment) -> MessengerDestroy {
     MessengerDestroy {
+      if let cMix = env.cMix() {
+        if cMix.networkFollowerStatus() == .running {
+          try cMix.stopNetworkFollower()
+        }
+        var hasRunningProcesses = cMix.hasRunningProcesses()
+        while hasRunningProcesses {
+          env.sleep(1)
+          hasRunningProcesses = cMix.hasRunningProcesses()
+        }
+      }
       env.ud.set(nil)
       env.e2e.set(nil)
       env.cMix.set(nil)
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerDestroyTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerDestroyTests.swift
index cfe3f9a51f447c41cf94ae077c71a0b63f3639e3..a91e32851de507ef96e354b4458228625aa352d1 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerDestroyTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerDestroyTests.swift
@@ -6,12 +6,23 @@ import XXClient
 final class MessengerDestroyTests: XCTestCase {
   func testDestroy() throws {
     let storageDir = "test-storage-dir"
+    var hasRunningProcesses: [Bool] = [true, true, false]
+    var didStopNetworkFollower = 0
+    var didSleep: [TimeInterval] = []
     var didRemoveDirectory: [String] = []
     var didSetUD: [UserDiscovery?] = []
     var didSetE2E: [E2E?] = []
     var didSetCMix: [CMix?] = []
 
     var env: MessengerEnvironment = .unimplemented
+    env.cMix.get = {
+      var cMix: CMix = .unimplemented
+      cMix.networkFollowerStatus.run = { .running }
+      cMix.stopNetworkFollower.run = { didStopNetworkFollower += 1 }
+      cMix.hasRunningProcesses.run = { hasRunningProcesses.removeFirst() }
+      return cMix
+    }
+    env.sleep = { didSleep.append($0) }
     env.storageDir = storageDir
     env.ud.set = { didSetUD.append($0) }
     env.e2e.set = { didSetE2E.append($0) }
@@ -21,12 +32,31 @@ final class MessengerDestroyTests: XCTestCase {
 
     try destroy()
 
+    XCTAssertNoDifference(didStopNetworkFollower, 1)
+    XCTAssertNoDifference(didSleep, [1, 1])
     XCTAssertNoDifference(didSetUD.map { $0 == nil }, [true])
     XCTAssertNoDifference(didSetE2E.map { $0 == nil }, [true])
     XCTAssertNoDifference(didSetCMix.map { $0 == nil }, [true])
     XCTAssertNoDifference(didRemoveDirectory, [storageDir])
   }
 
+  func testStopNetworkFollowerFailure() {
+    struct Error: Swift.Error, Equatable {}
+    let error = Error()
+    var env: MessengerEnvironment = .unimplemented
+    env.cMix.get = {
+      var cMix: CMix = .unimplemented
+      cMix.networkFollowerStatus.run = { .running }
+      cMix.stopNetworkFollower.run = { throw error }
+      return cMix
+    }
+    let destroy: MessengerDestroy = .live(env)
+
+    XCTAssertThrowsError(try destroy()) { err in
+      XCTAssertEqual(err as? Error, error)
+    }
+  }
+
   func testRemoveDirectoryFailure() {
     struct Error: Swift.Error, Equatable {}
     let error = Error()
@@ -35,6 +65,7 @@ final class MessengerDestroyTests: XCTestCase {
     var didSetCMix: [CMix?] = []
 
     var env: MessengerEnvironment = .unimplemented
+    env.cMix.get = { nil }
     env.ud.set = { didSetUD.append($0) }
     env.e2e.set = { didSetE2E.append($0) }
     env.cMix.set = { didSetCMix.append($0) }