diff --git a/monkeysign/gtkui.py b/monkeysign/gtkui.py
index de2a9cbfb69ea939bc178b9c7acb49ec54df6c71..394ba1e5a53e1ae43a1bcd1c69566d2ec7e7c1be 100644
--- a/monkeysign/gtkui.py
+++ b/monkeysign/gtkui.py
@@ -545,9 +545,12 @@ class MonkeysignScan(gtk.Window):
                         self.msui.log(_('looking for key %s in your keyring') % self.msui.pattern)
                         self.msui.keyring.context.set_option('export-options', 'export-minimal')
                         if self.msui.tmpkeyring.import_data(self.msui.keyring.export_data(self.msui.pattern)):
-                                # XXXX: this actually hangs when signing the key, maybe because we're not in a callback?
-                                # it's the prompting that hangs, see msui.ask...
-                                self.watch_out_callback(0, 0) # XXX: hack, the callback should call a cleaner function
+                                # for some reason, we were holding on to a lock already, release it
+                                gtk.gdk.threads_leave()
+                                self.msui.copy_secrets()
+                                self.msui.sign_key()
+                                self.msui.export_key()
+                                self.resume_capture()
                                 return # XXX: also ugly, reindent everything instead
 
                         # 1.b) if allowed (@todo), from the keyservers