diff --git a/electrum/gui/qml/components/WizardComponents.qml b/electrum/gui/qml/components/WizardComponents.qml
index e367dcc50..62da140b3 100644
--- a/electrum/gui/qml/components/WizardComponents.qml
+++ b/electrum/gui/qml/components/WizardComponents.qml
@@ -112,7 +112,7 @@ Item {
 
     property Component createseed: Component {
         WizardComponent {
-            valid: true
+            valid: seedtext.text != ''
 
             onAccept: {
                 wizard_data['seed'] = seedtext.text
@@ -121,6 +121,22 @@ Item {
                 wizard_data['seed_extra_words'] = extendcb.checked ? customwordstext.text : ''
             }
 
+            function setWarningText(numwords) {
+                var t = [
+                    "<p>",
+                    qsTr("Please save these %1 words on paper (order is important). ").arg(numwords),
+                    qsTr("This seed will allow you to recover your wallet in case of computer failure."),
+                    "</p>",
+                    "<b>" + qsTr("WARNING") + ":</b>",
+                    "<ul>",
+                    "<li>" + qsTr("Never disclose your seed.") + "</li>",
+                    "<li>" + qsTr("Never type it on a website.") + "</li>",
+                    "<li>" + qsTr("Do not store it electronically.") + "</li>",
+                    "</ul>"
+                ]
+                warningtext.text = t.join("")
+            }
+
             GridLayout {
                 width: parent.width
                 columns: 1
@@ -145,6 +161,13 @@ Item {
                     }
                     leftInset: -5
                     rightInset: -5
+
+                    BusyIndicator {
+                        anchors.centerIn: parent
+                        height: parent.height *2/3
+                        visible: seedtext.text == ''
+                    }
+
                 }
                 CheckBox {
                     id: extendcb
@@ -158,6 +181,7 @@ Item {
                     echoMode: TextInput.Password
                 }
                 Component.onCompleted : {
+                    setWarningText(12)
                     bitcoin.generate_seed()
                 }
             }
@@ -166,20 +190,7 @@ Item {
                 id: bitcoin
                 onGeneratedSeedChanged: {
                     seedtext.text = generated_seed
-
-                    var t = [
-                        "<p>",
-                        qsTr("Please save these %1 words on paper (order is important). ").arg(generated_seed.split(" ").length),
-                        qsTr("This seed will allow you to recover your wallet in case of computer failure."),
-                        "</p>",
-                        "<b>" + qsTr("WARNING") + ":</b>",
-                        "<ul>",
-                        "<li>" + qsTr("Never disclose your seed.") + "</li>",
-                        "<li>" + qsTr("Never type it on a website.") + "</li>",
-                        "<li>" + qsTr("Do not store it electronically.") + "</li>",
-                        "</ul>"
-                    ]
-                    warningtext.text = t.join("")
+                    setWarningText(generated_seed.split(" ").length)
                 }
             }
         }
diff --git a/electrum/gui/qml/qebitcoin.py b/electrum/gui/qml/qebitcoin.py
index 13a0b0513..d4f602235 100644
--- a/electrum/gui/qml/qebitcoin.py
+++ b/electrum/gui/qml/qebitcoin.py
@@ -1,3 +1,5 @@
+import asyncio
+
 from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject
 
 from electrum.logging import get_logger
@@ -25,9 +27,14 @@ class QEBitcoin(QObject):
     @pyqtSlot(str,str)
     def generate_seed(self, seed_type='segwit', language='en'):
         self._logger.debug('generating seed of type ' + str(seed_type))
-        self.generatedSeed = mnemonic.Mnemonic(language).make_seed(seed_type=seed_type)
-        self._logger.debug('seed generated')
-        self.generatedSeedChanged.emit()
+
+        async def co_gen_seed(seed_type, language):
+            self.generatedSeed = mnemonic.Mnemonic(language).make_seed(seed_type=seed_type)
+            self._logger.debug('seed generated')
+            self.generatedSeedChanged.emit()
+
+        loop = asyncio.get_event_loop()
+        asyncio.run_coroutine_threadsafe(co_gen_seed(seed_type, language), loop)
 
     @pyqtProperty(bool, notify=seedValidChanged)
     def seed_valid(self):