diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerStopBackup.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerStopBackup.swift
new file mode 100644
index 0000000000000000000000000000000000000000..f5471166652f0d03488f70c74bf3a21aed8df6f8
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerStopBackup.swift
@@ -0,0 +1,26 @@
+import Bindings
+import XCTestDynamicOverlay
+
+public struct MessengerStopBackup {
+  public var run: () throws -> Void
+
+  public func callAsFunction() throws {
+    try run()
+  }
+}
+
+extension MessengerStopBackup {
+  public static func live(_ env: MessengerEnvironment) -> MessengerStopBackup {
+    MessengerStopBackup {
+      guard let backup = env.backup() else { return }
+      try backup.stop()
+      env.backup.set(nil)
+    }
+  }
+}
+
+extension MessengerStopBackup {
+  public static let unimplemented = MessengerStopBackup(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index 9e373e0b4bd95df7ec212ab957799dfbb945589a..bc1c8bde822c34c6b9142aca85b066e3cd329060 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -31,6 +31,7 @@ public struct Messenger {
   public var sendMessage: MessengerSendMessage
   public var registerBackupCallback: MessengerRegisterBackupCallback
   public var isBackupRunning: MessengerIsBackupRunning
+  public var stopBackup: MessengerStopBackup
 }
 
 extension Messenger {
@@ -65,7 +66,8 @@ extension Messenger {
       verifyContact: .live(env),
       sendMessage: .live(env),
       registerBackupCallback: .live(env),
-      isBackupRunning: .live(env)
+      isBackupRunning: .live(env),
+      stopBackup: .live(env)
     )
   }
 }
@@ -101,6 +103,7 @@ extension Messenger {
     verifyContact: .unimplemented,
     sendMessage: .unimplemented,
     registerBackupCallback: .unimplemented,
-    isBackupRunning: .unimplemented
+    isBackupRunning: .unimplemented,
+    stopBackup: .unimplemented
   )
 }
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStopBackupTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStopBackupTests.swift
new file mode 100644
index 0000000000000000000000000000000000000000..306b6c2d1d6b6507cd0bd83071d54ad99fd2e8f7
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStopBackupTests.swift
@@ -0,0 +1,53 @@
+import CustomDump
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerStopBackupTests: XCTestCase {
+  func testStop() throws {
+    var didStopBackup = 0
+    var didSetBackup: [Backup?] = []
+
+    var env: MessengerEnvironment = .unimplemented
+    env.backup.get = {
+      var backup: Backup = .unimplemented
+      backup.stop.run = { didStopBackup += 1 }
+      return backup
+    }
+    env.backup.set = { backup in
+      didSetBackup.append(backup)
+    }
+    let stop: MessengerStopBackup = .live(env)
+
+    try stop()
+
+    XCTAssertEqual(didStopBackup, 1)
+    XCTAssertEqual(didSetBackup.count, 1)
+    XCTAssertNil(didSetBackup.first as? Backup)
+  }
+
+  func testStopFailure() {
+    struct Failure: Error, Equatable {}
+    let failure = Failure()
+
+    var env: MessengerEnvironment = .unimplemented
+    env.backup.get = {
+      var backup: Backup = .unimplemented
+      backup.stop.run = { throw failure }
+      return backup
+    }
+    let stop: MessengerStopBackup = .live(env)
+
+    XCTAssertThrowsError(try stop()) { error in
+      XCTAssertNoDifference(error as NSError, failure as NSError)
+    }
+  }
+
+  func testStopWithoutBackup() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.backup.get = { nil }
+    let stop: MessengerStopBackup = .live(env)
+
+    try stop()
+  }
+}