diff --git a/src/sakia/gui/certification.py b/src/sakia/gui/certification.py
index 7a087303f9f50a19437b674244aeb986289145b5..442c1368dd787e96677cd1be96e285a929c79235 100644
--- a/src/sakia/gui/certification.py
+++ b/src/sakia/gui/certification.py
@@ -242,7 +242,7 @@ class CertificationDialog(QObject):
 
     def async_exec(self):
         future = asyncio.Future()
-        self.widget.finished.connect(lambda r: future.set_result(r))
+        self.widget.finished.connect(lambda r: future.set_result(r) and self.widget.finished.disconnect())
         self.widget.open()
         self.refresh()
         return future
diff --git a/src/sakia/gui/transfer.py b/src/sakia/gui/transfer.py
index 99f99b043262e6c33e8389ad24bb052f962f956b..dfa7229d7fb52d14a614d8d43acc2822ca203ec4 100644
--- a/src/sakia/gui/transfer.py
+++ b/src/sakia/gui/transfer.py
@@ -218,7 +218,7 @@ class TransferMoneyDialog(QObject):
 
     def async_exec(self):
         future = asyncio.Future()
-        self.widget.finished.connect(lambda r: future.set_result(r))
+        self.widget.finished.connect(lambda r: future.set_result(r) and self.widget.finished.disconnect())
         self.widget.open()
         return future