diff --git a/python/sbp/client/handler.py b/python/sbp/client/handler.py
index <HASH>..<HASH> 100644
--- a/python/sbp/client/handler.py
+++ b/python/sbp/client/handler.py
@@ -301,6 +301,25 @@ class Handler(object):
     self.remove_callback(cb, msg_type)
     return payload['data']
 
+  def wait_callback(self, callback, msg_type=None):
+    """
+    Wait for a SBP message with a callback.
+
+    Parameters
+    ----------
+    callback : fn
+      Callback function
+    msg_type : int | iterable
+      Message type to register callback against. Default `None` means global callback.
+      Iterable type adds the callback to all the message types.
+    """
+    event = threading.Event()
+    def cb(sbp_msg):
+      callback(sbp_msg)
+      event.set()
+    self.add_callback(cb, msg_type)
+    event.wait(timeout)
+    self.remove_callback(cb, msg_type)
 
 class LoggerDriver(BaseDriver):
   """LoggerDriver
@@ -344,3 +363,4 @@ class LoggerDriver(BaseDriver):
     s = self.logger.read()
     if s:
      self.driver.write(s)
+
Add a wait_callback.