diff --git a/gui/qt/transaction_dialog.py b/gui/qt/transaction_dialog.py
index 5c933961b..f90fdb0a3 100644
--- a/gui/qt/transaction_dialog.py
+++ b/gui/qt/transaction_dialog.py
@@ -95,7 +95,9 @@ class TxDialog(QDialog):
         b.setIcon(QIcon(":icons/qrcode.png"))
         b.clicked.connect(self.show_qr)
 
-        self.buttons = [self.qr_button, self.sign_button, self.broadcast_button, self.save_button, self.cancel_button]
+        self.copy_button = CopyButton(lambda: str(self.tx), self.parent.app)
+
+        self.buttons = [self.copy_button, self.qr_button, self.sign_button, self.broadcast_button, self.save_button, self.cancel_button]
         run_hook('transaction_dialog', self)
 
         vbox.addLayout(Buttons(*self.buttons))
diff --git a/gui/qt/util.py b/gui/qt/util.py
index 1ee8bbd5c..e0b2f880e 100644
--- a/gui/qt/util.py
+++ b/gui/qt/util.py
@@ -138,9 +138,9 @@ class CloseButton(QPushButton):
         self.setDefault(True)
 
 class CopyButton(QPushButton):
-    def __init__(self, text, app):
+    def __init__(self, text_getter, app):
         QPushButton.__init__(self, _("Copy"))
-        self.clicked.connect(lambda: app.clipboard().setText(str(text.toPlainText())))
+        self.clicked.connect(lambda: app.clipboard().setText(text_getter()))
 
 class OkButton(QPushButton):
     def __init__(self, dialog, label=None):