diff --git a/electrum/gui/qt/paytoedit.py b/electrum/gui/qt/paytoedit.py
index e3ab5851b..92cbf04a3 100644
--- a/electrum/gui/qt/paytoedit.py
+++ b/electrum/gui/qt/paytoedit.py
@@ -73,7 +73,7 @@ class PayToEdit(CompletionTextEdit, ScanQRTextEdit, Logger):
         self.c = None
         self.textChanged.connect(self.check_text)
         self.outputs = []  # type: List[PartialTxOutput]
-        self.errors = []  # type: Sequence[PayToLineError]
+        self.errors = []  # type: List[PayToLineError]
         self.is_pr = False
         self.is_alias = False
         self.update_size()
@@ -145,15 +145,18 @@ class PayToEdit(CompletionTextEdit, ScanQRTextEdit, Logger):
             return
         # filter out empty lines
         lines = [i for i in self.lines() if i]
-        outputs = []  # type: List[PartialTxOutput]
-        total = 0
+
         self.payto_scriptpubkey = None
         self.lightning_invoice = None
+        self.outputs = []
+
         if len(lines) == 1:
             data = lines[0]
+            # try bip21 URI
             if data.startswith("bitcoin:"):
                 self.win.pay_to_URI(data)
                 return
+            # try LN invoice
             bolt11_invoice = maybe_extract_bolt11_invoice(data)
             if bolt11_invoice is not None:
                 try:
@@ -163,24 +166,40 @@ class PayToEdit(CompletionTextEdit, ScanQRTextEdit, Logger):
                 else:
                     self.lightning_invoice = bolt11_invoice
                 return
+            # try "address, amount" on-chain format
+            try:
+                self._parse_as_multiline(lines, raise_errors=True)
+            except Exception as e:
+                pass
+            else:
+                return
+            # try address/script
             try:
                 self.payto_scriptpubkey = self.parse_output(data)
             except Exception as e:
                 self.errors.append(PayToLineError(line_content=data, exc=e))
-            if self.payto_scriptpubkey:
+            else:
                 self.win.set_onchain(True)
                 self.win.lock_amount(False)
-            return
+                return
+        else:
+            # there are multiple lines
+            self._parse_as_multiline(lines, raise_errors=False)
 
-        # there are multiple lines
+    def _parse_as_multiline(self, lines, *, raise_errors: bool):
+        outputs = []  # type: List[PartialTxOutput]
+        total = 0
         is_max = False
         for i, line in enumerate(lines):
             try:
                 output = self.parse_address_and_amount(line)
             except Exception as e:
-                self.errors.append(PayToLineError(
-                    idx=i, line_content=line.strip(), exc=e, is_multiline=True))
-                continue
+                if raise_errors:
+                    raise
+                else:
+                    self.errors.append(PayToLineError(
+                        idx=i, line_content=line.strip(), exc=e, is_multiline=True))
+                    continue
             outputs.append(output)
             if output.value == '!':
                 is_max = True