From 01e5400afbf801ce98db39172e130ed85d7f5d74 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Wed, 3 Mar 2021 18:14:16 +0200
Subject: [PATCH 01/36] tr compatible with all Qt APIs

---
 src/tr.py | 71 ++++++++++++++++++++-----------------------------------
 1 file changed, 26 insertions(+), 45 deletions(-)

diff --git a/src/tr.py b/src/tr.py
index eec82c37..765ba55c 100644
--- a/src/tr.py
+++ b/src/tr.py
@@ -1,7 +1,6 @@
 """
-Translating text
+Slim layer providing environment agnostic _translate()
 """
-import os
 
 try:
     import state
@@ -9,51 +8,33 @@ except ImportError:
     from . import state
 
 
-class translateClass:
-    """
-    This is used so that the translateText function can be used
-    when we are in daemon mode and not using any QT functions.
-    """
-    # pylint: disable=old-style-class,too-few-public-methods
-    def __init__(self, context, text):
-        self.context = context
-        self.text = text
-
-    def arg(self, _):
-        """Replace argument placeholders"""
-        if '%' in self.text:
-            # This doesn't actually do anything with the arguments
-            # because we don't have a UI in which to display this information anyway.
-            return translateClass(self.context, self.text.replace('%', '', 1))
-        return self.text
-
-
-def _translate(context, text, disambiguation=None, encoding=None, n=None):
+def _tr_dummy(context, text, disambiguation=None, n=None):
     # pylint: disable=unused-argument
-    return translateText(context, text, n)
+    return text
 
 
-def translateText(context, text, n=None):
-    """Translate text in context"""
+if state.enableGUI and not state.curses:
     try:
-        enableGUI = state.enableGUI
-    except AttributeError:  # inside the plugin
-        enableGUI = True
-    if enableGUI:
-        try:
-            from PyQt4 import QtCore, QtGui
-        except Exception as err:
-            print('PyBitmessage requires PyQt unless you want to run it as a daemon'
-                  ' and interact with it using the API.'
-                  ' You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download'
-                  ' or by searching Google for \'PyQt Download\'.'
-                  ' If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon')
-            print('Error message:', err)
-            os._exit(0)  # pylint: disable=protected-access
-        if n is None:
-            return QtGui.QApplication.translate(context, text)
-        return QtGui.QApplication.translate(context, text, None, QtCore.QCoreApplication.CodecForTr, n)
+        from fallback import PyQt5  # noqa:F401
+        from PyQt5 import QtWidgets, QtCore
+    except ImportError:
+        _translate = _tr_dummy
     else:
-        if '%' in text:
-            return translateClass(context, text.replace('%', '', 1))
-        return text
+        try:
+            from PyQt5 import API
+        except ImportError:
+            API = 'pyqt5'
+        if API == 'pyqt5':
+            _translate = QtWidgets.QApplication.translate
+        else:
+            def _translate(context, text, disambiguation=None, n=None):
+                return (
+                    QtWidgets.QApplication.translate(
+                        context, text, disambiguation)
+                    if n is None else
+                    QtWidgets.QApplication.translate(
+                        context, text, disambiguation,
+                        QtCore.QCoreApplication.CodecForTr, n)
+                )
+else:
+    _translate = _tr_dummy

From b9fca03ed10ffbfc9bbecbf09dce893901175275 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Wed, 3 Mar 2021 18:15:38 +0200
Subject: [PATCH 02/36] Prepare newchandialog module for PyQt5/qtpy

---
 src/bitmessageqt/addressvalidator.py | 177 +++++++++++++++------------
 src/bitmessageqt/newchandialog.py    |  84 +++++++------
 2 files changed, 144 insertions(+), 117 deletions(-)

diff --git a/src/bitmessageqt/addressvalidator.py b/src/bitmessageqt/addressvalidator.py
index 89c17891..0b969173 100644
--- a/src/bitmessageqt/addressvalidator.py
+++ b/src/bitmessageqt/addressvalidator.py
@@ -1,14 +1,16 @@
 """
-Address validator module.
+The validator for address and passphrase QLineEdits
+used in `.dialogs.NewChanDialog`.
 """
-# pylint: disable=too-many-branches,too-many-arguments
+# pylint: disable=too-many-arguments
 
-from PyQt4 import QtGui
 from Queue import Empty
 
+from PyQt5 import QtGui
+
 from account import getSortedAccounts
 from addresses import decodeAddress, addBMIfNotPresent
-from queues import apiAddressGeneratorReturnQueue, addressGeneratorQueue
+from queues import addressGeneratorQueue, apiAddressGeneratorReturnQueue
 from tr import _translate
 from utils import str_chan
 
@@ -16,22 +18,18 @@ from utils import str_chan
 class AddressPassPhraseValidatorMixin(object):
     """Bitmessage address or passphrase validator class for Qt UI"""
     def setParams(
-            self,
-            passPhraseObject=None,
-            addressObject=None,
-            feedBackObject=None,
-            buttonBox=None,
-            addressMandatory=True,
+        self, passPhraseObject=None, addressObject=None,
+        feedBackObject=None, button=None, addressMandatory=True
     ):
-        """Initialisation"""
+        """Initialization"""
         self.addressObject = addressObject
         self.passPhraseObject = passPhraseObject
         self.feedBackObject = feedBackObject
-        self.buttonBox = buttonBox
         self.addressMandatory = addressMandatory
         self.isValid = False
         # save default text
-        self.okButtonLabel = self.buttonBox.button(QtGui.QDialogButtonBox.Ok).text()
+        self.okButton = button
+        self.okButtonLabel = button.text()
 
     def setError(self, string):
         """Indicate that the validation is pending or failed"""
@@ -42,13 +40,13 @@ class AddressPassPhraseValidatorMixin(object):
             self.feedBackObject.setStyleSheet("QLabel { color : red; }")
             self.feedBackObject.setText(string)
         self.isValid = False
-        if self.buttonBox:
-            self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setEnabled(False)
+        if self.okButton:
+            self.okButton.setEnabled(False)
             if string is not None and self.feedBackObject is not None:
-                self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setText(
+                self.okButton.setText(
                     _translate("AddressValidator", "Invalid"))
             else:
-                self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setText(
+                self.okButton.setText(
                     _translate("AddressValidator", "Validating..."))
 
     def setOK(self, string):
@@ -60,9 +58,9 @@ class AddressPassPhraseValidatorMixin(object):
             self.feedBackObject.setStyleSheet("QLabel { }")
             self.feedBackObject.setText(string)
         self.isValid = True
-        if self.buttonBox:
-            self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setEnabled(True)
-            self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setText(self.okButtonLabel)
+        if self.okButton:
+            self.okButton.setEnabled(True)
+            self.okButton.setText(self.okButtonLabel)
 
     def checkQueue(self):
         """Validator queue loop"""
@@ -75,7 +73,8 @@ class AddressPassPhraseValidatorMixin(object):
 
         while True:
             try:
-                addressGeneratorReturnValue = apiAddressGeneratorReturnQueue.get(False)
+                addressGeneratorReturnValue = \
+                    apiAddressGeneratorReturnQueue.get(False)
             except Empty:
                 if gotOne:
                     break
@@ -85,96 +84,120 @@ class AddressPassPhraseValidatorMixin(object):
                 gotOne = True
 
         if not addressGeneratorReturnValue:
-            self.setError(_translate("AddressValidator", "Address already present as one of your identities."))
-            return (QtGui.QValidator.Intermediate, 0)
-        if addressGeneratorReturnValue[0] == 'chan name does not match address':
-            self.setError(
-                _translate(
-                    "AddressValidator",
-                    "Although the Bitmessage address you "
-                    "entered was valid, it doesn't match the chan name."))
-            return (QtGui.QValidator.Intermediate, 0)
-        self.setOK(_translate("MainWindow", "Passphrase and address appear to be valid."))
+            self.setError(_translate(
+                "AddressValidator",
+                "Address already present as one of your identities."
+            ))
+            return
+        if addressGeneratorReturnValue[0] == \
+                'chan name does not match address':
+            self.setError(_translate(
+                "AddressValidator",
+                "Although the Bitmessage address you entered was valid,"
+                " it doesn\'t match the chan name."
+            ))
+            return
+        self.setOK(_translate(
+            "MainWindow", "Passphrase and address appear to be valid."))
 
     def returnValid(self):
         """Return the value of whether the validation was successful"""
-        if self.isValid:
-            return QtGui.QValidator.Acceptable
-        return QtGui.QValidator.Intermediate
+        return QtGui.QValidator.Acceptable if self.isValid \
+            else QtGui.QValidator.Intermediate
 
     def validate(self, s, pos):
         """Top level validator method"""
-        if self.addressObject is None:
+        try:
+            address = self.addressObject.text().encode('utf-8')
+        except AttributeError:
             address = None
-        else:
-            address = str(self.addressObject.text().toUtf8())
-            if address == "":
-                address = None
-        if self.passPhraseObject is None:
+        try:
+            passPhrase = self.passPhraseObject.text().encode('utf-8')
+        except AttributeError:
             passPhrase = ""
-        else:
-            passPhrase = str(self.passPhraseObject.text().toUtf8())
-            if passPhrase == "":
-                passPhrase = None
 
         # no chan name
-        if passPhrase is None:
-            self.setError(_translate("AddressValidator", "Chan name/passphrase needed. You didn't enter a chan name."))
-            return (QtGui.QValidator.Intermediate, pos)
+        if not passPhrase:
+            self.setError(_translate(
+                "AddressValidator",
+                "Chan name/passphrase needed. You didn't enter a chan name."
+            ))
+            return (QtGui.QValidator.Intermediate, s, pos)
 
-        if self.addressMandatory or address is not None:
+        if self.addressMandatory or address:
             # check if address already exists:
             if address in getSortedAccounts():
-                self.setError(_translate("AddressValidator", "Address already present as one of your identities."))
-                return (QtGui.QValidator.Intermediate, pos)
+                self.setError(_translate(
+                    "AddressValidator",
+                    "Address already present as one of your identities."
+                ))
+                return (QtGui.QValidator.Intermediate, s, pos)
 
+            status = decodeAddress(address)[0]
             # version too high
-            if decodeAddress(address)[0] == 'versiontoohigh':
-                self.setError(
-                    _translate(
-                        "AddressValidator",
-                        "Address too new. Although that Bitmessage"
-                        " address might be valid, its version number"
-                        " is too new for us to handle. Perhaps you need"
-                        " to upgrade Bitmessage."))
-                return (QtGui.QValidator.Intermediate, pos)
-
+            if status == 'versiontoohigh':
+                self.setError(_translate(
+                    "AddressValidator",
+                    "Address too new. Although that Bitmessage address"
+                    " might be valid, its version number is too new"
+                    " for us to handle. Perhaps you need to upgrade"
+                    " Bitmessage."
+                ))
+                return (QtGui.QValidator.Intermediate, s, pos)
             # invalid
-            if decodeAddress(address)[0] != 'success':
-                self.setError(_translate("AddressValidator", "The Bitmessage address is not valid."))
-                return (QtGui.QValidator.Intermediate, pos)
+            if status != 'success':
+                self.setError(_translate(
+                    "AddressValidator",
+                    "The Bitmessage address is not valid."
+                ))
+                return (QtGui.QValidator.Intermediate, s, pos)
 
         # this just disables the OK button without changing the feedback text
         # but only if triggered by textEdited, not by clicking the Ok button
-        if not self.buttonBox.button(QtGui.QDialogButtonBox.Ok).hasFocus():
+        if not self.okButton.hasFocus():
             self.setError(None)
 
         # check through generator
-        if address is None:
-            addressGeneratorQueue.put(('createChan', 4, 1, str_chan + ' ' + str(passPhrase), passPhrase, False))
+        if not address:
+            addressGeneratorQueue.put((
+                'createChan', 4, 1,
+                str_chan + ' ' + passPhrase, passPhrase, False
+            ))
         else:
-            addressGeneratorQueue.put(
-                ('joinChan', addBMIfNotPresent(address),
-                 "{} {}".format(str_chan, passPhrase), passPhrase, False))
+            addressGeneratorQueue.put((
+                'joinChan', addBMIfNotPresent(address),
+                "{} {}".format(str_chan, passPhrase), passPhrase, False
+            ))
 
-        if self.buttonBox.button(QtGui.QDialogButtonBox.Ok).hasFocus():
-            return (self.returnValid(), pos)
-        return (QtGui.QValidator.Intermediate, pos)
+        if self.okButton.hasFocus():
+            return (self.returnValid(), s, pos)
+        else:
+            return (QtGui.QValidator.Intermediate, s, pos)
 
     def checkData(self):
         """Validator Qt signal interface"""
-        return self.validate("", 0)
+        return self.validate(u"", 0)
 
 
 class AddressValidator(QtGui.QValidator, AddressPassPhraseValidatorMixin):
     """AddressValidator class for Qt UI"""
-    def __init__(self, parent=None, passPhraseObject=None, feedBackObject=None, buttonBox=None, addressMandatory=True):
+    def __init__(
+        self, parent=None, passPhraseObject=None, feedBackObject=None,
+        button=None, addressMandatory=True
+    ):
         super(AddressValidator, self).__init__(parent)
-        self.setParams(passPhraseObject, parent, feedBackObject, buttonBox, addressMandatory)
+        self.setParams(
+            passPhraseObject, parent, feedBackObject, button,
+            addressMandatory)
 
 
 class PassPhraseValidator(QtGui.QValidator, AddressPassPhraseValidatorMixin):
     """PassPhraseValidator class for Qt UI"""
-    def __init__(self, parent=None, addressObject=None, feedBackObject=None, buttonBox=None, addressMandatory=False):
+    def __init__(
+        self, parent=None, addressObject=None, feedBackObject=None,
+        button=None, addressMandatory=False
+    ):
         super(PassPhraseValidator, self).__init__(parent)
-        self.setParams(parent, addressObject, feedBackObject, buttonBox, addressMandatory)
+        self.setParams(
+            parent, addressObject, feedBackObject, button,
+            addressMandatory)
diff --git a/src/bitmessageqt/newchandialog.py b/src/bitmessageqt/newchandialog.py
index c0629cd7..f4a89eea 100644
--- a/src/bitmessageqt/newchandialog.py
+++ b/src/bitmessageqt/newchandialog.py
@@ -1,10 +1,8 @@
 """
-src/bitmessageqt/newchandialog.py
-=================================
-
+NewChanDialog class definition
 """
 
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtCore, QtWidgets
 
 import widgets
 from addresses import addBMIfNotPresent
@@ -15,30 +13,21 @@ from tr import _translate
 from utils import str_chan
 
 
-class NewChanDialog(QtGui.QDialog):
-    """The `New Chan` dialog"""
+class NewChanDialog(QtWidgets.QDialog):
+    """The "New Chan" dialog"""
     def __init__(self, parent=None):
         super(NewChanDialog, self).__init__(parent)
         widgets.load('newchandialog.ui', self)
         self.parent = parent
-        self.chanAddress.setValidator(
-            AddressValidator(
-                self.chanAddress,
-                self.chanPassPhrase,
-                self.validatorFeedback,
-                self.buttonBox,
-                False))
-        self.chanPassPhrase.setValidator(
-            PassPhraseValidator(
-                self.chanPassPhrase,
-                self.chanAddress,
-                self.validatorFeedback,
-                self.buttonBox,
-                False))
+        self.chanAddress.setValidator(AddressValidator(
+            self.chanAddress, self.chanPassPhrase, self.validatorFeedback,
+            self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok), False))
+        self.chanPassPhrase.setValidator(PassPhraseValidator(
+            self.chanPassPhrase, self.chanAddress, self.validatorFeedback,
+            self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok), False))
 
         self.timer = QtCore.QTimer()
-        QtCore.QObject.connect(  # pylint: disable=no-member
-            self.timer, QtCore.SIGNAL("timeout()"), self.delayedUpdateStatus)
+        self.timer.timeout.connect(self.delayedUpdateStatus)
         self.timer.start(500)  # milliseconds
         self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
         self.show()
@@ -52,32 +41,47 @@ class NewChanDialog(QtGui.QDialog):
         self.timer.stop()
         self.hide()
         apiAddressGeneratorReturnQueue.queue.clear()
-        if self.chanAddress.text().toUtf8() == "":
-            addressGeneratorQueue.put(
-                ('createChan', 4, 1, str_chan + ' ' + str(self.chanPassPhrase.text().toUtf8()),
-                 self.chanPassPhrase.text().toUtf8(),
-                 True))
+        passPhrase = self.chanPassPhrase.text().encode('utf-8')
+        if self.chanAddress.text() == "":
+            addressGeneratorQueue.put((
+                'createChan', 4, 1,
+                str_chan + ' ' + passPhrase, passPhrase, True
+            ))
         else:
-            addressGeneratorQueue.put(
-                ('joinChan', addBMIfNotPresent(self.chanAddress.text().toUtf8()),
-                 str_chan + ' ' + str(self.chanPassPhrase.text().toUtf8()),
-                 self.chanPassPhrase.text().toUtf8(),
-                 True))
+            addressGeneratorQueue.put((
+                'joinChan', addBMIfNotPresent(self.chanAddress.text()),
+                str_chan + ' ' + passPhrase, passPhrase, True
+            ))
         addressGeneratorReturnValue = apiAddressGeneratorReturnQueue.get(True)
-        if addressGeneratorReturnValue and addressGeneratorReturnValue[0] != 'chan name does not match address':
-            UISignalQueue.put(('updateStatusBar', _translate(
-                "newchandialog", "Successfully created / joined chan %1").arg(unicode(self.chanPassPhrase.text()))))
+        if (
+            len(addressGeneratorReturnValue) > 0
+            and addressGeneratorReturnValue[0]
+            != 'chan name does not match address'
+        ):
+            UISignalQueue.put((
+                'updateStatusBar',
+                _translate(
+                    "newchandialog",
+                    "Successfully created / joined chan {0}"
+                ).format(passPhrase)
+            ))
             self.parent.ui.tabWidget.setCurrentIndex(
                 self.parent.ui.tabWidget.indexOf(self.parent.ui.chans)
             )
-            self.done(QtGui.QDialog.Accepted)
+            self.done(QtWidgets.QDialog.Accepted)
         else:
-            UISignalQueue.put(('updateStatusBar', _translate("newchandialog", "Chan creation / joining failed")))
-            self.done(QtGui.QDialog.Rejected)
+            UISignalQueue.put((
+                'updateStatusBar',
+                _translate("newchandialog", "Chan creation / joining failed")
+            ))
+            self.done(QtWidgets.QDialog.Rejected)
 
     def reject(self):
         """Cancel joining the chan"""
         self.timer.stop()
         self.hide()
-        UISignalQueue.put(('updateStatusBar', _translate("newchandialog", "Chan creation / joining cancelled")))
-        self.done(QtGui.QDialog.Rejected)
+        UISignalQueue.put((
+            'updateStatusBar',
+            _translate("newchandialog", "Chan creation / joining cancelled")
+        ))
+        self.done(QtWidgets.QDialog.Rejected)

From 8dca39e9021e96a4c68a604770c9d5c87c25e3b1 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Thu, 15 Feb 2018 19:28:01 +0200
Subject: [PATCH 03/36] Initial support for PyQt5 (main window shown) using
 QtPy package.

QtPy is a compatibility layer which allows to use the code written for
PyQt5 with any python Qt binding: PyQt4, PyQt5, pyside or pyside2.

Main differences in PyQt5:

  - all widget classes are now in QtWidgets package, not QtGui;
  - QString obsoleted by unicode (sip API 2);
  - changed the way of signals connection.

Closes: #1191
---
 .travis.yml                             |    1 -
 src/bitmessageqt/__init__.py            | 1093 ++++++++++++-----------
 src/bitmessageqt/account.py             |  117 +--
 src/bitmessageqt/address_dialogs.py     |   91 +-
 src/bitmessageqt/bitmessage_icons_rc.py |   11 +-
 src/bitmessageqt/bitmessageui.py        |  526 ++++++-----
 src/bitmessageqt/blacklist.py           |   89 +-
 src/bitmessageqt/dialogs.py             |   35 +-
 src/bitmessageqt/foldertree.py          |  145 +--
 src/bitmessageqt/languagebox.py         |   30 +-
 src/bitmessageqt/messagecompose.py      |   31 +-
 src/bitmessageqt/messageview.py         |   92 +-
 src/bitmessageqt/networkstatus.py       |  200 ++---
 src/bitmessageqt/newaddressdialog.ui    |    4 +-
 src/bitmessageqt/retranslateui.py       |   20 +-
 src/bitmessageqt/safehtmlparser.py      |    4 -
 src/bitmessageqt/settings.py            |   31 +-
 src/bitmessageqt/settingsmixin.py       |   37 +-
 src/bitmessageqt/statusbar.py           |   17 +-
 src/bitmessageqt/tests/main.py          |    6 +-
 src/bitmessageqt/uisignaler.py          |   84 +-
 src/bitmessageqt/utils.py               |   16 +-
 src/bitmessageqt/widgets.py             |   12 +-
 src/class_addressGenerator.py           |   29 +-
 src/depends.py                          |    2 +-
 src/plugins/menu_qrcode.py              |   16 +-
 src/plugins/plugin.py                   |    1 +
 27 files changed, 1399 insertions(+), 1341 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 9ecb65ba..e13d9e33 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,7 +9,6 @@ addons:
     packages:
       - build-essential
       - libcap-dev
-      - python-qt4
       - python-pyqt5
       - tor
       - xvfb
diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py
index 6a692f38..eaac4968 100644
--- a/src/bitmessageqt/__init__.py
+++ b/src/bitmessageqt/__init__.py
@@ -15,8 +15,7 @@ import time
 from datetime import datetime, timedelta
 from sqlite3 import register_adapter
 
-from PyQt4 import QtCore, QtGui
-from PyQt4.QtNetwork import QLocalSocket, QLocalServer
+from PyQt5 import QtCore, QtGui, QtWidgets, QtNetwork
 
 import shared
 import state
@@ -27,7 +26,6 @@ from bitmessageui import Ui_MainWindow
 from bmconfigparser import BMConfigParser
 import namecoin
 from messageview import MessageView
-from migrationwizard import Ui_MigrationWizard
 from foldertree import (
     AccountMixin, Ui_FolderWidget, Ui_AddressWidget, Ui_SubscriptionWidget,
     MessageList_AddressWidget, MessageList_SubjectWidget,
@@ -99,12 +97,12 @@ class MyForm(settingsmixin.SMainWindow):
             newlocale = l10n.getTranslationLanguage()
         try:
             if not self.qmytranslator.isEmpty():
-                QtGui.QApplication.removeTranslator(self.qmytranslator)
+                QtWidgets.QApplication.removeTranslator(self.qmytranslator)
         except:
             pass
         try:
             if not self.qsystranslator.isEmpty():
-                QtGui.QApplication.removeTranslator(self.qsystranslator)
+                QtWidgets.QApplication.removeTranslator(self.qsystranslator)
         except:
             pass
 
@@ -112,7 +110,7 @@ class MyForm(settingsmixin.SMainWindow):
         translationpath = os.path.join(
             paths.codePath(), 'translations', 'bitmessage_' + newlocale)
         self.qmytranslator.load(translationpath)
-        QtGui.QApplication.installTranslator(self.qmytranslator)
+        QtWidgets.QApplication.installTranslator(self.qmytranslator)
 
         self.qsystranslator = QtCore.QTranslator()
         if paths.frozen:
@@ -123,7 +121,7 @@ class MyForm(settingsmixin.SMainWindow):
                 str(QtCore.QLibraryInfo.location(
                     QtCore.QLibraryInfo.TranslationsPath)), 'qt_' + newlocale)
         self.qsystranslator.load(translationpath)
-        QtGui.QApplication.installTranslator(self.qsystranslator)
+        QtWidgets.QApplication.installTranslator(self.qsystranslator)
 
         # TODO: move this block into l10n
         # FIXME: shouldn't newlocale be used here?
@@ -148,49 +146,35 @@ class MyForm(settingsmixin.SMainWindow):
                 logger.error("Failed to set locale to %s", lang, exc_info=True)
 
     def init_file_menu(self):
-        QtCore.QObject.connect(self.ui.actionExit, QtCore.SIGNAL(
-            "triggered()"), self.quit)
-        QtCore.QObject.connect(self.ui.actionNetworkSwitch, QtCore.SIGNAL(
-            "triggered()"), self.network_switch)
-        QtCore.QObject.connect(self.ui.actionManageKeys, QtCore.SIGNAL(
-            "triggered()"), self.click_actionManageKeys)
-        QtCore.QObject.connect(self.ui.actionDeleteAllTrashedMessages,
-                               QtCore.SIGNAL(
-                                   "triggered()"),
-                               self.click_actionDeleteAllTrashedMessages)
-        QtCore.QObject.connect(self.ui.actionRegenerateDeterministicAddresses,
-                               QtCore.SIGNAL(
-                                   "triggered()"),
-                               self.click_actionRegenerateDeterministicAddresses)
-        QtCore.QObject.connect(self.ui.pushButtonAddChan, QtCore.SIGNAL(
-            "clicked()"),
-                               self.click_actionJoinChan) # also used for creating chans.
-        QtCore.QObject.connect(self.ui.pushButtonNewAddress, QtCore.SIGNAL(
-            "clicked()"), self.click_NewAddressDialog)
-        QtCore.QObject.connect(self.ui.pushButtonAddAddressBook, QtCore.SIGNAL(
-            "clicked()"), self.click_pushButtonAddAddressBook)
-        QtCore.QObject.connect(self.ui.pushButtonAddSubscription, QtCore.SIGNAL(
-            "clicked()"), self.click_pushButtonAddSubscription)
-        QtCore.QObject.connect(self.ui.pushButtonTTL, QtCore.SIGNAL(
-            "clicked()"), self.click_pushButtonTTL)
-        QtCore.QObject.connect(self.ui.pushButtonClear, QtCore.SIGNAL(
-            "clicked()"), self.click_pushButtonClear)
-        QtCore.QObject.connect(self.ui.pushButtonSend, QtCore.SIGNAL(
-            "clicked()"), self.click_pushButtonSend)
-        QtCore.QObject.connect(self.ui.pushButtonFetchNamecoinID, QtCore.SIGNAL(
-            "clicked()"), self.click_pushButtonFetchNamecoinID)
-        QtCore.QObject.connect(self.ui.actionSettings, QtCore.SIGNAL(
-            "triggered()"), self.click_actionSettings)
-        QtCore.QObject.connect(self.ui.actionAbout, QtCore.SIGNAL(
-            "triggered()"), self.click_actionAbout)
-        QtCore.QObject.connect(self.ui.actionSupport, QtCore.SIGNAL(
-            "triggered()"), self.click_actionSupport)
-        QtCore.QObject.connect(self.ui.actionHelp, QtCore.SIGNAL(
-            "triggered()"), self.click_actionHelp)
+        self.ui.actionExit.triggered.connect(self.quit)
+        self.ui.actionNetworkSwitch.triggered.connect(self.network_switch)
+        self.ui.actionManageKeys.triggered.connect(self.click_actionManageKeys)
+        self.ui.actionDeleteAllTrashedMessages.triggered.connect(
+            self.click_actionDeleteAllTrashedMessages)
+        self.ui.actionRegenerateDeterministicAddresses.triggered.connect(
+            self.click_actionRegenerateDeterministicAddresses)
+        self.ui.actionSettings.triggered.connect(self.click_actionSettings)
+        self.ui.actionAbout.triggered.connect(self.click_actionAbout)
+        self.ui.actionSupport.triggered.connect(self.click_actionSupport)
+        self.ui.actionHelp.triggered.connect(self.click_actionHelp)
+
+        # also used for creating chans.
+        self.ui.pushButtonAddChan.clicked.connect(self.click_actionJoinChan)
+        self.ui.pushButtonNewAddress.clicked.connect(
+            self.click_NewAddressDialog)
+        self.ui.pushButtonAddAddressBook.clicked.connect(
+            self.click_pushButtonAddAddressBook)
+        self.ui.pushButtonAddSubscription.clicked.connect(
+            self.click_pushButtonAddSubscription)
+        self.ui.pushButtonTTL.clicked.connect(self.click_pushButtonTTL)
+        self.ui.pushButtonClear.clicked.connect(self.click_pushButtonClear)
+        self.ui.pushButtonSend.clicked.connect(self.click_pushButtonSend)
+        self.ui.pushButtonFetchNamecoinID.clicked.connect(
+            self.click_pushButtonFetchNamecoinID)
 
     def init_inbox_popup_menu(self, connectSignal=True):
         # Popup menu for the Inbox tab
-        self.ui.inboxContextMenuToolbar = QtGui.QToolBar()
+        self.ui.inboxContextMenuToolbar = QtWidgets.QToolBar()
         # Actions
         self.actionReply = self.ui.inboxContextMenuToolbar.addAction(_translate(
             "MainWindow", "Reply to sender"), self.on_action_InboxReply)
@@ -226,25 +210,22 @@ class MyForm(settingsmixin.SMainWindow):
         self.ui.tableWidgetInbox.setContextMenuPolicy(
             QtCore.Qt.CustomContextMenu)
         if connectSignal:
-            self.connect(self.ui.tableWidgetInbox, QtCore.SIGNAL(
-                'customContextMenuRequested(const QPoint&)'),
+            self.ui.tableWidgetInbox.customContextMenuRequested.connect(
                 self.on_context_menuInbox)
         self.ui.tableWidgetInboxSubscriptions.setContextMenuPolicy(
             QtCore.Qt.CustomContextMenu)
         if connectSignal:
-            self.connect(self.ui.tableWidgetInboxSubscriptions, QtCore.SIGNAL(
-                'customContextMenuRequested(const QPoint&)'),
+            self.ui.tableWidgetInboxSubscriptions.customContextMenuRequested.connect(
                 self.on_context_menuInbox)
         self.ui.tableWidgetInboxChans.setContextMenuPolicy(
             QtCore.Qt.CustomContextMenu)
         if connectSignal:
-            self.connect(self.ui.tableWidgetInboxChans, QtCore.SIGNAL(
-                'customContextMenuRequested(const QPoint&)'),
+            self.ui.tableWidgetInboxChans.customContextMenuRequested.connect(
                 self.on_context_menuInbox)
 
     def init_identities_popup_menu(self, connectSignal=True):
         # Popup menu for the Your Identities tab
-        self.ui.addressContextMenuToolbarYourIdentities = QtGui.QToolBar()
+        self.ui.addressContextMenuToolbarYourIdentities = QtWidgets.QToolBar()
         # Actions
         self.actionNewYourIdentities = self.ui.addressContextMenuToolbarYourIdentities.addAction(_translate(
             "MainWindow", "New"), self.on_action_YourIdentitiesNew)
@@ -278,8 +259,7 @@ class MyForm(settingsmixin.SMainWindow):
         self.ui.treeWidgetYourIdentities.setContextMenuPolicy(
             QtCore.Qt.CustomContextMenu)
         if connectSignal:
-            self.connect(self.ui.treeWidgetYourIdentities, QtCore.SIGNAL(
-                'customContextMenuRequested(const QPoint&)'),
+            self.ui.treeWidgetYourIdentities.customContextMenuRequested.connect(
                 self.on_context_menuYourIdentities)
 
         # load all gui.menu plugins with prefix 'address'
@@ -328,13 +308,12 @@ class MyForm(settingsmixin.SMainWindow):
         self.ui.treeWidgetChans.setContextMenuPolicy(
             QtCore.Qt.CustomContextMenu)
         if connectSignal:
-            self.connect(self.ui.treeWidgetChans, QtCore.SIGNAL(
-                'customContextMenuRequested(const QPoint&)'),
+            self.ui.treeWidgetChans.customContextMenuRequested.connect(
                 self.on_context_menuChan)
 
     def init_addressbook_popup_menu(self, connectSignal=True):
         # Popup menu for the Address Book page
-        self.ui.addressBookContextMenuToolbar = QtGui.QToolBar()
+        self.ui.addressBookContextMenuToolbar = QtWidgets.QToolBar()
         # Actions
         self.actionAddressBookSend = self.ui.addressBookContextMenuToolbar.addAction(
             _translate(
@@ -365,8 +344,7 @@ class MyForm(settingsmixin.SMainWindow):
         self.ui.tableWidgetAddressBook.setContextMenuPolicy(
             QtCore.Qt.CustomContextMenu)
         if connectSignal:
-            self.connect(self.ui.tableWidgetAddressBook, QtCore.SIGNAL(
-                'customContextMenuRequested(const QPoint&)'),
+            self.ui.tableWidgetAddressBook.customContextMenuRequested.connect(
                 self.on_context_menuAddressBook)
 
     def init_subscriptions_popup_menu(self, connectSignal=True):
@@ -394,8 +372,7 @@ class MyForm(settingsmixin.SMainWindow):
         self.ui.treeWidgetSubscriptions.setContextMenuPolicy(
             QtCore.Qt.CustomContextMenu)
         if connectSignal:
-            self.connect(self.ui.treeWidgetSubscriptions, QtCore.SIGNAL(
-                'customContextMenuRequested(const QPoint&)'),
+            self.ui.treeWidgetSubscriptions.customContextMenuRequested.connect(
                 self.on_context_menuSubscriptions)
 
     def init_sent_popup_menu(self, connectSignal=True):
@@ -413,7 +390,7 @@ class MyForm(settingsmixin.SMainWindow):
         self.actionSentReply = self.ui.sentContextMenuToolbar.addAction(
             _translate("MainWindow", "Send update"),
             self.on_action_SentReply)
-        # self.popMenuSent = QtGui.QMenu( self )
+        # self.popMenuSent = QtWidgets.QMenu( self )
         # self.popMenuSent.addAction( self.actionSentClipboard )
         # self.popMenuSent.addAction( self.actionTrashSentMessage )
 
@@ -437,7 +414,6 @@ class MyForm(settingsmixin.SMainWindow):
         if treeWidget.isSortingEnabled():
             treeWidget.setSortingEnabled(False)
 
-        widgets = {}
         i = 0
         while i < treeWidget.topLevelItemCount():
             widget = treeWidget.topLevelItem(i)
@@ -455,7 +431,8 @@ class MyForm(settingsmixin.SMainWindow):
             while j < widget.childCount():
                 subwidget = widget.child(j)
                 try:
-                    subwidget.setUnreadCount(db[toAddress][subwidget.folderName]['count'])
+                    subwidget.setUnreadCount(
+                        db[toAddress][subwidget.folderName]['count'])
                     unread += db[toAddress][subwidget.folderName]['count']
                     db[toAddress].pop(subwidget.folderName, None)
                 except:
@@ -469,7 +446,8 @@ class MyForm(settingsmixin.SMainWindow):
                 j = 0
                 for f, c in db[toAddress].iteritems():
                     try:
-                        subwidget = Ui_FolderWidget(widget, j, toAddress, f, c['count'])
+                        subwidget = Ui_FolderWidget(
+                            widget, j, toAddress, f, c['count'])
                     except KeyError:
                         subwidget = Ui_FolderWidget(widget, j, toAddress, f, 0)
                     j += 1
@@ -479,15 +457,21 @@ class MyForm(settingsmixin.SMainWindow):
 
         i = 0
         for toAddress in db:
-            widget = Ui_SubscriptionWidget(treeWidget, i, toAddress, db[toAddress]["inbox"]['count'], db[toAddress]["inbox"]['label'], db[toAddress]["inbox"]['enabled'])
+            widget = Ui_SubscriptionWidget(
+                treeWidget, i, toAddress, db[toAddress]["inbox"]['count'],
+                db[toAddress]["inbox"]['label'],
+                db[toAddress]["inbox"]['enabled'])
             j = 0
             unread = 0
             for folder in folders:
                 try:
-                    subwidget = Ui_FolderWidget(widget, j, toAddress, folder, db[toAddress][folder]['count'])
+                    subwidget = Ui_FolderWidget(
+                        widget, j, toAddress, folder,
+                        db[toAddress][folder]['count'])
                     unread += db[toAddress][folder]['count']
                 except KeyError:
-                    subwidget = Ui_FolderWidget(widget, j, toAddress, folder, 0)
+                    subwidget = Ui_FolderWidget(
+                        widget, j, toAddress, folder, 0)
                 j += 1
             widget.setUnreadCount(unread)
             i += 1
@@ -520,8 +504,8 @@ class MyForm(settingsmixin.SMainWindow):
                 toAddress, 'enabled')
             isChan = BMConfigParser().safeGetBoolean(
                 toAddress, 'chan')
-            isMaillinglist = BMConfigParser().safeGetBoolean(
-                toAddress, 'mailinglist')
+            # isMaillinglist = BMConfigParser().safeGetBoolean(
+            #     toAddress, 'mailinglist')
 
             if treeWidget == self.ui.treeWidgetYourIdentities:
                 if isChan:
@@ -555,7 +539,6 @@ class MyForm(settingsmixin.SMainWindow):
         if treeWidget.isSortingEnabled():
             treeWidget.setSortingEnabled(False)
 
-        widgets = {}
         i = 0
         while i < treeWidget.topLevelItemCount():
             widget = treeWidget.topLevelItem(i)
@@ -616,7 +599,7 @@ class MyForm(settingsmixin.SMainWindow):
         treeWidget.setSortingEnabled(True)
 
     def __init__(self, parent=None):
-        QtGui.QWidget.__init__(self, parent)
+        super(MyForm, self).__init__(parent)
         self.ui = Ui_MainWindow()
         self.ui.setupUi(self)
 
@@ -634,11 +617,13 @@ class MyForm(settingsmixin.SMainWindow):
                 addressInKeysFile)
             if addressVersionNumber == 1:
                 displayMsg = _translate(
-                    "MainWindow", "One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. "
-                    + "May we delete it now?").arg(addressInKeysFile)
-                reply = QtGui.QMessageBox.question(
-                    self, 'Message', displayMsg, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
-                if reply == QtGui.QMessageBox.Yes:
+                    "MainWindow",
+                    "One of your addresses, {0}, is an old version 1"
+                    " address. Version 1 addresses are no longer supported."
+                    " May we delete it now?").format(addressInKeysFile)
+                reply = QtWidgets.QMessageBox.question(
+                    self, 'Message', displayMsg, QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
+                if reply == QtWidgets.QMessageBox.Yes:
                     BMConfigParser().remove_section(addressInKeysFile)
                     BMConfigParser().save()
 
@@ -682,107 +667,97 @@ class MyForm(settingsmixin.SMainWindow):
         self.rerenderSubscriptions()
 
         # Initialize the inbox search
-        QtCore.QObject.connect(self.ui.inboxSearchLineEdit, QtCore.SIGNAL(
-            "returnPressed()"), self.inboxSearchLineEditReturnPressed)
-        QtCore.QObject.connect(self.ui.inboxSearchLineEditSubscriptions, QtCore.SIGNAL(
-            "returnPressed()"), self.inboxSearchLineEditReturnPressed)
-        QtCore.QObject.connect(self.ui.inboxSearchLineEditChans, QtCore.SIGNAL(
-            "returnPressed()"), self.inboxSearchLineEditReturnPressed)
-        QtCore.QObject.connect(self.ui.inboxSearchLineEdit, QtCore.SIGNAL(
-            "textChanged(QString)"), self.inboxSearchLineEditUpdated)
-        QtCore.QObject.connect(self.ui.inboxSearchLineEditSubscriptions, QtCore.SIGNAL(
-            "textChanged(QString)"), self.inboxSearchLineEditUpdated)
-        QtCore.QObject.connect(self.ui.inboxSearchLineEditChans, QtCore.SIGNAL(
-            "textChanged(QString)"), self.inboxSearchLineEditUpdated)
+        for line_edit in (
+            self.ui.inboxSearchLineEdit,
+            self.ui.inboxSearchLineEditSubscriptions,
+            self.ui.inboxSearchLineEditChans,
+        ):
+            line_edit.returnPressed.connect(
+                self.inboxSearchLineEditReturnPressed)
+            line_edit.textChanged.connect(
+                self.inboxSearchLineEditUpdated)
 
         # Initialize addressbook
-        QtCore.QObject.connect(self.ui.tableWidgetAddressBook, QtCore.SIGNAL(
-            "itemChanged(QTableWidgetItem *)"), self.tableWidgetAddressBookItemChanged)
+        self.ui.tableWidgetAddressBook.itemChanged.connect(
+            self.tableWidgetAddressBookItemChanged)
+
         # This is necessary for the completer to work if multiple recipients
-        QtCore.QObject.connect(self.ui.lineEditTo, QtCore.SIGNAL(
-            "cursorPositionChanged(int, int)"), self.ui.lineEditTo.completer().onCursorPositionChanged)
+        self.ui.lineEditTo.cursorPositionChanged.connect(
+            self.ui.lineEditTo.completer().onCursorPositionChanged)
 
         # show messages from message list
-        QtCore.QObject.connect(self.ui.tableWidgetInbox, QtCore.SIGNAL(
-            "itemSelectionChanged ()"), self.tableWidgetInboxItemClicked)
-        QtCore.QObject.connect(self.ui.tableWidgetInboxSubscriptions, QtCore.SIGNAL(
-            "itemSelectionChanged ()"), self.tableWidgetInboxItemClicked)
-        QtCore.QObject.connect(self.ui.tableWidgetInboxChans, QtCore.SIGNAL(
-            "itemSelectionChanged ()"), self.tableWidgetInboxItemClicked)
+        for table_widget in (
+            self.ui.tableWidgetInbox,
+            self.ui.tableWidgetInboxSubscriptions,
+            self.ui.tableWidgetInboxChans
+        ):
+            table_widget.itemSelectionChanged.connect(
+                self.tableWidgetInboxItemClicked)
 
         # tree address lists
-        QtCore.QObject.connect(self.ui.treeWidgetYourIdentities, QtCore.SIGNAL(
-            "itemSelectionChanged ()"), self.treeWidgetItemClicked)
-        QtCore.QObject.connect(self.ui.treeWidgetYourIdentities, QtCore.SIGNAL(
-            "itemChanged (QTreeWidgetItem *, int)"), self.treeWidgetItemChanged)
-        QtCore.QObject.connect(self.ui.treeWidgetSubscriptions, QtCore.SIGNAL(
-            "itemSelectionChanged ()"), self.treeWidgetItemClicked)
-        QtCore.QObject.connect(self.ui.treeWidgetSubscriptions, QtCore.SIGNAL(
-            "itemChanged (QTreeWidgetItem *, int)"), self.treeWidgetItemChanged)
-        QtCore.QObject.connect(self.ui.treeWidgetChans, QtCore.SIGNAL(
-            "itemSelectionChanged ()"), self.treeWidgetItemClicked)
-        QtCore.QObject.connect(self.ui.treeWidgetChans, QtCore.SIGNAL(
-            "itemChanged (QTreeWidgetItem *, int)"), self.treeWidgetItemChanged)
-        QtCore.QObject.connect(
-            self.ui.tabWidget, QtCore.SIGNAL("currentChanged(int)"),
-            self.tabWidgetCurrentChanged
-        )
+        for tree_widget in (
+            self.ui.treeWidgetYourIdentities,
+            self.ui.treeWidgetSubscriptions,
+            self.ui.treeWidgetChans
+        ):
+            tree_widget.itemSelectionChanged.connect(
+                self.treeWidgetItemClicked)
+            tree_widget.itemChanged.connect(self.treeWidgetItemChanged)
+
+        self.ui.tabWidget.currentChanged.connect(self.tabWidgetCurrentChanged)
 
         # Put the colored icon on the status bar
         # self.pushButtonStatusIcon.setIcon(QIcon(":/newPrefix/images/yellowicon.png"))
         self.setStatusBar(BMStatusBar())
         self.statusbar = self.statusBar()
 
-        self.pushButtonStatusIcon = QtGui.QPushButton(self)
+        self.pushButtonStatusIcon = QtWidgets.QPushButton(self)
         self.pushButtonStatusIcon.setText('')
         self.pushButtonStatusIcon.setIcon(
             QtGui.QIcon(':/newPrefix/images/redicon.png'))
         self.pushButtonStatusIcon.setFlat(True)
         self.statusbar.insertPermanentWidget(0, self.pushButtonStatusIcon)
-        QtCore.QObject.connect(self.pushButtonStatusIcon, QtCore.SIGNAL(
-            "clicked()"), self.click_pushButtonStatusIcon)
+        self.pushButtonStatusIcon.clicked.connect(
+            self.click_pushButtonStatusIcon)
 
         self.unreadCount = 0
 
         # Set the icon sizes for the identicons
-        identicon_size = 3*7
-        self.ui.tableWidgetInbox.setIconSize(QtCore.QSize(identicon_size, identicon_size))
-        self.ui.treeWidgetChans.setIconSize(QtCore.QSize(identicon_size, identicon_size))
-        self.ui.treeWidgetYourIdentities.setIconSize(QtCore.QSize(identicon_size, identicon_size))
-        self.ui.treeWidgetSubscriptions.setIconSize(QtCore.QSize(identicon_size, identicon_size))
-        self.ui.tableWidgetAddressBook.setIconSize(QtCore.QSize(identicon_size, identicon_size))
-        
+        identicon_size = 3 * 7
+        for widget in (
+            self.ui.tableWidgetInbox, self.ui.treeWidgetChans,
+            self.ui.treeWidgetYourIdentities, self.ui.treeWidgetSubscriptions,
+            self.ui.tableWidgetAddressBook
+        ):
+            widget.setIconSize(QtCore.QSize(identicon_size, identicon_size))
+
         self.UISignalThread = UISignaler.get()
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "writeNewAddressToTable(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), self.writeNewAddressToTable)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "updateStatusBar(PyQt_PyObject)"), self.updateStatusBar)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "updateSentItemStatusByToAddress(PyQt_PyObject,PyQt_PyObject)"), self.updateSentItemStatusByToAddress)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "updateSentItemStatusByAckdata(PyQt_PyObject,PyQt_PyObject)"), self.updateSentItemStatusByAckdata)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "displayNewInboxMessage(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), self.displayNewInboxMessage)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "displayNewSentMessage(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), self.displayNewSentMessage)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "setStatusIcon(PyQt_PyObject)"), self.setStatusIcon)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "changedInboxUnread(PyQt_PyObject)"), self.changedInboxUnread)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "rerenderMessagelistFromLabels()"), self.rerenderMessagelistFromLabels)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "rerenderMessgelistToLabels()"), self.rerenderMessagelistToLabels)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "rerenderAddressBook()"), self.rerenderAddressBook)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "rerenderSubscriptions()"), self.rerenderSubscriptions)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "removeInboxRowByMsgid(PyQt_PyObject)"), self.removeInboxRowByMsgid)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "newVersionAvailable(PyQt_PyObject)"), self.newVersionAvailable)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "displayAlert(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), self.displayAlert)
+        self.UISignalThread.writeNewAddressToTable.connect(
+            self.writeNewAddressToTable)
+        self.UISignalThread.updateStatusBar.connect(self.updateStatusBar)
+        self.UISignalThread.updateSentItemStatusByToAddress.connect(
+            self.updateSentItemStatusByToAddress)
+        self.UISignalThread.updateSentItemStatusByAckdata.connect(
+            self.updateSentItemStatusByAckdata)
+        self.UISignalThread.displayNewInboxMessage.connect(
+            self.displayNewInboxMessage)
+        self.UISignalThread.displayNewSentMessage.connect(
+            self.displayNewSentMessage)
+        self.UISignalThread.setStatusIcon.connect(self.setStatusIcon)
+        self.UISignalThread.changedInboxUnread.connect(self.changedInboxUnread)
+        self.UISignalThread.rerenderMessagelistFromLabels.connect(
+            self.rerenderMessagelistFromLabels)
+        self.UISignalThread.rerenderMessagelistToLabels.connect(
+            self.rerenderMessagelistToLabels)
+        self.UISignalThread.rerenderAddressBook.connect(
+            self.rerenderAddressBook)
+        self.UISignalThread.rerenderSubscriptions.connect(
+            self.rerenderSubscriptions)
+        self.UISignalThread.removeInboxRowByMsgid.connect(
+            self.removeInboxRowByMsgid)
+        self.UISignalThread.newVersionAvailable.connect(
+            self.newVersionAvailable)
+        self.UISignalThread.displayAlert.connect(self.displayAlert)
         self.UISignalThread.start()
 
         # Key press in tree view
@@ -811,16 +786,15 @@ class MyForm(settingsmixin.SMainWindow):
 
         # Put the TTL slider in the correct spot
         TTL = BMConfigParser().getint('bitmessagesettings', 'ttl')
-        if TTL < 3600: # an hour
+        if TTL < 3600:  # an hour
             TTL = 3600
-        elif TTL > 28*24*60*60: # 28 days
-            TTL = 28*24*60*60
-        self.ui.horizontalSliderTTL.setSliderPosition((TTL - 3600) ** (1/3.199))
+        elif TTL > 28 * 24 * 60 * 60:  # 28 days
+            TTL = 28 * 24 * 60 * 60
+        self.ui.horizontalSliderTTL.setSliderPosition(
+            (TTL - 3600) ** (1 / 3.199))
         self.updateHumanFriendlyTTLDescription(TTL)
-        
-        QtCore.QObject.connect(self.ui.horizontalSliderTTL, QtCore.SIGNAL(
-            "valueChanged(int)"), self.updateTTL)
 
+        self.ui.horizontalSliderTTL.valueChanged.connect(self.updateTTL)
         self.initSettings()
         self.resetNamecoinConnection()
         self.sqlInit()
@@ -875,21 +849,25 @@ class MyForm(settingsmixin.SMainWindow):
         BMConfigParser().save()
 
     def updateHumanFriendlyTTLDescription(self, TTL):
-        numberOfHours = int(round(TTL / (60*60)))
+        numberOfHours = int(round(TTL / (60 * 60)))
         font = QtGui.QFont()
         stylesheet = ""
 
         if numberOfHours < 48:
             self.ui.labelHumanFriendlyTTLDescription.setText(
-                _translate("MainWindow", "%n hour(s)", None, QtCore.QCoreApplication.CodecForTr, numberOfHours) +
-                ", " +
-                _translate("MainWindow", "not recommended for chans", None, QtCore.QCoreApplication.CodecForTr)
-                )
+                _translate(
+                    "MainWindow", "%n hour(s)", None, numberOfHours
+                ) + ",\n" +
+                _translate("MainWindow", "not recommended for chans")
+            )
             stylesheet = "QLabel { color : red; }"
             font.setBold(True)
         else:
-            numberOfDays = int(round(TTL / (24*60*60)))
-            self.ui.labelHumanFriendlyTTLDescription.setText(_translate("MainWindow", "%n day(s)", None, QtCore.QCoreApplication.CodecForTr, numberOfDays))
+            numberOfDays = int(round(TTL / (24 * 60 * 60)))
+            self.ui.labelHumanFriendlyTTLDescription.setText(
+                _translate(
+                    "MainWindow", "%n day(s)", None, numberOfDays)
+            )
             font.setBold(False)
         self.ui.labelHumanFriendlyTTLDescription.setStyleSheet(stylesheet)
         self.ui.labelHumanFriendlyTTLDescription.setFont(font)
@@ -1117,20 +1095,19 @@ class MyForm(settingsmixin.SMainWindow):
         elif status == 'msgsent':
             statusText = _translate(
                 "MainWindow",
-                "Message sent. Waiting for acknowledgement. Sent at %1"
-            ).arg(l10n.formatTimestamp(lastactiontime))
+                "Message sent. Waiting for acknowledgement. Sent at {0}"
+            ).format(l10n.formatTimestamp(lastactiontime))
         elif status == 'msgsentnoackexpected':
             statusText = _translate(
-                "MainWindow", "Message sent. Sent at %1"
-            ).arg(l10n.formatTimestamp(lastactiontime))
+                "MainWindow", "Message sent. Sent at {0}"
+            ).format(l10n.formatTimestamp(lastactiontime))
         elif status == 'doingmsgpow':
             statusText = _translate(
                 "MainWindow", "Doing work necessary to send message.")
         elif status == 'ackreceived':
             statusText = _translate(
-                "MainWindow",
-                "Acknowledgement of the message received %1"
-            ).arg(l10n.formatTimestamp(lastactiontime))
+                "MainWindow", "Acknowledgement of the message received {0}"
+            ).format(l10n.formatTimestamp(lastactiontime))
         elif status == 'broadcastqueued':
             statusText = _translate(
                 "MainWindow", "Broadcast queued.")
@@ -1138,36 +1115,34 @@ class MyForm(settingsmixin.SMainWindow):
             statusText = _translate(
                 "MainWindow", "Doing work necessary to send broadcast.")
         elif status == 'broadcastsent':
-            statusText = _translate("MainWindow", "Broadcast on %1").arg(
-                l10n.formatTimestamp(lastactiontime))
+            statusText = _translate("MainWindow", "Broadcast on {0}").format(
+                l10n.formatTimestamp(lastactiontime)
+            )
         elif status == 'toodifficult':
             statusText = _translate(
                 "MainWindow",
                 "Problem: The work demanded by the recipient is more"
-                " difficult than you are willing to do. %1"
-            ).arg(l10n.formatTimestamp(lastactiontime))
+                " difficult than you are willing to do. {0}"
+            ).format(l10n.formatTimestamp(lastactiontime))
         elif status == 'badkey':
             statusText = _translate(
                 "MainWindow",
                 "Problem: The recipient\'s encryption key is no good."
-                " Could not encrypt message. %1"
-            ).arg(l10n.formatTimestamp(lastactiontime))
+                " Could not encrypt message. {0}"
+            ).format(l10n.formatTimestamp(lastactiontime))
         elif status == 'forcepow':
             statusText = _translate(
                 "MainWindow",
                 "Forced difficulty override. Send should start soon.")
         else:
             statusText = _translate(
-                "MainWindow", "Unknown status: %1 %2").arg(status).arg(
-                l10n.formatTimestamp(lastactiontime))
+                "MainWindow", "Unknown status: {0} {1}"
+            ).format(status, l10n.formatTimestamp(lastactiontime))
 
         items = [
-            MessageList_AddressWidget(
-                toAddress, unicode(acct.toLabel, 'utf-8')),
-            MessageList_AddressWidget(
-                fromAddress, unicode(acct.fromLabel, 'utf-8')),
-            MessageList_SubjectWidget(
-                str(subject), unicode(acct.subject, 'utf-8', 'replace')),
+            MessageList_AddressWidget(toAddress, acct.toLabel),
+            MessageList_AddressWidget(fromAddress, acct.fromLabel),
+            MessageList_SubjectWidget(subject, acct.subject),
             MessageList_TimeWidget(
                 statusText, False, lastactiontime, ackdata)]
         self.addMessageListItem(tableWidget, items)
@@ -1187,13 +1162,9 @@ class MyForm(settingsmixin.SMainWindow):
         acct.parseMessage(toAddress, fromAddress, subject, "")
 
         items = [
-            MessageList_AddressWidget(
-                toAddress, unicode(acct.toLabel, 'utf-8'), not read),
-            MessageList_AddressWidget(
-                fromAddress, unicode(acct.fromLabel, 'utf-8'), not read),
-            MessageList_SubjectWidget(
-                str(subject), unicode(acct.subject, 'utf-8', 'replace'),
-                not read),
+            MessageList_AddressWidget(toAddress, acct.toLabel, not read),
+            MessageList_AddressWidget(fromAddress, acct.fromLabel, not read),
+            MessageList_SubjectWidget(subject, acct.subject, not read),
             MessageList_TimeWidget(
                 l10n.formatTimestamp(received), not read, received, msgid)
         ]
@@ -1262,7 +1233,7 @@ class MyForm(settingsmixin.SMainWindow):
         for row in queryreturn:
             toAddress, fromAddress, subject, _, msgid, received, read = row
             self.addMessageListItemInbox(
-                tableWidget, toAddress, fromAddress, subject,
+                tableWidget, toAddress, fromAddress, unicode(subject, 'utf-8'),
                 msgid, received, read)
 
         tableWidget.horizontalHeader().setSortIndicator(
@@ -1276,23 +1247,21 @@ class MyForm(settingsmixin.SMainWindow):
     # create application indicator
     def appIndicatorInit(self, app):
         self.initTrayIcon("can-icon-24px-red.png", app)
-        traySignal = "activated(QSystemTrayIcon::ActivationReason)"
-        QtCore.QObject.connect(self.tray, QtCore.SIGNAL(
-            traySignal), self.__icon_activated)
+        self.tray.activated.connect(self.__icon_activated)
 
-        m = QtGui.QMenu()
+        m = QtWidgets.QMenu()
 
-        self.actionStatus = QtGui.QAction(_translate(
+        self.actionStatus = QtWidgets.QAction(_translate(
             "MainWindow", "Not Connected"), m, checkable=False)
         m.addAction(self.actionStatus)
 
         # separator
-        actionSeparator = QtGui.QAction('', m, checkable=False)
+        actionSeparator = QtWidgets.QAction('', m, checkable=False)
         actionSeparator.setSeparator(True)
         m.addAction(actionSeparator)
 
         # show bitmessage
-        self.actionShow = QtGui.QAction(_translate(
+        self.actionShow = QtWidgets.QAction(_translate(
             "MainWindow", "Show Bitmessage"), m, checkable=True)
         self.actionShow.setChecked(not BMConfigParser().getboolean(
             'bitmessagesettings', 'startintray'))
@@ -1301,7 +1270,7 @@ class MyForm(settingsmixin.SMainWindow):
             m.addAction(self.actionShow)
 
         # quiet mode
-        self.actionQuiet = QtGui.QAction(_translate(
+        self.actionQuiet = QtWidgets.QAction(_translate(
             "MainWindow", "Quiet Mode"), m, checkable=True)
         self.actionQuiet.setChecked(not BMConfigParser().getboolean(
             'bitmessagesettings', 'showtraynotifications'))
@@ -1309,25 +1278,25 @@ class MyForm(settingsmixin.SMainWindow):
         m.addAction(self.actionQuiet)
 
         # Send
-        actionSend = QtGui.QAction(_translate(
+        actionSend = QtWidgets.QAction(_translate(
             "MainWindow", "Send"), m, checkable=False)
         actionSend.triggered.connect(self.appIndicatorSend)
         m.addAction(actionSend)
 
         # Subscribe
-        actionSubscribe = QtGui.QAction(_translate(
+        actionSubscribe = QtWidgets.QAction(_translate(
             "MainWindow", "Subscribe"), m, checkable=False)
         actionSubscribe.triggered.connect(self.appIndicatorSubscribe)
         m.addAction(actionSubscribe)
 
         # Channels
-        actionSubscribe = QtGui.QAction(_translate(
+        actionSubscribe = QtWidgets.QAction(_translate(
             "MainWindow", "Channel"), m, checkable=False)
         actionSubscribe.triggered.connect(self.appIndicatorChannel)
         m.addAction(actionSubscribe)
 
         # separator
-        actionSeparator = QtGui.QAction('', m, checkable=False)
+        actionSeparator = QtWidgets.QAction('', m, checkable=False)
         actionSeparator.setSeparator(True)
         m.addAction(actionSeparator)
 
@@ -1447,8 +1416,6 @@ class MyForm(settingsmixin.SMainWindow):
             self.tray.showMessage(title, subtitle, 1, 2000)
 
         self._notifier = _simple_notify
-        # does nothing if isAvailable returns false
-        self._player = QtGui.QSound.play
 
         if not get_plugins:
             return
@@ -1461,7 +1428,10 @@ class MyForm(settingsmixin.SMainWindow):
 
         self._theme_player = get_plugin('notification.sound', 'theme')
 
-        if not QtGui.QSound.isAvailable():
+        try:
+            from PyQt5 import QtMultimedia
+            self._player = QtMultimedia.QSound.play
+        except ImportError:
             _plugin = get_plugin(
                 'notification.sound', 'file', fallback='file.fallback')
             if _plugin:
@@ -1485,7 +1455,7 @@ class MyForm(settingsmixin.SMainWindow):
         if event.key() == QtCore.Qt.Key_Delete:
             self.on_action_AddressBookDelete()
         else:
-            return QtGui.QTableWidget.keyPressEvent(
+            return QtWidgets.QTableWidget.keyPressEvent(
                 self.ui.tableWidgetAddressBook, event)
 
     # inbox / sent
@@ -1500,14 +1470,14 @@ class MyForm(settingsmixin.SMainWindow):
         """This method handles keypress events for all widgets on MyForm"""
         messagelist = self.getCurrentMessagelist()
         if event.key() == QtCore.Qt.Key_Delete:
-            if isinstance(focus, (MessageView, QtGui.QTableWidget)):
+            if isinstance(focus, (MessageView, QtWidgets.QTableWidget)):
                 folder = self.getCurrentFolder()
                 if folder == "sent":
                     self.on_action_SentTrash()
                 else:
                     self.on_action_InboxTrash()
             event.ignore()
-        elif QtGui.QApplication.queryKeyboardModifiers() == QtCore.Qt.NoModifier:
+        elif QtWidgets.QApplication.queryKeyboardModifiers() == QtCore.Qt.NoModifier:
             if event.key() == QtCore.Qt.Key_N:
                 currentRow = messagelist.currentRow()
                 if currentRow < messagelist.rowCount() - 1:
@@ -1546,38 +1516,71 @@ class MyForm(settingsmixin.SMainWindow):
             return
         if isinstance(focus, MessageView):
             return MessageView.keyPressEvent(focus, event)
-        if isinstance(focus, QtGui.QTableWidget):
-            return QtGui.QTableWidget.keyPressEvent(focus, event)
-        if isinstance(focus, QtGui.QTreeWidget):
-            return QtGui.QTreeWidget.keyPressEvent(focus, event)
+        elif isinstance(focus, QtWidgets.QTableWidget):
+            return QtWidgets.QTableWidget.keyPressEvent(focus, event)
+        elif isinstance(focus, QtWidgets.QTreeWidget):
+            return QtWidgets.QTreeWidget.keyPressEvent(focus, event)
 
     # menu button 'manage keys'
     def click_actionManageKeys(self):
         if 'darwin' in sys.platform or 'linux' in sys.platform:
             if state.appdata == '':
-                # reply = QtGui.QMessageBox.information(self, 'keys.dat?','You
+                # reply = QtWidgets.QMessageBox.information(self, 'keys.dat?','You
                 # may manage your keys by editing the keys.dat file stored in
                 # the same directory as this program. It is important that you
                 # back up this file.', QMessageBox.Ok)
-                reply = QtGui.QMessageBox.information(self, 'keys.dat?', _translate(
-                    "MainWindow", "You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file."), QtGui.QMessageBox.Ok)
+                reply = QtWidgets.QMessageBox.information(
+                    self, 'keys.dat?', _translate(
+                        "MainWindow",
+                        "You may manage your keys by editing the keys.dat"
+                        " file stored in the same directory as this"
+                        " program. It is important that you back up this"
+                        " file."), QtWidgets.QMessageBox.Ok)
 
             else:
-                QtGui.QMessageBox.information(self, 'keys.dat?', _translate(
-                    "MainWindow", "You may manage your keys by editing the keys.dat file stored in\n %1 \nIt is important that you back up this file.").arg(state.appdata), QtGui.QMessageBox.Ok)
+                QtWidgets.QMessageBox.information(
+                    self, 'keys.dat?',
+                    _translate(
+                        "MainWindow",
+                        "You may manage your keys by editing the keys.dat"
+                        " file stored in\n {0} \nIt is important that you"
+                        " back up this file."
+                    ).format(state.appdata),
+                    QtWidgets.QMessageBox.Ok
+                )
         elif sys.platform == 'win32' or sys.platform == 'win64':
             if state.appdata == '':
-                reply = QtGui.QMessageBox.question(self, _translate("MainWindow", "Open keys.dat?"), _translate(
-                    "MainWindow", "You may manage your keys by editing the keys.dat file stored in the same directory as this program. It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)"), QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
+                reply = QtWidgets.QMessageBox.question(
+                    self, _translate("MainWindow", "Open keys.dat?"),
+                    _translate(
+                        "MainWindow",
+                        "You may manage your keys by editing the keys.dat"
+                        " file stored in the same directory as this"
+                        " program. It is important that you back up this"
+                        " file. Would you like to open the file now?"
+                        " (Be sure to close Bitmessage before making any"
+                        " changes.)"
+                    ), QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
             else:
-                reply = QtGui.QMessageBox.question(self, _translate("MainWindow", "Open keys.dat?"), _translate(
-                    "MainWindow", "You may manage your keys by editing the keys.dat file stored in\n %1 \nIt is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)").arg(state.appdata), QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
-            if reply == QtGui.QMessageBox.Yes:
+                reply = QtWidgets.QMessageBox.question(
+                    self,
+                    _translate("MainWindow", "Open keys.dat?"),
+                    _translate(
+                        "MainWindow",
+                        "You may manage your keys by editing the keys.dat"
+                        " file stored in\n {0} \nIt is important that you"
+                        " back up this file. Would you like to open the"
+                        " file now? (Be sure to close Bitmessage before"
+                        " making any changes.)"
+                    ).format(state.appdata),
+                    QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No
+                )
+            if reply == QtWidgets.QMessageBox.Yes:
                 openKeysFile()
 
     # menu button 'delete all treshed messages'
     def click_actionDeleteAllTrashedMessages(self):
-        if QtGui.QMessageBox.question(self, _translate("MainWindow", "Delete trash?"), _translate("MainWindow", "Are you sure you want to delete all trashed messages?"), QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) == QtGui.QMessageBox.No:
+        if QtWidgets.QMessageBox.question(self, _translate("MainWindow", "Delete trash?"), _translate("MainWindow", "Are you sure you want to delete all trashed messages?"), QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No) == QtWidgets.QMessageBox.No:
             return
         sqlStoredProcedure('deleteandvacuume')
         self.rerenderTabTreeMessages()
@@ -1595,7 +1598,7 @@ class MyForm(settingsmixin.SMainWindow):
         dialog = dialogs.RegenerateAddressesDialog(self)
         if dialog.exec_():
             if dialog.lineEditPassphrase.text() == "":
-                QtGui.QMessageBox.about(
+                QtWidgets.QMessageBox.about(
                     self, _translate("MainWindow", "bad passphrase"),
                     _translate(
                         "MainWindow",
@@ -1608,7 +1611,7 @@ class MyForm(settingsmixin.SMainWindow):
                 addressVersionNumber = int(
                     dialog.lineEditAddressVersionNumber.text())
             except:
-                QtGui.QMessageBox.about(
+                QtWidgets.QMessageBox.about(
                     self,
                     _translate("MainWindow", "Bad address version number"),
                     _translate(
@@ -1618,7 +1621,7 @@ class MyForm(settingsmixin.SMainWindow):
                     ))
                 return
             if addressVersionNumber < 3 or addressVersionNumber > 4:
-                QtGui.QMessageBox.about(
+                QtWidgets.QMessageBox.about(
                     self,
                     _translate("MainWindow", "Bad address version number"),
                     _translate(
@@ -1631,7 +1634,7 @@ class MyForm(settingsmixin.SMainWindow):
                 addressVersionNumber, streamNumberForAddress,
                 "regenerated deterministic address",
                 dialog.spinBoxNumberOfAddressesToMake.value(),
-                dialog.lineEditPassphrase.text().toUtf8(),
+                dialog.lineEditPassphrase.text().encode('utf-8'),
                 dialog.checkBoxEighteenByteRipe.isChecked()
             ))
             self.ui.tabWidget.setCurrentIndex(
@@ -1655,13 +1658,6 @@ class MyForm(settingsmixin.SMainWindow):
             else:
                 self._firstrun = False
 
-    def showMigrationWizard(self, level):
-        self.migrationWizardInstance = Ui_MigrationWizard(["a"])
-        if self.migrationWizardInstance.exec_():
-            pass
-        else:
-            pass
-
     def changeEvent(self, event):
         if event.type() == QtCore.QEvent.LanguageChange:
             self.ui.retranslateUi(self)
@@ -1682,7 +1678,7 @@ class MyForm(settingsmixin.SMainWindow):
                 pass
 
     def __icon_activated(self, reason):
-        if reason == QtGui.QSystemTrayIcon.Trigger:
+        if reason == QtWidgets.QSystemTrayIcon.Trigger:
             self.actionShow.setChecked(not self.actionShow.isChecked())
             self.appIndicatorShowOrHideWindow()
 
@@ -1755,7 +1751,7 @@ class MyForm(settingsmixin.SMainWindow):
 
     def initTrayIcon(self, iconFileName, app):
         self.currentTrayIconFileName = iconFileName
-        self.tray = QtGui.QSystemTrayIcon(
+        self.tray = QtWidgets.QSystemTrayIcon(
             self.calcTrayIcon(iconFileName, self.findInboxUnreadCount()), app)
 
     def setTrayIconFile(self, iconFileName):
@@ -1785,6 +1781,7 @@ class MyForm(settingsmixin.SMainWindow):
                 fontMetrics = QtGui.QFontMetrics(font)
                 rect = fontMetrics.boundingRect(txt)
             # draw text
+            # painter = QtGui.QPainter(self)
             painter = QtGui.QPainter()
             painter.begin(pixmap)
             painter.setPen(
@@ -1835,8 +1832,11 @@ class MyForm(settingsmixin.SMainWindow):
                 if toAddress == rowAddress:
                     sent.item(i, 3).setToolTip(textToDisplay)
                     try:
-                        newlinePosition = textToDisplay.indexOf('\n')
-                    except: # If someone misses adding a "_translate" to a string before passing it to this function, this function won't receive a qstring which will cause an exception.
+                        newlinePosition = textToDisplay.find('\n')
+                    # If someone misses adding a "_translate" to a string
+                    # before passing it to this function
+                    # ? why textToDisplay isn't unicode
+                    except AttributeError:
                         newlinePosition = 0
                     if newlinePosition > 1:
                         sent.item(i, 3).setText(
@@ -1845,8 +1845,6 @@ class MyForm(settingsmixin.SMainWindow):
                         sent.item(i, 3).setText(textToDisplay)
 
     def updateSentItemStatusByAckdata(self, ackdata, textToDisplay):
-        if type(ackdata) is str:
-            ackdata = QtCore.QByteArray(ackdata)
         for sent in (
             self.ui.tableWidgetInbox,
             self.ui.tableWidgetInboxSubscriptions,
@@ -1856,21 +1854,22 @@ class MyForm(settingsmixin.SMainWindow):
             if self.getCurrentFolder(treeWidget) != "sent":
                 continue
             for i in range(sent.rowCount()):
-                toAddress = sent.item(i, 0).data(QtCore.Qt.UserRole)
-                tableAckdata = sent.item(i, 3).data()
-                status, addressVersionNumber, streamNumber, ripe = decodeAddress(
-                    toAddress)
-                if ackdata == tableAckdata:
+                # toAddress = sent.item(i, 0).data(QtCore.Qt.UserRole)
+                # decodeAddress(toAddress)
+
+                if sent.item(i, 3).data() == ackdata:
                     sent.item(i, 3).setToolTip(textToDisplay)
                     try:
-                        newlinePosition = textToDisplay.indexOf('\n')
-                    except: # If someone misses adding a "_translate" to a string before passing it to this function, this function won't receive a qstring which will cause an exception.
+                        newlinePosition = textToDisplay.find('\n')
+                    # If someone misses adding a "_translate" to a string
+                    # before passing it to this function
+                    # ? why textToDisplay isn't unicode
+                    except AttributeError:
                         newlinePosition = 0
                     if newlinePosition > 1:
-                        sent.item(i, 3).setText(
-                            textToDisplay[:newlinePosition])
-                    else:
-                        sent.item(i, 3).setText(textToDisplay)
+                        textToDisplay = textToDisplay[:newlinePosition]
+
+                    sent.item(i, 3).setText(textToDisplay)
 
     def removeInboxRowByMsgid(self, msgid):
         # msgid and inventoryHash are the same thing
@@ -1898,33 +1897,42 @@ class MyForm(settingsmixin.SMainWindow):
         self.notifiedNewVersion = ".".join(str(n) for n in version)
         self.updateStatusBar(_translate(
             "MainWindow",
-            "New version of PyBitmessage is available: %1. Download it"
+            "New version of PyBitmessage is available: {0}. Download it"
             " from https://github.com/Bitmessage/PyBitmessage/releases/latest"
-            ).arg(self.notifiedNewVersion)
+            ).format(self.notifiedNewVersion)
         )
 
     def displayAlert(self, title, text, exitAfterUserClicksOk):
         self.updateStatusBar(text)
-        QtGui.QMessageBox.critical(self, title, text, QtGui.QMessageBox.Ok)
+        QtWidgets.QMessageBox.critical(
+            self, title, text, QtWidgets.QMessageBox.Ok)
         if exitAfterUserClicksOk:
             os._exit(0)
 
     def rerenderMessagelistFromLabels(self):
-        for messagelist in (self.ui.tableWidgetInbox, self.ui.tableWidgetInboxChans, self.ui.tableWidgetInboxSubscriptions):
+        for messagelist in (
+            self.ui.tableWidgetInbox,
+            self.ui.tableWidgetInboxChans,
+            self.ui.tableWidgetInboxSubscriptions
+        ):
             for i in range(messagelist.rowCount()):
                 messagelist.item(i, 1).setLabel()
 
     def rerenderMessagelistToLabels(self):
-        for messagelist in (self.ui.tableWidgetInbox, self.ui.tableWidgetInboxChans, self.ui.tableWidgetInboxSubscriptions):
+        for messagelist in (
+            self.ui.tableWidgetInbox,
+            self.ui.tableWidgetInboxChans,
+            self.ui.tableWidgetInboxSubscriptions
+        ):
             for i in range(messagelist.rowCount()):
                 messagelist.item(i, 0).setLabel()
 
     def rerenderAddressBook(self):
-        def addRow (address, label, type):
+        def addRow(address, label, type):
             self.ui.tableWidgetAddressBook.insertRow(0)
-            newItem = Ui_AddressBookWidgetItemLabel(address, unicode(label, 'utf-8'), type)
+            newItem = Ui_AddressBookWidgetItemLabel(address, label, type)
             self.ui.tableWidgetAddressBook.setItem(0, 0, newItem)
-            newItem = Ui_AddressBookWidgetItemAddress(address, unicode(label, 'utf-8'), type)
+            newItem = Ui_AddressBookWidgetItemAddress(address, label, type)
             self.ui.tableWidgetAddressBook.setItem(0, 1, newItem)
 
         oldRows = {}
@@ -1942,18 +1950,21 @@ class MyForm(settingsmixin.SMainWindow):
         queryreturn = sqlQuery('SELECT label, address FROM subscriptions WHERE enabled = 1')
         for row in queryreturn:
             label, address = row
-            newRows[address] = [label, AccountMixin.SUBSCRIPTION]
+            newRows[address] = [unicode(label, 'utf-8'), AccountMixin.SUBSCRIPTION]
         # chans
         addresses = getSortedAccounts()
         for address in addresses:
             account = accountClass(address)
-            if (account.type == AccountMixin.CHAN and BMConfigParser().safeGetBoolean(address, 'enabled')):
+            if (
+                account.type == AccountMixin.CHAN
+                and BMConfigParser().safeGetBoolean(address, 'enabled')
+            ):
                 newRows[address] = [account.getLabel(), AccountMixin.CHAN]
         # normal accounts
         queryreturn = sqlQuery('SELECT * FROM addressbook')
         for row in queryreturn:
             label, address = row
-            newRows[address] = [label, AccountMixin.NORMAL]
+            newRows[address] = [unicode(label, 'utf-8'), AccountMixin.NORMAL]
 
         completerList = []
         for address in sorted(
@@ -1966,7 +1977,7 @@ class MyForm(settingsmixin.SMainWindow):
                 self.ui.tableWidgetAddressBook.removeRow(oldRows[address][2])
         for address in newRows:
             addRow(address, newRows[address][0], newRows[address][1])
-            completerList.append(unicode(newRows[address][0], encoding="UTF-8") + " <" + address + ">")
+            completerList.append(newRows[address][0] + " <" + address + ">")
 
         # sort
         self.ui.tableWidgetAddressBook.sortByColumn(
@@ -1978,11 +1989,17 @@ class MyForm(settingsmixin.SMainWindow):
         self.rerenderTabTreeSubscriptions()
 
     def click_pushButtonTTL(self):
-        QtGui.QMessageBox.information(self, 'Time To Live', _translate(
-            "MainWindow", """The TTL, or Time-To-Live is the length of time that the network will hold the message.
- The recipient must get it during this time. If your Bitmessage client does not hear an acknowledgement, it
- will resend the message automatically. The longer the Time-To-Live, the
- more work your computer must do to send the message. A Time-To-Live of four or five days is often appropriate."""), QtGui.QMessageBox.Ok)
+        QtWidgets.QMessageBox.information(
+            self, 'Time To Live', _translate(
+                "MainWindow",
+                "The TTL, or Time-To-Live is the length of time that"
+                " the network will hold the message. The recipient must"
+                " get it during this time. If your Bitmessage client does"
+                " not hear an acknowledgement, it will resend the message"
+                " automatically. The longer the Time-To-Live, the more"
+                " work your computer must do to send the message. A"
+                " Time-To-Live of four or five days is often appropriate."
+            ), QtWidgets.QMessageBox.Ok)
 
     def click_pushButtonClear(self):
         self.ui.lineEditSubject.setText("")
@@ -1991,7 +2008,10 @@ class MyForm(settingsmixin.SMainWindow):
         self.ui.comboBoxSendFrom.setCurrentIndex(0)
 
     def click_pushButtonSend(self):
-        encoding = 3 if QtGui.QApplication.queryKeyboardModifiers() & QtCore.Qt.ShiftModifier else 2
+        # pylint: disable=too-many-locals
+        encoding = (
+            3 if QtWidgets.QApplication.queryKeyboardModifiers()
+            & QtCore.Qt.ShiftModifier else 2)
 
         self.statusbar.clearMessage()
 
@@ -1999,38 +2019,36 @@ class MyForm(settingsmixin.SMainWindow):
                 self.ui.tabWidgetSend.indexOf(self.ui.sendDirect):
             # message to specific people
             sendMessageToPeople = True
-            fromAddress = str(self.ui.comboBoxSendFrom.itemData(
+            fromAddress = self.ui.comboBoxSendFrom.itemData(
                 self.ui.comboBoxSendFrom.currentIndex(),
-                QtCore.Qt.UserRole).toString())
-            toAddresses = str(self.ui.lineEditTo.text().toUtf8())
-            subject = str(self.ui.lineEditSubject.text().toUtf8())
-            message = str(
-                self.ui.textEditMessage.document().toPlainText().toUtf8())
+                QtCore.Qt.UserRole)
+            toAddresses = self.ui.lineEditTo.text()
+            subject = self.ui.lineEditSubject.text()
+            message = self.ui.textEditMessage.document().toPlainText()
         else:
             # broadcast message
             sendMessageToPeople = False
-            fromAddress = str(self.ui.comboBoxSendFromBroadcast.itemData(
+            fromAddress = self.ui.comboBoxSendFromBroadcast.itemData(
                 self.ui.comboBoxSendFromBroadcast.currentIndex(),
-                QtCore.Qt.UserRole).toString())
-            subject = str(self.ui.lineEditSubjectBroadcast.text().toUtf8())
-            message = str(
-                self.ui.textEditMessageBroadcast.document().toPlainText().toUtf8())
-        """
-        The whole network message must fit in 2^18 bytes.
-        Let's assume 500 bytes of overhead. If someone wants to get that
-        too an exact number you are welcome to but I think that it would
-        be a better use of time to support message continuation so that
-        users can send messages of any length.
-        """
-        if len(message) > (2 ** 18 - 500):
-            QtGui.QMessageBox.about(
+                QtCore.Qt.UserRole)
+            subject = self.ui.lineEditSubjectBroadcast.text()
+            message = \
+                self.ui.textEditMessageBroadcast.document().toPlainText()
+
+        # The whole network message must fit in 2^18 bytes.
+        # Let's assume 500 bytes of overhead. If someone wants to get that
+        # too an exact number you are welcome to but I think that it would
+        # be a better use of time to support message continuation so that
+        # users can send messages of any length.
+        if len(message) > 2 ** 18 - 500:
+            QtWidgets.QMessageBox.about(
                 self, _translate("MainWindow", "Message too long"),
                 _translate(
                     "MainWindow",
                     "The message that you are trying to send is too long"
-                    " by %1 bytes. (The maximum is 261644 bytes). Please"
+                    " by {0} bytes. (The maximum is 261644 bytes). Please"
                     " cut it down before sending."
-                ).arg(len(message) - (2 ** 18 - 500)))
+                ).format(len(message) - (2 ** 18 - 500)))
             return
 
         acct = accountClass(fromAddress)
@@ -2051,18 +2069,32 @@ class MyForm(settingsmixin.SMainWindow):
                     # email address
                     if toAddress.find("@") >= 0:
                         if isinstance(acct, GatewayAccount):
-                            acct.createMessage(toAddress, fromAddress, subject, message)
+                            acct.createMessage(
+                                toAddress, fromAddress, subject, message)
                             subject = acct.subject
                             toAddress = acct.toAddress
                         else:
-                            if QtGui.QMessageBox.question(self, "Sending an email?", _translate("MainWindow", 
-                                "You are trying to send an email instead of a bitmessage. This requires registering with a gateway. Attempt to register?"),
-                                QtGui.QMessageBox.Yes|QtGui.QMessageBox.No) != QtGui.QMessageBox.Yes:
+                            if QtWidgets.QMessageBox.question(
+                                    self, "Sending an email?",
+                                    _translate(
+                                        "MainWindow",
+                                        "You are trying to send an email"
+                                        " instead of a bitmessage. This"
+                                        " requires registering with a"
+                                        " gateway. Attempt to register?"
+                                    ), QtWidgets.QMessageBox.Yes
+                                    | QtWidgets.QMessageBox.No
+                            ) != QtWidgets.QMessageBox.Yes:
                                 continue
                             email = acct.getLabel()
-                            if email[-14:] != "@mailchuck.com": #attempt register
+                            # attempt register
+                            if email[-14:] != "@mailchuck.com":
                                 # 12 character random email address
-                                email = ''.join(random.SystemRandom().choice(string.ascii_lowercase) for _ in range(12)) + "@mailchuck.com"
+                                email = ''.join(
+                                    random.SystemRandom().choice(
+                                        string.ascii_lowercase
+                                    ) for _ in range(12)
+                                ) + "@mailchuck.com"
                             acct = MailchuckAccount(fromAddress)
                             acct.register(email)
                             BMConfigParser().set(fromAddress, 'label', email)
@@ -2072,75 +2104,79 @@ class MyForm(settingsmixin.SMainWindow):
                                 "MainWindow",
                                 "Error: Your account wasn't registered at"
                                 " an email gateway. Sending registration"
-                                " now as %1, please wait for the registration"
+                                " now as {0}, please wait for the registration"
                                 " to be processed before retrying sending."
-                                ).arg(email)
-                            )
+                            ).format(email))
                             return
-                    status, addressVersionNumber, streamNumber = decodeAddress(toAddress)[:3]
+                    status, addressVersionNumber, streamNumber = \
+                      decodeAddress(toAddress)[:3]
                     if status != 'success':
                         try:
                             toAddress = unicode(toAddress, 'utf-8', 'ignore')
                         except:
-                            pass
-                        logger.error('Error: Could not decode recipient address ' + toAddress + ':' + status)
+                            logger.warning(
+                                "Failed unicode(toAddress ):",
+                                exc_info=True)
+                        logger.error(
+                            'Error: Could not decode recipient address %s: %s',
+                            toAddress, status)
 
                         if status == 'missingbm':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
                                 "Error: Bitmessage addresses start with"
-                                " BM-   Please check the recipient address %1"
-                                ).arg(toAddress))
+                                " BM-   Please check the recipient address {0}"
+                            ).format(toAddress))
                         elif status == 'checksumfailed':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
-                                "Error: The recipient address %1 is not"
+                                "Error: The recipient address {0} is not"
                                 " typed or copied correctly. Please check it."
-                                ).arg(toAddress))
+                            ).format(toAddress))
                         elif status == 'invalidcharacters':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
-                                "Error: The recipient address %1 contains"
+                                "Error: The recipient address {0} contains"
                                 " invalid characters. Please check it."
-                                ).arg(toAddress))
+                            ).format(toAddress))
                         elif status == 'versiontoohigh':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
                                 "Error: The version of the recipient address"
-                                " %1 is too high. Either you need to upgrade"
+                                " {0} is too high. Either you need to upgrade"
                                 " your Bitmessage software or your"
                                 " acquaintance is being clever."
-                                ).arg(toAddress))
+                            ).format(toAddress))
                         elif status == 'ripetooshort':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
                                 "Error: Some data encoded in the recipient"
-                                " address %1 is too short. There might be"
+                                " address {0} is too short. There might be"
                                 " something wrong with the software of"
                                 " your acquaintance."
-                                ).arg(toAddress))
+                            ).format(toAddress))
                         elif status == 'ripetoolong':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
                                 "Error: Some data encoded in the recipient"
-                                " address %1 is too long. There might be"
+                                " address {0} is too long. There might be"
                                 " something wrong with the software of"
                                 " your acquaintance."
-                                ).arg(toAddress))
+                            ).format(toAddress))
                         elif status == 'varintmalformed':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
                                 "Error: Some data encoded in the recipient"
-                                " address %1 is malformed. There might be"
+                                " address {0} is malformed. There might be"
                                 " something wrong with the software of"
                                 " your acquaintance."
-                                ).arg(toAddress))
+                            ).format(toAddress))
                         else:
                             self.updateStatusBar(_translate(
                                 "MainWindow",
                                 "Error: Something is wrong with the"
-                                " recipient address %1."
-                                ).arg(toAddress))
+                                " recipient address {0}."
+                            ).format(toAddress))
                     elif fromAddress == '':
                         self.updateStatusBar(_translate(
                             "MainWindow",
@@ -2152,12 +2188,31 @@ class MyForm(settingsmixin.SMainWindow):
                         toAddress = addBMIfNotPresent(toAddress)
 
                         if addressVersionNumber > 4 or addressVersionNumber <= 1:
-                            QtGui.QMessageBox.about(self, _translate("MainWindow", "Address version number"), _translate(
-                                "MainWindow", "Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.").arg(toAddress).arg(str(addressVersionNumber)))
+                            QtWidgets.QMessageBox.about(
+                                self,
+                                _translate(
+                                    "MainWindow", "Address version number"),
+                                _translate(
+                                    "MainWindow",
+                                    "Concerning the address {0}, Bitmessage"
+                                    " cannot understand address version"
+                                    " numbers of {1}. Perhaps upgrade"
+                                    " Bitmessage to the latest version."
+                                ).format(toAddress, addressVersionNumber)
+                            )
                             continue
                         if streamNumber > 1 or streamNumber == 0:
-                            QtGui.QMessageBox.about(self, _translate("MainWindow", "Stream number"), _translate(
-                                "MainWindow", "Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.").arg(toAddress).arg(str(streamNumber)))
+                            QtWidgets.QMessageBox.about(
+                                self,
+                                _translate("MainWindow", "Stream number"),
+                                _translate(
+                                    "MainWindow",
+                                    "Concerning the address {0}, Bitmessage"
+                                    " cannot handle stream numbers of {1}."
+                                    " Perhaps upgrade Bitmessage to the"
+                                    " latest version."
+                                ).format(toAddress, streamNumber)
+                            )
                             continue
                         self.statusbar.clearMessage()
                         if state.statusIconColor == 'red':
@@ -2242,11 +2297,11 @@ class MyForm(settingsmixin.SMainWindow):
             ))
 
     def click_pushButtonFetchNamecoinID(self):
-        identities = str(self.ui.lineEditTo.text().toUtf8()).split(";")
+        identities = self.ui.lineEditTo.text().split(";")
         err, addr = self.namecoin.query(identities[-1].strip())
         if err is not None:
             self.updateStatusBar(
-                _translate("MainWindow", "Error: %1").arg(err))
+                _translate("MainWindow", "Error: {0}").format(err))
         else:
             identities[-1] = addr
             self.ui.lineEditTo.setText("; ".join(identities))
@@ -2276,8 +2331,8 @@ class MyForm(settingsmixin.SMainWindow):
                 self.ui.comboBoxSendFrom.addItem(avatarize(addressInKeysFile), label, addressInKeysFile)
 #        self.ui.comboBoxSendFrom.model().sort(1, Qt.AscendingOrder)
         for i in range(self.ui.comboBoxSendFrom.count()):
-            address = str(self.ui.comboBoxSendFrom.itemData(
-                i, QtCore.Qt.UserRole).toString())
+            address = self.ui.comboBoxSendFrom.itemData(
+                i, QtCore.Qt.UserRole)
             self.ui.comboBoxSendFrom.setItemData(
                 i, AccountColor(address).accountColor(),
                 QtCore.Qt.ForegroundRole)
@@ -2299,13 +2354,13 @@ class MyForm(settingsmixin.SMainWindow):
                     label = addressInKeysFile
                 self.ui.comboBoxSendFromBroadcast.addItem(avatarize(addressInKeysFile), label, addressInKeysFile)
         for i in range(self.ui.comboBoxSendFromBroadcast.count()):
-            address = str(self.ui.comboBoxSendFromBroadcast.itemData(
-                i, QtCore.Qt.UserRole).toString())
+            address = self.ui.comboBoxSendFromBroadcast.itemData(
+                i, QtCore.Qt.UserRole)
             self.ui.comboBoxSendFromBroadcast.setItemData(
                 i, AccountColor(address).accountColor(),
                 QtCore.Qt.ForegroundRole)
         self.ui.comboBoxSendFromBroadcast.insertItem(0, '', '')
-        if(self.ui.comboBoxSendFromBroadcast.count() == 2):
+        if self.ui.comboBoxSendFromBroadcast.count() == 2:
             self.ui.comboBoxSendFromBroadcast.setCurrentIndex(1)
         else:
             self.ui.comboBoxSendFromBroadcast.setCurrentIndex(0)
@@ -2379,6 +2434,8 @@ class MyForm(settingsmixin.SMainWindow):
             tableWidget = self.widgetConvert(treeWidget)
             current_account = self.getCurrentAccount(treeWidget)
             current_folder = self.getCurrentFolder(treeWidget)
+            # inventoryHash surprisingly is of type unicode
+            # inventoryHash = inventoryHash.encode('utf-8')
             # pylint: disable=too-many-boolean-expressions
             if ((tableWidget == inbox
                  and current_account == acct.address
@@ -2399,15 +2456,14 @@ class MyForm(settingsmixin.SMainWindow):
                 'bitmessagesettings', 'showtraynotifications'):
             self.notifierShow(
                 _translate("MainWindow", "New Message"),
-                _translate("MainWindow", "From %1").arg(
-                    unicode(acct.fromLabel, 'utf-8')),
+                _translate("MainWindow", "From {0}").format(acct.fromLabel),
                 sound.SOUND_UNKNOWN
             )
         if self.getCurrentAccount() is not None and (
-                (self.getCurrentFolder(treeWidget) != "inbox"
-                 and self.getCurrentFolder(treeWidget) is not None)
+            (self.getCurrentFolder(treeWidget) != "inbox"
+             and self.getCurrentFolder(treeWidget) is not None)
                 or self.getCurrentAccount(treeWidget) != acct.address):
-            # Ubuntu should notify of new message irrespective of
+            # Ubuntu should notify of new message irespective of
             # whether it's in current message list or not
             self.indicatorUpdate(True, to_label=acct.toLabel)
 
@@ -2538,7 +2594,7 @@ class MyForm(settingsmixin.SMainWindow):
         # Only settings remain here
         acct.settings()
         for i in range(self.ui.comboBoxSendFrom.count()):
-            if str(self.ui.comboBoxSendFrom.itemData(i).toPyObject()) \
+            if str(self.ui.comboBoxSendFrom.itemData(i)) \
                     == acct.fromAddress:
                 self.ui.comboBoxSendFrom.setCurrentIndex(i)
                 break
@@ -2557,13 +2613,13 @@ class MyForm(settingsmixin.SMainWindow):
         self.ui.textEditMessage.setFocus()
 
     def on_action_MarkAllRead(self):
-        if QtGui.QMessageBox.question(
+        if QtWidgets.QMessageBox.question(
                 self, "Marking all messages as read?",
                 _translate(
                     "MainWindow",
                     "Are you sure you would like to mark all messages read?"
-                ), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No
-        ) != QtGui.QMessageBox.Yes:
+                ), QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No
+        ) != QtWidgets.QMessageBox.Yes:
             return
         tableWidget = self.getCurrentMessagelist()
 
@@ -2574,7 +2630,7 @@ class MyForm(settingsmixin.SMainWindow):
         msgids = []
         for i in range(0, idCount):
             msgids.append(tableWidget.item(i, 3).data())
-            for col in xrange(tableWidget.columnCount()):
+            for col in range(tableWidget.columnCount()):
                 tableWidget.item(i, col).setUnread(False)
 
         markread = sqlExecuteChunked(
@@ -2591,7 +2647,7 @@ class MyForm(settingsmixin.SMainWindow):
     def network_switch(self):
         dontconnect_option = not BMConfigParser().safeGetBoolean(
             'bitmessagesettings', 'dontconnect')
-        reply = QtGui.QMessageBox.question(
+        reply = QtWidgets.QMessageBox.question(
             self, _translate("MainWindow", "Disconnecting")
             if dontconnect_option else _translate("MainWindow", "Connecting"),
             _translate(
@@ -2600,9 +2656,9 @@ class MyForm(settingsmixin.SMainWindow):
             ) if dontconnect_option else _translate(
                 "MainWindow",
                 "Bitmessage will now start connecting to network. Are you sure?"
-            ), QtGui.QMessageBox.Yes | QtGui.QMessageBox.Cancel,
-            QtGui.QMessageBox.Cancel)
-        if reply != QtGui.QMessageBox.Yes:
+            ), QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.Cancel,
+            QtWidgets.QMessageBox.Cancel)
+        if reply != QtWidgets.QMessageBox.Yes:
             return
         BMConfigParser().set(
             'bitmessagesettings', 'dontconnect', str(dontconnect_option))
@@ -2628,68 +2684,67 @@ class MyForm(settingsmixin.SMainWindow):
         waitForSync = False
 
         # C PoW currently doesn't support interrupting and OpenCL is untested
-        if getPowType() == "python" and (powQueueSize() > 0 or pendingUpload() > 0):
-            reply = QtGui.QMessageBox.question(
+        if getPowType() == "python" and (
+                powQueueSize() > 0 or pendingUpload() > 0):
+            reply = QtWidgets.QMessageBox.question(
                 self, _translate("MainWindow", "Proof of work pending"),
                 _translate(
                     "MainWindow",
-                    "%n object(s) pending proof of work", None,
-                    QtCore.QCoreApplication.CodecForTr, powQueueSize()
-                ) + ", " +
-                _translate(
+                    "%n object(s) pending proof of work", None, powQueueSize()
+                ) + ", "
+                + _translate(
                     "MainWindow",
-                    "%n object(s) waiting to be distributed", None,
-                    QtCore.QCoreApplication.CodecForTr, pendingUpload()
-                ) + "\n\n" +
-                _translate(
-                    "MainWindow", "Wait until these tasks finish?"),
-                QtGui.QMessageBox.Yes | QtGui.QMessageBox.No
-                | QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Cancel)
-            if reply == QtGui.QMessageBox.No:
+                    "%n object(s) waiting to be distributed",
+                    None, pendingUpload()
+                ) + "\n\n"
+                + _translate("MainWindow", "Wait until these tasks finish?"),
+                QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No
+                | QtWidgets.QMessageBox.Cancel, QtWidgets.QMessageBox.Cancel
+            )
+            if reply == QtWidgets.QMessageBox.No:
                 waitForPow = False
-            elif reply == QtGui.QMessageBox.Cancel:
+            elif reply == QtWidgets.QMessageBox.Cancel:
                 return
 
         if pendingDownload() > 0:
-            reply = QtGui.QMessageBox.question(
+            reply = QtWidgets.QMessageBox.question(
                 self, _translate("MainWindow", "Synchronisation pending"),
                 _translate(
                     "MainWindow",
                     "Bitmessage hasn't synchronised with the network,"
                     " %n object(s) to be downloaded. If you quit now,"
                     " it may cause delivery delays. Wait until the"
-                    " synchronisation finishes?", None,
-                    QtCore.QCoreApplication.CodecForTr, pendingDownload()
-                ),
-                QtGui.QMessageBox.Yes | QtGui.QMessageBox.No
-                | QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Cancel)
-            if reply == QtGui.QMessageBox.Yes:
+                    " synchronisation finishes?",
+                    None, pendingDownload()
+                ), QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No
+                | QtWidgets.QMessageBox.Cancel, QtWidgets.QMessageBox.Cancel)
+            if reply == QtWidgets.QMessageBox.Yes:
                 self.wait = waitForSync = True
-            elif reply == QtGui.QMessageBox.Cancel:
+            elif reply == QtWidgets.QMessageBox.Cancel:
                 return
 
-        if state.statusIconColor == 'red' and not BMConfigParser().safeGetBoolean(
+        if state.statusIconColor == 'red' \
+            and not BMConfigParser().safeGetBoolean(
                 'bitmessagesettings', 'dontconnect'):
-            reply = QtGui.QMessageBox.question(
+            reply = QtWidgets.QMessageBox.question(
                 self, _translate("MainWindow", "Not connected"),
                 _translate(
                     "MainWindow",
-                    "Bitmessage isn't connected to the network. If you"
+                    "Bitmessage isn't connected to the network.  If you"
                     " quit now, it may cause delivery delays. Wait until"
                     " connected and the synchronisation finishes?"
-                ),
-                QtGui.QMessageBox.Yes | QtGui.QMessageBox.No
-                | QtGui.QMessageBox.Cancel, QtGui.QMessageBox.Cancel)
-            if reply == QtGui.QMessageBox.Yes:
+                ), QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No
+                | QtWidgets.QMessageBox.Cancel, QtWidgets.QMessageBox.Cancel)
+            if reply == QtWidgets.QMessageBox.Yes:
                 waitForConnection = True
                 self.wait = waitForSync = True
-            elif reply == QtGui.QMessageBox.Cancel:
+            elif reply == QtWidgets.QMessageBox.Cancel:
                 return
 
         self.quitAccepted = True
 
         self.updateStatusBar(_translate(
-            "MainWindow", "Shutting down PyBitmessage... %1%").arg(0))
+            "MainWindow", "Shutting down PyBitmessage... {0}%").format(0))
 
         if waitForConnection:
             self.updateStatusBar(_translate(
@@ -2723,16 +2778,18 @@ class MyForm(settingsmixin.SMainWindow):
                     maxWorkerQueue = curWorkerQueue
                 if curWorkerQueue > 0:
                     self.updateStatusBar(_translate(
-                        "MainWindow", "Waiting for PoW to finish... %1%"
-                    ).arg(50 * (maxWorkerQueue - curWorkerQueue) /
-                          maxWorkerQueue))
+                        "MainWindow", "Waiting for PoW to finish... {0}%"
+                    ).format(
+                        50 * (maxWorkerQueue - curWorkerQueue) / maxWorkerQueue
+                    ))
                     time.sleep(0.5)
                     QtCore.QCoreApplication.processEvents(
                         QtCore.QEventLoop.AllEvents, 1000
                     )
 
             self.updateStatusBar(_translate(
-                "MainWindow", "Shutting down Pybitmessage... %1%").arg(50))
+                "MainWindow", "Shutting down Pybitmessage... {0}%"
+            ).format(50))
 
             QtCore.QCoreApplication.processEvents(
                 QtCore.QEventLoop.AllEvents, 1000
@@ -2746,29 +2803,27 @@ class MyForm(settingsmixin.SMainWindow):
 
             # check if upload (of objects created locally) pending
             self.updateStatusBar(_translate(
-                "MainWindow", "Waiting for objects to be sent... %1%").arg(50))
+                "MainWindow", "Waiting for objects to be sent... {0}%"
+            ).format(50))
             maxPendingUpload = max(1, pendingUpload())
 
             while pendingUpload() > 1:
                 self.updateStatusBar(_translate(
                     "MainWindow",
-                    "Waiting for objects to be sent... %1%"
-                ).arg(int(50 + 20 * (pendingUpload() / maxPendingUpload))))
+                    "Waiting for objects to be sent... {0}%"
+                ).format(int(50 + 20 * pendingUpload() / maxPendingUpload)))
                 time.sleep(0.5)
                 QtCore.QCoreApplication.processEvents(
                     QtCore.QEventLoop.AllEvents, 1000
                 )
 
-            QtCore.QCoreApplication.processEvents(
-                QtCore.QEventLoop.AllEvents, 1000
-            )
         QtCore.QCoreApplication.processEvents(
             QtCore.QEventLoop.AllEvents, 1000
         )
 
         # save state and geometry self and all widgets
         self.updateStatusBar(_translate(
-            "MainWindow", "Saving settings... %1%").arg(70))
+            "MainWindow", "Saving settings... {0}%").format(70))
         QtCore.QCoreApplication.processEvents(
             QtCore.QEventLoop.AllEvents, 1000
         )
@@ -2781,18 +2836,18 @@ class MyForm(settingsmixin.SMainWindow):
                     obj.saveSettings()
 
         self.updateStatusBar(_translate(
-            "MainWindow", "Shutting down core... %1%").arg(80))
+            "MainWindow", "Shutting down core... {0}%").format(80))
         QtCore.QCoreApplication.processEvents(
             QtCore.QEventLoop.AllEvents, 1000
         )
         shutdown.doCleanShutdown()
 
         self.updateStatusBar(_translate(
-            "MainWindow", "Stopping notifications... %1%").arg(90))
+            "MainWindow", "Stopping notifications... {0}%").format(90))
         self.tray.hide()
 
         self.updateStatusBar(_translate(
-            "MainWindow", "Shutdown imminent... %1%").arg(100))
+            "MainWindow", "Shutdown imminent... {0}%").format(100))
 
         logger.info("Shutdown complete")
         self.close()
@@ -2827,17 +2882,25 @@ class MyForm(settingsmixin.SMainWindow):
         totalLines = len(lines)
         for i in xrange(totalLines):
             if 'Message ostensibly from ' in lines[i]:
-                lines[i] = '<p style="font-size: 12px; color: grey;">%s</span></p>' % (
-                    lines[i])
-            elif lines[i] == '------------------------------------------------------':
+                lines[i] = (
+                    '<p style="font-size: 12px; color: grey;">%s</span></p>' %
+                    lines[i]
+                )
+            elif (
+                lines[i] ==
+                '------------------------------------------------------'
+            ):
                 lines[i] = '<hr>'
-            elif lines[i] == '' and (i+1) < totalLines and \
-                 lines[i+1] != '------------------------------------------------------':
+            elif (
+                lines[i] == '' and (i + 1) < totalLines and
+                lines[i + 1] !=
+                '------------------------------------------------------'
+            ):
                 lines[i] = '<br><br>'
-        content = ' '.join(lines) # To keep the whitespace between lines
+        content = ' '.join(lines)  # To keep the whitespace between lines
         content = shared.fixPotentiallyInvalidUTF8Data(content)
-        content = unicode(content, 'utf-8)')
-        textEdit.setHtml(QtCore.QString(content))
+        content = unicode(content, 'utf-8')
+        textEdit.setHtml(content)
 
     def on_action_InboxMarkUnread(self):
         tableWidget = self.getCurrentMessagelist()
@@ -2863,18 +2926,15 @@ class MyForm(settingsmixin.SMainWindow):
         )
 
         self.propagateUnreadCount()
-        # tableWidget.selectRow(currentRow + 1)
-        # This doesn't de-select the last message if you try to mark it
-        # unread, but that doesn't interfere. Might not be necessary.
-        # We could also select upwards, but then our problem would be
-        # with the topmost message.
-        # tableWidget.clearSelection() manages to mark the message
-        # as read again.
 
     # Format predefined text on message reply.
     def quoted_text(self, message):
-        if not BMConfigParser().safeGetBoolean('bitmessagesettings', 'replybelow'):
-            return '\n\n------------------------------------------------------\n' + message
+        if not BMConfigParser().safeGetBoolean(
+                'bitmessagesettings', 'replybelow'):
+            return (
+                '\n\n------------------------------------------------------\n' +
+                message
+            )
 
         quoteWrapper = textwrap.TextWrapper(
             replace_whitespace=False, initial_indent='> ',
@@ -2904,7 +2964,7 @@ class MyForm(settingsmixin.SMainWindow):
             self.ui.comboBoxSendFrom, self.ui.comboBoxSendFromBroadcast
         ):
             for i in range(box.count()):
-                if str(box.itemData(i).toPyObject()) == address:
+                if str(box.itemData(i)) == address:
                     box.setCurrentIndex(i)
                     break
             else:
@@ -2948,7 +3008,8 @@ class MyForm(settingsmixin.SMainWindow):
         acct.parseMessage(
             toAddressAtCurrentInboxRow, fromAddressAtCurrentInboxRow,
             tableWidget.item(currentInboxRow, 2).subject,
-            messageAtCurrentInboxRow)
+            messageAtCurrentInboxRow
+        )
         widget = {
             'subject': self.ui.lineEditSubject,
             'from': self.ui.comboBoxSendFrom,
@@ -2961,23 +3022,26 @@ class MyForm(settingsmixin.SMainWindow):
             )
 #            toAddressAtCurrentInboxRow = fromAddressAtCurrentInboxRow
         elif not BMConfigParser().has_section(toAddressAtCurrentInboxRow):
-            QtGui.QMessageBox.information(
-                self, _translate("MainWindow", "Address is gone"),
+            QtWidgets.QMessageBox.information(
+                self,
+                _translate("MainWindow", "Address is gone"),
                 _translate(
                     "MainWindow",
-                    "Bitmessage cannot find your address %1. Perhaps you"
+                    "Bitmessage cannot find your address {0}. Perhaps you"
                     " removed it?"
-                ).arg(toAddressAtCurrentInboxRow), QtGui.QMessageBox.Ok)
+                ).format(toAddressAtCurrentInboxRow),
+                QtWidgets.QMessageBox.Ok)
         elif not BMConfigParser().getboolean(
                 toAddressAtCurrentInboxRow, 'enabled'):
-            QtGui.QMessageBox.information(
-                self, _translate("MainWindow", "Address disabled"),
+            QtWidgets.QMessageBox.information(
+                self,
+                _translate("MainWindow", "Address disabled"),
                 _translate(
                     "MainWindow",
                     "Error: The address from which you are trying to send"
-                    " is disabled. You\'ll have to enable it on the"
-                    " \'Your Identities\' tab before using it."
-                ), QtGui.QMessageBox.Ok)
+                    " is disabled. You\'ll have to enable it on the \'Your"
+                    " Identities\' tab before using it."
+                ), QtWidgets.QMessageBox.Ok)
         else:
             self.setBroadcastEnablementDependingOnWhetherThisIsAMailingListAddress(toAddressAtCurrentInboxRow)
             broadcast_tab_index = self.ui.tabWidgetSend.indexOf(
@@ -3055,8 +3119,9 @@ class MyForm(settingsmixin.SMainWindow):
         recipientAddress = tableWidget.item(
             currentInboxRow, 0).data(QtCore.Qt.UserRole)
         # Let's make sure that it isn't already in the address book
-        queryreturn = sqlQuery('''select * from blacklist where address=?''',
-                               addressAtCurrentInboxRow)
+        queryreturn = sqlQuery(
+            'SELECT * FROM blacklist WHERE address=?',
+            addressAtCurrentInboxRow)
         if queryreturn == []:
             label = "\"" + tableWidget.item(currentInboxRow, 2).subject + "\" in " + BMConfigParser().get(recipientAddress, "label")
             sqlExecute('''INSERT INTO blacklist VALUES (?,?, ?)''',
@@ -3104,8 +3169,8 @@ class MyForm(settingsmixin.SMainWindow):
             return
         currentRow = 0
         folder = self.getCurrentFolder()
-        shifted = QtGui.QApplication.queryKeyboardModifiers() \
-            & QtCore.Qt.ShiftModifier
+        shifted = (QtWidgets.QApplication.queryKeyboardModifiers() &
+                   QtCore.Qt.ShiftModifier)
         tableWidget.setUpdatesEnabled(False)
         inventoryHashesToTrash = set()
         # ranges in reversed order
@@ -3122,8 +3187,8 @@ class MyForm(settingsmixin.SMainWindow):
         idCount = len(inventoryHashesToTrash)
         sqlExecuteChunked(
             ("DELETE FROM inbox" if folder == "trash" or shifted else
-             "UPDATE inbox SET folder='trash', read=1") +
-            " WHERE msgid IN ({0})", idCount, *inventoryHashesToTrash)
+             "UPDATE inbox SET folder='trash', read=1")
+            + " WHERE msgid IN ({0})", idCount, *inventoryHashesToTrash)
         tableWidget.selectRow(0 if currentRow == 0 else currentRow - 1)
         tableWidget.setUpdatesEnabled(True)
         self.propagateUnreadCount(folder)
@@ -3171,14 +3236,18 @@ class MyForm(settingsmixin.SMainWindow):
         # Retrieve the message data out of the SQL database
         msgid = tableWidget.item(currentInboxRow, 3).data()
         queryreturn = sqlQuery(
-            '''select message from inbox where msgid=?''', msgid)
+            'SELECT message FROM inbox WHERE msgid=?', msgid)
         if queryreturn != []:
             for row in queryreturn:
                 message, = row
 
-        defaultFilename = "".join(x for x in subjectAtCurrentInboxRow if x.isalnum()) + '.txt'
-        filename = QtGui.QFileDialog.getSaveFileName(self, _translate("MainWindow","Save As..."), defaultFilename, "Text files (*.txt);;All files (*.*)")
-        if filename == '':
+        defaultFilename = "".join(
+            x for x in subjectAtCurrentInboxRow if x.isalnum()) + '.txt'
+        filename, filetype = QtWidgets.QFileDialog.getSaveFileName(
+            self, _translate("MainWindow", "Save As..."), defaultFilename,
+            "Text files (*.txt);;All files (*.*)"
+        )
+        if not filename:
             return
         try:
             f = open(filename, 'w')
@@ -3190,11 +3259,13 @@ class MyForm(settingsmixin.SMainWindow):
 
     # Send item on the Sent tab to trash
     def on_action_SentTrash(self):
+        currentRow = 0
         tableWidget = self.getCurrentMessagelist()
         if not tableWidget:
             return
         folder = self.getCurrentFolder()
-        shifted = QtGui.QApplication.queryKeyboardModifiers() & QtCore.Qt.ShiftModifier
+        shifted = (QtWidgets.QApplication.queryKeyboardModifiers() &
+                   QtCore.Qt.ShiftModifier)
         while tableWidget.selectedIndexes() != []:
             currentRow = tableWidget.selectedIndexes()[0].row()
             ackdataToTrash = tableWidget.item(currentRow, 3).data()
@@ -3222,15 +3293,18 @@ class MyForm(settingsmixin.SMainWindow):
         queryreturn = sqlQuery('''select ackdata FROM sent WHERE status='forcepow' ''')
         for row in queryreturn:
             ackdata, = row
-            queues.UISignalQueue.put(('updateSentItemStatusByAckdata', (
-                ackdata, 'Overriding maximum-difficulty setting. Work queued.')))
+            queues.UISignalQueue.put((
+                'updateSentItemStatusByAckdata',
+                (ackdata, 'Overriding maximum-difficulty setting.'
+                 ' Work queued.')
+            ))
         queues.workerQueue.put(('sendmessage', ''))
 
     def on_action_SentClipboard(self):
         currentRow = self.ui.tableWidgetInbox.currentRow()
         addressAtCurrentRow = self.ui.tableWidgetInbox.item(
             currentRow, 0).data(QtCore.Qt.UserRole)
-        clipboard = QtGui.QApplication.clipboard()
+        clipboard = QtWidgets.QApplication.clipboard()
         clipboard.setText(str(addressAtCurrentRow))
 
     # Group of functions for the Address Book dialog box
@@ -3255,7 +3329,7 @@ class MyForm(settingsmixin.SMainWindow):
                 addresses_string = item.address
             else:
                 addresses_string += ', ' + item.address
-        clipboard = QtGui.QApplication.clipboard()
+        clipboard = QtWidgets.QApplication.clipboard()
         clipboard.setText(addresses_string)
 
     def on_action_AddressBookSend(self):
@@ -3265,8 +3339,7 @@ class MyForm(settingsmixin.SMainWindow):
             return self.updateStatusBar(_translate(
                 "MainWindow", "No addresses selected."))
 
-        addresses_string = unicode(
-            self.ui.lineEditTo.text().toUtf8(), 'utf-8')
+        addresses_string = self.ui.lineEditTo.text()
         for item in selected_items:
             address_string = item.accountString()
             if not addresses_string:
@@ -3297,7 +3370,7 @@ class MyForm(settingsmixin.SMainWindow):
             )
 
     def on_context_menuAddressBook(self, point):
-        self.popMenuAddressBook = QtGui.QMenu(self)
+        self.popMenuAddressBook = QtWidgets.QMenu(self)
         self.popMenuAddressBook.addAction(self.actionAddressBookSend)
         self.popMenuAddressBook.addAction(self.actionAddressBookClipboard)
         self.popMenuAddressBook.addAction(self.actionAddressBookSubscribe)
@@ -3327,7 +3400,7 @@ class MyForm(settingsmixin.SMainWindow):
         self.click_pushButtonAddSubscription()
 
     def on_action_SubscriptionsDelete(self):
-        if QtGui.QMessageBox.question(
+        if QtWidgets.QMessageBox.question(
                 self, "Delete subscription?",
                 _translate(
                     "MainWindow",
@@ -3338,8 +3411,8 @@ class MyForm(settingsmixin.SMainWindow):
                     " messages, but you can still view messages you"
                     " already received.\n\nAre you sure you want to"
                     " delete the subscription?"
-                ), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No
-        ) != QtGui.QMessageBox.Yes:
+                ), QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No
+        ) != QtWidgets.QMessageBox.Yes:
             return
         address = self.getCurrentAccount()
         sqlExecute('''DELETE FROM subscriptions WHERE address=?''',
@@ -3351,7 +3424,7 @@ class MyForm(settingsmixin.SMainWindow):
 
     def on_action_SubscriptionsClipboard(self):
         address = self.getCurrentAccount()
-        clipboard = QtGui.QApplication.clipboard()
+        clipboard = QtWidgets.QApplication.clipboard()
         clipboard.setText(str(address))
 
     def on_action_SubscriptionsEnable(self):
@@ -3376,7 +3449,7 @@ class MyForm(settingsmixin.SMainWindow):
 
     def on_context_menuSubscriptions(self, point):
         currentItem = self.getCurrentItem()
-        self.popMenuSubscriptions = QtGui.QMenu(self)
+        self.popMenuSubscriptions = QtWidgets.QMenu(self)
         if isinstance(currentItem, Ui_AddressWidget):
             self.popMenuSubscriptions.addAction(self.actionsubscriptionsNew)
             self.popMenuSubscriptions.addAction(self.actionsubscriptionsDelete)
@@ -3416,8 +3489,6 @@ class MyForm(settingsmixin.SMainWindow):
             return self.ui.tableWidgetInboxSubscriptions
         elif widget == self.ui.treeWidgetChans:
             return self.ui.tableWidgetInboxChans
-        else:
-            return None
 
     def getCurrentTreeWidget(self):
         currentIndex = self.ui.tabWidget.currentIndex()
@@ -3506,7 +3577,7 @@ class MyForm(settingsmixin.SMainWindow):
         if currentIndex >= 0 and currentIndex < len(messagelistList):
             return (
                 messagelistList[currentIndex] if retObj
-                else messagelistList[currentIndex].text().toUtf8().data())
+                else messagelistList[currentIndex].text())
 
     def getCurrentSearchOption(self, currentIndex=None):
         if currentIndex is None:
@@ -3562,7 +3633,7 @@ class MyForm(settingsmixin.SMainWindow):
         if account.type == AccountMixin.NORMAL:
             return  # maybe in the future
         elif account.type == AccountMixin.CHAN:
-            if QtGui.QMessageBox.question(
+            if QtWidgets.QMessageBox.question(
                     self, "Delete channel?",
                     _translate(
                         "MainWindow",
@@ -3573,8 +3644,8 @@ class MyForm(settingsmixin.SMainWindow):
                         " messages, but you can still view messages you"
                         " already received.\n\nAre you sure you want to"
                         " delete the channel?"
-                    ), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No
-            ) == QtGui.QMessageBox.Yes:
+                    ), QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No
+            ) == QtWidgets.QMessageBox.Yes:
                 BMConfigParser().remove_section(str(account.address))
             else:
                 return
@@ -3615,7 +3686,7 @@ class MyForm(settingsmixin.SMainWindow):
 
     def on_action_Clipboard(self):
         address = self.getCurrentAccount()
-        clipboard = QtGui.QApplication.clipboard()
+        clipboard = QtWidgets.QApplication.clipboard()
         clipboard.setText(str(address))
 
     def on_action_ClipboardMessagelist(self):
@@ -3633,14 +3704,15 @@ class MyForm(settingsmixin.SMainWindow):
             myAddress = tableWidget.item(currentRow, 0).data(QtCore.Qt.UserRole)
             otherAddress = tableWidget.item(currentRow, 1).data(QtCore.Qt.UserRole)
         account = accountClass(myAddress)
-        if isinstance(account, GatewayAccount) and otherAddress == account.relayAddress and (
-            (currentColumn in [0, 2] and self.getCurrentFolder() == "sent") or
-            (currentColumn in [1, 2] and self.getCurrentFolder() != "sent")):
-            text = str(tableWidget.item(currentRow, currentColumn).label)
+        if isinstance(account, GatewayAccount) \
+            and otherAddress == account.relayAddress and (
+                (currentColumn in (0, 2) and currentFolder == "sent")
+                or (currentColumn in (1, 2) and currentFolder != "sent")):
+            text = tableWidget.item(currentRow, currentColumn).label
         else:
             text = tableWidget.item(currentRow, currentColumn).data(QtCore.Qt.UserRole)
-
-        clipboard = QtGui.QApplication.clipboard()
+        # text = unicode(str(text), 'utf-8', 'ignore')
+        clipboard = QtWidgets.QApplication.clipboard()
         clipboard.setText(text)
 
     # set avatar functions
@@ -3665,10 +3737,7 @@ class MyForm(settingsmixin.SMainWindow):
         if not os.path.exists(state.appdata + 'avatars/'):
             os.makedirs(state.appdata + 'avatars/')
         hash = hashlib.md5(addBMIfNotPresent(addressAtCurrentRow)).hexdigest()
-        extensions = [
-            'PNG', 'GIF', 'JPG', 'JPEG', 'SVG', 'BMP', 'MNG', 'PBM',
-            'PGM', 'PPM', 'TIFF', 'XBM', 'XPM', 'TGA']
-
+        # http://pyqt.sourceforge.net/Docs/PyQt4/qimagereader.html#supportedImageFormats
         names = {
             'BMP': 'Windows Bitmap',
             'GIF': 'Graphic Interchange Format',
@@ -3683,11 +3752,12 @@ class MyForm(settingsmixin.SMainWindow):
             'XBM': 'X11 Bitmap',
             'XPM': 'X11 Pixmap',
             'SVG': 'Scalable Vector Graphics',
-            'TGA': 'Targa Image Format'}
+            'TGA': 'Targa Image Format'
+        }
         filters = []
         all_images_filter = []
         current_files = []
-        for ext in extensions:
+        for ext in names:
             filters += [names[ext] + ' (*.' + ext.lower() + ')']
             all_images_filter += ['*.' + ext.lower()]
             upper = state.appdata + 'avatars/' + hash + '.' + ext.upper()
@@ -3698,7 +3768,7 @@ class MyForm(settingsmixin.SMainWindow):
                 current_files += [upper]
         filters[0:0] = ['Image files (' + ' '.join(all_images_filter) + ')']
         filters[1:1] = ['All files (*.*)']
-        sourcefile = QtGui.QFileDialog.getOpenFileName(
+        sourcefile, filetype = QtWidgets.QFileDialog.getOpenFileName(
             self, _translate("MainWindow", "Set avatar..."),
             filter=';;'.join(filters)
         )
@@ -3710,11 +3780,11 @@ class MyForm(settingsmixin.SMainWindow):
             if exists | (len(current_files) > 0):
                 displayMsg = _translate(
                     "MainWindow", "Do you really want to remove this avatar?")
-                overwrite = QtGui.QMessageBox.question(
+                overwrite = QtWidgets.QMessageBox.question(
                     self, 'Message', displayMsg,
-                    QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
+                    QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
             else:
-                overwrite = QtGui.QMessageBox.No
+                overwrite = QtWidgets.QMessageBox.No
         else:
             # ask whether to overwrite old avatar
             if exists | (len(current_files) > 0):
@@ -3722,15 +3792,15 @@ class MyForm(settingsmixin.SMainWindow):
                     "MainWindow",
                     "You have already set an avatar for this address."
                     " Do you really want to overwrite it?")
-                overwrite = QtGui.QMessageBox.question(
+                overwrite = QtWidgets.QMessageBox.question(
                     self, 'Message', displayMsg,
-                    QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
+                    QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
             else:
-                overwrite = QtGui.QMessageBox.No
+                overwrite = QtWidgets.QMessageBox.No
 
         # copy the image file to the appdata folder
-        if (not exists) | (overwrite == QtGui.QMessageBox.Yes):
-            if overwrite == QtGui.QMessageBox.Yes:
+        if (not exists) | (overwrite == QtWidgets.QMessageBox.Yes):
+            if overwrite == QtWidgets.QMessageBox.Yes:
                 for file in current_files:
                     QtCore.QFile.remove(file)
                 QtCore.QFile.remove(destination)
@@ -3762,10 +3832,10 @@ class MyForm(settingsmixin.SMainWindow):
             "MainWindow", "Sound files (%s)" %
             ' '.join(['*%s%s' % (os.extsep, ext) for ext in sound.extensions])
         ))]
-        sourcefile = unicode(QtGui.QFileDialog.getOpenFileName(
+        sourcefile, filetype = QtWidgets.QFileDialog.getOpenFileName(
             self, _translate("MainWindow", "Set notification sound..."),
             filter=';;'.join(filters)
-        ))
+        )
 
         if not sourcefile:
             return
@@ -3780,15 +3850,15 @@ class MyForm(settingsmixin.SMainWindow):
         pattern = destfile.lower()
         for item in os.listdir(destdir):
             if item.lower() == pattern:
-                overwrite = QtGui.QMessageBox.question(
+                overwrite = QtWidgets.QMessageBox.question(
                     self, _translate("MainWindow", "Message"),
                     _translate(
                         "MainWindow",
                         "You have already set a notification sound"
                         " for this address book entry."
                         " Do you really want to overwrite it?"),
-                    QtGui.QMessageBox.Yes, QtGui.QMessageBox.No
-                ) == QtGui.QMessageBox.Yes
+                    QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No
+                ) == QtWidgets.QMessageBox.Yes
                 if overwrite:
                     QtCore.QFile.remove(os.path.join(destdir, item))
                 break
@@ -3799,18 +3869,23 @@ class MyForm(settingsmixin.SMainWindow):
 
     def on_context_menuYourIdentities(self, point):
         currentItem = self.getCurrentItem()
-        self.popMenuYourIdentities = QtGui.QMenu(self)
+        self.popMenuYourIdentities = QtWidgets.QMenu(self)
         if isinstance(currentItem, Ui_AddressWidget):
             self.popMenuYourIdentities.addAction(self.actionNewYourIdentities)
             self.popMenuYourIdentities.addSeparator()
-            self.popMenuYourIdentities.addAction(self.actionClipboardYourIdentities)
+            self.popMenuYourIdentities.addAction(
+                self.actionClipboardYourIdentities)
             self.popMenuYourIdentities.addSeparator()
             if currentItem.isEnabled:
-                self.popMenuYourIdentities.addAction(self.actionDisableYourIdentities)
+                self.popMenuYourIdentities.addAction(
+                    self.actionDisableYourIdentities)
             else:
-                self.popMenuYourIdentities.addAction(self.actionEnableYourIdentities)
-            self.popMenuYourIdentities.addAction(self.actionSetAvatarYourIdentities)
-            self.popMenuYourIdentities.addAction(self.actionSpecialAddressBehaviorYourIdentities)
+                self.popMenuYourIdentities.addAction(
+                    self.actionEnableYourIdentities)
+            self.popMenuYourIdentities.addAction(
+                self.actionSetAvatarYourIdentities)
+            self.popMenuYourIdentities.addAction(
+                self.actionSpecialAddressBehaviorYourIdentities)
             self.popMenuYourIdentities.addAction(self.actionEmailGateway)
             self.popMenuYourIdentities.addSeparator()
             if currentItem.type != AccountMixin.ALL:
@@ -3829,7 +3904,7 @@ class MyForm(settingsmixin.SMainWindow):
     # TODO make one popMenu
     def on_context_menuChan(self, point):
         currentItem = self.getCurrentItem()
-        self.popMenu = QtGui.QMenu(self)
+        self.popMenu = QtWidgets.QMenu(self)
         if isinstance(currentItem, Ui_AddressWidget):
             self.popMenu.addAction(self.actionNew)
             self.popMenu.addAction(self.actionDelete)
@@ -3865,7 +3940,7 @@ class MyForm(settingsmixin.SMainWindow):
             self.on_context_menuSent(point)
             return
 
-        self.popMenuInbox = QtGui.QMenu(self)
+        self.popMenuInbox = QtWidgets.QMenu(self)
         self.popMenuInbox.addAction(self.actionForceHtml)
         self.popMenuInbox.addAction(self.actionMarkUnread)
         self.popMenuInbox.addSeparator()
@@ -3900,7 +3975,7 @@ class MyForm(settingsmixin.SMainWindow):
 
     def on_context_menuSent(self, point):
         currentRow = self.ui.tableWidgetInbox.currentRow()
-        self.popMenuSent = QtGui.QMenu(self)
+        self.popMenuSent = QtWidgets.QMenu(self)
         self.popMenuSent.addAction(self.actionSentClipboard)
         self._contact_selected = self.ui.tableWidgetInbox.item(currentRow, 0)
         # preloaded gui.menu plugins with prefix 'address'
@@ -3924,7 +3999,7 @@ class MyForm(settingsmixin.SMainWindow):
 
     def inboxSearchLineEditUpdated(self, text):
         # dynamic search for too short text is slow
-        text = text.toUtf8()
+        text = text.encode('utf-8')
         if 0 < len(text) < 3:
             return
         messagelist = self.getCurrentMessagelist()
@@ -3937,9 +4012,9 @@ class MyForm(settingsmixin.SMainWindow):
 
     def inboxSearchLineEditReturnPressed(self):
         logger.debug("Search return pressed")
-        searchLine = self.getCurrentSearchLine()
+        searchLine = self.getCurrentSearchLine().encode('utf-8')
         messagelist = self.getCurrentMessagelist()
-        if messagelist and len(str(searchLine)) < 3:
+        if messagelist and len(searchLine) < 3:
             searchOption = self.getCurrentSearchOption()
             account = self.getCurrentAccount()
             folder = self.getCurrentFolder()
@@ -3979,7 +4054,7 @@ class MyForm(settingsmixin.SMainWindow):
         if item.type == AccountMixin.ALL:
             return
 
-        newLabel = unicode(item.text(0), 'utf-8', 'ignore')
+        newLabel = item.text(0)
         oldLabel = item.defaultLabel()
 
         # unchanged, do not do anything either
@@ -3998,7 +4073,9 @@ class MyForm(settingsmixin.SMainWindow):
         self.rerenderMessagelistFromLabels()
         if item.type != AccountMixin.SUBSCRIPTION:
             self.rerenderMessagelistToLabels()
-        if item.type in (AccountMixin.NORMAL, AccountMixin.CHAN, AccountMixin.SUBSCRIPTION):
+        if item.type in (
+            AccountMixin.NORMAL, AccountMixin.CHAN, AccountMixin.SUBSCRIPTION
+        ):
             self.rerenderAddressBook()
         self.recurDepth -= 1
 
@@ -4018,9 +4095,9 @@ class MyForm(settingsmixin.SMainWindow):
             )
 
         try:
-            message = queryreturn[-1][0]
+            message = unicode(queryreturn[-1][0], 'utf-8')
         except NameError:
-            message = ""
+            message = u""
         except IndexError:
             message = _translate(
                 "MainWindow",
@@ -4116,7 +4193,7 @@ app = None
 myapp = None
 
 
-class BitmessageQtApplication(QtGui.QApplication):
+class BitmessageQtApplication(QtWidgets.QApplication):
     """
     Listener to allow our Qt form to get focus when another instance of the
     application is open.
@@ -4139,15 +4216,15 @@ class BitmessageQtApplication(QtGui.QApplication):
         self.server = None
         self.is_running = False
 
-        socket = QLocalSocket()
+        socket = QtNetwork.QLocalSocket()
         socket.connectToServer(id)
         self.is_running = socket.waitForConnected()
 
         # Cleanup past crashed servers
         if not self.is_running:
-            if socket.error() == QLocalSocket.ConnectionRefusedError:
+            if socket.error() == QtNetwork.QLocalSocket.ConnectionRefusedError:
                 socket.disconnectFromServer()
-                QLocalServer.removeServer(id)
+                QtNetwork.QLocalServer.removeServer(id)
 
         socket.abort()
 
@@ -4158,7 +4235,7 @@ class BitmessageQtApplication(QtGui.QApplication):
         else:
             # Nope, create a local server with this id and assign on_new_connection
             # for whenever a second instance tries to run focus the application.
-            self.server = QLocalServer()
+            self.server = QtNetwork.QLocalServer()
             self.server.listen(id)
             self.server.newConnection.connect(self.on_new_connection)
 
@@ -4190,12 +4267,6 @@ def run():
     if myapp._firstrun:
         myapp.showConnectDialog()  # ask the user if we may connect
 
-#    try:
-#        if BMConfigParser().get('bitmessagesettings', 'mailchuck') < 1:
-#            myapp.showMigrationWizard(BMConfigParser().get('bitmessagesettings', 'mailchuck'))
-#    except:
-#        myapp.showMigrationWizard(0)
-
     # only show after wizards and connect dialogs have completed
     if not BMConfigParser().getboolean('bitmessagesettings', 'startintray'):
         myapp.show()
diff --git a/src/bitmessageqt/account.py b/src/bitmessageqt/account.py
index 50ea3548..31780e20 100644
--- a/src/bitmessageqt/account.py
+++ b/src/bitmessageqt/account.py
@@ -1,46 +1,31 @@
-# pylint: disable=too-many-instance-attributes,attribute-defined-outside-init
 """
-account.py
-==========
-
 Account related functions.
 
 """
 
-from __future__ import absolute_import
-
 import inspect
 import re
 import sys
 import time
 
-from PyQt4 import QtGui
-
 import queues
 from addresses import decodeAddress
 from bmconfigparser import BMConfigParser
 from helper_ackPayload import genAckPayload
 from helper_sql import sqlQuery, sqlExecute
-from .foldertree import AccountMixin
-from .utils import str_broadcast_subscribers
+from foldertree import AccountMixin
+from utils import str_broadcast_subscribers
+from tr import _translate
 
 
 def getSortedAccounts():
-    """Get a sorted list of configSections"""
-
+    """Get a sorted list of address config sections"""
     configSections = BMConfigParser().addresses()
     configSections.sort(
         cmp=lambda x, y: cmp(
-            unicode(
-                BMConfigParser().get(
-                    x,
-                    'label'),
-                'utf-8').lower(),
-            unicode(
-                BMConfigParser().get(
-                    y,
-                    'label'),
-                'utf-8').lower()))
+            unicode(BMConfigParser().get(x, 'label'), 'utf-8').lower(),
+            unicode(BMConfigParser().get(y, 'label'), 'utf-8').lower())
+    )
     return configSections
 
 
@@ -94,7 +79,8 @@ def accountClass(address):
         return subscription
     try:
         gateway = BMConfigParser().get(address, "gateway")
-        for _, cls in inspect.getmembers(sys.modules[__name__], inspect.isclass):
+        for _, cls in inspect.getmembers(
+                sys.modules[__name__], inspect.isclass):
             if issubclass(cls, GatewayAccount) and cls.gatewayName == gateway:
                 return cls(address)
         # general gateway
@@ -105,7 +91,7 @@ def accountClass(address):
     return BMAccount(address)
 
 
-class AccountColor(AccountMixin):  # pylint: disable=too-few-public-methods
+class AccountColor(AccountMixin):
     """Set the type of account"""
 
     def __init__(self, address, address_type=None):
@@ -127,12 +113,35 @@ class AccountColor(AccountMixin):  # pylint: disable=too-few-public-methods
             self.type = address_type
 
 
-class BMAccount(object):
-    """Encapsulate a Bitmessage account"""
-
+class NoAccount(object):
+    """Minimal account like object (All accounts)"""
+    # pylint: disable=too-many-instance-attributes
     def __init__(self, address=None):
         self.address = address
         self.type = AccountMixin.NORMAL
+        self.toAddress = self.fromAddress = ''
+        self.subject = self.message = ''
+        self.fromLabel = self.toLabel = ''
+
+    def getLabel(self, address=None):
+        """Get a label for this bitmessage account"""
+        return address or self.address
+
+    def parseMessage(self, toAddress, fromAddress, subject, message):
+        """Set metadata and address labels on self"""
+        self.toAddress = toAddress
+        self.fromAddress = fromAddress
+        self.subject = subject
+        self.message = message
+        self.fromLabel = self.getLabel(fromAddress)
+        self.toLabel = self.getLabel(toAddress)
+
+
+class BMAccount(NoAccount):
+    """Encapsulate a Bitmessage account"""
+
+    def __init__(self, address=None):
+        super(BMAccount, self).__init__(address)
         if BMConfigParser().has_section(address):
             if BMConfigParser().safeGetBoolean(self.address, 'chan'):
                 self.type = AccountMixin.CHAN
@@ -148,8 +157,7 @@ class BMAccount(object):
 
     def getLabel(self, address=None):
         """Get a label for this bitmessage account"""
-        if address is None:
-            address = self.address
+        address = super(BMAccount, self).getLabel(address)
         label = BMConfigParser().safeGet(address, 'label', address)
         queryreturn = sqlQuery(
             '''select label from addressbook where address=?''', address)
@@ -162,33 +170,7 @@ class BMAccount(object):
             if queryreturn != []:
                 for row in queryreturn:
                     label, = row
-        return label
-
-    def parseMessage(self, toAddress, fromAddress, subject, message):
-        """Set metadata and address labels on self"""
-
-        self.toAddress = toAddress
-        self.fromAddress = fromAddress
-        if isinstance(subject, unicode):
-            self.subject = str(subject)
-        else:
-            self.subject = subject
-        self.message = message
-        self.fromLabel = self.getLabel(fromAddress)
-        self.toLabel = self.getLabel(toAddress)
-
-
-class NoAccount(BMAccount):
-    """Override the __init__ method on a BMAccount"""
-
-    def __init__(self, address=None):  # pylint: disable=super-init-not-called
-        self.address = address
-        self.type = AccountMixin.NORMAL
-
-    def getLabel(self, address=None):
-        if address is None:
-            address = self.address
-        return address
+        return unicode(label, 'utf-8')
 
 
 class SubscriptionAccount(BMAccount):
@@ -208,15 +190,11 @@ class GatewayAccount(BMAccount):
     ALL_OK = 0
     REGISTRATION_DENIED = 1
 
-    def __init__(self, address):
-        super(GatewayAccount, self).__init__(address)
-
     def send(self):
-        """Override the send method for gateway accounts"""
-
-        # pylint: disable=unused-variable
-        status, addressVersionNumber, streamNumber, ripe = decodeAddress(self.toAddress)
-        stealthLevel = BMConfigParser().safeGetInt('bitmessagesettings', 'ackstealthlevel')
+        """The send method for gateway accounts"""
+        streamNumber, ripe = decodeAddress(self.toAddress)[2:]
+        stealthLevel = BMConfigParser().safeGetInt(
+            'bitmessagesettings', 'ackstealthlevel')
         ackdata = genAckPayload(streamNumber, stealthLevel)
         sqlExecute(
             '''INSERT INTO sent VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''',
@@ -289,10 +267,9 @@ class MailchuckAccount(GatewayAccount):
 
     def settings(self):
         """settings specific to a MailchuckAccount"""
-
         self.toAddress = self.registrationAddress
         self.subject = "config"
-        self.message = QtGui.QApplication.translate(
+        self.message = _translate(
             "Mailchuck",
             """# You can use this to configure your email gateway account
 # Uncomment the setting you want to use
@@ -338,8 +315,9 @@ class MailchuckAccount(GatewayAccount):
 
     def parseMessage(self, toAddress, fromAddress, subject, message):
         """parseMessage specific to a MailchuckAccount"""
-
-        super(MailchuckAccount, self).parseMessage(toAddress, fromAddress, subject, message)
+        super(MailchuckAccount, self).parseMessage(
+            toAddress, fromAddress, subject, message
+        )
         if fromAddress == self.relayAddress:
             matches = self.regExpIncoming.search(subject)
             if matches is not None:
@@ -360,6 +338,7 @@ class MailchuckAccount(GatewayAccount):
                     self.toLabel = matches.group(1)
                     self.toAddress = matches.group(1)
         self.feedback = self.ALL_OK
-        if fromAddress == self.registrationAddress and self.subject == "Registration Request Denied":
+        if fromAddress == self.registrationAddress \
+                and self.subject == "Registration Request Denied":
             self.feedback = self.REGISTRATION_DENIED
         return self.feedback
diff --git a/src/bitmessageqt/address_dialogs.py b/src/bitmessageqt/address_dialogs.py
index 56cf7cc5..6275859a 100644
--- a/src/bitmessageqt/address_dialogs.py
+++ b/src/bitmessageqt/address_dialogs.py
@@ -1,39 +1,39 @@
 """
 Dialogs that work with BM address.
 """
-# pylint: disable=attribute-defined-outside-init,too-few-public-methods,relative-import
+# pylint: disable=too-few-public-methods
+# https://github.com/PyCQA/pylint/issues/471
 
 import hashlib
 
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtGui, QtWidgets
 
 import queues
 import widgets
-from account import AccountMixin, GatewayAccount, MailchuckAccount, accountClass, getSortedAccounts
-from addresses import addBMIfNotPresent, decodeAddress, encodeVarint
+from account import (
+    GatewayAccount, MailchuckAccount, AccountMixin, accountClass,
+    getSortedAccounts
+)
+from addresses import decodeAddress, encodeVarint, addBMIfNotPresent
 from inventory import Inventory
 from tr import _translate
 
 
 class AddressCheckMixin(object):
-    """Base address validation class for QT UI"""
+    """Base address validation class for Qt UI"""
 
-    def __init__(self):
+    def _setup(self):
         self.valid = False
-        QtCore.QObject.connect(  # pylint: disable=no-member
-            self.lineEditAddress,
-            QtCore.SIGNAL("textChanged(QString)"),
-            self.addressChanged)
+        self.lineEditAddress.textChanged.connect(self.addressChanged)
 
     def _onSuccess(self, addressVersion, streamNumber, ripe):
         pass
 
-    def addressChanged(self, QString):
+    def addressChanged(self, address):
         """
         Address validation callback, performs validation and gives feedback
         """
-        status, addressVersion, streamNumber, ripe = decodeAddress(
-            str(QString))
+        status, addressVersion, streamNumber, ripe = decodeAddress(address)
         self.valid = status == 'success'
         if self.valid:
             self.labelAddressCheck.setText(
@@ -78,19 +78,27 @@ class AddressCheckMixin(object):
             ))
 
 
-class AddressDataDialog(QtGui.QDialog, AddressCheckMixin):
-    """QDialog with Bitmessage address validation"""
+class AddressDataDialog(QtWidgets.QDialog, AddressCheckMixin):
+    """
+    Base class for a dialog getting BM-address data.
+    Corresponding ui-file should define two fields:
+    lineEditAddress - for the address
+    lineEditLabel - for it's label
+    After address validation the values of that fields are put into
+    the data field of the dialog.
+    """
 
     def __init__(self, parent):
         super(AddressDataDialog, self).__init__(parent)
         self.parent = parent
+        self.data = ("", "")
 
     def accept(self):
-        """Callback for QDIalog accepting value"""
+        """Callback for QDialog accepting value"""
         if self.valid:
             self.data = (
                 addBMIfNotPresent(str(self.lineEditAddress.text())),
-                str(self.lineEditLabel.text().toUtf8())
+                self.lineEditLabel.text().encode('utf-8')
             )
         else:
             queues.UISignalQueue.put(('updateStatusBar', _translate(
@@ -106,12 +114,12 @@ class AddAddressDialog(AddressDataDialog):
     def __init__(self, parent=None, address=None):
         super(AddAddressDialog, self).__init__(parent)
         widgets.load('addaddressdialog.ui', self)
-        AddressCheckMixin.__init__(self)
+        self._setup()
         if address:
             self.lineEditAddress.setText(address)
 
 
-class NewAddressDialog(QtGui.QDialog):
+class NewAddressDialog(QtWidgets.QDialog):
     """QDialog for generating a new address"""
 
     def __init__(self, parent=None):
@@ -124,7 +132,7 @@ class NewAddressDialog(QtGui.QDialog):
             self.radioButtonExisting.click()
             self.comboBoxExisting.addItem(address)
         self.groupBoxDeterministic.setHidden(True)
-        QtGui.QWidget.resize(self, QtGui.QWidget.sizeHint(self))
+        QtWidgets.QWidget.resize(self, QtWidgets.QWidget.sizeHint(self))
         self.show()
 
     def accept(self):
@@ -141,13 +149,13 @@ class NewAddressDialog(QtGui.QDialog):
                     self.comboBoxExisting.currentText())[2]
             queues.addressGeneratorQueue.put((
                 'createRandomAddress', 4, streamNumberForAddress,
-                str(self.newaddresslabel.text().toUtf8()), 1, "",
+                self.newaddresslabel.text().encode('utf-8'), 1, "",
                 self.checkBoxEighteenByteRipe.isChecked()
             ))
         else:
             if self.lineEditPassphrase.text() != \
                     self.lineEditPassphraseAgain.text():
-                QtGui.QMessageBox.about(
+                QtWidgets.QMessageBox.about(
                     self, _translate("MainWindow", "Passphrase mismatch"),
                     _translate(
                         "MainWindow",
@@ -155,7 +163,7 @@ class NewAddressDialog(QtGui.QDialog):
                         " match. Try again.")
                 )
             elif self.lineEditPassphrase.text() == "":
-                QtGui.QMessageBox.about(
+                QtWidgets.QMessageBox.about(
                     self, _translate("MainWindow", "Choose a passphrase"),
                     _translate(
                         "MainWindow", "You really do need a passphrase.")
@@ -168,7 +176,7 @@ class NewAddressDialog(QtGui.QDialog):
                     'createDeterministicAddresses', 4, streamNumberForAddress,
                     "unused deterministic address",
                     self.spinBoxNumberOfAddressesToMake.value(),
-                    self.lineEditPassphrase.text().toUtf8(),
+                    self.lineEditPassphrase.text().encode('utf-8'),
                     self.checkBoxEighteenByteRipe.isChecked()
                 ))
 
@@ -179,7 +187,7 @@ class NewSubscriptionDialog(AddressDataDialog):
     def __init__(self, parent=None):
         super(NewSubscriptionDialog, self).__init__(parent)
         widgets.load('newsubscriptiondialog.ui', self)
-        AddressCheckMixin.__init__(self)
+        self._setup()
 
     def _onSuccess(self, addressVersion, streamNumber, ripe):
         if addressVersion <= 3:
@@ -210,22 +218,21 @@ class NewSubscriptionDialog(AddressDataDialog):
                     _translate(
                         "MainWindow",
                         "Display the %n recent broadcast(s) from this address.",
-                        None,
-                        QtCore.QCoreApplication.CodecForTr,
-                        count
+                        None, count
                     ))
 
 
-class RegenerateAddressesDialog(QtGui.QDialog):
+class RegenerateAddressesDialog(QtWidgets.QDialog):
     """QDialog for regenerating deterministic addresses"""
+
     def __init__(self, parent=None):
         super(RegenerateAddressesDialog, self).__init__(parent)
         widgets.load('regenerateaddresses.ui', self)
         self.groupBox.setTitle('')
-        QtGui.QWidget.resize(self, QtGui.QWidget.sizeHint(self))
+        QtWidgets.QWidget.resize(self, QtWidgets.QWidget.sizeHint(self))
 
 
-class SpecialAddressBehaviorDialog(QtGui.QDialog):
+class SpecialAddressBehaviorDialog(QtWidgets.QDialog):
     """
     QDialog for special address behaviour (e.g. mailing list functionality)
     """
@@ -256,12 +263,12 @@ class SpecialAddressBehaviorDialog(QtGui.QDialog):
                     self.radioButtonBehaviorMailingList.click()
                 else:
                     self.radioButtonBehaveNormalAddress.click()
-                mailingListName = config.safeGet(self.address, 'mailinglistname', '')
+                mailingListName = config.safeGet(
+                    self.address, 'mailinglistname', '')
                 self.lineEditMailingListName.setText(
-                    unicode(mailingListName, 'utf-8')
-                )
+                    mailingListName.decode('utf-8'))
 
-        QtGui.QWidget.resize(self, QtGui.QWidget.sizeHint(self))
+        QtWidgets.QWidget.resize(self, QtWidgets.QWidget.sizeHint(self))
         self.show()
 
     def accept(self):
@@ -274,14 +281,15 @@ class SpecialAddressBehaviorDialog(QtGui.QDialog):
             # Set the color to either black or grey
             if self.config.getboolean(self.address, 'enabled'):
                 self.parent.setCurrentItemColor(
-                    QtGui.QApplication.palette().text().color()
+                    QtWidgets.QApplication.palette().text().color()
                 )
             else:
                 self.parent.setCurrentItemColor(QtGui.QColor(128, 128, 128))
         else:
             self.config.set(str(self.address), 'mailinglist', 'true')
-            self.config.set(str(self.address), 'mailinglistname', str(
-                self.lineEditMailingListName.text().toUtf8()))
+            self.config.set(
+                str(self.address), 'mailinglistname',
+                self.lineEditMailingListName.text().encode('utf-8'))
             self.parent.setCurrentItemColor(
                 QtGui.QColor(137, 4, 177))  # magenta
         self.parent.rerenderComboBoxSendFrom()
@@ -290,8 +298,9 @@ class SpecialAddressBehaviorDialog(QtGui.QDialog):
         self.parent.rerenderMessagelistToLabels()
 
 
-class EmailGatewayDialog(QtGui.QDialog):
+class EmailGatewayDialog(QtWidgets.QDialog):
     """QDialog for email gateway control"""
+
     def __init__(self, parent, config=None, account=None):
         super(EmailGatewayDialog, self).__init__(parent)
         widgets.load('emailgateway.ui', self)
@@ -329,7 +338,7 @@ class EmailGatewayDialog(QtGui.QDialog):
             else:
                 self.acct = MailchuckAccount(address)
         self.lineEditEmail.setFocus()
-        QtGui.QWidget.resize(self, QtGui.QWidget.sizeHint(self))
+        QtWidgets.QWidget.resize(self, QtWidgets.QWidget.sizeHint(self))
 
     def accept(self):
         """Accept callback"""
@@ -343,7 +352,7 @@ class EmailGatewayDialog(QtGui.QDialog):
 
         if self.radioButtonRegister.isChecked() \
                 or self.radioButtonRegister.isHidden():
-            email = str(self.lineEditEmail.text().toUtf8())
+            email = self.lineEditEmail.text().encode('utf-8')
             self.acct.register(email)
             self.config.set(self.acct.fromAddress, 'label', email)
             self.config.set(self.acct.fromAddress, 'gateway', 'mailchuck')
diff --git a/src/bitmessageqt/bitmessage_icons_rc.py b/src/bitmessageqt/bitmessage_icons_rc.py
index bb0a02c0..5d792c48 100644
--- a/src/bitmessageqt/bitmessage_icons_rc.py
+++ b/src/bitmessageqt/bitmessage_icons_rc.py
@@ -7,7 +7,7 @@
 #
 # WARNING! All changes made in this file will be lost!
 
-from PyQt4 import QtCore
+from PyQt5 import QtCore
 
 qt_resource_data = "\
 \x00\x00\x03\x66\
@@ -1666,10 +1666,15 @@ qt_resource_struct = "\
 \x00\x00\x01\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x34\xdf\
 "
 
+
 def qInitResources():
-    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+    QtCore.qRegisterResourceData(
+        0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
 
 def qCleanupResources():
-    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+    QtCore.qUnregisterResourceData(
+        0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
+
 
 qInitResources()
diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py
index 7f2c8c91..3388c1cb 100644
--- a/src/bitmessageqt/bitmessageui.py
+++ b/src/bitmessageqt/bitmessageui.py
@@ -1,13 +1,5 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'bitmessageui.ui'
-#
-# Created: Mon Mar 23 22:18:07 2015
-#      by: PyQt4 UI code generator 4.10.4
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtCore, QtGui, QtWidgets
+from tr import _translate
 from bmconfigparser import BMConfigParser
 from foldertree import AddressBookCompleter
 from messageview import MessageView
@@ -16,40 +8,23 @@ import settingsmixin
 from networkstatus import NetworkStatus
 from blacklist import Blacklist
 
-try:
-    _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
-    def _fromUtf8(s):
-        return s
+import bitmessage_icons_rc
 
-try:
-    _encoding = QtGui.QApplication.UnicodeUTF8
-    def _translate(context, text, disambig, encoding = QtCore.QCoreApplication.CodecForTr, n = None):
-        if n is None:
-            return QtGui.QApplication.translate(context, text, disambig, _encoding)
-        else:
-            return QtGui.QApplication.translate(context, text, disambig, _encoding, n)
-except AttributeError:
-    def _translate(context, text, disambig, encoding = QtCore.QCoreApplication.CodecForTr, n = None):
-        if n is None:
-            return QtGui.QApplication.translate(context, text, disambig)
-        else:
-            return QtGui.QApplication.translate(context, text, disambig, QtCore.QCoreApplication.CodecForTr, n)
 
 class Ui_MainWindow(object):
     def setupUi(self, MainWindow):
-        MainWindow.setObjectName(_fromUtf8("MainWindow"))
+        MainWindow.setObjectName("MainWindow")
         MainWindow.resize(885, 580)
         icon = QtGui.QIcon()
-        icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/can-icon-24px.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        icon.addPixmap(QtGui.QPixmap(":/newPrefix/images/can-icon-24px.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
         MainWindow.setWindowIcon(icon)
-        MainWindow.setTabShape(QtGui.QTabWidget.Rounded)
-        self.centralwidget = QtGui.QWidget(MainWindow)
-        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
-        self.gridLayout_10 = QtGui.QGridLayout(self.centralwidget)
-        self.gridLayout_10.setObjectName(_fromUtf8("gridLayout_10"))
-        self.tabWidget = QtGui.QTabWidget(self.centralwidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
+        MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded)
+        self.centralwidget = QtWidgets.QWidget(MainWindow)
+        self.centralwidget.setObjectName("centralwidget")
+        self.gridLayout_10 = QtWidgets.QGridLayout(self.centralwidget)
+        self.gridLayout_10.setObjectName("gridLayout_10")
+        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.tabWidget.sizePolicy().hasHeightForWidth())
@@ -59,27 +34,27 @@ class Ui_MainWindow(object):
         font = QtGui.QFont()
         font.setPointSize(9)
         self.tabWidget.setFont(font)
-        self.tabWidget.setTabPosition(QtGui.QTabWidget.North)
-        self.tabWidget.setTabShape(QtGui.QTabWidget.Rounded)
-        self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
-        self.inbox = QtGui.QWidget()
-        self.inbox.setObjectName(_fromUtf8("inbox"))
-        self.gridLayout = QtGui.QGridLayout(self.inbox)
-        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
+        self.tabWidget.setTabPosition(QtWidgets.QTabWidget.North)
+        self.tabWidget.setTabShape(QtWidgets.QTabWidget.Rounded)
+        self.tabWidget.setObjectName("tabWidget")
+        self.inbox = QtWidgets.QWidget()
+        self.inbox.setObjectName("inbox")
+        self.gridLayout = QtWidgets.QGridLayout(self.inbox)
+        self.gridLayout.setObjectName("gridLayout")
         self.horizontalSplitter_3 = settingsmixin.SSplitter()
-        self.horizontalSplitter_3.setObjectName(_fromUtf8("horizontalSplitter_3"))
+        self.horizontalSplitter_3.setObjectName("horizontalSplitter_3")
         self.verticalSplitter_12 = settingsmixin.SSplitter()
-        self.verticalSplitter_12.setObjectName(_fromUtf8("verticalSplitter_12"))
+        self.verticalSplitter_12.setObjectName("verticalSplitter_12")
         self.verticalSplitter_12.setOrientation(QtCore.Qt.Vertical)
         self.treeWidgetYourIdentities = settingsmixin.STreeWidget(self.inbox)
-        self.treeWidgetYourIdentities.setObjectName(_fromUtf8("treeWidgetYourIdentities"))
+        self.treeWidgetYourIdentities.setObjectName("treeWidgetYourIdentities")
         self.treeWidgetYourIdentities.resize(200, self.treeWidgetYourIdentities.height())
         icon1 = QtGui.QIcon()
-        icon1.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/identities.png")), QtGui.QIcon.Selected, QtGui.QIcon.Off)
+        icon1.addPixmap(QtGui.QPixmap(":/newPrefix/images/identities.png"), QtGui.QIcon.Selected, QtGui.QIcon.Off)
         self.treeWidgetYourIdentities.headerItem().setIcon(0, icon1)
         self.verticalSplitter_12.addWidget(self.treeWidgetYourIdentities)
-        self.pushButtonNewAddress = QtGui.QPushButton(self.inbox)
-        self.pushButtonNewAddress.setObjectName(_fromUtf8("pushButtonNewAddress"))
+        self.pushButtonNewAddress = QtWidgets.QPushButton(self.inbox)
+        self.pushButtonNewAddress.setObjectName("pushButtonNewAddress")
         self.pushButtonNewAddress.resize(200, self.pushButtonNewAddress.height())
         self.verticalSplitter_12.addWidget(self.pushButtonNewAddress)
         self.verticalSplitter_12.setStretchFactor(0, 1)
@@ -89,21 +64,21 @@ class Ui_MainWindow(object):
         self.verticalSplitter_12.handle(1).setEnabled(False)
         self.horizontalSplitter_3.addWidget(self.verticalSplitter_12)
         self.verticalSplitter_7 = settingsmixin.SSplitter()
-        self.verticalSplitter_7.setObjectName(_fromUtf8("verticalSplitter_7"))
+        self.verticalSplitter_7.setObjectName("verticalSplitter_7")
         self.verticalSplitter_7.setOrientation(QtCore.Qt.Vertical)
-        self.horizontalSplitterSearch = QtGui.QSplitter()
-        self.horizontalSplitterSearch.setObjectName(_fromUtf8("horizontalSplitterSearch"))
-        self.inboxSearchLineEdit = QtGui.QLineEdit(self.inbox)
-        self.inboxSearchLineEdit.setObjectName(_fromUtf8("inboxSearchLineEdit"))
+        self.horizontalSplitterSearch = QtWidgets.QSplitter()
+        self.horizontalSplitterSearch.setObjectName("horizontalSplitterSearch")
+        self.inboxSearchLineEdit = QtWidgets.QLineEdit(self.inbox)
+        self.inboxSearchLineEdit.setObjectName("inboxSearchLineEdit")
         self.horizontalSplitterSearch.addWidget(self.inboxSearchLineEdit)
-        self.inboxSearchOption = QtGui.QComboBox(self.inbox)
-        self.inboxSearchOption.setObjectName(_fromUtf8("inboxSearchOption"))
-        self.inboxSearchOption.addItem(_fromUtf8(""))
-        self.inboxSearchOption.addItem(_fromUtf8(""))
-        self.inboxSearchOption.addItem(_fromUtf8(""))
-        self.inboxSearchOption.addItem(_fromUtf8(""))
-        self.inboxSearchOption.addItem(_fromUtf8(""))
-        self.inboxSearchOption.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
+        self.inboxSearchOption = QtWidgets.QComboBox(self.inbox)
+        self.inboxSearchOption.setObjectName("inboxSearchOption")
+        self.inboxSearchOption.addItem("")
+        self.inboxSearchOption.addItem("")
+        self.inboxSearchOption.addItem("")
+        self.inboxSearchOption.addItem("")
+        self.inboxSearchOption.addItem("")
+        self.inboxSearchOption.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents)
         self.inboxSearchOption.setCurrentIndex(3)
         self.horizontalSplitterSearch.addWidget(self.inboxSearchOption)
         self.horizontalSplitterSearch.handle(1).setEnabled(False)
@@ -111,21 +86,21 @@ class Ui_MainWindow(object):
         self.horizontalSplitterSearch.setStretchFactor(1, 0)
         self.verticalSplitter_7.addWidget(self.horizontalSplitterSearch)
         self.tableWidgetInbox = settingsmixin.STableWidget(self.inbox)
-        self.tableWidgetInbox.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
+        self.tableWidgetInbox.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
         self.tableWidgetInbox.setAlternatingRowColors(True)
-        self.tableWidgetInbox.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
-        self.tableWidgetInbox.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
+        self.tableWidgetInbox.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
+        self.tableWidgetInbox.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
         self.tableWidgetInbox.setWordWrap(False)
-        self.tableWidgetInbox.setObjectName(_fromUtf8("tableWidgetInbox"))
+        self.tableWidgetInbox.setObjectName("tableWidgetInbox")
         self.tableWidgetInbox.setColumnCount(4)
         self.tableWidgetInbox.setRowCount(0)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetInbox.setHorizontalHeaderItem(0, item)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetInbox.setHorizontalHeaderItem(1, item)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetInbox.setHorizontalHeaderItem(2, item)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetInbox.setHorizontalHeaderItem(3, item)
         self.tableWidgetInbox.horizontalHeader().setCascadingSectionResizes(True)
         self.tableWidgetInbox.horizontalHeader().setDefaultSectionSize(200)
@@ -139,7 +114,7 @@ class Ui_MainWindow(object):
         self.textEditInboxMessage = MessageView(self.inbox)
         self.textEditInboxMessage.setBaseSize(QtCore.QSize(0, 500))
         self.textEditInboxMessage.setReadOnly(True)
-        self.textEditInboxMessage.setObjectName(_fromUtf8("textEditInboxMessage"))
+        self.textEditInboxMessage.setObjectName("textEditInboxMessage")
         self.verticalSplitter_7.addWidget(self.textEditInboxMessage)
         self.verticalSplitter_7.setStretchFactor(0, 0)
         self.verticalSplitter_7.setStretchFactor(1, 1)
@@ -155,31 +130,31 @@ class Ui_MainWindow(object):
         self.horizontalSplitter_3.setCollapsible(1, False)
         self.gridLayout.addWidget(self.horizontalSplitter_3)
         icon2 = QtGui.QIcon()
-        icon2.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/inbox.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget.addTab(self.inbox, icon2, _fromUtf8(""))
-        self.send = QtGui.QWidget()
-        self.send.setObjectName(_fromUtf8("send"))
-        self.gridLayout_7 = QtGui.QGridLayout(self.send)
-        self.gridLayout_7.setObjectName(_fromUtf8("gridLayout_7"))
+        icon2.addPixmap(QtGui.QPixmap(":/newPrefix/images/inbox.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget.addTab(self.inbox, icon2, "")
+        self.send = QtWidgets.QWidget()
+        self.send.setObjectName("send")
+        self.gridLayout_7 = QtWidgets.QGridLayout(self.send)
+        self.gridLayout_7.setObjectName("gridLayout_7")
         self.horizontalSplitter = settingsmixin.SSplitter()
-        self.horizontalSplitter.setObjectName(_fromUtf8("horizontalSplitter"))
+        self.horizontalSplitter.setObjectName("horizontalSplitter")
         self.verticalSplitter_2 = settingsmixin.SSplitter()
-        self.verticalSplitter_2.setObjectName(_fromUtf8("verticalSplitter_2"))
+        self.verticalSplitter_2.setObjectName("verticalSplitter_2")
         self.verticalSplitter_2.setOrientation(QtCore.Qt.Vertical)
         self.tableWidgetAddressBook = settingsmixin.STableWidget(self.send)
         self.tableWidgetAddressBook.setAlternatingRowColors(True)
-        self.tableWidgetAddressBook.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
-        self.tableWidgetAddressBook.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
-        self.tableWidgetAddressBook.setObjectName(_fromUtf8("tableWidgetAddressBook"))
+        self.tableWidgetAddressBook.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
+        self.tableWidgetAddressBook.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
+        self.tableWidgetAddressBook.setObjectName("tableWidgetAddressBook")
         self.tableWidgetAddressBook.setColumnCount(2)
         self.tableWidgetAddressBook.setRowCount(0)
         self.tableWidgetAddressBook.resize(200, self.tableWidgetAddressBook.height())
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         icon3 = QtGui.QIcon()
-        icon3.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/addressbook.png")), QtGui.QIcon.Selected, QtGui.QIcon.Off)
+        icon3.addPixmap(QtGui.QPixmap(":/newPrefix/images/addressbook.png"), QtGui.QIcon.Selected, QtGui.QIcon.Off)
         item.setIcon(icon3)
         self.tableWidgetAddressBook.setHorizontalHeaderItem(0, item)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetAddressBook.setHorizontalHeaderItem(1, item)
         self.tableWidgetAddressBook.horizontalHeader().setCascadingSectionResizes(True)
         self.tableWidgetAddressBook.horizontalHeader().setDefaultSectionSize(200)
@@ -188,17 +163,17 @@ class Ui_MainWindow(object):
         self.tableWidgetAddressBook.verticalHeader().setVisible(False)
         self.verticalSplitter_2.addWidget(self.tableWidgetAddressBook)
         self.addressBookCompleter = AddressBookCompleter()
-        self.addressBookCompleter.setCompletionMode(QtGui.QCompleter.PopupCompletion)
+        self.addressBookCompleter.setCompletionMode(QtWidgets.QCompleter.PopupCompletion)
         self.addressBookCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
-        self.addressBookCompleterModel = QtGui.QStringListModel()
+        self.addressBookCompleterModel = QtCore.QStringListModel()
         self.addressBookCompleter.setModel(self.addressBookCompleterModel)
-        self.pushButtonAddAddressBook = QtGui.QPushButton(self.send)
-        self.pushButtonAddAddressBook.setObjectName(_fromUtf8("pushButtonAddAddressBook"))
+        self.pushButtonAddAddressBook = QtWidgets.QPushButton(self.send)
+        self.pushButtonAddAddressBook.setObjectName("pushButtonAddAddressBook")
         self.pushButtonAddAddressBook.resize(200, self.pushButtonAddAddressBook.height())
         self.verticalSplitter_2.addWidget(self.pushButtonAddAddressBook)
-        self.pushButtonFetchNamecoinID = QtGui.QPushButton(self.send)
+        self.pushButtonFetchNamecoinID = QtWidgets.QPushButton(self.send)
         self.pushButtonFetchNamecoinID.resize(200, self.pushButtonFetchNamecoinID.height())
-        self.pushButtonFetchNamecoinID.setObjectName(_fromUtf8("pushButtonFetchNamecoinID"))
+        self.pushButtonFetchNamecoinID.setObjectName("pushButtonFetchNamecoinID")
         self.verticalSplitter_2.addWidget(self.pushButtonFetchNamecoinID)
         self.verticalSplitter_2.setStretchFactor(0, 1)
         self.verticalSplitter_2.setStretchFactor(1, 0)
@@ -210,45 +185,45 @@ class Ui_MainWindow(object):
         self.verticalSplitter_2.handle(2).setEnabled(False)
         self.horizontalSplitter.addWidget(self.verticalSplitter_2)
         self.verticalSplitter = settingsmixin.SSplitter()
-        self.verticalSplitter.setObjectName(_fromUtf8("verticalSplitter"))
+        self.verticalSplitter.setObjectName("verticalSplitter")
         self.verticalSplitter.setOrientation(QtCore.Qt.Vertical)
-        self.tabWidgetSend = QtGui.QTabWidget(self.send)
-        self.tabWidgetSend.setObjectName(_fromUtf8("tabWidgetSend"))
-        self.sendDirect = QtGui.QWidget()
-        self.sendDirect.setObjectName(_fromUtf8("sendDirect"))
-        self.gridLayout_8 = QtGui.QGridLayout(self.sendDirect)
-        self.gridLayout_8.setObjectName(_fromUtf8("gridLayout_8"))
+        self.tabWidgetSend = QtWidgets.QTabWidget(self.send)
+        self.tabWidgetSend.setObjectName("tabWidgetSend")
+        self.sendDirect = QtWidgets.QWidget()
+        self.sendDirect.setObjectName("sendDirect")
+        self.gridLayout_8 = QtWidgets.QGridLayout(self.sendDirect)
+        self.gridLayout_8.setObjectName("gridLayout_8")
         self.verticalSplitter_5 = settingsmixin.SSplitter()
-        self.verticalSplitter_5.setObjectName(_fromUtf8("verticalSplitter_5"))
+        self.verticalSplitter_5.setObjectName("verticalSplitter_5")
         self.verticalSplitter_5.setOrientation(QtCore.Qt.Vertical)
-        self.gridLayout_2 = QtGui.QGridLayout()
-        self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
-        self.label_3 = QtGui.QLabel(self.sendDirect)
-        self.label_3.setObjectName(_fromUtf8("label_3"))
+        self.gridLayout_2 = QtWidgets.QGridLayout()
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.label_3 = QtWidgets.QLabel(self.sendDirect)
+        self.label_3.setObjectName("label_3")
         self.gridLayout_2.addWidget(self.label_3, 2, 0, 1, 1)
-        self.label_2 = QtGui.QLabel(self.sendDirect)
-        self.label_2.setObjectName(_fromUtf8("label_2"))
+        self.label_2 = QtWidgets.QLabel(self.sendDirect)
+        self.label_2.setObjectName("label_2")
         self.gridLayout_2.addWidget(self.label_2, 0, 0, 1, 1)
-        self.lineEditSubject = QtGui.QLineEdit(self.sendDirect)
-        self.lineEditSubject.setText(_fromUtf8(""))
-        self.lineEditSubject.setObjectName(_fromUtf8("lineEditSubject"))
+        self.lineEditSubject = QtWidgets.QLineEdit(self.sendDirect)
+        self.lineEditSubject.setText("")
+        self.lineEditSubject.setObjectName("lineEditSubject")
         self.gridLayout_2.addWidget(self.lineEditSubject, 2, 1, 1, 1)
-        self.label = QtGui.QLabel(self.sendDirect)
-        self.label.setObjectName(_fromUtf8("label"))
+        self.label = QtWidgets.QLabel(self.sendDirect)
+        self.label.setObjectName("label")
         self.gridLayout_2.addWidget(self.label, 1, 0, 1, 1)
-        self.comboBoxSendFrom = QtGui.QComboBox(self.sendDirect)
+        self.comboBoxSendFrom = QtWidgets.QComboBox(self.sendDirect)
         self.comboBoxSendFrom.setMinimumSize(QtCore.QSize(300, 0))
-        self.comboBoxSendFrom.setObjectName(_fromUtf8("comboBoxSendFrom"))
+        self.comboBoxSendFrom.setObjectName("comboBoxSendFrom")
         self.gridLayout_2.addWidget(self.comboBoxSendFrom, 0, 1, 1, 1)
-        self.lineEditTo = QtGui.QLineEdit(self.sendDirect)
-        self.lineEditTo.setObjectName(_fromUtf8("lineEditTo"))
+        self.lineEditTo = QtWidgets.QLineEdit(self.sendDirect)
+        self.lineEditTo.setObjectName("lineEditTo")
         self.gridLayout_2.addWidget(self.lineEditTo, 1, 1, 1, 1)
         self.lineEditTo.setCompleter(self.addressBookCompleter)
-        self.gridLayout_2_Widget = QtGui.QWidget()
+        self.gridLayout_2_Widget = QtWidgets.QWidget()
         self.gridLayout_2_Widget.setLayout(self.gridLayout_2)
         self.verticalSplitter_5.addWidget(self.gridLayout_2_Widget)
         self.textEditMessage = MessageCompose(self.sendDirect)
-        self.textEditMessage.setObjectName(_fromUtf8("textEditMessage"))
+        self.textEditMessage.setObjectName("textEditMessage")
         self.verticalSplitter_5.addWidget(self.textEditMessage)
         self.verticalSplitter_5.setStretchFactor(0, 0)
         self.verticalSplitter_5.setStretchFactor(1, 1)
@@ -256,35 +231,35 @@ class Ui_MainWindow(object):
         self.verticalSplitter_5.setCollapsible(1, False)
         self.verticalSplitter_5.handle(1).setEnabled(False)
         self.gridLayout_8.addWidget(self.verticalSplitter_5, 0, 0, 1, 1)
-        self.tabWidgetSend.addTab(self.sendDirect, _fromUtf8(""))
-        self.sendBroadcast = QtGui.QWidget()
-        self.sendBroadcast.setObjectName(_fromUtf8("sendBroadcast"))
-        self.gridLayout_9 = QtGui.QGridLayout(self.sendBroadcast)
-        self.gridLayout_9.setObjectName(_fromUtf8("gridLayout_9"))
+        self.tabWidgetSend.addTab(self.sendDirect, "")
+        self.sendBroadcast = QtWidgets.QWidget()
+        self.sendBroadcast.setObjectName("sendBroadcast")
+        self.gridLayout_9 = QtWidgets.QGridLayout(self.sendBroadcast)
+        self.gridLayout_9.setObjectName("gridLayout_9")
         self.verticalSplitter_6 = settingsmixin.SSplitter()
-        self.verticalSplitter_6.setObjectName(_fromUtf8("verticalSplitter_6"))
+        self.verticalSplitter_6.setObjectName("verticalSplitter_6")
         self.verticalSplitter_6.setOrientation(QtCore.Qt.Vertical)
-        self.gridLayout_5 = QtGui.QGridLayout()
-        self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5"))
-        self.label_8 = QtGui.QLabel(self.sendBroadcast)
-        self.label_8.setObjectName(_fromUtf8("label_8"))
+        self.gridLayout_5 = QtWidgets.QGridLayout()
+        self.gridLayout_5.setObjectName("gridLayout_5")
+        self.label_8 = QtWidgets.QLabel(self.sendBroadcast)
+        self.label_8.setObjectName("label_8")
         self.gridLayout_5.addWidget(self.label_8, 0, 0, 1, 1)
-        self.lineEditSubjectBroadcast = QtGui.QLineEdit(self.sendBroadcast)
-        self.lineEditSubjectBroadcast.setText(_fromUtf8(""))
-        self.lineEditSubjectBroadcast.setObjectName(_fromUtf8("lineEditSubjectBroadcast"))
+        self.lineEditSubjectBroadcast = QtWidgets.QLineEdit(self.sendBroadcast)
+        self.lineEditSubjectBroadcast.setText("")
+        self.lineEditSubjectBroadcast.setObjectName("lineEditSubjectBroadcast")
         self.gridLayout_5.addWidget(self.lineEditSubjectBroadcast, 1, 1, 1, 1)
-        self.label_7 = QtGui.QLabel(self.sendBroadcast)
-        self.label_7.setObjectName(_fromUtf8("label_7"))
+        self.label_7 = QtWidgets.QLabel(self.sendBroadcast)
+        self.label_7.setObjectName("label_7")
         self.gridLayout_5.addWidget(self.label_7, 1, 0, 1, 1)
-        self.comboBoxSendFromBroadcast = QtGui.QComboBox(self.sendBroadcast)
+        self.comboBoxSendFromBroadcast = QtWidgets.QComboBox(self.sendBroadcast)
         self.comboBoxSendFromBroadcast.setMinimumSize(QtCore.QSize(300, 0))
-        self.comboBoxSendFromBroadcast.setObjectName(_fromUtf8("comboBoxSendFromBroadcast"))
+        self.comboBoxSendFromBroadcast.setObjectName("comboBoxSendFromBroadcast")
         self.gridLayout_5.addWidget(self.comboBoxSendFromBroadcast, 0, 1, 1, 1)
-        self.gridLayout_5_Widget = QtGui.QWidget()
+        self.gridLayout_5_Widget = QtWidgets.QWidget()
         self.gridLayout_5_Widget.setLayout(self.gridLayout_5)
         self.verticalSplitter_6.addWidget(self.gridLayout_5_Widget)
         self.textEditMessageBroadcast = MessageCompose(self.sendBroadcast)
-        self.textEditMessageBroadcast.setObjectName(_fromUtf8("textEditMessageBroadcast"))
+        self.textEditMessageBroadcast.setObjectName("textEditMessageBroadcast")
         self.verticalSplitter_6.addWidget(self.textEditMessageBroadcast)
         self.verticalSplitter_6.setStretchFactor(0, 0)
         self.verticalSplitter_6.setStretchFactor(1, 1)
@@ -292,15 +267,15 @@ class Ui_MainWindow(object):
         self.verticalSplitter_6.setCollapsible(1, False)
         self.verticalSplitter_6.handle(1).setEnabled(False)
         self.gridLayout_9.addWidget(self.verticalSplitter_6, 0, 0, 1, 1)
-        self.tabWidgetSend.addTab(self.sendBroadcast, _fromUtf8(""))
+        self.tabWidgetSend.addTab(self.sendBroadcast, "")
         self.verticalSplitter.addWidget(self.tabWidgetSend)
-        self.tTLContainer = QtGui.QWidget()
-        self.tTLContainer.setSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed)
-        self.horizontalLayout_5 = QtGui.QHBoxLayout()
+        self.tTLContainer = QtWidgets.QWidget()
+        self.tTLContainer.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)
+        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
         self.tTLContainer.setLayout(self.horizontalLayout_5)
-        self.horizontalLayout_5.setObjectName(_fromUtf8("horizontalLayout_5"))
-        self.pushButtonTTL = QtGui.QPushButton(self.send)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed)
+        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
+        self.pushButtonTTL = QtWidgets.QPushButton(self.send)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.pushButtonTTL.sizePolicy().hasHeightForWidth())
@@ -320,29 +295,29 @@ class Ui_MainWindow(object):
         font.setUnderline(True)
         self.pushButtonTTL.setFont(font)
         self.pushButtonTTL.setFlat(True)
-        self.pushButtonTTL.setObjectName(_fromUtf8("pushButtonTTL"))
+        self.pushButtonTTL.setObjectName("pushButtonTTL")
         self.horizontalLayout_5.addWidget(self.pushButtonTTL, 0, QtCore.Qt.AlignRight)
-        self.horizontalSliderTTL = QtGui.QSlider(self.send)
+        self.horizontalSliderTTL = QtWidgets.QSlider(self.send)
         self.horizontalSliderTTL.setMinimumSize(QtCore.QSize(70, 0))
         self.horizontalSliderTTL.setOrientation(QtCore.Qt.Horizontal)
         self.horizontalSliderTTL.setInvertedAppearance(False)
         self.horizontalSliderTTL.setInvertedControls(False)
-        self.horizontalSliderTTL.setObjectName(_fromUtf8("horizontalSliderTTL"))
+        self.horizontalSliderTTL.setObjectName("horizontalSliderTTL")
         self.horizontalLayout_5.addWidget(self.horizontalSliderTTL, 0, QtCore.Qt.AlignLeft)
-        self.labelHumanFriendlyTTLDescription = QtGui.QLabel(self.send)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed)
+        self.labelHumanFriendlyTTLDescription = QtWidgets.QLabel(self.send)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.labelHumanFriendlyTTLDescription.sizePolicy().hasHeightForWidth())
         self.labelHumanFriendlyTTLDescription.setSizePolicy(sizePolicy)
         self.labelHumanFriendlyTTLDescription.setMinimumSize(QtCore.QSize(45, 0))
-        self.labelHumanFriendlyTTLDescription.setObjectName(_fromUtf8("labelHumanFriendlyTTLDescription"))
+        self.labelHumanFriendlyTTLDescription.setObjectName("labelHumanFriendlyTTLDescription")
         self.horizontalLayout_5.addWidget(self.labelHumanFriendlyTTLDescription, 1, QtCore.Qt.AlignLeft)
-        self.pushButtonClear = QtGui.QPushButton(self.send)
-        self.pushButtonClear.setObjectName(_fromUtf8("pushButtonClear"))
+        self.pushButtonClear = QtWidgets.QPushButton(self.send)
+        self.pushButtonClear.setObjectName("pushButtonClear")
         self.horizontalLayout_5.addWidget(self.pushButtonClear, 0, QtCore.Qt.AlignRight)
-        self.pushButtonSend = QtGui.QPushButton(self.send)
-        self.pushButtonSend.setObjectName(_fromUtf8("pushButtonSend"))
+        self.pushButtonSend = QtWidgets.QPushButton(self.send)
+        self.pushButtonSend.setObjectName("pushButtonSend")
         self.horizontalLayout_5.addWidget(self.pushButtonSend, 0, QtCore.Qt.AlignRight)
         self.horizontalSliderTTL.setMaximumSize(QtCore.QSize(105, self.pushButtonSend.height()))
         self.verticalSplitter.addWidget(self.tTLContainer)
@@ -359,29 +334,29 @@ class Ui_MainWindow(object):
         self.horizontalSplitter.setCollapsible(1, False)
         self.gridLayout_7.addWidget(self.horizontalSplitter, 0, 0, 1, 1)
         icon4 = QtGui.QIcon()
-        icon4.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/send.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget.addTab(self.send, icon4, _fromUtf8(""))
-        self.subscriptions = QtGui.QWidget()
-        self.subscriptions.setObjectName(_fromUtf8("subscriptions"))
-        self.gridLayout_3 = QtGui.QGridLayout(self.subscriptions)
-        self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
+        icon4.addPixmap(QtGui.QPixmap(":/newPrefix/images/send.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget.addTab(self.send, icon4, "")
+        self.subscriptions = QtWidgets.QWidget()
+        self.subscriptions.setObjectName("subscriptions")
+        self.gridLayout_3 = QtWidgets.QGridLayout(self.subscriptions)
+        self.gridLayout_3.setObjectName("gridLayout_3")
         self.horizontalSplitter_4 = settingsmixin.SSplitter()
-        self.horizontalSplitter_4.setObjectName(_fromUtf8("horizontalSplitter_4"))
+        self.horizontalSplitter_4.setObjectName("horizontalSplitter_4")
         self.verticalSplitter_3 = settingsmixin.SSplitter()
-        self.verticalSplitter_3.setObjectName(_fromUtf8("verticalSplitter_3"))
+        self.verticalSplitter_3.setObjectName("verticalSplitter_3")
         self.verticalSplitter_3.setOrientation(QtCore.Qt.Vertical)
         self.treeWidgetSubscriptions = settingsmixin.STreeWidget(self.subscriptions)
         self.treeWidgetSubscriptions.setAlternatingRowColors(True)
-        self.treeWidgetSubscriptions.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
-        self.treeWidgetSubscriptions.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
-        self.treeWidgetSubscriptions.setObjectName(_fromUtf8("treeWidgetSubscriptions"))
+        self.treeWidgetSubscriptions.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
+        self.treeWidgetSubscriptions.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
+        self.treeWidgetSubscriptions.setObjectName("treeWidgetSubscriptions")
         self.treeWidgetSubscriptions.resize(200, self.treeWidgetSubscriptions.height())
         icon5 = QtGui.QIcon()
-        icon5.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/subscriptions.png")), QtGui.QIcon.Selected, QtGui.QIcon.Off)
+        icon5.addPixmap(QtGui.QPixmap(":/newPrefix/images/subscriptions.png"), QtGui.QIcon.Selected, QtGui.QIcon.Off)
         self.treeWidgetSubscriptions.headerItem().setIcon(0, icon5)
         self.verticalSplitter_3.addWidget(self.treeWidgetSubscriptions)
-        self.pushButtonAddSubscription = QtGui.QPushButton(self.subscriptions)
-        self.pushButtonAddSubscription.setObjectName(_fromUtf8("pushButtonAddSubscription"))
+        self.pushButtonAddSubscription = QtWidgets.QPushButton(self.subscriptions)
+        self.pushButtonAddSubscription.setObjectName("pushButtonAddSubscription")
         self.pushButtonAddSubscription.resize(200, self.pushButtonAddSubscription.height())
         self.verticalSplitter_3.addWidget(self.pushButtonAddSubscription)
         self.verticalSplitter_3.setStretchFactor(0, 1)
@@ -391,20 +366,20 @@ class Ui_MainWindow(object):
         self.verticalSplitter_3.handle(1).setEnabled(False)
         self.horizontalSplitter_4.addWidget(self.verticalSplitter_3)
         self.verticalSplitter_4 = settingsmixin.SSplitter()
-        self.verticalSplitter_4.setObjectName(_fromUtf8("verticalSplitter_4"))
+        self.verticalSplitter_4.setObjectName("verticalSplitter_4")
         self.verticalSplitter_4.setOrientation(QtCore.Qt.Vertical)
-        self.horizontalSplitter_2 = QtGui.QSplitter()
-        self.horizontalSplitter_2.setObjectName(_fromUtf8("horizontalSplitter_2"))
-        self.inboxSearchLineEditSubscriptions = QtGui.QLineEdit(self.subscriptions)
-        self.inboxSearchLineEditSubscriptions.setObjectName(_fromUtf8("inboxSearchLineEditSubscriptions"))
+        self.horizontalSplitter_2 = QtWidgets.QSplitter()
+        self.horizontalSplitter_2.setObjectName("horizontalSplitter_2")
+        self.inboxSearchLineEditSubscriptions = QtWidgets.QLineEdit(self.subscriptions)
+        self.inboxSearchLineEditSubscriptions.setObjectName("inboxSearchLineEditSubscriptions")
         self.horizontalSplitter_2.addWidget(self.inboxSearchLineEditSubscriptions)
-        self.inboxSearchOptionSubscriptions = QtGui.QComboBox(self.subscriptions)
-        self.inboxSearchOptionSubscriptions.setObjectName(_fromUtf8("inboxSearchOptionSubscriptions"))
-        self.inboxSearchOptionSubscriptions.addItem(_fromUtf8(""))
-        self.inboxSearchOptionSubscriptions.addItem(_fromUtf8(""))
-        self.inboxSearchOptionSubscriptions.addItem(_fromUtf8(""))
-        self.inboxSearchOptionSubscriptions.addItem(_fromUtf8(""))
-        self.inboxSearchOptionSubscriptions.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
+        self.inboxSearchOptionSubscriptions = QtWidgets.QComboBox(self.subscriptions)
+        self.inboxSearchOptionSubscriptions.setObjectName("inboxSearchOptionSubscriptions")
+        self.inboxSearchOptionSubscriptions.addItem("")
+        self.inboxSearchOptionSubscriptions.addItem("")
+        self.inboxSearchOptionSubscriptions.addItem("")
+        self.inboxSearchOptionSubscriptions.addItem("")
+        self.inboxSearchOptionSubscriptions.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents)
         self.inboxSearchOptionSubscriptions.setCurrentIndex(2)
         self.horizontalSplitter_2.addWidget(self.inboxSearchOptionSubscriptions)
         self.horizontalSplitter_2.handle(1).setEnabled(False)
@@ -412,21 +387,21 @@ class Ui_MainWindow(object):
         self.horizontalSplitter_2.setStretchFactor(1, 0)
         self.verticalSplitter_4.addWidget(self.horizontalSplitter_2)
         self.tableWidgetInboxSubscriptions = settingsmixin.STableWidget(self.subscriptions)
-        self.tableWidgetInboxSubscriptions.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
+        self.tableWidgetInboxSubscriptions.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
         self.tableWidgetInboxSubscriptions.setAlternatingRowColors(True)
-        self.tableWidgetInboxSubscriptions.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
-        self.tableWidgetInboxSubscriptions.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
+        self.tableWidgetInboxSubscriptions.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
+        self.tableWidgetInboxSubscriptions.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
         self.tableWidgetInboxSubscriptions.setWordWrap(False)
-        self.tableWidgetInboxSubscriptions.setObjectName(_fromUtf8("tableWidgetInboxSubscriptions"))
+        self.tableWidgetInboxSubscriptions.setObjectName("tableWidgetInboxSubscriptions")
         self.tableWidgetInboxSubscriptions.setColumnCount(4)
         self.tableWidgetInboxSubscriptions.setRowCount(0)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetInboxSubscriptions.setHorizontalHeaderItem(0, item)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetInboxSubscriptions.setHorizontalHeaderItem(1, item)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetInboxSubscriptions.setHorizontalHeaderItem(2, item)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetInboxSubscriptions.setHorizontalHeaderItem(3, item)
         self.tableWidgetInboxSubscriptions.horizontalHeader().setCascadingSectionResizes(True)
         self.tableWidgetInboxSubscriptions.horizontalHeader().setDefaultSectionSize(200)
@@ -440,7 +415,7 @@ class Ui_MainWindow(object):
         self.textEditInboxMessageSubscriptions = MessageView(self.subscriptions)
         self.textEditInboxMessageSubscriptions.setBaseSize(QtCore.QSize(0, 500))
         self.textEditInboxMessageSubscriptions.setReadOnly(True)
-        self.textEditInboxMessageSubscriptions.setObjectName(_fromUtf8("textEditInboxMessageSubscriptions"))
+        self.textEditInboxMessageSubscriptions.setObjectName("textEditInboxMessageSubscriptions")
         self.verticalSplitter_4.addWidget(self.textEditInboxMessageSubscriptions)
         self.verticalSplitter_4.setStretchFactor(0, 0)
         self.verticalSplitter_4.setStretchFactor(1, 1)
@@ -456,31 +431,31 @@ class Ui_MainWindow(object):
         self.horizontalSplitter_4.setCollapsible(1, False)
         self.gridLayout_3.addWidget(self.horizontalSplitter_4, 0, 0, 1, 1)
         icon6 = QtGui.QIcon()
-        icon6.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/subscriptions.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget.addTab(self.subscriptions, icon6, _fromUtf8(""))
-        self.chans = QtGui.QWidget()
-        self.chans.setObjectName(_fromUtf8("chans"))
-        self.gridLayout_4 = QtGui.QGridLayout(self.chans)
-        self.gridLayout_4.setObjectName(_fromUtf8("gridLayout_4"))
+        icon6.addPixmap(QtGui.QPixmap(":/newPrefix/images/subscriptions.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget.addTab(self.subscriptions, icon6, "")
+        self.chans = QtWidgets.QWidget()
+        self.chans.setObjectName("chans")
+        self.gridLayout_4 = QtWidgets.QGridLayout(self.chans)
+        self.gridLayout_4.setObjectName("gridLayout_4")
         self.horizontalSplitter_7 = settingsmixin.SSplitter()
-        self.horizontalSplitter_7.setObjectName(_fromUtf8("horizontalSplitter_7"))
+        self.horizontalSplitter_7.setObjectName("horizontalSplitter_7")
         self.verticalSplitter_17 = settingsmixin.SSplitter()
-        self.verticalSplitter_17.setObjectName(_fromUtf8("verticalSplitter_17"))
+        self.verticalSplitter_17.setObjectName("verticalSplitter_17")
         self.verticalSplitter_17.setOrientation(QtCore.Qt.Vertical)
         self.treeWidgetChans = settingsmixin.STreeWidget(self.chans)
-        self.treeWidgetChans.setFrameShadow(QtGui.QFrame.Sunken)
+        self.treeWidgetChans.setFrameShadow(QtWidgets.QFrame.Sunken)
         self.treeWidgetChans.setLineWidth(1)
         self.treeWidgetChans.setAlternatingRowColors(True)
-        self.treeWidgetChans.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
-        self.treeWidgetChans.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
-        self.treeWidgetChans.setObjectName(_fromUtf8("treeWidgetChans"))
+        self.treeWidgetChans.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
+        self.treeWidgetChans.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
+        self.treeWidgetChans.setObjectName("treeWidgetChans")
         self.treeWidgetChans.resize(200, self.treeWidgetChans.height())
         icon7 = QtGui.QIcon()
-        icon7.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/can-icon-16px.png")), QtGui.QIcon.Selected, QtGui.QIcon.Off)
+        icon7.addPixmap(QtGui.QPixmap(":/newPrefix/images/can-icon-16px.png"), QtGui.QIcon.Selected, QtGui.QIcon.Off)
         self.treeWidgetChans.headerItem().setIcon(0, icon7)
         self.verticalSplitter_17.addWidget(self.treeWidgetChans)
-        self.pushButtonAddChan = QtGui.QPushButton(self.chans)
-        self.pushButtonAddChan.setObjectName(_fromUtf8("pushButtonAddChan"))
+        self.pushButtonAddChan = QtWidgets.QPushButton(self.chans)
+        self.pushButtonAddChan.setObjectName("pushButtonAddChan")
         self.pushButtonAddChan.resize(200, self.pushButtonAddChan.height())
         self.verticalSplitter_17.addWidget(self.pushButtonAddChan)
         self.verticalSplitter_17.setStretchFactor(0, 1)
@@ -490,21 +465,21 @@ class Ui_MainWindow(object):
         self.verticalSplitter_17.handle(1).setEnabled(False)
         self.horizontalSplitter_7.addWidget(self.verticalSplitter_17)
         self.verticalSplitter_8 = settingsmixin.SSplitter()
-        self.verticalSplitter_8.setObjectName(_fromUtf8("verticalSplitter_8"))
+        self.verticalSplitter_8.setObjectName("verticalSplitter_8")
         self.verticalSplitter_8.setOrientation(QtCore.Qt.Vertical)
-        self.horizontalSplitter_6 = QtGui.QSplitter()
-        self.horizontalSplitter_6.setObjectName(_fromUtf8("horizontalSplitter_6"))
-        self.inboxSearchLineEditChans = QtGui.QLineEdit(self.chans)
-        self.inboxSearchLineEditChans.setObjectName(_fromUtf8("inboxSearchLineEditChans"))
+        self.horizontalSplitter_6 = QtWidgets.QSplitter()
+        self.horizontalSplitter_6.setObjectName("horizontalSplitter_6")
+        self.inboxSearchLineEditChans = QtWidgets.QLineEdit(self.chans)
+        self.inboxSearchLineEditChans.setObjectName("inboxSearchLineEditChans")
         self.horizontalSplitter_6.addWidget(self.inboxSearchLineEditChans)
-        self.inboxSearchOptionChans = QtGui.QComboBox(self.chans)
-        self.inboxSearchOptionChans.setObjectName(_fromUtf8("inboxSearchOptionChans"))
-        self.inboxSearchOptionChans.addItem(_fromUtf8(""))
-        self.inboxSearchOptionChans.addItem(_fromUtf8(""))
-        self.inboxSearchOptionChans.addItem(_fromUtf8(""))
-        self.inboxSearchOptionChans.addItem(_fromUtf8(""))
-        self.inboxSearchOptionChans.addItem(_fromUtf8(""))
-        self.inboxSearchOptionChans.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents)
+        self.inboxSearchOptionChans = QtWidgets.QComboBox(self.chans)
+        self.inboxSearchOptionChans.setObjectName("inboxSearchOptionChans")
+        self.inboxSearchOptionChans.addItem("")
+        self.inboxSearchOptionChans.addItem("")
+        self.inboxSearchOptionChans.addItem("")
+        self.inboxSearchOptionChans.addItem("")
+        self.inboxSearchOptionChans.addItem("")
+        self.inboxSearchOptionChans.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents)
         self.inboxSearchOptionChans.setCurrentIndex(3)
         self.horizontalSplitter_6.addWidget(self.inboxSearchOptionChans)
         self.horizontalSplitter_6.handle(1).setEnabled(False)
@@ -512,21 +487,21 @@ class Ui_MainWindow(object):
         self.horizontalSplitter_6.setStretchFactor(1, 0)
         self.verticalSplitter_8.addWidget(self.horizontalSplitter_6)
         self.tableWidgetInboxChans = settingsmixin.STableWidget(self.chans)
-        self.tableWidgetInboxChans.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
+        self.tableWidgetInboxChans.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
         self.tableWidgetInboxChans.setAlternatingRowColors(True)
-        self.tableWidgetInboxChans.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
-        self.tableWidgetInboxChans.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
+        self.tableWidgetInboxChans.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
+        self.tableWidgetInboxChans.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
         self.tableWidgetInboxChans.setWordWrap(False)
-        self.tableWidgetInboxChans.setObjectName(_fromUtf8("tableWidgetInboxChans"))
+        self.tableWidgetInboxChans.setObjectName("tableWidgetInboxChans")
         self.tableWidgetInboxChans.setColumnCount(4)
         self.tableWidgetInboxChans.setRowCount(0)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetInboxChans.setHorizontalHeaderItem(0, item)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetInboxChans.setHorizontalHeaderItem(1, item)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetInboxChans.setHorizontalHeaderItem(2, item)
-        item = QtGui.QTableWidgetItem()
+        item = QtWidgets.QTableWidgetItem()
         self.tableWidgetInboxChans.setHorizontalHeaderItem(3, item)
         self.tableWidgetInboxChans.horizontalHeader().setCascadingSectionResizes(True)
         self.tableWidgetInboxChans.horizontalHeader().setDefaultSectionSize(200)
@@ -540,7 +515,7 @@ class Ui_MainWindow(object):
         self.textEditInboxMessageChans = MessageView(self.chans)
         self.textEditInboxMessageChans.setBaseSize(QtCore.QSize(0, 500))
         self.textEditInboxMessageChans.setReadOnly(True)
-        self.textEditInboxMessageChans.setObjectName(_fromUtf8("textEditInboxMessageChans"))
+        self.textEditInboxMessageChans.setObjectName("textEditInboxMessageChans")
         self.verticalSplitter_8.addWidget(self.textEditInboxMessageChans)
         self.verticalSplitter_8.setStretchFactor(0, 0)
         self.verticalSplitter_8.setStretchFactor(1, 1)
@@ -556,8 +531,8 @@ class Ui_MainWindow(object):
         self.horizontalSplitter_7.setCollapsible(1, False)
         self.gridLayout_4.addWidget(self.horizontalSplitter_7, 0, 0, 1, 1)
         icon8 = QtGui.QIcon()
-        icon8.addPixmap(QtGui.QPixmap(_fromUtf8(":/newPrefix/images/can-icon-16px.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget.addTab(self.chans, icon8, _fromUtf8(""))
+        icon8.addPixmap(QtGui.QPixmap(":/newPrefix/images/can-icon-16px.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget.addTab(self.chans, icon8, "")
         self.blackwhitelist = Blacklist()
         self.tabWidget.addTab(self.blackwhitelist, QtGui.QIcon(":/newPrefix/images/blacklist.png"), "")
         # Initialize the Blacklist or Whitelist
@@ -569,62 +544,62 @@ class Ui_MainWindow(object):
         self.tabWidget.addTab(self.networkstatus, QtGui.QIcon(":/newPrefix/images/networkstatus.png"), "")
         self.gridLayout_10.addWidget(self.tabWidget, 0, 0, 1, 1)
         MainWindow.setCentralWidget(self.centralwidget)
-        self.menubar = QtGui.QMenuBar(MainWindow)
+        self.menubar = QtWidgets.QMenuBar(MainWindow)
         self.menubar.setGeometry(QtCore.QRect(0, 0, 885, 27))
-        self.menubar.setObjectName(_fromUtf8("menubar"))
-        self.menuFile = QtGui.QMenu(self.menubar)
-        self.menuFile.setObjectName(_fromUtf8("menuFile"))
-        self.menuSettings = QtGui.QMenu(self.menubar)
-        self.menuSettings.setObjectName(_fromUtf8("menuSettings"))
-        self.menuHelp = QtGui.QMenu(self.menubar)
-        self.menuHelp.setObjectName(_fromUtf8("menuHelp"))
+        self.menubar.setObjectName("menubar")
+        self.menuFile = QtWidgets.QMenu(self.menubar)
+        self.menuFile.setObjectName("menuFile")
+        self.menuSettings = QtWidgets.QMenu(self.menubar)
+        self.menuSettings.setObjectName("menuSettings")
+        self.menuHelp = QtWidgets.QMenu(self.menubar)
+        self.menuHelp.setObjectName("menuHelp")
         MainWindow.setMenuBar(self.menubar)
-        self.statusbar = QtGui.QStatusBar(MainWindow)
+        self.statusbar = QtWidgets.QStatusBar(MainWindow)
         self.statusbar.setMaximumSize(QtCore.QSize(16777215, 22))
-        self.statusbar.setObjectName(_fromUtf8("statusbar"))
+        self.statusbar.setObjectName("statusbar")
         MainWindow.setStatusBar(self.statusbar)
-        self.actionImport_keys = QtGui.QAction(MainWindow)
-        self.actionImport_keys.setObjectName(_fromUtf8("actionImport_keys"))
-        self.actionManageKeys = QtGui.QAction(MainWindow)
+        self.actionImport_keys = QtWidgets.QAction(MainWindow)
+        self.actionImport_keys.setObjectName("actionImport_keys")
+        self.actionManageKeys = QtWidgets.QAction(MainWindow)
         self.actionManageKeys.setCheckable(False)
         self.actionManageKeys.setEnabled(True)
-        icon = QtGui.QIcon.fromTheme(_fromUtf8("dialog-password"))
+        icon = QtGui.QIcon.fromTheme("dialog-password")
         self.actionManageKeys.setIcon(icon)
-        self.actionManageKeys.setObjectName(_fromUtf8("actionManageKeys"))
-        self.actionNetworkSwitch = QtGui.QAction(MainWindow)
-        self.actionNetworkSwitch.setObjectName(_fromUtf8("actionNetworkSwitch"))
-        self.actionExit = QtGui.QAction(MainWindow)
-        icon = QtGui.QIcon.fromTheme(_fromUtf8("application-exit"))
+        self.actionManageKeys.setObjectName("actionManageKeys")
+        self.actionNetworkSwitch = QtWidgets.QAction(MainWindow)
+        self.actionNetworkSwitch.setObjectName("actionNetworkSwitch")
+        self.actionExit = QtWidgets.QAction(MainWindow)
+        icon = QtGui.QIcon.fromTheme("application-exit")
         self.actionExit.setIcon(icon)
-        self.actionExit.setObjectName(_fromUtf8("actionExit"))
-        self.actionHelp = QtGui.QAction(MainWindow)
-        icon = QtGui.QIcon.fromTheme(_fromUtf8("help-contents"))
+        self.actionExit.setObjectName("actionExit")
+        self.actionHelp = QtWidgets.QAction(MainWindow)
+        icon = QtGui.QIcon.fromTheme("help-contents")
         self.actionHelp.setIcon(icon)
-        self.actionHelp.setObjectName(_fromUtf8("actionHelp"))
-        self.actionSupport = QtGui.QAction(MainWindow)
-        icon = QtGui.QIcon.fromTheme(_fromUtf8("help-support"))
+        self.actionHelp.setObjectName("actionHelp")
+        self.actionSupport = QtWidgets.QAction(MainWindow)
+        icon = QtGui.QIcon.fromTheme("help-support")
         self.actionSupport.setIcon(icon)
-        self.actionSupport.setObjectName(_fromUtf8("actionSupport"))
-        self.actionAbout = QtGui.QAction(MainWindow)
-        icon = QtGui.QIcon.fromTheme(_fromUtf8("help-about"))
+        self.actionSupport.setObjectName("actionSupport")
+        self.actionAbout = QtWidgets.QAction(MainWindow)
+        icon = QtGui.QIcon.fromTheme("help-about")
         self.actionAbout.setIcon(icon)
-        self.actionAbout.setObjectName(_fromUtf8("actionAbout"))
-        self.actionSettings = QtGui.QAction(MainWindow)
-        icon = QtGui.QIcon.fromTheme(_fromUtf8("document-properties"))
+        self.actionAbout.setObjectName("actionAbout")
+        self.actionSettings = QtWidgets.QAction(MainWindow)
+        icon = QtGui.QIcon.fromTheme("document-properties")
         self.actionSettings.setIcon(icon)
-        self.actionSettings.setObjectName(_fromUtf8("actionSettings"))
-        self.actionRegenerateDeterministicAddresses = QtGui.QAction(MainWindow)
-        icon = QtGui.QIcon.fromTheme(_fromUtf8("view-refresh"))
+        self.actionSettings.setObjectName("actionSettings")
+        self.actionRegenerateDeterministicAddresses = QtWidgets.QAction(MainWindow)
+        icon = QtGui.QIcon.fromTheme("view-refresh")
         self.actionRegenerateDeterministicAddresses.setIcon(icon)
-        self.actionRegenerateDeterministicAddresses.setObjectName(_fromUtf8("actionRegenerateDeterministicAddresses"))
-        self.actionDeleteAllTrashedMessages = QtGui.QAction(MainWindow)
-        icon = QtGui.QIcon.fromTheme(_fromUtf8("user-trash"))
+        self.actionRegenerateDeterministicAddresses.setObjectName("actionRegenerateDeterministicAddresses")
+        self.actionDeleteAllTrashedMessages = QtWidgets.QAction(MainWindow)
+        icon = QtGui.QIcon.fromTheme("user-trash")
         self.actionDeleteAllTrashedMessages.setIcon(icon)
-        self.actionDeleteAllTrashedMessages.setObjectName(_fromUtf8("actionDeleteAllTrashedMessages"))
-        self.actionJoinChan = QtGui.QAction(MainWindow)
-        icon = QtGui.QIcon.fromTheme(_fromUtf8("contact-new"))
+        self.actionDeleteAllTrashedMessages.setObjectName("actionDeleteAllTrashedMessages")
+        self.actionJoinChan = QtWidgets.QAction(MainWindow)
+        icon = QtGui.QIcon.fromTheme("contact-new")
         self.actionJoinChan.setIcon(icon)
-        self.actionJoinChan.setObjectName(_fromUtf8("actionJoinChan"))
+        self.actionJoinChan.setObjectName("actionJoinChan")
         self.menuFile.addAction(self.actionManageKeys)
         self.menuFile.addAction(self.actionDeleteAllTrashedMessages)
         self.menuFile.addAction(self.actionRegenerateDeterministicAddresses)
@@ -655,11 +630,11 @@ class Ui_MainWindow(object):
 
         # Popup menu actions container for the Sent page
         # pylint: disable=attribute-defined-outside-init
-        self.sentContextMenuToolbar = QtGui.QToolBar()
+        self.sentContextMenuToolbar = QtWidgets.QToolBar()
         # Popup menu actions container for chans tree
-        self.addressContextMenuToolbar = QtGui.QToolBar()
+        self.addressContextMenuToolbar = QtWidgets.QToolBar()
         # Popup menu actions container for subscriptions tree
-        self.subscriptionsContextMenuToolbar = QtGui.QToolBar()
+        self.subscriptionsContextMenuToolbar = QtWidgets.QToolBar()
 
     def updateNetworkSwitchMenuLabel(self, dontconnect=None):
         if dontconnect is None:
@@ -713,7 +688,7 @@ class Ui_MainWindow(object):
             hours = int(BMConfigParser().getint('bitmessagesettings', 'ttl')/60/60)
         except:
             pass
-        self.labelHumanFriendlyTTLDescription.setText(_translate("MainWindow", "%n hour(s)", None, QtCore.QCoreApplication.CodecForTr, hours))
+        self.labelHumanFriendlyTTLDescription.setText(_translate("MainWindow", "%n hour(s)", None, hours))
         self.pushButtonClear.setText(_translate("MainWindow", "Clear", None))
         self.pushButtonSend.setText(_translate("MainWindow", "Send", None))
         self.tabWidget.setTabText(self.tabWidget.indexOf(self.send), _translate("MainWindow", "Send", None))
@@ -774,15 +749,12 @@ class Ui_MainWindow(object):
         self.updateNetworkSwitchMenuLabel()
 
 
-import bitmessage_icons_rc
-
 if __name__ == "__main__":
     import sys
-    
-    app = QtGui.QApplication(sys.argv)
+
+    app = QtWidgets.QApplication(sys.argv)
     MainWindow = settingsmixin.SMainWindow()
     ui = Ui_MainWindow()
     ui.setupUi(MainWindow)
     MainWindow.show()
     sys.exit(app.exec_())
-
diff --git a/src/bitmessageqt/blacklist.py b/src/bitmessageqt/blacklist.py
index 3897bddc..1875e001 100644
--- a/src/bitmessageqt/blacklist.py
+++ b/src/bitmessageqt/blacklist.py
@@ -1,4 +1,4 @@
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtCore, QtGui, QtWidgets
 
 import widgets
 from addresses import addBMIfNotPresent
@@ -12,31 +12,31 @@ from uisignaler import UISignaler
 from utils import avatarize
 
 
-class Blacklist(QtGui.QWidget, RetranslateMixin):
+class Blacklist(QtWidgets.QWidget, RetranslateMixin):
     def __init__(self, parent=None):
         super(Blacklist, self).__init__(parent)
         widgets.load('blacklist.ui', self)
 
-        QtCore.QObject.connect(self.radioButtonBlacklist, QtCore.SIGNAL(
-            "clicked()"), self.click_radioButtonBlacklist)
-        QtCore.QObject.connect(self.radioButtonWhitelist, QtCore.SIGNAL(
-            "clicked()"), self.click_radioButtonWhitelist)
-        QtCore.QObject.connect(self.pushButtonAddBlacklist, QtCore.SIGNAL(
-        "clicked()"), self.click_pushButtonAddBlacklist)
+        self.radioButtonBlacklist.clicked.connect(
+            self.click_radioButtonBlacklist)
+        self.radioButtonWhitelist.clicked.connect(
+            self.click_radioButtonWhitelist)
+        self.pushButtonAddBlacklist.clicked.connect(
+            self.click_pushButtonAddBlacklist)
 
         self.init_blacklist_popup_menu()
 
-        # Initialize blacklist
-        QtCore.QObject.connect(self.tableWidgetBlacklist, QtCore.SIGNAL(
-            "itemChanged(QTableWidgetItem *)"), self.tableWidgetBlacklistItemChanged)
+        self.tableWidgetBlacklist.itemChanged.connect(
+            self.tableWidgetBlacklistItemChanged)
 
         # Set the icon sizes for the identicons
-        identicon_size = 3*7
-        self.tableWidgetBlacklist.setIconSize(QtCore.QSize(identicon_size, identicon_size))
+        identicon_size = 3 * 7
+        self.tableWidgetBlacklist.setIconSize(
+            QtCore.QSize(identicon_size, identicon_size))
 
         self.UISignalThread = UISignaler.get()
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "rerenderBlackWhiteList()"), self.rerenderBlackWhiteList)
+        self.UISignalThread.rerenderBlackWhiteList.connect(
+            self.rerenderBlackWhiteList)
 
     def click_radioButtonBlacklist(self):
         if BMConfigParser().get('bitmessagesettings', 'blackwhitelist') == 'white':
@@ -69,20 +69,20 @@ class Blacklist(QtGui.QWidget, RetranslateMixin):
                     sql = '''select * from blacklist where address=?'''
                 else:
                     sql = '''select * from whitelist where address=?'''
-                queryreturn = sqlQuery(sql,*t)
+                queryreturn = sqlQuery(sql, *t)
                 if queryreturn == []:
                     self.tableWidgetBlacklist.setSortingEnabled(False)
                     self.tableWidgetBlacklist.insertRow(0)
-                    newItem = QtGui.QTableWidgetItem(unicode(
-                        self.NewBlacklistDialogInstance.lineEditLabel.text().toUtf8(), 'utf-8'))
+                    newItem = QtGui.QTableWidgetItem(
+                        self.NewBlacklistDialogInstance.lineEditLabel.text())
                     newItem.setIcon(avatarize(address))
                     self.tableWidgetBlacklist.setItem(0, 0, newItem)
-                    newItem = QtGui.QTableWidgetItem(address)
+                    newItem = QtWidgets.QTableWidgetItem(address)
                     newItem.setFlags(
                         QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
                     self.tableWidgetBlacklist.setItem(0, 1, newItem)
                     self.tableWidgetBlacklist.setSortingEnabled(True)
-                    t = (str(self.NewBlacklistDialogInstance.lineEditLabel.text().toUtf8()), address, True)
+                    t = (self.NewBlacklistDialogInstance.lineEditLabel.text(), address, True)
                     if BMConfigParser().get('bitmessagesettings', 'blackwhitelist') == 'black':
                         sql = '''INSERT INTO blacklist VALUES (?,?,?)'''
                     else:
@@ -108,17 +108,17 @@ class Blacklist(QtGui.QWidget, RetranslateMixin):
     def tableWidgetBlacklistItemChanged(self, item):
         if item.column() == 0:
             addressitem = self.tableWidgetBlacklist.item(item.row(), 1)
-            if isinstance(addressitem, QtGui.QTableWidgetItem):
+            if isinstance(addressitem, QtWidgets.QTableWidgetItem):
                 if self.radioButtonBlacklist.isChecked():
                     sqlExecute('''UPDATE blacklist SET label=? WHERE address=?''',
-                            str(item.text()), str(addressitem.text()))
+                               item.text(), str(addressitem.text()))
                 else:
                     sqlExecute('''UPDATE whitelist SET label=? WHERE address=?''',
-                            str(item.text()), str(addressitem.text()))
+                               item.text(), str(addressitem.text()))
 
     def init_blacklist_popup_menu(self, connectSignal=True):
         # Popup menu for the Blacklist page
-        self.blacklistContextMenuToolbar = QtGui.QToolBar()
+        self.blacklistContextMenuToolbar = QtWidgets.QToolBar()
         # Actions
         self.actionBlacklistNew = self.blacklistContextMenuToolbar.addAction(
             _translate(
@@ -143,10 +143,9 @@ class Blacklist(QtGui.QWidget, RetranslateMixin):
         self.tableWidgetBlacklist.setContextMenuPolicy(
             QtCore.Qt.CustomContextMenu)
         if connectSignal:
-            self.connect(self.tableWidgetBlacklist, QtCore.SIGNAL(
-                'customContextMenuRequested(const QPoint&)'),
-                        self.on_context_menuBlacklist)
-        self.popMenuBlacklist = QtGui.QMenu(self)
+            self.tableWidgetBlacklist.customContextMenuRequested.connect(
+                self.on_context_menuBlacklist)
+        self.popMenuBlacklist = QtWidgets.QMenu(self)
         # self.popMenuBlacklist.addAction( self.actionBlacklistNew )
         self.popMenuBlacklist.addAction(self.actionBlacklistDelete)
         self.popMenuBlacklist.addSeparator()
@@ -172,16 +171,16 @@ class Blacklist(QtGui.QWidget, RetranslateMixin):
         for row in queryreturn:
             label, address, enabled = row
             self.tableWidgetBlacklist.insertRow(0)
-            newItem = QtGui.QTableWidgetItem(unicode(label, 'utf-8'))
+            newItem = QtWidgets.QTableWidgetItem(label)
             if not enabled:
-                newItem.setTextColor(QtGui.QColor(128, 128, 128))
+                newItem.setForeground(QtGui.QColor(128, 128, 128))
             newItem.setIcon(avatarize(address))
             self.tableWidgetBlacklist.setItem(0, 0, newItem)
-            newItem = QtGui.QTableWidgetItem(address)
+            newItem = QtWidgets.QTableWidgetItem(address)
             newItem.setFlags(
                 QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
             if not enabled:
-                newItem.setTextColor(QtGui.QColor(128, 128, 128))
+                newItem.setForeground(QtGui.QColor(128, 128, 128))
             self.tableWidgetBlacklist.setItem(0, 1, newItem)
         self.tableWidgetBlacklist.setSortingEnabled(True)
 
@@ -192,7 +191,7 @@ class Blacklist(QtGui.QWidget, RetranslateMixin):
     def on_action_BlacklistDelete(self):
         currentRow = self.tableWidgetBlacklist.currentRow()
         labelAtCurrentRow = self.tableWidgetBlacklist.item(
-            currentRow, 0).text().toUtf8()
+            currentRow, 0).text()
         addressAtCurrentRow = self.tableWidgetBlacklist.item(
             currentRow, 1).text()
         if BMConfigParser().get('bitmessagesettings', 'blackwhitelist') == 'black':
@@ -209,7 +208,7 @@ class Blacklist(QtGui.QWidget, RetranslateMixin):
         currentRow = self.tableWidgetBlacklist.currentRow()
         addressAtCurrentRow = self.tableWidgetBlacklist.item(
             currentRow, 1).text()
-        clipboard = QtGui.QApplication.clipboard()
+        clipboard = QtWidgets.QApplication.clipboard()
         clipboard.setText(str(addressAtCurrentRow))
 
     def on_context_menuBlacklist(self, point):
@@ -220,11 +219,12 @@ class Blacklist(QtGui.QWidget, RetranslateMixin):
         currentRow = self.tableWidgetBlacklist.currentRow()
         addressAtCurrentRow = self.tableWidgetBlacklist.item(
             currentRow, 1).text()
-        self.tableWidgetBlacklist.item(
-            currentRow, 0).setTextColor(QtGui.QApplication.palette().text().color())
-        self.tableWidgetBlacklist.item(
-            currentRow, 1).setTextColor(QtGui.QApplication.palette().text().color())
-        if BMConfigParser().get('bitmessagesettings', 'blackwhitelist') == 'black':
+        self.tableWidgetBlacklist.item(currentRow, 0).setForeground(
+            QtWidgets.QApplication.palette().text().color())
+        self.tableWidgetBlacklist.item(currentRow, 1).setForeground(
+            QtWidgets.QApplication.palette().text().color())
+        if BMConfigParser().get(
+                'bitmessagesettings', 'blackwhitelist') == 'black':
             sqlExecute(
                 '''UPDATE blacklist SET enabled=1 WHERE address=?''',
                 str(addressAtCurrentRow))
@@ -237,11 +237,12 @@ class Blacklist(QtGui.QWidget, RetranslateMixin):
         currentRow = self.tableWidgetBlacklist.currentRow()
         addressAtCurrentRow = self.tableWidgetBlacklist.item(
             currentRow, 1).text()
-        self.tableWidgetBlacklist.item(
-            currentRow, 0).setTextColor(QtGui.QColor(128, 128, 128))
-        self.tableWidgetBlacklist.item(
-            currentRow, 1).setTextColor(QtGui.QColor(128, 128, 128))
-        if BMConfigParser().get('bitmessagesettings', 'blackwhitelist') == 'black':
+        self.tableWidgetBlacklist.item(currentRow, 0).setForeground(
+            QtGui.QColor(128, 128, 128))
+        self.tableWidgetBlacklist.item(currentRow, 1).setForeground(
+            QtGui.QColor(128, 128, 128))
+        if BMConfigParser().get(
+                'bitmessagesettings', 'blackwhitelist') == 'black':
             sqlExecute(
                 '''UPDATE blacklist SET enabled=0 WHERE address=?''', str(addressAtCurrentRow))
         else:
diff --git a/src/bitmessageqt/dialogs.py b/src/bitmessageqt/dialogs.py
index e76dd84e..bcceb86a 100644
--- a/src/bitmessageqt/dialogs.py
+++ b/src/bitmessageqt/dialogs.py
@@ -1,8 +1,9 @@
 """
-Custom dialog classes
+All dialogs are available in this module.
 """
 # pylint: disable=too-few-public-methods
-from PyQt4 import QtGui
+
+from PyQt5 import QtWidgets
 
 import paths
 import widgets
@@ -16,7 +17,6 @@ from settings import SettingsDialog
 from tr import _translate
 from version import softwareVersion
 
-
 __all__ = [
     "NewChanDialog", "AddAddressDialog", "NewAddressDialog",
     "NewSubscriptionDialog", "RegenerateAddressesDialog",
@@ -25,8 +25,8 @@ __all__ = [
 ]
 
 
-class AboutDialog(QtGui.QDialog):
-    """The `About` dialog"""
+class AboutDialog(QtWidgets.QDialog):
+    """The "About" dialog"""
     def __init__(self, parent=None):
         super(AboutDialog, self).__init__(parent)
         widgets.load('about.ui', self)
@@ -50,11 +50,11 @@ class AboutDialog(QtGui.QDialog):
         except AttributeError:
             pass
 
-        self.setFixedSize(QtGui.QWidget.sizeHint(self))
+        self.setFixedSize(QtWidgets.QWidget.sizeHint(self))
 
 
-class IconGlossaryDialog(QtGui.QDialog):
-    """The `Icon Glossary` dialog, explaining the status icon colors"""
+class IconGlossaryDialog(QtWidgets.QDialog):
+    """The "Icon Glossary" dialog, explaining the status icon colors"""
     def __init__(self, parent=None, config=None):
         super(IconGlossaryDialog, self).__init__(parent)
         widgets.load('iconglossary.ui', self)
@@ -64,22 +64,23 @@ class IconGlossaryDialog(QtGui.QDialog):
 
         self.labelPortNumber.setText(_translate(
             "iconGlossaryDialog",
-            "You are using TCP port %1. (This can be changed in the settings)."
-        ).arg(config.getint('bitmessagesettings', 'port')))
-        self.setFixedSize(QtGui.QWidget.sizeHint(self))
+            "You are using TCP port {0}."
+            " (This can be changed in the settings)."
+        ).format(config.getint('bitmessagesettings', 'port')))
+        self.setFixedSize(QtWidgets.QWidget.sizeHint(self))
 
 
-class HelpDialog(QtGui.QDialog):
-    """The `Help` dialog"""
+class HelpDialog(QtWidgets.QDialog):
+    """The "Help" dialog"""
     def __init__(self, parent=None):
         super(HelpDialog, self).__init__(parent)
         widgets.load('help.ui', self)
-        self.setFixedSize(QtGui.QWidget.sizeHint(self))
+        self.setFixedSize(QtWidgets.QWidget.sizeHint(self))
 
 
-class ConnectDialog(QtGui.QDialog):
-    """The `Connect` dialog"""
+class ConnectDialog(QtWidgets.QDialog):
+    """The "Connect" dialog"""
     def __init__(self, parent=None):
         super(ConnectDialog, self).__init__(parent)
         widgets.load('connect.ui', self)
-        self.setFixedSize(QtGui.QWidget.sizeHint(self))
+        self.setFixedSize(QtWidgets.QWidget.sizeHint(self))
diff --git a/src/bitmessageqt/foldertree.py b/src/bitmessageqt/foldertree.py
index e6d64427..208bc2cb 100644
--- a/src/bitmessageqt/foldertree.py
+++ b/src/bitmessageqt/foldertree.py
@@ -1,12 +1,12 @@
 """
 Folder tree and messagelist widgets definitions.
 """
-# pylint: disable=too-many-arguments,bad-super-call
+# pylint: disable=too-many-arguments
 # pylint: disable=attribute-defined-outside-init
 
 from cgi import escape
 
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtCore, QtGui, QtWidgets
 
 from bmconfigparser import BMConfigParser
 from helper_sql import sqlExecute, sqlQuery
@@ -38,15 +38,16 @@ class AccountMixin(object):
             return QtGui.QColor(128, 128, 128)
         elif self.type == self.CHAN:
             return QtGui.QColor(216, 119, 0)
-        elif self.type in [self.MAILINGLIST, self.SUBSCRIPTION]:
+        elif self.type in (self.MAILINGLIST, self.SUBSCRIPTION):
             return QtGui.QColor(137, 4, 177)
-        return QtGui.QApplication.palette().text().color()
+
+        return QtWidgets.QApplication.palette().text().color()
 
     def folderColor(self):
         """QT UI color for a folder"""
         if not self.parent().isEnabled:
             return QtGui.QColor(128, 128, 128)
-        return QtGui.QApplication.palette().text().color()
+        return QtWidgets.QApplication.palette().text().color()
 
     def accountBrush(self):
         """Account brush (for QT UI)"""
@@ -83,7 +84,7 @@ class AccountMixin(object):
         except AttributeError:
             pass
         self.unreadCount = int(cnt)
-        if isinstance(self, QtGui.QTreeWidgetItem):
+        if isinstance(self, QtWidgets.QTreeWidgetItem):
             self.emitDataChanged()
 
     def setEnabled(self, enabled):
@@ -97,7 +98,7 @@ class AccountMixin(object):
             for i in range(self.childCount()):
                 if isinstance(self.child(i), Ui_FolderWidget):
                     self.child(i).setEnabled(enabled)
-        if isinstance(self, QtGui.QTreeWidgetItem):
+        if isinstance(self, QtWidgets.QTreeWidgetItem):
             self.emitDataChanged()
 
     def setType(self):
@@ -111,7 +112,9 @@ class AccountMixin(object):
         elif BMConfigParser().safeGetBoolean(self.address, 'mailinglist'):
             self.type = self.MAILINGLIST
         elif sqlQuery(
-                '''select label from subscriptions where address=?''', self.address):
+            'SELECT label FROM subscriptions WHERE address=?',
+            self.address
+        ):
             self.type = AccountMixin.SUBSCRIPTION
         else:
             self.type = self.NORMAL
@@ -128,27 +131,30 @@ class AccountMixin(object):
                     BMConfigParser().get(self.address, 'label'), 'utf-8')
             except Exception:
                 queryreturn = sqlQuery(
-                    '''select label from addressbook where address=?''', self.address)
+                    'SELECT label FROM addressbook WHERE address=?',
+                    self.address
+                )
         elif self.type == AccountMixin.SUBSCRIPTION:
             queryreturn = sqlQuery(
-                '''select label from subscriptions where address=?''', self.address)
+                'SELECT label FROM subscriptions WHERE address=?',
+                self.address
+            )
         if queryreturn is not None:
             if queryreturn != []:
                 for row in queryreturn:
                     retval, = row
                     retval = unicode(retval, 'utf-8')
         elif self.address is None or self.type == AccountMixin.ALL:
-            return unicode(
-                str(_translate("MainWindow", "All accounts")), 'utf-8')
+            return _translate("MainWindow", "All accounts")
 
         return retval or unicode(self.address, 'utf-8')
 
 
-class BMTreeWidgetItem(QtGui.QTreeWidgetItem, AccountMixin):
+class BMTreeWidgetItem(QtWidgets.QTreeWidgetItem, AccountMixin):
     """A common abstract class for Tree widget item"""
 
     def __init__(self, parent, pos, address, unreadCount):
-        super(QtGui.QTreeWidgetItem, self).__init__()
+        super(QtWidgets.QTreeWidgetItem, self).__init__()
         self.setAddress(address)
         self.setUnreadCount(unreadCount)
         self._setup(parent, pos)
@@ -157,7 +163,7 @@ class BMTreeWidgetItem(QtGui.QTreeWidgetItem, AccountMixin):
         return " (" + str(self.unreadCount) + ")" if unreadCount else ""
 
     def data(self, column, role):
-        """Override internal QT method for returning object data"""
+        """Override internal Qt method for returning object data"""
         if column == 0:
             if role == QtCore.Qt.DisplayRole:
                 return self._getLabel() + self._getAddressBracket(
@@ -190,11 +196,11 @@ class Ui_FolderWidget(BMTreeWidgetItem):
         return _translate("MainWindow", self.folderName)
 
     def setFolderName(self, fname):
-        """Set folder name (for QT UI)"""
+        """Set folder name (for Qt UI)"""
         self.folderName = str(fname)
 
     def data(self, column, role):
-        """Override internal QT method for returning object data"""
+        """Override internal Qt method for returning object data"""
         if column == 0 and role == QtCore.Qt.ForegroundRole:
             return self.folderBrush()
         return super(Ui_FolderWidget, self).data(column, role)
@@ -216,12 +222,14 @@ class Ui_FolderWidget(BMTreeWidgetItem):
                 return self.folderName < other.folderName
             return x >= y if reverse else x < y
 
-        return super(QtGui.QTreeWidgetItem, self).__lt__(other)
+        return super(QtWidgets.QTreeWidgetItem, self).__lt__(other)
 
 
 class Ui_AddressWidget(BMTreeWidgetItem, SettingsMixin):
     """Item in the account/folder tree representing an account"""
-    def __init__(self, parent, pos=0, address=None, unreadCount=0, enabled=True):
+    def __init__(
+        self, parent, pos=0, address=None, unreadCount=0, enabled=True
+    ):
         super(Ui_AddressWidget, self).__init__(
             parent, pos, address, unreadCount)
         self.setEnabled(enabled)
@@ -232,8 +240,7 @@ class Ui_AddressWidget(BMTreeWidgetItem, SettingsMixin):
 
     def _getLabel(self):
         if self.address is None:
-            return unicode(_translate(
-                "MainWindow", "All accounts").toUtf8(), 'utf-8', 'ignore')
+            return _translate("MainWindow", "All accounts")
         else:
             try:
                 return unicode(
@@ -260,15 +267,14 @@ class Ui_AddressWidget(BMTreeWidgetItem, SettingsMixin):
         return super(Ui_AddressWidget, self).data(column, role)
 
     def setData(self, column, role, value):
-        """Save account label (if you edit in the the UI, this will be triggered and will save it to keys.dat)"""
+        """
+        Save account label (if you edit in the the UI, this will be
+        triggered and will save it to keys.dat)
+        """
         if role == QtCore.Qt.EditRole \
                 and self.type != AccountMixin.SUBSCRIPTION:
             BMConfigParser().set(
-                str(self.address), 'label',
-                str(value.toString().toUtf8())
-                if isinstance(value, QtCore.QVariant)
-                else value.encode('utf-8')
-            )
+                str(self.address), 'label', value.encode('utf-8'))
             BMConfigParser().save()
         return super(Ui_AddressWidget, self).setData(column, role, value)
 
@@ -295,19 +301,23 @@ class Ui_AddressWidget(BMTreeWidgetItem, SettingsMixin):
                 if self._getSortRank() < other._getSortRank() else reverse
             )
 
-        return super(QtGui.QTreeWidgetItem, self).__lt__(other)
+        return super(Ui_AddressWidget, self).__lt__(other)
 
 
 class Ui_SubscriptionWidget(Ui_AddressWidget):
     """Special treating of subscription addresses"""
     # pylint: disable=unused-argument
-    def __init__(self, parent, pos=0, address="", unreadCount=0, label="", enabled=True):
+    def __init__(
+        self, parent, pos=0, address="", unreadCount=0, label="",
+        enabled=True
+    ):
         super(Ui_SubscriptionWidget, self).__init__(
             parent, pos, address, unreadCount, enabled)
 
     def _getLabel(self):
         queryreturn = sqlQuery(
-            '''select label from subscriptions where address=?''', self.address)
+            'SELECT label FROM subscriptions WHERE address=?',
+            self.address)
         if queryreturn != []:
             for row in queryreturn:
                 retval, = row
@@ -322,22 +332,17 @@ class Ui_SubscriptionWidget(Ui_AddressWidget):
     def setData(self, column, role, value):
         """Save subscription label to database"""
         if role == QtCore.Qt.EditRole:
-            if isinstance(value, QtCore.QVariant):
-                label = str(
-                    value.toString().toUtf8()).decode('utf-8', 'ignore')
-            else:
-                label = unicode(value, 'utf-8', 'ignore')
             sqlExecute(
-                '''UPDATE subscriptions SET label=? WHERE address=?''',
-                label, self.address)
+                'UPDATE subscriptions SET label=? WHERE address=?',
+                value, self.address)
         return super(Ui_SubscriptionWidget, self).setData(column, role, value)
 
 
-class BMTableWidgetItem(QtGui.QTableWidgetItem, SettingsMixin):
+class BMTableWidgetItem(QtWidgets.QTableWidgetItem, SettingsMixin):
     """A common abstract class for Table widget item"""
 
     def __init__(self, label=None, unread=False):
-        super(QtGui.QTableWidgetItem, self).__init__()
+        super(QtWidgets.QTableWidgetItem, self).__init__()
         self.setLabel(label)
         self.setUnread(unread)
         self._setup()
@@ -412,10 +417,12 @@ class MessageList_AddressWidget(BMAddressWidget):
                     'utf-8', 'ignore')
             except:
                 queryreturn = sqlQuery(
-                    '''select label from addressbook where address=?''', self.address)
+                    'SELECT label FROM addressbook WHERE address=?',
+                    self.address)
         elif self.type == AccountMixin.SUBSCRIPTION:
             queryreturn = sqlQuery(
-                '''select label from subscriptions where address=?''', self.address)
+                'SELECT label FROM subscriptions WHERE address=?',
+                self.address)
         if queryreturn:
             for row in queryreturn:
                 newLabel = unicode(row[0], 'utf-8', 'ignore')
@@ -438,7 +445,7 @@ class MessageList_AddressWidget(BMAddressWidget):
     def __lt__(self, other):
         if isinstance(other, MessageList_AddressWidget):
             return self.label.lower() < other.label.lower()
-        return super(QtGui.QTableWidgetItem, self).__lt__(other)
+        return super(MessageList_AddressWidget, self).__lt__(other)
 
 
 class MessageList_SubjectWidget(BMTableWidgetItem):
@@ -456,14 +463,14 @@ class MessageList_SubjectWidget(BMTableWidgetItem):
         if role == QtCore.Qt.UserRole:
             return self.subject
         if role == QtCore.Qt.ToolTipRole:
-            return escape(unicode(self.subject, 'utf-8'))
+            return escape(self.subject)
         return super(MessageList_SubjectWidget, self).data(role)
 
     # label (or address) alphabetically, disabled at the end
     def __lt__(self, other):
         if isinstance(other, MessageList_SubjectWidget):
             return self.label.lower() < other.label.lower()
-        return super(QtGui.QTableWidgetItem, self).__lt__(other)
+        return super(MessageList_SubjectWidget, self).__lt__(other)
 
 
 # In order for the time columns on the Inbox and Sent tabs to be sorted
@@ -491,15 +498,14 @@ class MessageList_TimeWidget(BMTableWidgetItem):
         """
         data = super(MessageList_TimeWidget, self).data(role)
         if role == TimestampRole:
-            return int(data.toPyObject())
+            return int(data)
         if role == QtCore.Qt.UserRole:
-            return str(data.toPyObject())
+            return str(data)
         return data
 
 
 class Ui_AddressBookWidgetItem(BMAddressWidget):
     """Addressbook item"""
-    # pylint: disable=unused-argument
     def __init__(self, label=None, acc_type=AccountMixin.NORMAL):
         self.type = acc_type
         super(Ui_AddressBookWidgetItem, self).__init__(label=label)
@@ -513,10 +519,7 @@ class Ui_AddressBookWidgetItem(BMAddressWidget):
     def setData(self, role, value):
         """Set data"""
         if role == QtCore.Qt.EditRole:
-            self.label = str(
-                value.toString().toUtf8()
-                if isinstance(value, QtCore.QVariant) else value
-            )
+            self.label = value.encode('utf-8')
             if self.type in (
                     AccountMixin.NORMAL,
                     AccountMixin.MAILINGLIST, AccountMixin.CHAN):
@@ -525,22 +528,29 @@ class Ui_AddressBookWidgetItem(BMAddressWidget):
                     BMConfigParser().set(self.address, 'label', self.label)
                     BMConfigParser().save()
                 except:
-                    sqlExecute('''UPDATE addressbook set label=? WHERE address=?''', self.label, self.address)
+                    sqlExecute(
+                        'UPDATE addressbook SET label=? WHERE address=?',
+                        self.label, self.address
+                    )
             elif self.type == AccountMixin.SUBSCRIPTION:
-                sqlExecute('''UPDATE subscriptions set label=? WHERE address=?''', self.label, self.address)
+                sqlExecute(
+                    'UPDATE subscriptions SET label=? WHERE address=?',
+                    self.label, self.address)
             else:
                 pass
         return super(Ui_AddressBookWidgetItem, self).setData(role, value)
 
     def __lt__(self, other):
-        if isinstance(other, Ui_AddressBookWidgetItem):
-            reverse = QtCore.Qt.DescendingOrder == \
-                self.tableWidget().horizontalHeader().sortIndicatorOrder()
+        if not isinstance(other, Ui_AddressBookWidgetItem):
+            return super(Ui_AddressBookWidgetItem, self).__lt__(other)
 
-            if self.type == other.type:
-                return self.label.lower() < other.label.lower()
-            return not reverse if self.type < other.type else reverse
-        return super(QtGui.QTableWidgetItem, self).__lt__(other)
+        reverse = QtCore.Qt.DescendingOrder == \
+            self.tableWidget().horizontalHeader().sortIndicatorOrder()
+
+        if self.type == other.type:
+            return self.label.lower() < other.label.lower()
+
+        return not reverse if self.type < other.type else reverse
 
 
 class Ui_AddressBookWidgetItemLabel(Ui_AddressBookWidgetItem):
@@ -570,28 +580,26 @@ class Ui_AddressBookWidgetItemAddress(Ui_AddressBookWidgetItem):
         return super(Ui_AddressBookWidgetItemAddress, self).data(role)
 
 
-class AddressBookCompleter(QtGui.QCompleter):
+class AddressBookCompleter(QtWidgets.QCompleter):
     """Addressbook completer"""
-
     def __init__(self):
         super(AddressBookCompleter, self).__init__()
         self.cursorPos = -1
 
-    def onCursorPositionChanged(self, oldPos, newPos):  # pylint: disable=unused-argument
+    def onCursorPositionChanged(self, oldPos, newPos):
         """Callback for cursor position change"""
+        # pylint: disable=unused-argument
         if oldPos != self.cursorPos:
             self.cursorPos = -1
 
     def splitPath(self, path):
         """Split on semicolon"""
-        text = unicode(path.toUtf8(), 'utf-8')
-        return [text[:self.widget().cursorPosition()].split(';')[-1].strip()]
+        return [path[:self.widget().cursorPosition()].split(';')[-1].strip()]
 
     def pathFromIndex(self, index):
         """Perform autocompletion (reimplemented QCompleter method)"""
-        autoString = unicode(
-            index.data(QtCore.Qt.EditRole).toString().toUtf8(), 'utf-8')
-        text = unicode(self.widget().text().toUtf8(), 'utf-8')
+        autoString = index.data(QtCore.Qt.EditRole).toString()
+        text = self.widget().text()
 
         # If cursor position was saved, restore it, else save it
         if self.cursorPos != -1:
@@ -620,7 +628,6 @@ class AddressBookCompleter(QtGui.QCompleter):
 
         # Get string value from before auto finished string is selected
         # pre = text[prevDelimiterIndex + 1:curIndex - 1]
-
         # Get part of string that occurs AFTER cursor
         part2 = text[nextDelimiterIndex:]
 
diff --git a/src/bitmessageqt/languagebox.py b/src/bitmessageqt/languagebox.py
index 9ff78990..d6b6fa4a 100644
--- a/src/bitmessageqt/languagebox.py
+++ b/src/bitmessageqt/languagebox.py
@@ -1,48 +1,56 @@
-"""Language Box Module for Locale Settings"""
-# pylint: disable=too-few-public-methods,bad-continuation
+"""LanguageBox widget is for selecting UI language"""
+
 import glob
 import os
 
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtCore, QtWidgets
 
 import paths
 from bmconfigparser import BMConfigParser
+from tr import _translate
 
 
-class LanguageBox(QtGui.QComboBox):
-    """LanguageBox class for Qt UI"""
+# pylint: disable=too-few-public-methods
+class LanguageBox(QtWidgets.QComboBox):
+    """A subclass of `QtWidgets.QComboBox` for selecting language"""
     languageName = {
-        "system": "System Settings", "eo": "Esperanto",
+        "system": "System Settings",
+        "eo": "Esperanto",
         "en_pirate": "Pirate English"
     }
 
     def __init__(self, parent=None):
-        super(QtGui.QComboBox, self).__init__(parent)
+        super(LanguageBox, self).__init__(parent)
         self.populate()
 
     def populate(self):
         """Populates drop down list with all available languages."""
         self.clear()
         localesPath = os.path.join(paths.codePath(), 'translations')
-        self.addItem(QtGui.QApplication.translate(
-            "settingsDialog", "System Settings", "system"), "system")
+        self.addItem(
+            _translate("settingsDialog", "System Settings", "system"),
+            "system"
+        )
         self.setCurrentIndex(0)
-        self.setInsertPolicy(QtGui.QComboBox.InsertAlphabetically)
+        self.setInsertPolicy(QtWidgets.QComboBox.InsertAlphabetically)
         for translationFile in sorted(
             glob.glob(os.path.join(localesPath, "bitmessage_*.qm"))
         ):
             localeShort = \
                 os.path.split(translationFile)[1].split("_", 1)[1][:-3]
+            locale = QtCore.QLocale(localeShort)
             if localeShort in LanguageBox.languageName:
                 self.addItem(
                     LanguageBox.languageName[localeShort], localeShort)
+            elif locale.nativeLanguageName() == "":
+                self.addItem(localeShort, localeShort)
             else:
                 locale = QtCore.QLocale(localeShort)
                 self.addItem(
                     locale.nativeLanguageName() or localeShort, localeShort)
 
         configuredLocale = BMConfigParser().safeGet(
-            'bitmessagesettings', 'userlocale', "system")
+            'bitmessagesettings', 'userlocale', 'system')
         for i in range(self.count()):
             if self.itemData(i) == configuredLocale:
                 self.setCurrentIndex(i)
diff --git a/src/bitmessageqt/messagecompose.py b/src/bitmessageqt/messagecompose.py
index c51282f8..0114400d 100644
--- a/src/bitmessageqt/messagecompose.py
+++ b/src/bitmessageqt/messagecompose.py
@@ -1,33 +1,34 @@
-"""
-Message editor with a wheel zoom functionality
-"""
-# pylint: disable=bad-continuation
+"""The MessageCompose class definition"""
 
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtCore, QtWidgets
+from tr import _translate
 
 
-class MessageCompose(QtGui.QTextEdit):
+class MessageCompose(QtWidgets.QTextEdit):
     """Editor class with wheel zoom functionality"""
-    def __init__(self, parent=0):
+    def __init__(self, parent=None):
         super(MessageCompose, self).__init__(parent)
+        # we'll deal with this later when we have a new message format
         self.setAcceptRichText(False)
         self.defaultFontPointSize = self.currentFont().pointSize()
 
     def wheelEvent(self, event):
         """Mouse wheel scroll event handler"""
         if (
-            QtGui.QApplication.queryKeyboardModifiers() & QtCore.Qt.ControlModifier
-        ) == QtCore.Qt.ControlModifier and event.orientation() == QtCore.Qt.Vertical:
+            (QtWidgets.QApplication.queryKeyboardModifiers()
+             & QtCore.Qt.ControlModifier) == QtCore.Qt.ControlModifier
+            and event.orientation() == QtCore.Qt.Vertical
+        ):
             if event.delta() > 0:
                 self.zoomIn(1)
             else:
                 self.zoomOut(1)
-            zoom = self.currentFont().pointSize() * 100 / self.defaultFontPointSize
-            QtGui.QApplication.activeWindow().statusBar().showMessage(
-                QtGui.QApplication.translate("MainWindow", "Zoom level %1%").arg(
-                    str(zoom)
-                )
-            )
+            QtWidgets.QApplication.activeWindow().statusbar.showMessage(
+                _translate("MainWindow", "Zoom level {0}%").format(
+                    # zoom percentage
+                    self.currentFont().pointSize() * 100
+                    / self.defaultFontPointSize
+                ))
         else:
             # in QTextEdit, super does not zoom, only scroll
             super(MessageCompose, self).wheelEvent(event)
diff --git a/src/bitmessageqt/messageview.py b/src/bitmessageqt/messageview.py
index 13ea16f9..abd15785 100644
--- a/src/bitmessageqt/messageview.py
+++ b/src/bitmessageqt/messageview.py
@@ -1,22 +1,21 @@
 """
 Custom message viewer with support for switching between HTML and plain
 text rendering, HTML sanitization, lazy rendering (as you scroll down),
-zoom and URL click warning popup
-
+zoom and URL click warning popup.
 """
 
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtCore, QtGui, QtWidgets
 
 from safehtmlparser import SafeHTMLParser
 from tr import _translate
 
 
-class MessageView(QtGui.QTextBrowser):
+class MessageView(QtWidgets.QTextBrowser):
     """Message content viewer class, can switch between plaintext and HTML"""
     MODE_PLAIN = 0
     MODE_HTML = 1
 
-    def __init__(self, parent=0):
+    def __init__(self, parent=None):
         super(MessageView, self).__init__(parent)
         self.mode = MessageView.MODE_PLAIN
         self.html = None
@@ -38,8 +37,11 @@ class MessageView(QtGui.QTextBrowser):
 
     def mousePressEvent(self, event):
         """Mouse press button event handler"""
-        if event.button() == QtCore.Qt.LeftButton and self.html and self.html.has_html and self.cursorForPosition(
-                event.pos()).block().blockNumber() == 0:
+        if (
+            event.button() == QtCore.Qt.LeftButton
+            and self.html and self.html.has_html
+            and self.cursorForPosition(event.pos()).block().blockNumber() == 0
+        ):
             if self.mode == MessageView.MODE_PLAIN:
                 self.showHTML()
             else:
@@ -52,23 +54,23 @@ class MessageView(QtGui.QTextBrowser):
         # super will actually automatically take care of zooming
         super(MessageView, self).wheelEvent(event)
         if (
-            QtGui.QApplication.queryKeyboardModifiers() & QtCore.Qt.ControlModifier
-        ) == QtCore.Qt.ControlModifier and event.orientation() == QtCore.Qt.Vertical:
+            (QtWidgets.QApplication.queryKeyboardModifiers()
+             & QtCore.Qt.ControlModifier) == QtCore.Qt.ControlModifier
+            and event.orientation() == QtCore.Qt.Vertical
+        ):
             zoom = self.currentFont().pointSize() * 100 / self.defaultFontPointSize
-            QtGui.QApplication.activeWindow().statusBar().showMessage(_translate(
-                "MainWindow", "Zoom level %1%").arg(str(zoom)))
+            QtWidgets.QApplication.activeWindow().statusbar.showMessage(
+                _translate("MainWindow", "Zoom level {0}%").format(zoom))
 
     def setWrappingWidth(self, width=None):
         """Set word-wrapping width"""
-        self.setLineWrapMode(QtGui.QTextEdit.FixedPixelWidth)
-        if width is None:
-            width = self.width()
-        self.setLineWrapColumnOrWidth(width)
+        self.setLineWrapMode(QtWidgets.QTextEdit.FixedPixelWidth)
+        self.setLineWrapColumnOrWidth(width or self.width())
 
     def confirmURL(self, link):
         """Show a dialog requesting URL opening confirmation"""
         if link.scheme() == "mailto":
-            window = QtGui.QApplication.activeWindow()
+            window = QtWidgets.QApplication.activeWindow()
             window.ui.lineEditTo.setText(link.path())
             if link.hasQueryItem("subject"):
                 window.ui.lineEditSubject.setText(
@@ -83,39 +85,40 @@ class MessageView(QtGui.QTextBrowser):
             )
             window.ui.textEditMessage.setFocus()
             return
-        reply = QtGui.QMessageBox.warning(
-            self,
-            QtGui.QApplication.translate(
+        reply = QtWidgets.QMessageBox.warning(
+            self, _translate("MessageView", "Follow external link"),
+            _translate(
                 "MessageView",
-                "Follow external link"),
-            QtGui.QApplication.translate(
-                "MessageView",
-                "The link \"%1\" will open in a browser. It may be a security risk, it could de-anonymise you"
-                " or download malicious data. Are you sure?").arg(unicode(link.toString())),
-            QtGui.QMessageBox.Yes,
-            QtGui.QMessageBox.No)
-        if reply == QtGui.QMessageBox.Yes:
+                "The link \"{0}\" will open in a browser. It may be"
+                " a security risk, it could de-anonymise you or download"
+                " malicious data. Are you sure?"
+            ).format(link.toString()),
+            QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
+        if reply == QtWidgets.QMessageBox.Yes:
             QtGui.QDesktopServices.openUrl(link)
 
     def loadResource(self, restype, name):
         """
-        Callback for loading referenced objects, such as an image. For security reasons at the moment doesn't do
-        anything)
+        Callback for loading referenced objects, such as an image.
+        For security reasons at the moment doesn't do anything
         """
         pass
 
     def lazyRender(self):
         """
-        Partially render a message. This is to avoid UI freezing when loading huge messages. It continues loading as
-        you scroll down.
+        Partially render a message. This is to avoid UI freezing when
+        loading huge messages. It continues loading as you scroll down.
         """
         if self.rendering:
             return
         self.rendering = True
         position = self.verticalScrollBar().value()
         cursor = QtGui.QTextCursor(self.document())
-        while self.outpos < len(self.out) and self.verticalScrollBar().value(
-        ) >= self.document().size().height() - 2 * self.size().height():
+        while (
+            self.outpos < len(self.out)
+            and self.verticalScrollBar().value()
+            >= self.document().size().height() - 2 * self.size().height()
+        ):
             startpos = self.outpos
             self.outpos += 10240
             # find next end of tag
@@ -123,8 +126,9 @@ class MessageView(QtGui.QTextBrowser):
                 pos = self.out.find(">", self.outpos)
                 if pos > self.outpos:
                     self.outpos = pos + 1
-            cursor.movePosition(QtGui.QTextCursor.End, QtGui.QTextCursor.MoveAnchor)
-            cursor.insertHtml(QtCore.QString(self.out[startpos:self.outpos]))
+            cursor.movePosition(
+                QtGui.QTextCursor.End, QtGui.QTextCursor.MoveAnchor)
+            cursor.insertHtml(self.out[startpos:self.outpos])
         self.verticalScrollBar().setValue(position)
         self.rendering = False
 
@@ -133,9 +137,11 @@ class MessageView(QtGui.QTextBrowser):
         self.mode = MessageView.MODE_PLAIN
         out = self.html.raw
         if self.html.has_html:
-            out = "<div align=\"center\" style=\"text-decoration: underline;\"><b>" + unicode(
-                QtGui.QApplication.translate(
-                    "MessageView", "HTML detected, click here to display")) + "</b></div><br/>" + out
+            out = (
+                '<div align="center" style="text-decoration: underline;"><b>'
+                + _translate(
+                    "MessageView", "HTML detected, click here to display"
+                ) + '</b></div><br/>' + out)
         self.out = out
         self.outpos = 0
         self.setHtml("")
@@ -144,10 +150,10 @@ class MessageView(QtGui.QTextBrowser):
     def showHTML(self):
         """Render message as HTML"""
         self.mode = MessageView.MODE_HTML
-        out = self.html.sanitised
-        out = "<div align=\"center\" style=\"text-decoration: underline;\"><b>" + unicode(
-            QtGui.QApplication.translate("MessageView", "Click here to disable HTML")) + "</b></div><br/>" + out
-        self.out = out
+        self.out = (
+            '<div align="center" style="text-decoration: underline;"><b>'
+            + _translate("MessageView", "Click here to disable HTML")
+            + '</b></div><br/>' + self.html.sanitised)
         self.outpos = 0
         self.setHtml("")
         self.lazyRender()
@@ -155,8 +161,6 @@ class MessageView(QtGui.QTextBrowser):
     def setContent(self, data):
         """Set message content from argument"""
         self.html = SafeHTMLParser()
-        self.html.reset()
-        self.html.reset_safe()
         self.html.allow_picture = True
         self.html.feed(data)
         self.html.close()
diff --git a/src/bitmessageqt/networkstatus.py b/src/bitmessageqt/networkstatus.py
index e7fd9e94..b1f3d4de 100644
--- a/src/bitmessageqt/networkstatus.py
+++ b/src/bitmessageqt/networkstatus.py
@@ -4,7 +4,7 @@ Network status tab widget definition.
 
 import time
 
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtCore, QtGui, QtWidgets
 
 import l10n
 import network.stats
@@ -17,14 +17,17 @@ from tr import _translate
 from uisignaler import UISignaler
 
 
-class NetworkStatus(QtGui.QWidget, RetranslateMixin):
+class NetworkStatus(QtWidgets.QWidget, RetranslateMixin):
     """Network status tab"""
     def __init__(self, parent=None):
         super(NetworkStatus, self).__init__(parent)
         widgets.load('networkstatus.ui', self)
 
         header = self.tableWidgetConnectionCount.horizontalHeader()
-        header.setResizeMode(QtGui.QHeaderView.ResizeToContents)
+        # header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
+        for column in range(0, 4):
+            header.setSectionResizeMode(
+                column, QtWidgets.QHeaderView.ResizeToContents)
 
         # Somehow this value was 5 when I tested
         if header.sortIndicatorSection() > 4:
@@ -33,20 +36,17 @@ class NetworkStatus(QtGui.QWidget, RetranslateMixin):
         self.startup = time.localtime()
 
         self.UISignalThread = UISignaler.get()
-        # pylint: disable=no-member
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "updateNumberOfMessagesProcessed()"), self.updateNumberOfMessagesProcessed)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "updateNumberOfPubkeysProcessed()"), self.updateNumberOfPubkeysProcessed)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "updateNumberOfBroadcastsProcessed()"), self.updateNumberOfBroadcastsProcessed)
-        QtCore.QObject.connect(self.UISignalThread, QtCore.SIGNAL(
-            "updateNetworkStatusTab(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), self.updateNetworkStatusTab)
+        self.UISignalThread.updateNumberOfMessagesProcessed.connect(
+            self.updateNumberOfMessagesProcessed)
+        self.UISignalThread.updateNumberOfPubkeysProcessed.connect(
+            self.updateNumberOfPubkeysProcessed)
+        self.UISignalThread.updateNumberOfBroadcastsProcessed.connect(
+            self.updateNumberOfBroadcastsProcessed)
+        self.UISignalThread.updateNetworkStatusTab.connect(
+            self.updateNetworkStatusTab)
 
         self.timer = QtCore.QTimer()
-
-        QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.runEveryTwoSeconds)
-        # pylint: enable=no-member
+        self.timer.timeout.connect(self.runEveryTwoSeconds)
 
     def startUpdate(self):
         """Start a timer to update counters every 2 seconds"""
@@ -58,91 +58,66 @@ class NetworkStatus(QtGui.QWidget, RetranslateMixin):
         """Stop counter update timer"""
         self.timer.stop()
 
-    def formatBytes(self, num):
+    @staticmethod
+    def formatBytes(num):
         """Format bytes nicely (SI prefixes)"""
-        # pylint: disable=no-self-use
-        for x in [
-                _translate(
-                    "networkstatus",
-                    "byte(s)",
-                    None,
-                    QtCore.QCoreApplication.CodecForTr,
-                    num),
-                "kB",
-                "MB",
-                "GB",
-        ]:
+        for x in (
+            _translate("networkstatus", "byte(s)", None, num),
+            "kB", "MB", "GB"
+        ):
             if num < 1000.0:
                 return "%3.0f %s" % (num, x)
             num /= 1000.0
-        return "%3.0f %s" % (num, 'TB')
+        return "%3.0f %s" % (num, "TB")
 
-    def formatByteRate(self, num):
+    @staticmethod
+    def formatByteRate(num):
         """Format transfer speed in kB/s"""
-        # pylint: disable=no-self-use
         num /= 1000
         return "%4.0f kB" % num
 
     def updateNumberOfObjectsToBeSynced(self):
         """Update the counter for number of objects to be synced"""
-        self.labelSyncStatus.setText(
-            _translate(
-                "networkstatus",
-                "Object(s) to be synced: %n",
-                None,
-                QtCore.QCoreApplication.CodecForTr,
-                network.stats.pendingDownload()
-                + network.stats.pendingUpload()))
+        self.labelSyncStatus.setText(_translate(
+            "networkstatus", "Object(s) to be synced: %n", None,
+            network.stats.pendingDownload() + network.stats.pendingUpload()))
 
     def updateNumberOfMessagesProcessed(self):
         """Update the counter for number of processed messages"""
         self.updateNumberOfObjectsToBeSynced()
-        self.labelMessageCount.setText(
-            _translate(
-                "networkstatus",
-                "Processed %n person-to-person message(s).",
-                None,
-                QtCore.QCoreApplication.CodecForTr,
-                state.numberOfMessagesProcessed))
+        self.labelMessageCount.setText(_translate(
+            "networkstatus", "Processed %n person-to-person message(s).",
+            None, state.numberOfMessagesProcessed))
 
     def updateNumberOfBroadcastsProcessed(self):
         """Update the counter for the number of processed broadcasts"""
         self.updateNumberOfObjectsToBeSynced()
-        self.labelBroadcastCount.setText(
-            _translate(
-                "networkstatus",
-                "Processed %n broadcast message(s).",
-                None,
-                QtCore.QCoreApplication.CodecForTr,
-                state.numberOfBroadcastsProcessed))
+        self.labelBroadcastCount.setText(_translate(
+            "networkstatus", "Processed %n broadcast message(s).", None,
+            state.numberOfBroadcastsProcessed))
 
     def updateNumberOfPubkeysProcessed(self):
         """Update the counter for the number of processed pubkeys"""
         self.updateNumberOfObjectsToBeSynced()
-        self.labelPubkeyCount.setText(
-            _translate(
-                "networkstatus",
-                "Processed %n public key(s).",
-                None,
-                QtCore.QCoreApplication.CodecForTr,
-                state.numberOfPubkeysProcessed))
+        self.labelPubkeyCount.setText(_translate(
+            "networkstatus", "Processed %n public key(s).", None,
+            state.numberOfPubkeysProcessed))
 
     def updateNumberOfBytes(self):
         """
-        This function is run every two seconds, so we divide the rate of bytes
-        sent and received by 2.
+        This function is run every two seconds, so we divide the rate
+        of bytes sent and received by 2.
         """
-        self.labelBytesRecvCount.setText(
-            _translate(
-                "networkstatus",
-                "Down: %1/s  Total: %2").arg(
-                    self.formatByteRate(network.stats.downloadSpeed()),
-                    self.formatBytes(network.stats.receivedBytes())))
-        self.labelBytesSentCount.setText(
-            _translate(
-                "networkstatus", "Up: %1/s  Total: %2").arg(
-                    self.formatByteRate(network.stats.uploadSpeed()),
-                    self.formatBytes(network.stats.sentBytes())))
+        self.labelBytesRecvCount.setText(_translate(
+            "networkstatus", "Down: {0}/s  Total: {1}").format(
+                self.formatByteRate(network.stats.downloadSpeed()),
+                self.formatBytes(network.stats.receivedBytes())
+        ))
+        self.labelBytesSentCount.setText(_translate(
+            "networkstatus", "Up: {0}/s  Total: {1}").format(
+                self.formatByteRate(network.stats.uploadSpeed()),
+                self.formatBytes(network.stats.sentBytes())
+        ))
 
     def updateNetworkStatusTab(self, outbound, add, destination):
         """Add or remove an entry to the list of connected peers"""
@@ -169,67 +144,67 @@ class NetworkStatus(QtGui.QWidget, RetranslateMixin):
         if add:
             self.tableWidgetConnectionCount.insertRow(0)
             self.tableWidgetConnectionCount.setItem(
-                0, 0,
-                QtGui.QTableWidgetItem("%s:%i" % (destination.host, destination.port))
-            )
+                0, 0, QtWidgets.QTableWidgetItem(
+                    "%s:%i" % (destination.host, destination.port)))
             self.tableWidgetConnectionCount.setItem(
-                0, 2,
-                QtGui.QTableWidgetItem("%s" % (c.userAgent))
-            )
+                0, 2, QtWidgets.QTableWidgetItem("%s" % (c.userAgent)))
             self.tableWidgetConnectionCount.setItem(
-                0, 3,
-                QtGui.QTableWidgetItem("%s" % (c.tlsVersion))
-            )
+                0, 3, QtWidgets.QTableWidgetItem("%s" % (c.tlsVersion)))
             self.tableWidgetConnectionCount.setItem(
-                0, 4,
-                QtGui.QTableWidgetItem("%s" % (",".join(map(str, c.streams))))
-            )
+                0, 4, QtWidgets.QTableWidgetItem(
+                    "%s" % ",".join(map(str, c.streams))))
             try:
                 # .. todo:: FIXME: hard coded stream no
-                rating = "%.1f" % (knownnodes.knownNodes[1][destination]['rating'])
+                rating = "%.1f" % knownnodes.knownNodes[1][destination]['rating']
             except KeyError:
                 rating = "-"
             self.tableWidgetConnectionCount.setItem(
-                0, 1,
-                QtGui.QTableWidgetItem("%s" % (rating))
-            )
+                0, 1, QtWidgets.QTableWidgetItem("%s" % (rating)))
             if outbound:
-                brush = QtGui.QBrush(QtGui.QColor("yellow"), QtCore.Qt.SolidPattern)
+                brush = QtGui.QBrush(
+                    QtGui.QColor("yellow"), QtCore.Qt.SolidPattern)
             else:
-                brush = QtGui.QBrush(QtGui.QColor("green"), QtCore.Qt.SolidPattern)
+                brush = QtGui.QBrush(
+                    QtGui.QColor("green"), QtCore.Qt.SolidPattern)
             for j in range(1):
                 self.tableWidgetConnectionCount.item(0, j).setBackground(brush)
-            self.tableWidgetConnectionCount.item(0, 0).setData(QtCore.Qt.UserRole, destination)
-            self.tableWidgetConnectionCount.item(0, 1).setData(QtCore.Qt.UserRole, outbound)
+            self.tableWidgetConnectionCount.item(0, 0).setData(
+                QtCore.Qt.UserRole, destination)
+            self.tableWidgetConnectionCount.item(0, 1).setData(
+                QtCore.Qt.UserRole, outbound)
         else:
             if not BMConnectionPool().inboundConnections:
                 self.window().setStatusIcon('yellow')
             for i in range(self.tableWidgetConnectionCount.rowCount()):
-                if self.tableWidgetConnectionCount.item(i, 0).data(QtCore.Qt.UserRole).toPyObject() != destination:
+                if self.tableWidgetConnectionCount.item(i, 0).data(
+                        QtCore.Qt.UserRole) != destination:
                     continue
-                if self.tableWidgetConnectionCount.item(i, 1).data(QtCore.Qt.UserRole).toPyObject() == outbound:
+                if self.tableWidgetConnectionCount.item(i, 1).data(
+                        QtCore.Qt.UserRole) == outbound:
                     self.tableWidgetConnectionCount.removeRow(i)
                     break
 
         self.tableWidgetConnectionCount.setUpdatesEnabled(True)
         self.tableWidgetConnectionCount.setSortingEnabled(True)
-        self.labelTotalConnections.setText(
-            _translate(
-                "networkstatus", "Total Connections: %1").arg(
-                    str(self.tableWidgetConnectionCount.rowCount())))
-        # FYI: The 'singlelistener' thread sets the icon color to green when it
-        # receives an incoming connection, meaning that the user's firewall is
-        # configured correctly.
-        if self.tableWidgetConnectionCount.rowCount() and state.statusIconColor == 'red':
-            self.window().setStatusIcon('yellow')
-        elif self.tableWidgetConnectionCount.rowCount() == 0 and state.statusIconColor != "red":
+        self.labelTotalConnections.setText(_translate(
+            "networkstatus", "Total Connections: {0}").format(
+                self.tableWidgetConnectionCount.rowCount()
+        ))
+        # FYI: The 'singlelistener' thread sets the icon color to green
+        # when it receives an incoming connection, meaning that the user's
+        # firewall is configured correctly.
+        if self.tableWidgetConnectionCount.rowCount():
+            if state.statusIconColor == 'red':
+                self.window().setStatusIcon('yellow')
+        elif state.statusIconColor != 'red':
             self.window().setStatusIcon('red')
 
     # timer driven
     def runEveryTwoSeconds(self):
         """Updates counters, runs every 2 seconds if the timer is running"""
-        self.labelLookupsPerSecond.setText(_translate("networkstatus", "Inventory lookups per second: %1").arg(
-            str(Inventory().numberOfInventoryLookupsPerformed / 2)))
+        self.labelLookupsPerSecond.setText(_translate(
+            "networkstatus", "Inventory lookups per second: {0}"
+        ).format(Inventory().numberOfInventoryLookupsPerformed / 2))
         Inventory().numberOfInventoryLookupsPerformed = 0
         self.updateNumberOfBytes()
         self.updateNumberOfObjectsToBeSynced()
@@ -237,13 +212,12 @@ class NetworkStatus(QtGui.QWidget, RetranslateMixin):
     def retranslateUi(self):
         """Conventional Qt Designer method for dynamic l10n"""
         super(NetworkStatus, self).retranslateUi()
-        self.labelTotalConnections.setText(
-            _translate(
-                "networkstatus", "Total Connections: %1").arg(
-                    str(self.tableWidgetConnectionCount.rowCount())))
+        self.labelTotalConnections.setText(_translate(
+            "networkstatus", "Total Connections: {0}"
+        ).format(self.tableWidgetConnectionCount.rowCount()))
         self.labelStartupTime.setText(_translate(
-            "networkstatus", "Since startup on %1"
-        ).arg(l10n.formatTimestamp(self.startup)))
+            "networkstatus", "Since startup on {0}"
+        ).format(l10n.formatTimestamp(self.startup)))
         self.updateNumberOfMessagesProcessed()
         self.updateNumberOfBroadcastsProcessed()
         self.updateNumberOfPubkeysProcessed()
diff --git a/src/bitmessageqt/newaddressdialog.ui b/src/bitmessageqt/newaddressdialog.ui
index a9eda5c3..0f8c33d7 100644
--- a/src/bitmessageqt/newaddressdialog.ui
+++ b/src/bitmessageqt/newaddressdialog.ui
@@ -375,7 +375,7 @@ The 'Random Number' option is selected by default but deterministic addresses ha
    <sender>radioButtonDeterministicAddress</sender>
    <signal>toggled(bool)</signal>
    <receiver>groupBoxDeterministic</receiver>
-   <slot>setShown(bool)</slot>
+   <slot>setVisible(bool)</slot>
    <hints>
     <hint type="sourcelabel">
      <x>92</x>
@@ -391,7 +391,7 @@ The 'Random Number' option is selected by default but deterministic addresses ha
    <sender>radioButtonRandomAddress</sender>
    <signal>toggled(bool)</signal>
    <receiver>groupBox</receiver>
-   <slot>setShown(bool)</slot>
+   <slot>setVisible(bool)</slot>
    <hints>
     <hint type="sourcelabel">
      <x>72</x>
diff --git a/src/bitmessageqt/retranslateui.py b/src/bitmessageqt/retranslateui.py
index e9d5bb3a..dd08e53c 100644
--- a/src/bitmessageqt/retranslateui.py
+++ b/src/bitmessageqt/retranslateui.py
@@ -1,18 +1,20 @@
-from os import path
-from PyQt4 import QtGui
-from debug import logger
+from PyQt5 import QtWidgets
+
 import widgets
 
+
 class RetranslateMixin(object):
     def retranslateUi(self):
-        defaults = QtGui.QWidget()
+        defaults = QtWidgets.QWidget()
         widgets.load(self.__class__.__name__.lower() + '.ui', defaults)
         for attr, value in defaults.__dict__.iteritems():
             setTextMethod = getattr(value, "setText", None)
             if callable(setTextMethod):
                 getattr(self, attr).setText(getattr(defaults, attr).text())
-            elif isinstance(value, QtGui.QTableWidget):
-                for i in range (value.columnCount()):
-                    getattr(self, attr).horizontalHeaderItem(i).setText(getattr(defaults, attr).horizontalHeaderItem(i).text())
-                for i in range (value.rowCount()):
-                    getattr(self, attr).verticalHeaderItem(i).setText(getattr(defaults, attr).verticalHeaderItem(i).text())
+            elif isinstance(value, QtWidgets.QTableWidget):
+                for i in range(value.columnCount()):
+                    getattr(self, attr).horizontalHeaderItem(i).setText(
+                        getattr(defaults, attr).horizontalHeaderItem(i).text())
+                for i in range(value.rowCount()):
+                    getattr(self, attr).verticalHeaderItem(i).setText(
+                        getattr(defaults, attr).verticalHeaderItem(i).text())
diff --git a/src/bitmessageqt/safehtmlparser.py b/src/bitmessageqt/safehtmlparser.py
index d408d2c7..a7161ae0 100644
--- a/src/bitmessageqt/safehtmlparser.py
+++ b/src/bitmessageqt/safehtmlparser.py
@@ -123,10 +123,6 @@ class SafeHTMLParser(HTMLParser):
         self.sanitised += "&" + name + ";"
 
     def feed(self, data):
-        try:
-            data = unicode(data, 'utf-8')
-        except UnicodeDecodeError:
-            data = unicode(data, 'utf-8', errors='replace')
         HTMLParser.feed(self, data)
         tmp = SafeHTMLParser.replace_pre(data)
         tmp = self.uriregex1.sub(r'<a href="\1">\1</a>', tmp)
diff --git a/src/bitmessageqt/settings.py b/src/bitmessageqt/settings.py
index 4173ebd2..a6353131 100644
--- a/src/bitmessageqt/settings.py
+++ b/src/bitmessageqt/settings.py
@@ -1,12 +1,13 @@
 """
-This module setting file is for settings
+SettingsDialog class definition
 """
+
 import ConfigParser
 import os
 import sys
 import tempfile
 
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtCore, QtGui, QtWidgets
 
 import debug
 import defaults
@@ -37,7 +38,7 @@ def getSOCKSProxyType(config):
     return result
 
 
-class SettingsDialog(QtGui.QDialog):
+class SettingsDialog(QtWidgets.QDialog):
     """The "Settings" dialog"""
     def __init__(self, parent=None, firstrun=False):
         super(SettingsDialog, self).__init__(parent)
@@ -78,7 +79,7 @@ class SettingsDialog(QtGui.QDialog):
             self.tabWidgetSettings.setCurrentIndex(
                 self.tabWidgetSettings.indexOf(self.tabNetworkSettings)
             )
-        QtGui.QWidget.resize(self, QtGui.QWidget.sizeHint(self))
+        QtWidgets.QWidget.resize(self, QtWidgets.QWidget.sizeHint(self))
 
     def adjust_from_config(self, config):
         """Adjust all widgets state according to config settings"""
@@ -290,10 +291,10 @@ class SettingsDialog(QtGui.QDialog):
             _translate("MainWindow", "Testing..."))
         nc = namecoin.namecoinConnection({
             'type': self.getNamecoinType(),
-            'host': str(self.lineEditNamecoinHost.text().toUtf8()),
-            'port': str(self.lineEditNamecoinPort.text().toUtf8()),
-            'user': str(self.lineEditNamecoinUser.text().toUtf8()),
-            'password': str(self.lineEditNamecoinPassword.text().toUtf8())
+            'host': str(self.lineEditNamecoinHost.text()),
+            'port': str(self.lineEditNamecoinPort.text()),
+            'user': str(self.lineEditNamecoinUser.text()),
+            'password': str(self.lineEditNamecoinPassword.text())
         })
         status, text = nc.test()
         self.labelNamecoinTestResult.setText(text)
@@ -326,8 +327,8 @@ class SettingsDialog(QtGui.QDialog):
         self.config.set('bitmessagesettings', 'replybelow', str(
             self.checkBoxReplyBelow.isChecked()))
 
-        lang = str(self.languageComboBox.itemData(
-            self.languageComboBox.currentIndex()).toString())
+        lang = self.languageComboBox.itemData(
+            self.languageComboBox.currentIndex())
         self.config.set('bitmessagesettings', 'userlocale', lang)
         self.parent.change_translation()
 
@@ -409,7 +410,7 @@ class SettingsDialog(QtGui.QDialog):
             self.config.set('bitmessagesettings', 'maxuploadrate', str(
                 int(float(self.lineEditMaxUploadRate.text()))))
         except ValueError:
-            QtGui.QMessageBox.about(
+            QtWidgets.QMessageBox.about(
                 self, _translate("MainWindow", "Number needed"),
                 _translate(
                     "MainWindow",
@@ -450,7 +451,7 @@ class SettingsDialog(QtGui.QDialog):
                     float(self.lineEditSmallMessageDifficulty.text())
                     * defaults.networkDefaultPayloadLengthExtraBytes)))
 
-        if self.comboBoxOpenCL.currentText().toUtf8() != self.config.safeGet(
+        if self.comboBoxOpenCL.currentText() != self.config.safeGet(
                 'bitmessagesettings', 'opencl'):
             self.config.set(
                 'bitmessagesettings', 'opencl',
@@ -464,7 +465,7 @@ class SettingsDialog(QtGui.QDialog):
             or float(self.lineEditMaxAcceptableTotalDifficulty.text()) == 0
         ):
             if self.config.get(
-                    'bitmessagesettings', 'maxacceptablenoncetrialsperbyte'
+                'bitmessagesettings', 'maxacceptablenoncetrialsperbyte'
             ) != str(int(
                 float(self.lineEditMaxAcceptableTotalDifficulty.text())
                     * defaults.networkDefaultProofOfWorkNonceTrialsPerByte)):
@@ -481,7 +482,7 @@ class SettingsDialog(QtGui.QDialog):
             or float(self.lineEditMaxAcceptableSmallMessageDifficulty.text()) == 0
         ):
             if self.config.get(
-                    'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes'
+                'bitmessagesettings', 'maxacceptablepayloadlengthextrabytes'
             ) != str(int(
                 float(self.lineEditMaxAcceptableSmallMessageDifficulty.text())
                     * defaults.networkDefaultPayloadLengthExtraBytes)):
@@ -533,7 +534,7 @@ class SettingsDialog(QtGui.QDialog):
             if state.maximumLengthOfTimeToBotherResendingMessages < 432000:
                 # If the time period is less than 5 hours, we give
                 # zero values to all fields. No message will be sent again.
-                QtGui.QMessageBox.about(
+                QtWidgets.QMessageBox.about(
                     self,
                     _translate("MainWindow", "Will not resend ever"),
                     _translate(
diff --git a/src/bitmessageqt/settingsmixin.py b/src/bitmessageqt/settingsmixin.py
index 3d5999e2..a5b8db5c 100644
--- a/src/bitmessageqt/settingsmixin.py
+++ b/src/bitmessageqt/settingsmixin.py
@@ -1,15 +1,15 @@
-#!/usr/bin/python2.7
 """
 src/settingsmixin.py
 ====================
 
 """
 
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtCore, QtWidgets
 
 
 class SettingsMixin(object):
-    """Mixin for adding geometry and state saving between restarts."""
+    """Mixin for adding geometry and state saving between restarts"""
+
     def warnIfNoObjectName(self):
         """
         Handle objects which don't have a name. Currently it ignores them. Objects without a name can't have their
@@ -40,8 +40,9 @@ class SettingsMixin(object):
         self.warnIfNoObjectName()
         settings = QtCore.QSettings()
         try:
-            geom = settings.value("/".join([str(self.objectName()), "geometry"]))
-            target.restoreGeometry(geom.toByteArray() if hasattr(geom, 'toByteArray') else geom)
+            geom = settings.value(
+                "/".join([str(self.objectName()), "geometry"]))
+            target.restoreGeometry(geom)
         except Exception:
             pass
 
@@ -51,13 +52,14 @@ class SettingsMixin(object):
         settings = QtCore.QSettings()
         try:
             state = settings.value("/".join([str(self.objectName()), "state"]))
-            target.restoreState(state.toByteArray() if hasattr(state, 'toByteArray') else state)
+            target.restoreState(state)
         except Exception:
             pass
 
 
-class SMainWindow(QtGui.QMainWindow, SettingsMixin):
-    """Main window with Settings functionality."""
+class SMainWindow(QtWidgets.QMainWindow, SettingsMixin):
+    """Main window with Settings functionality"""
+
     def loadSettings(self):
         """Load main window settings."""
         self.readGeometry(self)
@@ -69,9 +71,9 @@ class SMainWindow(QtGui.QMainWindow, SettingsMixin):
         self.writeGeometry(self)
 
 
-class STableWidget(QtGui.QTableWidget, SettingsMixin):
+class STableWidget(QtWidgets.QTableWidget, SettingsMixin):
     """Table widget with Settings functionality"""
-    # pylint: disable=too-many-ancestors
+
     def loadSettings(self):
         """Load table settings."""
         self.readState(self.horizontalHeader())
@@ -81,8 +83,9 @@ class STableWidget(QtGui.QTableWidget, SettingsMixin):
         self.writeState(self.horizontalHeader())
 
 
-class SSplitter(QtGui.QSplitter, SettingsMixin):
-    """Splitter with Settings functionality."""
+class SSplitter(QtWidgets.QSplitter, SettingsMixin):
+    """Splitter with Settings functionality"""
+
     def loadSettings(self):
         """Load splitter settings"""
         self.readState(self)
@@ -92,17 +95,17 @@ class SSplitter(QtGui.QSplitter, SettingsMixin):
         self.writeState(self)
 
 
-class STreeWidget(QtGui.QTreeWidget, SettingsMixin):
-    """Tree widget with settings functionality."""
-    # pylint: disable=too-many-ancestors
+class STreeWidget(QtWidgets.QTreeWidget, SettingsMixin):
+    """Tree widget with settings functionality"""
+
     def loadSettings(self):
-        """Load tree settings."""
+        """Load tree settings. Unimplemented."""
         # recurse children
         # self.readState(self)
         pass
 
     def saveSettings(self):
-        """Save tree settings"""
+        """Save tree settings. Unimplemented."""
         # recurse children
         # self.writeState(self)
         pass
diff --git a/src/bitmessageqt/statusbar.py b/src/bitmessageqt/statusbar.py
index 2add604d..006ba564 100644
--- a/src/bitmessageqt/statusbar.py
+++ b/src/bitmessageqt/statusbar.py
@@ -1,11 +1,11 @@
-# pylint: disable=unused-argument
-"""Status bar Module"""
+"""BMStatusBar class definition"""
 
 from time import time
-from PyQt4 import QtGui
+
+from PyQt5 import QtWidgets
 
 
-class BMStatusBar(QtGui.QStatusBar):
+class BMStatusBar(QtWidgets.QStatusBar):
     """Status bar with queue and priorities"""
     duration = 10000
     deleteAfter = 60
@@ -16,21 +16,24 @@ class BMStatusBar(QtGui.QStatusBar):
         self.timer = self.startTimer(BMStatusBar.duration)
         self.iterator = 0
 
-    def timerEvent(self, event):
+    def timerEvent(self, event):  # pylint: disable=unused-argument
         """an event handler which allows to queue and prioritise messages to
         show in the status bar, for example if many messages come very quickly
         after one another, it adds delays and so on"""
         while len(self.important) > 0:
             self.iterator += 1
             try:
-                if time() > self.important[self.iterator][1] + BMStatusBar.deleteAfter:
+                if (
+                    self.important[self.iterator][1]
+                    + BMStatusBar.deleteAfter < time()
+                ):
                     del self.important[self.iterator]
                     self.iterator -= 1
                     continue
             except IndexError:
                 self.iterator = -1
                 continue
-            super(BMStatusBar, self).showMessage(self.important[self.iterator][0], 0)
+            self.showMessage(self.important[self.iterator][0], 0)
             break
 
     def addImportant(self, message):
diff --git a/src/bitmessageqt/tests/main.py b/src/bitmessageqt/tests/main.py
index b3aa67fa..9ffba909 100644
--- a/src/bitmessageqt/tests/main.py
+++ b/src/bitmessageqt/tests/main.py
@@ -4,7 +4,7 @@ import Queue
 import sys
 import unittest
 
-from PyQt4 import QtCore, QtGui
+from qtpy import QtCore, QtWidgets
 
 import bitmessageqt
 import queues
@@ -16,7 +16,7 @@ class TestBase(unittest.TestCase):
 
     def setUp(self):
         self.app = (
-            QtGui.QApplication.instance()
+            QtWidgets.QApplication.instance()
             or bitmessageqt.BitmessageQtApplication(sys.argv))
         self.window = self.app.activeWindow()
         if not self.window:
@@ -41,7 +41,7 @@ class TestMain(unittest.TestCase):
         """Check the results of _translate() with various args"""
         self.assertIsInstance(
             _translate("MainWindow", "Test"),
-            QtCore.QString
+            unicode
         )
 
 
diff --git a/src/bitmessageqt/uisignaler.py b/src/bitmessageqt/uisignaler.py
index 055f9097..2753121f 100644
--- a/src/bitmessageqt/uisignaler.py
+++ b/src/bitmessageqt/uisignaler.py
@@ -1,15 +1,35 @@
 
-from PyQt4.QtCore import QThread, SIGNAL
 import sys
 
+from PyQt5 import QtCore
+
 import queues
+from network.node import Peer
 
 
-class UISignaler(QThread):
+class UISignaler(QtCore.QThread):
     _instance = None
 
-    def __init__(self, parent=None):
-        QThread.__init__(self, parent)
+    writeNewAddressToTable = QtCore.Signal(str, str, str)
+    updateStatusBar = QtCore.Signal(object)
+    updateSentItemStatusByToAddress = QtCore.Signal(object, str)
+    updateSentItemStatusByAckdata = QtCore.Signal(object, str)
+    displayNewInboxMessage = QtCore.Signal(object, str, str, object, str)
+    displayNewSentMessage = QtCore.Signal(object, str, str, str, object, str)
+    updateNetworkStatusTab = QtCore.Signal(bool, bool, Peer)
+    updateNumberOfMessagesProcessed = QtCore.Signal()
+    updateNumberOfPubkeysProcessed = QtCore.Signal()
+    updateNumberOfBroadcastsProcessed = QtCore.Signal()
+    setStatusIcon = QtCore.Signal(str)
+    changedInboxUnread = QtCore.Signal(str)
+    rerenderMessagelistFromLabels = QtCore.Signal()
+    rerenderMessagelistToLabels = QtCore.Signal()
+    rerenderAddressBook = QtCore.Signal()
+    rerenderSubscriptions = QtCore.Signal()
+    rerenderBlackWhiteList = QtCore.Signal()
+    removeInboxRowByMsgid = QtCore.Signal(str)
+    newVersionAvailable = QtCore.Signal(str)
+    displayAlert = QtCore.Signal(str, str, bool)
 
     @classmethod
     def get(cls):
@@ -22,58 +42,58 @@ class UISignaler(QThread):
             command, data = queues.UISignalQueue.get()
             if command == 'writeNewAddressToTable':
                 label, address, streamNumber = data
-                self.emit(SIGNAL(
-                    "writeNewAddressToTable(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), label, address, str(streamNumber))
+                self.writeNewAddressToTable.emit(
+                    label, address, str(streamNumber))
             elif command == 'updateStatusBar':
-                self.emit(SIGNAL("updateStatusBar(PyQt_PyObject)"), data)
+                self.updateStatusBar.emit(data)
             elif command == 'updateSentItemStatusByToAddress':
                 toAddress, message = data
-                self.emit(SIGNAL(
-                    "updateSentItemStatusByToAddress(PyQt_PyObject,PyQt_PyObject)"), toAddress, message)
+                self.updateSentItemStatusByToAddress.emit(toAddress, message)
             elif command == 'updateSentItemStatusByAckdata':
                 ackData, message = data
-                self.emit(SIGNAL(
-                    "updateSentItemStatusByAckdata(PyQt_PyObject,PyQt_PyObject)"), ackData, message)
+                self.updateSentItemStatusByAckdata.emit(ackData, message)
             elif command == 'displayNewInboxMessage':
                 inventoryHash, toAddress, fromAddress, subject, body = data
-                self.emit(SIGNAL(
-                    "displayNewInboxMessage(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"),
-                    inventoryHash, toAddress, fromAddress, subject, body)
+                self.displayNewInboxMessage.emit(
+                    inventoryHash, toAddress, fromAddress,
+                    unicode(subject, 'utf-8'), body)
             elif command == 'displayNewSentMessage':
                 toAddress, fromLabel, fromAddress, subject, message, ackdata = data
-                self.emit(SIGNAL(
-                    "displayNewSentMessage(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"),
-                    toAddress, fromLabel, fromAddress, subject, message, ackdata)
+                self.displayNewSentMessage.emit(
+                    toAddress, fromLabel, fromAddress,
+                    unicode(subject, 'utf-8'), message, ackdata)
             elif command == 'updateNetworkStatusTab':
                 outbound, add, destination = data
-                self.emit(SIGNAL("updateNetworkStatusTab(PyQt_PyObject,PyQt_PyObject,PyQt_PyObject)"), outbound, add, destination)
+                self.updateNetworkStatusTab.emit(outbound, add, destination)
             elif command == 'updateNumberOfMessagesProcessed':
-                self.emit(SIGNAL("updateNumberOfMessagesProcessed()"))
+                self.updateNumberOfMessagesProcessed.emit()
             elif command == 'updateNumberOfPubkeysProcessed':
-                self.emit(SIGNAL("updateNumberOfPubkeysProcessed()"))
+                self.updateNumberOfPubkeysProcessed.emit()
             elif command == 'updateNumberOfBroadcastsProcessed':
-                self.emit(SIGNAL("updateNumberOfBroadcastsProcessed()"))
+                self.updateNumberOfBroadcastsProcessed.emit()
             elif command == 'setStatusIcon':
-                self.emit(SIGNAL("setStatusIcon(PyQt_PyObject)"), data)
+                self.setStatusIcon.emit(data)
             elif command == 'changedInboxUnread':
-                self.emit(SIGNAL("changedInboxUnread(PyQt_PyObject)"), data)
+                self.changedInboxUnread.emit(data)
             elif command == 'rerenderMessagelistFromLabels':
-                self.emit(SIGNAL("rerenderMessagelistFromLabels()"))
+                self.rerenderMessagelistFromLabels.emit()
             elif command == 'rerenderMessagelistToLabels':
-                self.emit(SIGNAL("rerenderMessagelistToLabels()"))
+                self.rerenderMessagelistToLabels.emit()
             elif command == 'rerenderAddressBook':
-                self.emit(SIGNAL("rerenderAddressBook()"))
+                self.rerenderAddressBook.emit()
             elif command == 'rerenderSubscriptions':
-                self.emit(SIGNAL("rerenderSubscriptions()"))
+                self.rerenderSubscriptions.emit()
             elif command == 'rerenderBlackWhiteList':
-                self.emit(SIGNAL("rerenderBlackWhiteList()"))
+                self.rerenderBlackWhiteList.emit()
             elif command == 'removeInboxRowByMsgid':
-                self.emit(SIGNAL("removeInboxRowByMsgid(PyQt_PyObject)"), data)
+                self.removeInboxRowByMsgid.emit(data)
             elif command == 'newVersionAvailable':
-                self.emit(SIGNAL("newVersionAvailable(PyQt_PyObject)"), data)
+                self.newVersionAvailable.emit(data)
             elif command == 'alert':
                 title, text, exitAfterUserClicksOk = data
-                self.emit(SIGNAL("displayAlert(PyQt_PyObject, PyQt_PyObject, PyQt_PyObject)"), title, text, exitAfterUserClicksOk)
+                self.displayAlert.emit(title, text, exitAfterUserClicksOk)
             else:
                 sys.stderr.write(
-                    'Command sent to UISignaler not recognized: %s\n' % command)
+                    'Command sent to UISignaler not recognized: %s\n'
+                    % command
+                )
diff --git a/src/bitmessageqt/utils.py b/src/bitmessageqt/utils.py
index e118f487..a4f035c7 100644
--- a/src/bitmessageqt/utils.py
+++ b/src/bitmessageqt/utils.py
@@ -1,7 +1,7 @@
 import hashlib
 import os
 
-from PyQt4 import QtGui
+from PyQt5 import QtGui
 
 import state
 from addresses import addBMIfNotPresent
@@ -30,16 +30,17 @@ def identiconize(address):
     # It can be used as a pseudo-password to salt the generation of
     # the identicons to decrease the risk of attacks where someone creates
     # an address to mimic someone else's identicon.
-    identiconsuffix = BMConfigParser().get('bitmessagesettings', 'identiconsuffix')
+    data = addBMIfNotPresent(address) + BMConfigParser().get(
+        'bitmessagesettings', 'identiconsuffix')
     if identicon_lib[:len('qidenticon')] == 'qidenticon':
         # originally by:
         # :Author:Shin Adachi <shn@glucose.jp>
         # Licesensed under FreeBSD License.
         # stripped from PIL and uses QT instead (by sendiulo, same license)
         import qidenticon
-        icon_hash = hashlib.md5(
-            addBMIfNotPresent(address) + identiconsuffix).hexdigest()
-        use_two_colors = identicon_lib[:len('qidenticon_two')] == 'qidenticon_two'
+        icon_hash = hashlib.md5(data).hexdigest()
+        use_two_colors = (
+            identicon_lib[:len('qidenticon_two')] == 'qidenticon_two')
         opacity = int(
             identicon_lib not in (
                 'qidenticon_x', 'qidenticon_two_x',
@@ -63,8 +64,7 @@ def identiconize(address):
         # https://github.com/azaghal/pydenticon
         # note that it requires pillow (or PIL) to be installed:
         # https://python-pillow.org/
-        idcon_render = Pydenticon(
-            addBMIfNotPresent(address) + identiconsuffix, size * 3)
+        idcon_render = Pydenticon(data, size * 3)
         rendering = idcon_render._render()
         data = rendering.convert("RGBA").tostring("raw", "RGBA")
         qim = QtGui.QImage(data, size, size, QtGui.QImage.Format_ARGB32)
@@ -105,11 +105,9 @@ def avatarize(address):
         lower_default = state.appdata + 'avatars/' + 'default.' + ext.lower()
         upper_default = state.appdata + 'avatars/' + 'default.' + ext.upper()
         if os.path.isfile(lower_default):
-            default = lower_default
             idcon.addFile(lower_default)
             return idcon
         elif os.path.isfile(upper_default):
-            default = upper_default
             idcon.addFile(upper_default)
             return idcon
     # If no avatar is found
diff --git a/src/bitmessageqt/widgets.py b/src/bitmessageqt/widgets.py
index 8ef807f2..c4a91375 100644
--- a/src/bitmessageqt/widgets.py
+++ b/src/bitmessageqt/widgets.py
@@ -1,13 +1,15 @@
-from PyQt4 import uic
+from PyQt5 import uic
 import os.path
 import paths
-import sys
+
 
 def resource_path(resFile):
     baseDir = paths.codePath()
-    for subDir in ["ui", "bitmessageqt"]:
-        if os.path.isdir(os.path.join(baseDir, subDir)) and os.path.isfile(os.path.join(baseDir, subDir, resFile)):
-            return os.path.join(baseDir, subDir, resFile)
+    for subDir in ("ui", "bitmessageqt"):
+        path = os.path.join(baseDir, subDir, resFile)
+        if os.path.isfile(path):
+            return path
+
 
 def load(resFile, widget):
     uic.loadUi(resource_path(resFile), widget)
diff --git a/src/class_addressGenerator.py b/src/class_addressGenerator.py
index 25b0c5df..1fa0ce0e 100644
--- a/src/class_addressGenerator.py
+++ b/src/class_addressGenerator.py
@@ -1,5 +1,5 @@
 """
-A thread for creating addresses
+addressGenerator thread class definition
 """
 import hashlib
 import time
@@ -213,10 +213,11 @@ class addressGenerator(StoppableThread):
                     queues.workerQueue.put((
                         'sendOutOrStoreMyV4Pubkey', address))
 
-            elif command == 'createDeterministicAddresses' \
-                    or command == 'getDeterministicAddress' \
-                    or command == 'createChan' or command == 'joinChan':
-                if not deterministicPassphrase:
+            elif command in (
+                'createDeterministicAddresses',
+                'getDeterministicAddress', 'createChan', 'joinChan'
+            ):
+                if len(deterministicPassphrase) == 0:
                     self.logger.warning(
                         'You are creating deterministic'
                         ' address(es) using a blank passphrase.'
@@ -225,9 +226,8 @@ class addressGenerator(StoppableThread):
                     queues.UISignalQueue.put((
                         'updateStatusBar',
                         tr._translate(
-                            "MainWindow",
-                            "Generating %1 new addresses."
-                        ).arg(str(numberOfAddressesToMake))
+                            "MainWindow", "Generating {0} new addresses."
+                        ).format(str(numberOfAddressesToMake))
                     ))
                 signingKeyNonce = 0
                 encryptionKeyNonce = 1
@@ -331,17 +331,16 @@ class addressGenerator(StoppableThread):
                                 'updateStatusBar',
                                 tr._translate(
                                     "MainWindow",
-                                    "%1 is already in 'Your Identities'."
+                                    "{0} is already in 'Your Identities'."
                                     " Not adding it again."
-                                ).arg(address)
+                                ).format(address)
                             ))
                         else:
                             self.logger.debug('label: %s', label)
                             BMConfigParser().set(address, 'label', label)
                             BMConfigParser().set(address, 'enabled', 'true')
                             BMConfigParser().set(address, 'decoy', 'false')
-                            if command == 'joinChan' \
-                                    or command == 'createChan':
+                            if command in ('joinChan', 'createChan'):
                                 BMConfigParser().set(address, 'chan', 'true')
                             BMConfigParser().set(
                                 address, 'noncetrialsperbyte',
@@ -392,8 +391,10 @@ class addressGenerator(StoppableThread):
                             address)
 
                 # Done generating addresses.
-                if command == 'createDeterministicAddresses' \
-                        or command == 'joinChan' or command == 'createChan':
+                if command in (
+                    'createDeterministicAddresses',
+                    'joinChan', 'createChan'
+                ):
                     queues.apiAddressGeneratorReturnQueue.put(
                         listOfNewAddressesToSendOutThroughTheAPI)
                 elif command == 'getDeterministicAddress':
diff --git a/src/depends.py b/src/depends.py
index 212c3143..23da7d92 100755
--- a/src/depends.py
+++ b/src/depends.py
@@ -384,7 +384,7 @@ def check_pyqt():
     PyQt 4.8 or later.
     """
     QtCore = try_import(
-        'PyQt4.QtCore', 'PyBitmessage requires PyQt 4.8 or later and Qt 4.7 or later.')
+        'qtpy.QtCore', 'PyBitmessage requires PyQt 4.8 or later and Qt 4.7 or later.')
 
     if not QtCore:
         return False
diff --git a/src/plugins/menu_qrcode.py b/src/plugins/menu_qrcode.py
index ea322a49..1fbccbe4 100644
--- a/src/plugins/menu_qrcode.py
+++ b/src/plugins/menu_qrcode.py
@@ -6,7 +6,7 @@ A menu plugin showing QR-Code for bitmessage address in modal dialog.
 import urllib
 
 import qrcode
-from PyQt4 import QtCore, QtGui
+from qtpy import QtGui, QtCore, QtWidgets
 
 from pybitmessage.tr import _translate
 
@@ -39,23 +39,23 @@ class Image(qrcode.image.base.BaseImage):  # pylint: disable=abstract-method
             QtCore.Qt.black)
 
 
-class QRCodeDialog(QtGui.QDialog):
+class QRCodeDialog(QtWidgets.QDialog):
     """The dialog"""
     def __init__(self, parent):
         super(QRCodeDialog, self).__init__(parent)
-        self.image = QtGui.QLabel(self)
-        self.label = QtGui.QLabel(self)
+        self.image = QtWidgets.QLabel(self)
+        self.label = QtWidgets.QLabel(self)
         font = QtGui.QFont()
         font.setBold(True)
         font.setWeight(75)
         self.label.setFont(font)
         self.label.setAlignment(
             QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
-        buttonBox = QtGui.QDialogButtonBox(self)
+        buttonBox = QtWidgets.QDialogButtonBox(self)
         buttonBox.setOrientation(QtCore.Qt.Horizontal)
-        buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok)
+        buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok)
         buttonBox.accepted.connect(self.accept)
-        layout = QtGui.QVBoxLayout(self)
+        layout = QtWidgets.QVBoxLayout(self)
         layout.addWidget(self.image)
         layout.addWidget(self.label)
         layout.addWidget(buttonBox)
@@ -72,7 +72,7 @@ class QRCodeDialog(QtGui.QDialog):
         self.label.setText(text)
         self.label.setToolTip(text)
         self.label.setFixedWidth(pixmap.width())
-        self.setFixedSize(QtGui.QWidget.sizeHint(self))
+        self.setFixedSize(QtWidgets.QWidget.sizeHint(self))
 
 
 def connect_plugin(form):
diff --git a/src/plugins/plugin.py b/src/plugins/plugin.py
index 629de0a6..9f3b76c0 100644
--- a/src/plugins/plugin.py
+++ b/src/plugins/plugin.py
@@ -32,6 +32,7 @@ def get_plugins(group, point='', name=None, fallback=None):
             except (AttributeError,
                     ImportError,
                     ValueError,
+                    RuntimeError,  # PyQt for example
                     pkg_resources.DistributionNotFound,
                     pkg_resources.UnknownExtra):
                 logger.debug(

From 58466d5424767a7f342063196e331413cddc06da Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Mon, 19 Feb 2018 14:38:25 +0200
Subject: [PATCH 04/36] Changes for pyside:

customwidgets in ui-files and QtGui.QPen instantiation
---
 src/bitmessageqt/__init__.py      | 4 +---
 src/bitmessageqt/blacklist.ui     | 2 +-
 src/bitmessageqt/networkstatus.ui | 2 +-
 src/qidenticon.py                 | 5 +++--
 4 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py
index eaac4968..d25f2f14 100644
--- a/src/bitmessageqt/__init__.py
+++ b/src/bitmessageqt/__init__.py
@@ -1781,11 +1781,9 @@ class MyForm(settingsmixin.SMainWindow):
                 fontMetrics = QtGui.QFontMetrics(font)
                 rect = fontMetrics.boundingRect(txt)
             # draw text
-            # painter = QtGui.QPainter(self)
             painter = QtGui.QPainter()
             painter.begin(pixmap)
-            painter.setPen(
-                QtGui.QPen(QtGui.QColor(255, 0, 0), QtCore.Qt.SolidPattern))
+            painter.setPen(QtGui.QPen(QtGui.QColor(255, 0, 0)))
             painter.setFont(font)
             painter.drawText(24-rect.right()-marginX, -rect.top()+marginY, txt)
             painter.end()
diff --git a/src/bitmessageqt/blacklist.ui b/src/bitmessageqt/blacklist.ui
index 80993fac..3068a6ae 100644
--- a/src/bitmessageqt/blacklist.ui
+++ b/src/bitmessageqt/blacklist.ui
@@ -98,7 +98,7 @@
   <customwidget>
    <class>STableWidget</class>
    <extends>QTableWidget</extends>
-   <header>bitmessageqt/settingsmixin.h</header>
+   <header>bitmessageqt.settingsmixin</header>
   </customwidget>
  </customwidgets>
  <resources>
diff --git a/src/bitmessageqt/networkstatus.ui b/src/bitmessageqt/networkstatus.ui
index e0c01b57..14aeca6e 100644
--- a/src/bitmessageqt/networkstatus.ui
+++ b/src/bitmessageqt/networkstatus.ui
@@ -296,7 +296,7 @@
   <customwidget>
    <class>STableWidget</class>
    <extends>QTableWidget</extends>
-   <header>bitmessageqt/settingsmixin.h</header>
+   <header>bitmessageqt.settingsmixin</header>
   </customwidget>
  </customwidgets>
  <resources>
diff --git a/src/qidenticon.py b/src/qidenticon.py
index 13be3578..5294da86 100644
--- a/src/qidenticon.py
+++ b/src/qidenticon.py
@@ -129,11 +129,12 @@ class IdenticonRendererBase(object):
             QtCore.QPointF(size, size), QtCore.QPointF(0., size)]
         rotation = [0, 90, 180, 270]
 
-        nopen = QtGui.QPen(foreColor, QtCore.Qt.NoPen)
+        nopen = QtGui.QPen(foreColor)
+        nopen.setStyle(QtCore.Qt.NoPen)
         foreBrush = QtGui.QBrush(foreColor, QtCore.Qt.SolidPattern)
         if penwidth > 0:
             pen_color = QtGui.QColor(255, 255, 255)
-            pen = QtGui.QPen(pen_color, QtCore.Qt.SolidPattern)
+            pen = QtGui.QPen(pen_color)
             pen.setWidth(penwidth)
 
         painter = QtGui.QPainter()

From 07c2a514295178268534742bee909ac98351fd31 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Wed, 21 Feb 2018 19:10:32 +0200
Subject: [PATCH 05/36] Module support rewrite:

  - added Qt API string into support request
  - finished flake8 formatting
---
 src/bitmessageqt/support.py | 55 +++++++++++++++++++++++--------------
 1 file changed, 34 insertions(+), 21 deletions(-)

diff --git a/src/bitmessageqt/support.py b/src/bitmessageqt/support.py
index ac02e2ca..965303ca 100644
--- a/src/bitmessageqt/support.py
+++ b/src/bitmessageqt/support.py
@@ -1,12 +1,12 @@
 """Composing support request message functions."""
-# pylint: disable=no-member
 
 import ctypes
+import os
 import ssl
 import sys
 import time
 
-from PyQt4 import QtCore
+from qtpy import QtCore
 
 import account
 import defaults
@@ -22,8 +22,8 @@ from l10n import getTranslationLanguage
 from openclpow import openclEnabled
 from pyelliptic.openssl import OpenSSL
 from settings import getSOCKSProxyType
-from version import softwareVersion
 from tr import _translate
+from version import softwareVersion
 
 
 # this is BM support address going to Peter Surda
@@ -31,7 +31,7 @@ OLD_SUPPORT_ADDRESS = 'BM-2cTkCtMYkrSPwFTpgcBrMrf5d8oZwvMZWK'
 SUPPORT_ADDRESS = 'BM-2cUdgkDDAahwPAU6oD2A7DnjqZz3hgY832'
 SUPPORT_LABEL = _translate("Support", "PyBitmessage support")
 SUPPORT_MY_LABEL = _translate("Support", "My new address")
-SUPPORT_SUBJECT = 'Support request'
+SUPPORT_SUBJECT = _translate("Support", "Support request")
 SUPPORT_MESSAGE = _translate("Support", '''
 You can use this message to send a report to one of the PyBitmessage core \
 developers regarding PyBitmessage or the mailchuck.com email service. \
@@ -55,6 +55,7 @@ Operating system: {}
 Architecture: {}bit
 Python Version: {}
 OpenSSL Version: {}
+Qt API: {}
 Frozen: {}
 Portable mode: {}
 C PoW: {}
@@ -67,28 +68,35 @@ Connected hosts: {}
 
 
 def checkAddressBook(myapp):
+    """
+    Add "PyBitmessage support" address to address book, remove old one if found.
+    """
     sqlExecute('DELETE from addressbook WHERE address=?', OLD_SUPPORT_ADDRESS)
-    queryreturn = sqlQuery('SELECT * FROM addressbook WHERE address=?', SUPPORT_ADDRESS)
+    queryreturn = sqlQuery(
+        'SELECT * FROM addressbook WHERE address=?', SUPPORT_ADDRESS)
     if queryreturn == []:
         sqlExecute(
             'INSERT INTO addressbook VALUES (?,?)',
-            SUPPORT_LABEL.toUtf8(), SUPPORT_ADDRESS)
+            SUPPORT_LABEL.encode('utf-8'), SUPPORT_ADDRESS)
         myapp.rerenderAddressBook()
 
 
 def checkHasNormalAddress():
+    """Returns first enabled normal address or False if not found."""
     for address in account.getSortedAccounts():
         acct = account.accountClass(address)
-        if acct.type == AccountMixin.NORMAL and BMConfigParser().safeGetBoolean(address, 'enabled'):
+        if acct.type == AccountMixin.NORMAL and BMConfigParser().safeGetBoolean(
+                address, 'enabled'):
             return address
     return False
 
 
 def createAddressIfNeeded(myapp):
+    """Checks if user has any anabled normal address, creates new one if no."""
     if not checkHasNormalAddress():
         queues.addressGeneratorQueue.put((
             'createRandomAddress', 4, 1,
-            str(SUPPORT_MY_LABEL.toUtf8()),
+            SUPPORT_MY_LABEL.encode('utf-8'),
             1, "", False,
             defaults.networkDefaultProofOfWorkNonceTrialsPerByte,
             defaults.networkDefaultPayloadLengthExtraBytes
@@ -100,6 +108,9 @@ def createAddressIfNeeded(myapp):
 
 
 def createSupportMessage(myapp):
+    """
+    Prepare the support request message and switch to tab "Send"
+    """
     checkAddressBook(myapp)
     address = createAddressIfNeeded(myapp)
     if state.shutdown:
@@ -119,15 +130,13 @@ def createSupportMessage(myapp):
     if commit:
         version += " GIT " + commit
 
-    os = sys.platform
-    if os == "win32":
-        windowsversion = sys.getwindowsversion()
-        os = "Windows " + str(windowsversion[0]) + "." + str(windowsversion[1])
+    if sys.platform.startswith("win"):
+        # pylint: disable=no-member
+        osname = "Windows %s.%s" % sys.getwindowsversion()[:2]
     else:
         try:
-            from os import uname
-            unixversion = uname()
-            os = unixversion[0] + " " + unixversion[2]
+            unixversion = os.uname()
+            osname = unixversion[0] + " " + unixversion[2]
         except:
             pass
     architecture = "32" if ctypes.sizeof(ctypes.c_voidp) == 4 else "64"
@@ -136,22 +145,26 @@ def createSupportMessage(myapp):
     opensslversion = "%s (Python internal), %s (external for PyElliptic)" % (
         ssl.OPENSSL_VERSION, OpenSSL._version)
 
+    qtapi = os.environ['QT_API']
+
     frozen = "N/A"
     if paths.frozen:
         frozen = paths.frozen
-    portablemode = "True" if state.appdata == paths.lookupExeFolder() else "False"
+    portablemode = str(state.appdata == paths.lookupExeFolder())
     cpow = "True" if proofofwork.bmpow else "False"
     openclpow = str(
         BMConfigParser().safeGet('bitmessagesettings', 'opencl')
     ) if openclEnabled() else "None"
     locale = getTranslationLanguage()
-    socks = getSOCKSProxyType(BMConfigParser()) or "N/A"
-    upnp = BMConfigParser().safeGet('bitmessagesettings', 'upnp', "N/A")
+    socks = getSOCKSProxyType(BMConfigParser()) or 'N/A'
+    upnp = BMConfigParser().safeGet('bitmessagesettings', 'upnp', 'N/A')
     connectedhosts = len(network.stats.connectedHostsList())
 
-    myapp.ui.textEditMessage.setText(unicode(SUPPORT_MESSAGE, 'utf-8').format(
-        version, os, architecture, pythonversion, opensslversion, frozen,
-        portablemode, cpow, openclpow, locale, socks, upnp, connectedhosts))
+    myapp.ui.textEditMessage.setText(SUPPORT_MESSAGE.format(
+        version, osname, architecture, pythonversion, opensslversion, qtapi,
+        frozen, portablemode, cpow, openclpow, locale, socks, upnp,
+        connectedhosts
+    ))
 
     # single msg tab
     myapp.ui.tabWidgetSend.setCurrentIndex(

From 1cae5201916abd001750d3f642cc5bde3c71af1a Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Thu, 22 Feb 2018 12:33:16 +0200
Subject: [PATCH 06/36] Better formatting of connections table header

---
 src/bitmessageqt/networkstatus.py | 7 +++----
 src/bitmessageqt/networkstatus.ui | 3 ---
 2 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/src/bitmessageqt/networkstatus.py b/src/bitmessageqt/networkstatus.py
index b1f3d4de..ef1265af 100644
--- a/src/bitmessageqt/networkstatus.py
+++ b/src/bitmessageqt/networkstatus.py
@@ -24,10 +24,9 @@ class NetworkStatus(QtWidgets.QWidget, RetranslateMixin):
         widgets.load('networkstatus.ui', self)
 
         header = self.tableWidgetConnectionCount.horizontalHeader()
-        # header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
-        for column in range(0, 4):
-            header.setSectionResizeMode(
-                column, QtWidgets.QHeaderView.ResizeToContents)
+        header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
+        header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
+        header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch)
 
         # Somehow this value was 5 when I tested
         if header.sortIndicatorSection() > 4:
diff --git a/src/bitmessageqt/networkstatus.ui b/src/bitmessageqt/networkstatus.ui
index 14aeca6e..7c40a002 100644
--- a/src/bitmessageqt/networkstatus.ui
+++ b/src/bitmessageqt/networkstatus.ui
@@ -109,9 +109,6 @@
          <attribute name="horizontalHeaderHighlightSections">
           <bool>false</bool>
          </attribute>
-         <attribute name="horizontalHeaderStretchLastSection">
-          <bool>true</bool>
-         </attribute>
          <attribute name="verticalHeaderVisible">
           <bool>false</bool>
          </attribute>

From 3202082e76003f423f0f7b02ef12bd9e1e7a5410 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Thu, 22 Feb 2018 15:09:40 +0200
Subject: [PATCH 07/36] No more arg() call on result of _translate()

---
 src/class_objectProcessor.py |   7 +-
 src/class_singleWorker.py    | 215 ++++++++++++++++-------------------
 src/namecoin.py              | 127 ++++++++++-----------
 src/network/tcp.py           |   5 +-
 src/upnp.py                  |   9 +-
 5 files changed, 168 insertions(+), 195 deletions(-)

diff --git a/src/class_objectProcessor.py b/src/class_objectProcessor.py
index 1bacf639..fcc63cc6 100644
--- a/src/class_objectProcessor.py
+++ b/src/class_objectProcessor.py
@@ -144,11 +144,10 @@ class objectProcessor(threading.Thread):
                 " WHERE ackdata=?", int(time.time()), data[readPosition:])
             queues.UISignalQueue.put((
                 'updateSentItemStatusByAckdata', (
-                    data[readPosition:],
-                    _translate(
+                    data[readPosition:], _translate(
                         "MainWindow",
-                        "Acknowledgement of the message received %1"
-                    ).arg(l10n.formatTimestamp()))
+                        "Acknowledgement of the message received {0}"
+                    ).format(l10n.formatTimestamp()))
             ))
         else:
             logger.debug('This object is not an acknowledgement bound for me.')
diff --git a/src/class_singleWorker.py b/src/class_singleWorker.py
index fea842ea..6e2fb94d 100644
--- a/src/class_singleWorker.py
+++ b/src/class_singleWorker.py
@@ -12,6 +12,8 @@ from binascii import hexlify, unhexlify
 from struct import pack
 from subprocess import call  # nosec
 
+from six.moves import configparser, queue
+
 import defaults
 import helper_inbox
 import helper_msgcoding
@@ -24,15 +26,13 @@ import protocol
 import queues
 import shared
 import state
-import tr
 from addresses import (
-    calculateInventoryHash, decodeAddress, decodeVarint, encodeVarint
-)
+    calculateInventoryHash, decodeAddress, decodeVarint, encodeVarint)
 from bmconfigparser import BMConfigParser
 from helper_sql import sqlExecute, sqlQuery
 from inventory import Inventory
 from network import knownnodes, StoppableThread
-from six.moves import configparser, queue
+from tr import _translate
 
 
 def sizeof_fmt(num, suffix='h/s'):
@@ -216,9 +216,8 @@ class singleWorker(StoppableThread):
         return privSigningKeyHex, privEncryptionKeyHex, \
             pubSigningKey, pubEncryptionKey
 
-    def _doPOWDefaults(self, payload, TTL,
-                       log_prefix='',
-                       log_time=False):
+    def _doPOWDefaults(
+            self, payload, TTL, log_prefix='', log_time=False):
         target = 2 ** 64 / (
             defaults.networkDefaultProofOfWorkNonceTrialsPerByte * (
                 len(payload) + 8
@@ -244,14 +243,16 @@ class singleWorker(StoppableThread):
                 'PoW took %.1f seconds, speed %s.',
                 delta, sizeof_fmt(nonce / delta)
             )
-        except:  # noqa:E722  # NameError
+        except NameError:
             self.logger.warning("Proof of Work exception")
         payload = pack('>Q', nonce) + payload
         return payload
 
     def doPOWForMyV2Pubkey(self, adressHash):
-        """ This function also broadcasts out the pubkey
-        message once it is done with the POW"""
+        """
+        This function also broadcasts out the pubkey message once it is
+        done with the POW
+        """
         # Look up my stream number based on my address hash
         myAddress = shared.myAddressesByHash[adressHash]
         # status
@@ -311,9 +312,10 @@ class singleWorker(StoppableThread):
 
     def sendOutOrStoreMyV3Pubkey(self, adressHash):
         """
-        If this isn't a chan address, this function assembles the pubkey data, does the necessary POW and sends it out.
-        If it *is* a chan then it assembles the pubkey and stores is in the pubkey table so that we can send messages
-        to "ourselves".
+        If this isn't a chan address, this function assembles the pubkey
+        data, does the necessary POW and sends it out.
+        If it *is* a chan then it assembles the pubkey and stores it in
+        the pubkey table so that we can send messages to "ourselves".
         """
         try:
             myAddress = shared.myAddressesByHash[adressHash]
@@ -399,9 +401,10 @@ class singleWorker(StoppableThread):
 
     def sendOutOrStoreMyV4Pubkey(self, myAddress):
         """
-        It doesn't send directly anymore. It put is to a queue for another thread to send at an appropriate time,
-        whereas in the past it directly appended it to the outgoing buffer, I think. Same with all the other methods in
-        this class.
+        It doesn't send directly anymore. It put is to a queue for
+        another thread to send at an appropriate time, whereas in the
+        past it directly appended it to the outgoing buffer, I think.
+        Same with all the other methods in this class.
         """
         if not BMConfigParser().has_section(myAddress):
             # The address has been deleted.
@@ -530,7 +533,10 @@ class singleWorker(StoppableThread):
         queues.invQueue.put((streamNumber, inventoryHash))
 
     def sendBroadcast(self):
-        """Send a broadcast-type object (assemble the object, perform PoW and put it to the inv announcement queue)"""
+        """
+        Send a broadcast-type object (assemble the object, perform PoW
+        and put it to the inv announcement queue)
+        """
         # Reset just in case
         sqlExecute(
             '''UPDATE sent SET status='broadcastqueued' '''
@@ -562,8 +568,7 @@ class singleWorker(StoppableThread):
                 self.logger.warning("Section or Option did not found: %s", err)
                 queues.UISignalQueue.put((
                     'updateSentItemStatusByAckdata', (
-                        ackdata,
-                        tr._translate(
+                        ackdata, _translate(
                             "MainWindow",
                             "Error! Could not find sender address"
                             " (your address) in the keys.dat file."))
@@ -577,7 +582,7 @@ class singleWorker(StoppableThread):
                 queues.UISignalQueue.put((
                     'updateSentItemStatusByAckdata', (
                         ackdata,
-                        tr._translate(
+                        _translate(
                             "MainWindow",
                             "Error, can't send."))
                 ))
@@ -666,8 +671,7 @@ class singleWorker(StoppableThread):
 
             queues.UISignalQueue.put((
                 'updateSentItemStatusByAckdata', (
-                    ackdata,
-                    tr._translate(
+                    ackdata, _translate(
                         "MainWindow",
                         "Doing work necessary to send broadcast..."))
             ))
@@ -699,11 +703,9 @@ class singleWorker(StoppableThread):
 
             queues.UISignalQueue.put((
                 'updateSentItemStatusByAckdata', (
-                    ackdata,
-                    tr._translate(
-                        "MainWindow",
-                        "Broadcast sent on %1"
-                    ).arg(l10n.formatTimestamp()))
+                    ackdata, _translate(
+                        "MainWindow", "Broadcast sent on {0}"
+                    ).format(l10n.formatTimestamp()))
             ))
 
             # Update the status of the message in the 'sent' table to have
@@ -715,7 +717,10 @@ class singleWorker(StoppableThread):
             )
 
     def sendMsg(self):
-        """Send a message-type object (assemble the object, perform PoW and put it to the inv announcement queue)"""
+        """
+        Send a message-type object (assemble the object, perform PoW
+        and put it to the inv announcement queue)
+        """
         # pylint: disable=too-many-nested-blocks
         # Reset just in case
         sqlExecute(
@@ -811,8 +816,7 @@ class singleWorker(StoppableThread):
                         )
                         queues.UISignalQueue.put((
                             'updateSentItemStatusByToAddress', (
-                                toaddress,
-                                tr._translate(
+                                toaddress, _translate(
                                     "MainWindow",
                                     "Encryption key was requested earlier."))
                         ))
@@ -884,8 +888,7 @@ class singleWorker(StoppableThread):
                             )
                             queues.UISignalQueue.put((
                                 'updateSentItemStatusByToAddress', (
-                                    toaddress,
-                                    tr._translate(
+                                    toaddress, _translate(
                                         "MainWindow",
                                         "Sending a request for the"
                                         " recipient\'s encryption key."))
@@ -909,8 +912,7 @@ class singleWorker(StoppableThread):
                 state.ackdataForWhichImWatching[ackdata] = 0
                 queues.UISignalQueue.put((
                     'updateSentItemStatusByAckdata', (
-                        ackdata,
-                        tr._translate(
+                        ackdata, _translate(
                             "MainWindow",
                             "Looking up the receiver\'s public key"))
                 ))
@@ -967,15 +969,14 @@ class singleWorker(StoppableThread):
                         )
                         queues.UISignalQueue.put((
                             'updateSentItemStatusByAckdata', (
-                                ackdata,
-                                tr._translate(
+                                ackdata, _translate(
                                     "MainWindow",
                                     "Problem: Destination is a mobile"
                                     " device who requests that the"
                                     " destination be included in the"
                                     " message but this is disallowed in"
-                                    " your settings.  %1"
-                                ).arg(l10n.formatTimestamp()))
+                                    " your settings.  {0}"
+                                ).format(l10n.formatTimestamp()))
                         ))
                         # if the human changes their setting and then
                         # sends another message or restarts their client,
@@ -998,8 +999,7 @@ class singleWorker(StoppableThread):
                         defaults.networkDefaultPayloadLengthExtraBytes
                     queues.UISignalQueue.put((
                         'updateSentItemStatusByAckdata', (
-                            ackdata,
-                            tr._translate(
+                            ackdata, _translate(
                                 "MainWindow",
                                 "Doing work necessary to send message.\n"
                                 "There is no required difficulty for"
@@ -1031,32 +1031,19 @@ class singleWorker(StoppableThread):
                         requiredAverageProofOfWorkNonceTrialsPerByte,
                         requiredPayloadLengthExtraBytes
                     )
-
-                    queues.UISignalQueue.put(
-                        (
-                            'updateSentItemStatusByAckdata',
-                            (
-                                ackdata,
-                                tr._translate(
-                                    "MainWindow",
-                                    "Doing work necessary to send message.\n"
-                                    "Receiver\'s required difficulty: %1"
-                                    " and %2"
-                                ).arg(
-                                    str(
-                                        float(requiredAverageProofOfWorkNonceTrialsPerByte)
-                                        / defaults.networkDefaultProofOfWorkNonceTrialsPerByte
-                                    )
-                                ).arg(
-                                    str(
-                                        float(requiredPayloadLengthExtraBytes)
-                                        / defaults.networkDefaultPayloadLengthExtraBytes
-                                    )
-                                )
-                            )
-                        )
-                    )
-
+                    queues.UISignalQueue.put((
+                        'updateSentItemStatusByAckdata', (
+                            ackdata, _translate(
+                                "MainWindow",
+                                "Doing work necessary to send message.\n"
+                                "Receiver\'s required difficulty: {0} and {1}"
+                            ).format(
+                                float(requiredAverageProofOfWorkNonceTrialsPerByte)
+                                / defaults.networkDefaultProofOfWorkNonceTrialsPerByte,
+                                float(requiredPayloadLengthExtraBytes)
+                                / defaults.networkDefaultPayloadLengthExtraBytes
+                            ))
+                    ))
                     if status != 'forcepow':
                         maxacceptablenoncetrialsperbyte = BMConfigParser().getint(
                             'bitmessagesettings', 'maxacceptablenoncetrialsperbyte')
@@ -1076,18 +1063,19 @@ class singleWorker(StoppableThread):
                                 ackdata)
                             queues.UISignalQueue.put((
                                 'updateSentItemStatusByAckdata', (
-                                    ackdata,
-                                    tr._translate(
+                                    ackdata, _translate(
                                         "MainWindow",
-                                        "Problem: The work demanded by"
-                                        " the recipient (%1 and %2) is"
-                                        " more difficult than you are"
-                                        " willing to do. %3"
-                                    ).arg(str(float(requiredAverageProofOfWorkNonceTrialsPerByte)
-                                          / defaults.networkDefaultProofOfWorkNonceTrialsPerByte)
-                                          ).arg(str(float(requiredPayloadLengthExtraBytes)
-                                                / defaults.networkDefaultPayloadLengthExtraBytes)
-                                                ).arg(l10n.formatTimestamp()))))
+                                        "Problem: The work demanded by the"
+                                        " recipient ({0} and {1}) is more"
+                                        " difficult than you are willing"
+                                        " to do. {2}"
+                                    ).format(
+                                        float(requiredAverageProofOfWorkNonceTrialsPerByte)
+                                        / defaults.networkDefaultProofOfWorkNonceTrialsPerByte,
+                                        float(requiredPayloadLengthExtraBytes)
+                                        / defaults.networkDefaultPayloadLengthExtraBytes,
+                                        l10n.formatTimestamp()))
+                            ))
                             continue
             else:  # if we are sending a message to ourselves or a chan..
                 self.logger.info('Sending a message.')
@@ -1101,15 +1089,14 @@ class singleWorker(StoppableThread):
                 except (configparser.NoSectionError, configparser.NoOptionError) as err:
                     queues.UISignalQueue.put((
                         'updateSentItemStatusByAckdata', (
-                            ackdata,
-                            tr._translate(
+                            ackdata, _translate(
                                 "MainWindow",
                                 "Problem: You are trying to send a"
                                 " message to yourself or a chan but your"
                                 " encryption key could not be found in"
                                 " the keys.dat file. Could not encrypt"
-                                " message. %1"
-                            ).arg(l10n.formatTimestamp()))
+                                " message. {0}"
+                            ).format(l10n.formatTimestamp()))
                     ))
                     self.logger.error(
                         'Error within sendMsg. Could not read the keys'
@@ -1126,8 +1113,7 @@ class singleWorker(StoppableThread):
                     defaults.networkDefaultPayloadLengthExtraBytes
                 queues.UISignalQueue.put((
                     'updateSentItemStatusByAckdata', (
-                        ackdata,
-                        tr._translate(
+                        ackdata, _translate(
                             "MainWindow",
                             "Doing work necessary to send message."))
                 ))
@@ -1150,8 +1136,7 @@ class singleWorker(StoppableThread):
                 self.logger.warning("Section or Option did not found: %s", err)
                 queues.UISignalQueue.put((
                     'updateSentItemStatusByAckdata', (
-                        ackdata,
-                        tr._translate(
+                        ackdata, _translate(
                             "MainWindow",
                             "Error! Could not find sender address"
                             " (your address) in the keys.dat file."))
@@ -1165,7 +1150,7 @@ class singleWorker(StoppableThread):
                 queues.UISignalQueue.put((
                     'updateSentItemStatusByAckdata', (
                         ackdata,
-                        tr._translate(
+                        _translate(
                             "MainWindow",
                             "Error, can't send."))
                 ))
@@ -1217,8 +1202,7 @@ class singleWorker(StoppableThread):
                 # The fullAckPayload is a normal msg protocol message
                 # with the proof of work already completed that the
                 # receiver of this message can easily send out.
-                fullAckPayload = self.generateFullAckMessage(
-                    ackdata, toStreamNumber, TTL)
+                fullAckPayload = self.generateFullAckMessage(ackdata, TTL)
             payload += encodeVarint(len(fullAckPayload))
             payload += fullAckPayload
             dataToSign = pack('>Q', embeddedTime) + '\x00\x00\x00\x02' + \
@@ -1240,12 +1224,11 @@ class singleWorker(StoppableThread):
                 )
                 queues.UISignalQueue.put((
                     'updateSentItemStatusByAckdata', (
-                        ackdata,
-                        tr._translate(
+                        ackdata, _translate(
                             "MainWindow",
                             "Problem: The recipient\'s encryption key is"
-                            " no good. Could not encrypt message. %1"
-                        ).arg(l10n.formatTimestamp()))
+                            " no good. Could not encrypt message. {0}"
+                        ).format(l10n.formatTimestamp()))
                 ))
                 continue
 
@@ -1309,21 +1292,19 @@ class singleWorker(StoppableThread):
                not protocol.checkBitfield(behaviorBitfield, protocol.BITFIELD_DOESACK):
                 queues.UISignalQueue.put((
                     'updateSentItemStatusByAckdata', (
-                        ackdata,
-                        tr._translate(
-                            "MainWindow",
-                            "Message sent. Sent at %1"
-                        ).arg(l10n.formatTimestamp()))))
+                        ackdata, _translate(
+                            "MainWindow", "Message sent. Sent at {0}"
+                        ).format(l10n.formatTimestamp()))
+                ))
             else:
                 # not sending to a chan or one of my addresses
                 queues.UISignalQueue.put((
                     'updateSentItemStatusByAckdata', (
-                        ackdata,
-                        tr._translate(
+                        ackdata, _translate(
                             "MainWindow",
                             "Message sent. Waiting for acknowledgement."
-                            " Sent on %1"
-                        ).arg(l10n.formatTimestamp()))
+                            " Sent on {0}"
+                        ).format(l10n.formatTimestamp()))
                 ))
             self.logger.info(
                 'Broadcasting inv for my msg(within sendmsg function): %s',
@@ -1451,8 +1432,7 @@ class singleWorker(StoppableThread):
         queues.UISignalQueue.put(('updateStatusBar', statusbar))
         queues.UISignalQueue.put((
             'updateSentItemStatusByToAddress', (
-                toAddress,
-                tr._translate(
+                toAddress, _translate(
                     "MainWindow",
                     "Doing work necessary to request encryption key."))
         ))
@@ -1476,30 +1456,31 @@ class singleWorker(StoppableThread):
             int(time.time()), retryNumber + 1, sleeptill, toAddress)
 
         queues.UISignalQueue.put((
-            'updateStatusBar',
-            tr._translate(
+            'updateStatusBar', _translate(
                 "MainWindow",
                 "Broadcasting the public key request. This program will"
                 " auto-retry if they are offline.")
         ))
         queues.UISignalQueue.put((
             'updateSentItemStatusByToAddress', (
-                toAddress,
-                tr._translate(
+                toAddress, _translate(
                     "MainWindow",
                     "Sending public key request. Waiting for reply."
-                    " Requested at %1"
-                ).arg(l10n.formatTimestamp()))
+                    " Requested at {0}"
+                ).format(l10n.formatTimestamp()))
         ))
 
-    def generateFullAckMessage(self, ackdata, _, TTL):
-        """
-        It might be perfectly fine to just use the same TTL for the ackdata that we use for the message. But I would
-        rather it be more difficult for attackers to associate ackData with the associated msg object. However, users
-        would want the TTL of the acknowledgement to be about the same as they set for the message itself. So let's set
-        the TTL of the acknowledgement to be in one of three 'buckets': 1 hour, 7 days, or 28 days, whichever is
-        relatively close to what the user specified.
-        """
+    def generateFullAckMessage(self, ackdata, TTL):
+        """Create ACK packet"""
+        # It might be perfectly fine to just use the same TTL for
+        # the ackdata that we use for the message. But I would rather
+        # it be more difficult for attackers to associate ackData with
+        # the associated msg object. However, users would want the TTL
+        # of the acknowledgement to be about the same as they set
+        # for the message itself. So let's set the TTL of the
+        # acknowledgement to be in one of three 'buckets': 1 hour, 7
+        # days, or 28 days, whichever is relatively close to what the
+        # user specified.
         if TTL < 24 * 60 * 60:  # 1 day
             TTL = 24 * 60 * 60  # 1 day
         elif TTL < 7 * 24 * 60 * 60:  # 1 week
diff --git a/src/namecoin.py b/src/namecoin.py
index 33d39070..d1205261 100644
--- a/src/namecoin.py
+++ b/src/namecoin.py
@@ -1,7 +1,7 @@
 """
 Namecoin queries
 """
-# pylint: disable=too-many-branches,protected-access
+# pylint: disable=too-many-branches
 
 import base64
 import httplib
@@ -14,14 +14,14 @@ import defaults
 from addresses import decodeAddress
 from bmconfigparser import BMConfigParser
 from debug import logger
-from tr import _translate  # translate
+from tr import _translate
+
 
 configSection = "bitmessagesettings"
 
 
 class RPCError(Exception):
     """Error thrown when the RPC call returns an error."""
-
     error = None
 
     def __init__(self, data):
@@ -29,7 +29,7 @@ class RPCError(Exception):
         self.error = data
 
     def __str__(self):
-        return "{0}: {1}".format(type(self).__name__, self.error)
+        return '{0}: {1}'.format(type(self).__name__, self.error)
 
 
 class namecoinConnection(object):
@@ -46,20 +46,18 @@ class namecoinConnection(object):
 
     def __init__(self, options=None):
         """
-        Initialise.  If options are given, take the connection settings from
-        them instead of loading from the configs.  This can be used to test
+        Initialise. If options are given, take the connection settings from
+        them instead of loading from the configs. This can be used to test
         currently entered connection settings in the config dialog without
         actually changing the values (yet).
         """
         if options is None:
             self.nmctype = BMConfigParser().get(
                 configSection, "namecoinrpctype")
-            self.host = BMConfigParser().get(
-                configSection, "namecoinrpchost")
+            self.host = BMConfigParser().get(configSection, "namecoinrpchost")
             self.port = int(BMConfigParser().get(
                 configSection, "namecoinrpcport"))
-            self.user = BMConfigParser().get(
-                configSection, "namecoinrpcuser")
+            self.user = BMConfigParser().get(configSection, "namecoinrpcuser")
             self.password = BMConfigParser().get(
                 configSection, "namecoinrpcpassword")
         else:
@@ -69,14 +67,14 @@ class namecoinConnection(object):
             self.user = options["user"]
             self.password = options["password"]
 
-        assert self.nmctype == "namecoind" or self.nmctype == "nmcontrol"
+        assert self.nmctype in ("namecoind", "nmcontrol")
         if self.nmctype == "namecoind":
             self.con = httplib.HTTPConnection(self.host, self.port, timeout=3)
 
     def query(self, identity):
         """
         Query for the bitmessage address corresponding to the given identity
-        string.  If it doesn't contain a slash, id/ is prepended.  We return
+        string. If it doesn't contain a slash, id/ is prepended. We return
         the result as (Error, Address) pair, where the Error is an error
         message to display or None in case of success.
         """
@@ -96,8 +94,8 @@ class namecoinConnection(object):
                 res = res["reply"]
                 if not res:
                     return (_translate(
-                        "MainWindow", "The name %1 was not found."
-                    ).arg(identity.decode("utf-8", "ignore")), None)
+                        "MainWindow", "The name {0} was not found."
+                    ).format(identity.decode('utf-8', 'ignore')), None)
             else:
                 assert False
         except RPCError as exc:
@@ -107,12 +105,12 @@ class namecoinConnection(object):
             else:
                 errmsg = exc.error
             return (_translate(
-                "MainWindow", "The namecoin query failed (%1)"
-            ).arg(errmsg.decode("utf-8", "ignore")), None)
+                "MainWindow", "The namecoin query failed ({0})"
+            ).format(errmsg.decode('utf-8', 'ignore')), None)
         except AssertionError:
             return (_translate(
-                "MainWindow", "Unknown namecoin interface type: %1"
-            ).arg(self.nmctype.decode("utf-8", "ignore")), None)
+                "MainWindow", "Unknown namecoin interface type: {0}"
+            ).format(self.nmctype.decode('utf-8', 'ignore')), None)
         except Exception:
             logger.exception("Namecoin query exception")
             return (_translate(
@@ -135,12 +133,12 @@ class namecoinConnection(object):
         ) if valid else (
             _translate(
                 "MainWindow",
-                "The name %1 has no associated Bitmessage address."
-            ).arg(identity.decode("utf-8", "ignore")), None)
+                "The name {0} has no associated Bitmessage address."
+            ).format(identity.decode('utf-8', 'ignore')), None)
 
     def test(self):
         """
-        Test the connection settings.  This routine tries to query a "getinfo"
+        Test the connection settings. This routine tries to query a "getinfo"
         command, and builds either an error message or a success message with
         some info from it.
         """
@@ -160,44 +158,36 @@ class namecoinConnection(object):
                     versStr = "0.%d.%d" % (v1, v2)
                 else:
                     versStr = "0.%d.%d.%d" % (v1, v2, v3)
-                message = (
-                    "success",
-                    _translate(
+                return (
+                    'success', _translate(
                         "MainWindow",
-                        "Success!  Namecoind version %1 running.").arg(
-                            versStr.decode("utf-8", "ignore")))
+                        "Success! Namecoind version {0} running."
+                    ).format(versStr.decode('utf-8', 'ignore'))
+                )
 
             elif self.nmctype == "nmcontrol":
                 res = self.callRPC("data", ["status"])
                 prefix = "Plugin data running"
                 if ("reply" in res) and res["reply"][:len(prefix)] == prefix:
                     return (
-                        "success",
-                        _translate(
+                        'success', _translate(
                             "MainWindow",
-                            "Success!  NMControll is up and running."
-                        )
+                            "Success! NMControll is up and running.")
                     )
 
                 logger.error("Unexpected nmcontrol reply: %s", res)
-                message = (
-                    "failed",
-                    _translate(
-                        "MainWindow",
-                        "Couldn\'t understand NMControl."
-                    )
+                return (
+                    'failed', _translate(
+                        "MainWindow", "Couldn\'t understand NMControl.")
                 )
 
             else:
                 sys.exit("Unsupported Namecoin type")
 
-            return message
-
         except Exception:
             logger.info("Namecoin connection test failure")
             return (
-                "failed",
-                _translate(
+                'failed', _translate(
                     "MainWindow", "The connection to namecoin failed.")
             )
 
@@ -245,26 +235,24 @@ class namecoinConnection(object):
                 "Authorization", "Basic %s" % base64.b64encode(authstr))
             self.con.endheaders()
             self.con.send(data)
+            try:
+                resp = self.con.getresponse()
+                result = resp.read()
+                if resp.status != 200:
+                    raise Exception(
+                        "Namecoin returned status %i: %s" %
+                        (resp.status, resp.reason))
+            except:  # noqa:E722
+                logger.info("HTTP receive error")
         except:  # noqa:E722
             logger.info("HTTP connection error")
-            return None
-
-        try:
-            resp = self.con.getresponse()
-            result = resp.read()
-            if resp.status != 200:
-                raise Exception(
-                    "Namecoin returned status"
-                    " %i: %s" % (resp.status, resp.reason))
-        except:  # noqa:E722
-            logger.info("HTTP receive error")
-            return None
 
         return result
 
     def queryServer(self, data):
-        """Helper routine sending data to the RPC "
-        "server and returning the result."""
+        """
+        Helper routine sending data to the RPC server and returning the result.
+        """
 
         try:
             s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -296,23 +284,24 @@ def lookupNamecoinFolder():
     """
 
     app = "namecoin"
-    from os import path, environ
+
     if sys.platform == "darwin":
-        if "HOME" in environ:
-            dataFolder = path.join(os.environ["HOME"],
-                                   "Library/Application Support/", app) + "/"
-        else:
+        try:
+            dataFolder = os.path.join(
+                os.getenv("HOME"), "Library/Application Support/", app)
+        except TypeError:  # getenv is None
             sys.exit(
                 "Could not find home folder, please report this message"
                 " and your OS X version to the BitMessage Github."
-            )
+            )  # TODO: remove exits from utility modules
 
-    elif "win32" in sys.platform or "win64" in sys.platform:
-        dataFolder = path.join(environ["APPDATA"], app) + "\\"
-    else:
-        dataFolder = path.join(environ["HOME"], ".%s" % app) + "/"
+    dataFolder = (
+        os.path.join(os.getenv("APPDATA"), app)
+        if sys.platform.startswith('win') else
+        os.path.join(os.getenv("HOME"), ".%s" % app)
+    )
 
-    return dataFolder
+    return dataFolder + os.path.sep
 
 
 def ensureNamecoinOptions():
@@ -357,8 +346,8 @@ def ensureNamecoinOptions():
         nmc.close()
     except IOError:
         logger.warning(
-            "%s unreadable or missing, Namecoin support deactivated",
-            nmcConfig)
+            "%s unreadable or missing, Namecoin support deactivated", nmcConfig
+        )
     except Exception:
         logger.warning("Error processing namecoin.conf", exc_info=True)
 
@@ -370,5 +359,5 @@ def ensureNamecoinOptions():
 
     # Set default port now, possibly to found value.
     if not hasPort:
-        BMConfigParser().set(configSection, "namecoinrpcport",
-                             defaults.namecoinDefaultRpcPort)
+        BMConfigParser().set(
+            configSection, "namecoinrpcport", defaults.namecoinDefaultRpcPort)
diff --git a/src/network/tcp.py b/src/network/tcp.py
index ff778378..77bb21c3 100644
--- a/src/network/tcp.py
+++ b/src/network/tcp.py
@@ -138,9 +138,10 @@ class TCPConnection(BMProto, TLSDispatcher):
                 'updateStatusBar',
                 _translate(
                     "MainWindow",
-                    "The time on your computer, %1, may be wrong. "
+                    "The time on your computer, {0}, may be wrong. "
                     "Please verify your settings."
-                ).arg(l10n.formatTimestamp())))
+                ).format(l10n.formatTimestamp())
+            ))
 
     def state_connection_fully_established(self):
         """
diff --git a/src/upnp.py b/src/upnp.py
index c6db487b..82608ddd 100644
--- a/src/upnp.py
+++ b/src/upnp.py
@@ -266,9 +266,12 @@ class uPnPThread(StoppableThread):
                             with knownnodes.knownNodesLock:
                                 knownnodes.addKnownNode(
                                     1, self_peer, is_self=True)
-                        queues.UISignalQueue.put(('updateStatusBar', tr._translate(
-                            "MainWindow", 'UPnP port mapping established on port %1'
-                        ).arg(str(self.extPort))))
+                        queues.UISignalQueue.put((
+                            'updateStatusBar', tr._translate(
+                                "MainWindow",
+                                "UPnP port mapping established on port {0}"
+                            ).format(self.extPort)
+                        ))
                         break
             except socket.timeout:
                 pass

From c5de33d6261fb683f0b32f034fbcc01f6b3149fc Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Fri, 23 Feb 2018 15:42:50 +0200
Subject: [PATCH 08/36] QComboBox.findData() compatible with pyside

---
 src/bitmessageqt/support.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/bitmessageqt/support.py b/src/bitmessageqt/support.py
index 965303ca..92a5d112 100644
--- a/src/bitmessageqt/support.py
+++ b/src/bitmessageqt/support.py
@@ -6,8 +6,6 @@ import ssl
 import sys
 import time
 
-from qtpy import QtCore
-
 import account
 import defaults
 import network.stats
@@ -117,9 +115,11 @@ def createSupportMessage(myapp):
         return
 
     myapp.ui.lineEditSubject.setText(SUPPORT_SUBJECT)
-    addrIndex = myapp.ui.comboBoxSendFrom.findData(
-        address, QtCore.Qt.UserRole,
-        QtCore.Qt.MatchFixedString | QtCore.Qt.MatchCaseSensitive)
+    # addrIndex = myapp.ui.comboBoxSendFrom.findData(
+    #     address, QtCore.Qt.UserRole,
+    #     QtCore.Qt.MatchFixedString | QtCore.Qt.MatchCaseSensitive
+    # )
+    addrIndex = myapp.ui.comboBoxSendFrom.findData(address)
     if addrIndex == -1:  # something is very wrong
         return
     myapp.ui.comboBoxSendFrom.setCurrentIndex(addrIndex)

From 5f4b67a61ecc02c13e6d2cb11e66f24bd4ecaf0e Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Mon, 26 Feb 2018 12:36:00 +0200
Subject: [PATCH 09/36] fromAddress - str, subject - unicode

(for simple encoding like for extended)
---
 src/bitmessageqt/uisignaler.py | 10 ++++++----
 src/helper_msgcoding.py        |  5 +++--
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/bitmessageqt/uisignaler.py b/src/bitmessageqt/uisignaler.py
index 2753121f..7efda169 100644
--- a/src/bitmessageqt/uisignaler.py
+++ b/src/bitmessageqt/uisignaler.py
@@ -14,8 +14,9 @@ class UISignaler(QtCore.QThread):
     updateStatusBar = QtCore.Signal(object)
     updateSentItemStatusByToAddress = QtCore.Signal(object, str)
     updateSentItemStatusByAckdata = QtCore.Signal(object, str)
-    displayNewInboxMessage = QtCore.Signal(object, str, str, object, str)
-    displayNewSentMessage = QtCore.Signal(object, str, str, str, object, str)
+    displayNewInboxMessage = QtCore.Signal(object, str, object, object, str)
+    displayNewSentMessage = QtCore.Signal(
+        object, str, str, object, object, str)
     updateNetworkStatusTab = QtCore.Signal(bool, bool, Peer)
     updateNumberOfMessagesProcessed = QtCore.Signal()
     updateNumberOfPubkeysProcessed = QtCore.Signal()
@@ -54,14 +55,15 @@ class UISignaler(QtCore.QThread):
                 self.updateSentItemStatusByAckdata.emit(ackData, message)
             elif command == 'displayNewInboxMessage':
                 inventoryHash, toAddress, fromAddress, subject, body = data
+
                 self.displayNewInboxMessage.emit(
                     inventoryHash, toAddress, fromAddress,
-                    unicode(subject, 'utf-8'), body)
+                    subject, body)
             elif command == 'displayNewSentMessage':
                 toAddress, fromLabel, fromAddress, subject, message, ackdata = data
                 self.displayNewSentMessage.emit(
                     toAddress, fromLabel, fromAddress,
-                    unicode(subject, 'utf-8'), message, ackdata)
+                    subject.decode('utf-8'), message, ackdata)
             elif command == 'updateNetworkStatusTab':
                 outbound, add, destination = data
                 self.updateNetworkStatusTab.emit(outbound, add, destination)
diff --git a/src/helper_msgcoding.py b/src/helper_msgcoding.py
index 28f92288..76447884 100644
--- a/src/helper_msgcoding.py
+++ b/src/helper_msgcoding.py
@@ -155,5 +155,6 @@ class MsgDecode(object):
         # Throw away any extra lines (headers) after the subject.
         if subject:
             subject = subject.splitlines()[0]
-        self.subject = subject
-        self.body = body
+        # Field types should be the same for all message types
+        self.subject = subject.decode('utf-8', 'replace')
+        self.body = body.decode('utf-8', 'replace')

From acaa2743ef6a5b2e4e47063ab9593f1c3cc3c097 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Thu, 1 Mar 2018 17:40:13 +0200
Subject: [PATCH 10/36] QWheelEvent.orientation() is obsolete, used
 angleDelta() instead

---
 src/bitmessageqt/messagecompose.py | 2 +-
 src/bitmessageqt/messageview.py    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/bitmessageqt/messagecompose.py b/src/bitmessageqt/messagecompose.py
index 0114400d..c520030b 100644
--- a/src/bitmessageqt/messagecompose.py
+++ b/src/bitmessageqt/messagecompose.py
@@ -17,7 +17,7 @@ class MessageCompose(QtWidgets.QTextEdit):
         if (
             (QtWidgets.QApplication.queryKeyboardModifiers()
              & QtCore.Qt.ControlModifier) == QtCore.Qt.ControlModifier
-            and event.orientation() == QtCore.Qt.Vertical
+            and event.angleDelta().y() != 0
         ):
             if event.delta() > 0:
                 self.zoomIn(1)
diff --git a/src/bitmessageqt/messageview.py b/src/bitmessageqt/messageview.py
index abd15785..364a92c2 100644
--- a/src/bitmessageqt/messageview.py
+++ b/src/bitmessageqt/messageview.py
@@ -56,7 +56,7 @@ class MessageView(QtWidgets.QTextBrowser):
         if (
             (QtWidgets.QApplication.queryKeyboardModifiers()
              & QtCore.Qt.ControlModifier) == QtCore.Qt.ControlModifier
-            and event.orientation() == QtCore.Qt.Vertical
+            and event.angleDelta().y() != 0
         ):
             zoom = self.currentFont().pointSize() * 100 / self.defaultFontPointSize
             QtWidgets.QApplication.activeWindow().statusbar.showMessage(

From c39c7d139753a19f38990648c1aabe0e608ebe89 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Wed, 27 Jun 2018 17:44:55 +0300
Subject: [PATCH 11/36] Changed check_pyqt() to work with qtpy

(closes #897, closes #1418)
---
 src/depends.py | 45 ++++++++++++++++++++++-----------------------
 1 file changed, 22 insertions(+), 23 deletions(-)

diff --git a/src/depends.py b/src/depends.py
index 23da7d92..3a48ae63 100755
--- a/src/depends.py
+++ b/src/depends.py
@@ -18,7 +18,7 @@ if not hasattr(sys, 'hexversion') or sys.hexversion < 0x20300F0:
 
 import logging  # noqa:E402
 import subprocess
-
+from distutils import version
 from importlib import import_module
 
 # We can now use logging so set up a simple configuration
@@ -53,23 +53,22 @@ PACKAGE_MANAGER = {
 }
 
 PACKAGES = {
-    "PyQt4": {
-        "OpenBSD": "py-qt4",
-        "FreeBSD": "py27-qt4",
-        "Debian": "python-qt4",
-        "Ubuntu": "python-qt4",
-        "Ubuntu 12": "python-qt4",
-        "Ubuntu 20": "",
-        "openSUSE": "python-qt",
-        "Fedora": "PyQt4",
-        "Guix": "python2-pyqt@4.11.4",
-        "Gentoo": "dev-python/PyQt4",
+    "qtpy": {
+        "OpenBSD": "py-qtpy",
+        "FreeBSD": "py27-QtPy",
+        "Debian": "python-qtpy",
+        "Ubuntu": "python-qtpy",
+        "Ubuntu 12": "python-qtpy",
+        "openSUSE": "python-QtPy",
+        "Fedora": "python2-QtPy",
+        "Guix": "",
+        "Gentoo": "dev-python/QtPy",
         "optional": True,
         "description":
-        "You only need PyQt if you want to use the GUI."
+        "You only need qtpy if you want to use the GUI."
         " When only running as a daemon, this can be skipped.\n"
-        "However, you would have to install it manually"
-        " because setuptools does not support PyQt."
+        "Also maybe you need to install PyQt5 if your package manager"
+        " not installs it as qtpy dependency"
     },
     "msgpack": {
         "OpenBSD": "py-msgpack",
@@ -383,21 +382,21 @@ def check_pyqt():
     Here we are checking for PyQt4 with its version, as for it require
     PyQt 4.8 or later.
     """
-    QtCore = try_import(
-        'qtpy.QtCore', 'PyBitmessage requires PyQt 4.8 or later and Qt 4.7 or later.')
+    qtpy = try_import(
+        'qtpy', 'PyBitmessage requires qtpy, PyQt 4.8 or later and Qt 4.7 or later.')
 
-    if not QtCore:
+    if not qtpy:
         return False
 
-    logger.info('PyQt Version: %s', QtCore.PYQT_VERSION_STR)
-    logger.info('Qt Version: %s', QtCore.QT_VERSION_STR)
+    logger.info('PyQt Version: %s', qtpy.PYQT_VERSION)
+    logger.info('Qt Version: %s', qtpy.QT_VERSION)
     passed = True
-    if QtCore.PYQT_VERSION < 0x40800:
+    if version.LooseVersion(qtpy.PYQT_VERSION) < '4.8':
         logger.error(
             'This version of PyQt is too old. PyBitmessage requries'
             ' PyQt 4.8 or later.')
         passed = False
-    if QtCore.QT_VERSION < 0x40700:
+    if version.LooseVersion(qtpy.QT_VERSION) < '4.7':
         logger.error(
             'This version of Qt is too old. PyBitmessage requries'
             ' Qt 4.7 or later.')
@@ -406,7 +405,7 @@ def check_pyqt():
 
 
 def check_msgpack():
-    """Do sgpack module check.
+    """Do msgpack module check.
 
     simply checking if msgpack package with all its dependency
     is available or not as recommended for messages coding.

From bc8900003526229d70346fb183f508247b795bbc Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Fri, 16 Nov 2018 18:44:21 +0200
Subject: [PATCH 12/36] Handled pylint warnings in bitmessageqt, qidenticon,
 depends,

resolved pylint redefined-variable-type warnings,
marked autogenerated modules for skipping by pylint and flake8
---
 src/bitmessageqt/__init__.py        | 81 +++++++++++++++--------------
 src/bitmessageqt/address_dialogs.py |  4 +-
 src/bitmessageqt/bitmessageui.py    |  3 ++
 src/depends.py                      | 10 ++--
 4 files changed, 55 insertions(+), 43 deletions(-)

diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py
index d25f2f14..eddebeec 100644
--- a/src/bitmessageqt/__init__.py
+++ b/src/bitmessageqt/__init__.py
@@ -1580,7 +1580,13 @@ class MyForm(settingsmixin.SMainWindow):
 
     # menu button 'delete all treshed messages'
     def click_actionDeleteAllTrashedMessages(self):
-        if QtWidgets.QMessageBox.question(self, _translate("MainWindow", "Delete trash?"), _translate("MainWindow", "Are you sure you want to delete all trashed messages?"), QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No) == QtWidgets.QMessageBox.No:
+        if QtWidgets.QMessageBox.question(
+            self, _translate("MainWindow", "Delete trash?"),
+            _translate(
+                "MainWindow",
+                "Are you sure you want to delete all trashed messages?"
+            ), QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No
+        ) == QtWidgets.QMessageBox.No:
             return
         sqlStoredProcedure('deleteandvacuume')
         self.rerenderTabTreeMessages()
@@ -2073,22 +2079,22 @@ class MyForm(settingsmixin.SMainWindow):
                             toAddress = acct.toAddress
                         else:
                             if QtWidgets.QMessageBox.question(
-                                    self, "Sending an email?",
-                                    _translate(
-                                        "MainWindow",
-                                        "You are trying to send an email"
-                                        " instead of a bitmessage. This"
-                                        " requires registering with a"
-                                        " gateway. Attempt to register?"
-                                    ), QtWidgets.QMessageBox.Yes
-                                    | QtWidgets.QMessageBox.No
+                                self, "Sending an email?",
+                                _translate(
+                                    "MainWindow",
+                                    "You are trying to send an email"
+                                    " instead of a bitmessage. This"
+                                    " requires registering with a"
+                                    " gateway. Attempt to register?"
+                                ), QtWidgets.QMessageBox.Yes
+                                | QtWidgets.QMessageBox.No
                             ) != QtWidgets.QMessageBox.Yes:
                                 continue
                             email = acct.getLabel()
                             # attempt register
                             if email[-14:] != "@mailchuck.com":
                                 # 12 character random email address
-                                email = ''.join(
+                                email = u''.join(
                                     random.SystemRandom().choice(
                                         string.ascii_lowercase
                                     ) for _ in range(12)
@@ -2110,33 +2116,33 @@ class MyForm(settingsmixin.SMainWindow):
                       decodeAddress(toAddress)[:3]
                     if status != 'success':
                         try:
-                            toAddress = unicode(toAddress, 'utf-8', 'ignore')
+                            toAddress_value = unicode(
+                                toAddress, 'utf-8', 'ignore')
                         except:
                             logger.warning(
-                                "Failed unicode(toAddress ):",
-                                exc_info=True)
+                                "Failed unicode(toAddress ):", exc_info=True)
                         logger.error(
                             'Error: Could not decode recipient address %s: %s',
-                            toAddress, status)
+                            toAddress_value, status)
 
                         if status == 'missingbm':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
                                 "Error: Bitmessage addresses start with"
                                 " BM-   Please check the recipient address {0}"
-                            ).format(toAddress))
+                            ).format(toAddress_value))
                         elif status == 'checksumfailed':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
                                 "Error: The recipient address {0} is not"
                                 " typed or copied correctly. Please check it."
-                            ).format(toAddress))
+                            ).format(toAddress_value))
                         elif status == 'invalidcharacters':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
                                 "Error: The recipient address {0} contains"
                                 " invalid characters. Please check it."
-                            ).format(toAddress))
+                            ).format(toAddress_value))
                         elif status == 'versiontoohigh':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
@@ -2144,7 +2150,7 @@ class MyForm(settingsmixin.SMainWindow):
                                 " {0} is too high. Either you need to upgrade"
                                 " your Bitmessage software or your"
                                 " acquaintance is being clever."
-                            ).format(toAddress))
+                            ).format(toAddress_value))
                         elif status == 'ripetooshort':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
@@ -2152,7 +2158,7 @@ class MyForm(settingsmixin.SMainWindow):
                                 " address {0} is too short. There might be"
                                 " something wrong with the software of"
                                 " your acquaintance."
-                            ).format(toAddress))
+                            ).format(toAddress_value))
                         elif status == 'ripetoolong':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
@@ -2160,7 +2166,7 @@ class MyForm(settingsmixin.SMainWindow):
                                 " address {0} is too long. There might be"
                                 " something wrong with the software of"
                                 " your acquaintance."
-                            ).format(toAddress))
+                            ).format(toAddress_value))
                         elif status == 'varintmalformed':
                             self.updateStatusBar(_translate(
                                 "MainWindow",
@@ -2168,13 +2174,13 @@ class MyForm(settingsmixin.SMainWindow):
                                 " address {0} is malformed. There might be"
                                 " something wrong with the software of"
                                 " your acquaintance."
-                            ).format(toAddress))
+                            ).format(toAddress_value))
                         else:
                             self.updateStatusBar(_translate(
                                 "MainWindow",
                                 "Error: Something is wrong with the"
                                 " recipient address {0}."
-                            ).format(toAddress))
+                            ).format(toAddress_value))
                     elif fromAddress == '':
                         self.updateStatusBar(_translate(
                             "MainWindow",
@@ -2480,7 +2486,7 @@ class MyForm(settingsmixin.SMainWindow):
         dialog.exec_()
         try:
             address, label = dialog.data
-        except AttributeError:
+        except (AttributeError, TypeError):
             return
 
         # First we must check to see if the address is already in the
@@ -2525,7 +2531,7 @@ class MyForm(settingsmixin.SMainWindow):
         dialog.exec_()
         try:
             address, label = dialog.data
-        except AttributeError:
+        except (AttributeError, TypeError):
             return
 
         # We must check to see if the address is already in the
@@ -2584,9 +2590,8 @@ class MyForm(settingsmixin.SMainWindow):
         dialog = dialogs.EmailGatewayDialog(self, config=BMConfigParser())
         # For Modal dialogs
         dialog.exec_()
-        try:
-            acct = dialog.data
-        except AttributeError:
+        acct = dialog.data
+        if not acct:
             return
 
         # Only settings remain here
@@ -3241,10 +3246,9 @@ class MyForm(settingsmixin.SMainWindow):
 
         defaultFilename = "".join(
             x for x in subjectAtCurrentInboxRow if x.isalnum()) + '.txt'
-        filename, filetype = QtWidgets.QFileDialog.getSaveFileName(
+        filename = QtWidgets.QFileDialog.getSaveFileName(
             self, _translate("MainWindow", "Save As..."), defaultFilename,
-            "Text files (*.txt);;All files (*.*)"
-        )
+            "Text files (*.txt);;All files (*.*)")[0]
         if not filename:
             return
         try:
@@ -3704,8 +3708,8 @@ class MyForm(settingsmixin.SMainWindow):
         account = accountClass(myAddress)
         if isinstance(account, GatewayAccount) \
             and otherAddress == account.relayAddress and (
-                (currentColumn in (0, 2) and currentFolder == "sent")
-                or (currentColumn in (1, 2) and currentFolder != "sent")):
+                (currentColumn in (0, 2) and currentFolder == "sent") or
+                (currentColumn in (1, 2) and currentFolder != "sent")):
             text = tableWidget.item(currentRow, currentColumn).label
         else:
             text = tableWidget.item(currentRow, currentColumn).data(QtCore.Qt.UserRole)
@@ -3766,10 +3770,9 @@ class MyForm(settingsmixin.SMainWindow):
                 current_files += [upper]
         filters[0:0] = ['Image files (' + ' '.join(all_images_filter) + ')']
         filters[1:1] = ['All files (*.*)']
-        sourcefile, filetype = QtWidgets.QFileDialog.getOpenFileName(
+        sourcefile = QtWidgets.QFileDialog.getOpenFileName(
             self, _translate("MainWindow", "Set avatar..."),
-            filter=';;'.join(filters)
-        )
+            filter=';;'.join(filters))[0]
         # determine the correct filename (note that avatars don't use the suffix)
         destination = state.appdata + 'avatars/' + hash + '.' + sourcefile.split('.')[-1]
         exists = QtCore.QFile.exists(destination)
@@ -3830,10 +3833,10 @@ class MyForm(settingsmixin.SMainWindow):
             "MainWindow", "Sound files (%s)" %
             ' '.join(['*%s%s' % (os.extsep, ext) for ext in sound.extensions])
         ))]
-        sourcefile, filetype = QtWidgets.QFileDialog.getOpenFileName(
+        sourcefile = QtWidgets.QFileDialog.getOpenFileName(
             self, _translate("MainWindow", "Set notification sound..."),
             filter=';;'.join(filters)
-        )
+        )[0]
 
         if not sourcefile:
             return
@@ -4097,6 +4100,8 @@ class MyForm(settingsmixin.SMainWindow):
         except NameError:
             message = u""
         except IndexError:
+            # _translate() often returns unicode, no redefinition here!
+            # pylint: disable=redefined-variable-type
             message = _translate(
                 "MainWindow",
                 "Error occurred: could not load message from disk."
diff --git a/src/bitmessageqt/address_dialogs.py b/src/bitmessageqt/address_dialogs.py
index 6275859a..92677f09 100644
--- a/src/bitmessageqt/address_dialogs.py
+++ b/src/bitmessageqt/address_dialogs.py
@@ -91,7 +91,7 @@ class AddressDataDialog(QtWidgets.QDialog, AddressCheckMixin):
     def __init__(self, parent):
         super(AddressDataDialog, self).__init__(parent)
         self.parent = parent
-        self.data = ("", "")
+        self.data = None
 
     def accept(self):
         """Callback for QDialog accepting value"""
@@ -187,6 +187,7 @@ class NewSubscriptionDialog(AddressDataDialog):
     def __init__(self, parent=None):
         super(NewSubscriptionDialog, self).__init__(parent)
         widgets.load('newsubscriptiondialog.ui', self)
+        self.recent = []
         self._setup()
 
     def _onSuccess(self, addressVersion, streamNumber, ripe):
@@ -306,6 +307,7 @@ class EmailGatewayDialog(QtWidgets.QDialog):
         widgets.load('emailgateway.ui', self)
         self.parent = parent
         self.config = config
+        self.data = None
         if account:
             self.acct = account
             self.setWindowTitle(_translate(
diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py
index 3388c1cb..136f4c8a 100644
--- a/src/bitmessageqt/bitmessageui.py
+++ b/src/bitmessageqt/bitmessageui.py
@@ -1,3 +1,6 @@
+# pylint: skip-file
+# flake8: noqa
+
 from PyQt5 import QtCore, QtGui, QtWidgets
 from tr import _translate
 from bmconfigparser import BMConfigParser
diff --git a/src/depends.py b/src/depends.py
index 3a48ae63..9cff1b22 100755
--- a/src/depends.py
+++ b/src/depends.py
@@ -155,17 +155,17 @@ detectOS.result = None
 def detectOSRelease():
     """Detecting the release of OS"""
     with open("/etc/os-release", 'r') as osRelease:
-        version = None
+        ver = None
         for line in osRelease:
             if line.startswith("NAME="):
                 detectOS.result = OS_RELEASE.get(
                     line.replace('"', '').split("=")[-1].strip().lower())
             elif line.startswith("VERSION_ID="):
                 try:
-                    version = float(line.split("=")[1].replace("\"", ""))
+                    ver = float(line.split("=")[1].replace("\"", ""))
                 except ValueError:
                     pass
-        if detectOS.result == "Ubuntu" and version < 14:
+        if detectOS.result == "Ubuntu" and ver < 14:
             detectOS.result = "Ubuntu 12"
         elif detectOS.result == "Ubuntu" and version >= 20:
             detectOS.result = "Ubuntu 20"
@@ -382,8 +382,10 @@ def check_pyqt():
     Here we are checking for PyQt4 with its version, as for it require
     PyQt 4.8 or later.
     """
+    # pylint: disable=no-member
     qtpy = try_import(
-        'qtpy', 'PyBitmessage requires qtpy, PyQt 4.8 or later and Qt 4.7 or later.')
+        'qtpy',
+        'PyBitmessage requires qtpy, PyQt 4.8 or later and Qt 4.7 or later.')
 
     if not qtpy:
         return False

From 6864b4465a85fcaa1fc784461733ae1dd2a5462d Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Mon, 11 Feb 2019 18:48:57 +0200
Subject: [PATCH 13/36] PyQt5 based qtpy fallback

---
 src/bitmessageqt/support.py |  2 +-
 src/depends.py              | 10 +++++++---
 src/fallback/__init__.py    | 33 +++++++++++++++++++++++++++++++++
 3 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/src/bitmessageqt/support.py b/src/bitmessageqt/support.py
index 92a5d112..08125446 100644
--- a/src/bitmessageqt/support.py
+++ b/src/bitmessageqt/support.py
@@ -145,7 +145,7 @@ def createSupportMessage(myapp):
     opensslversion = "%s (Python internal), %s (external for PyElliptic)" % (
         ssl.OPENSSL_VERSION, OpenSSL._version)
 
-    qtapi = os.environ['QT_API']
+    qtapi = os.environ.get('QT_API', 'fallback')
 
     frozen = "N/A"
     if paths.frozen:
diff --git a/src/depends.py b/src/depends.py
index 9cff1b22..113c8895 100755
--- a/src/depends.py
+++ b/src/depends.py
@@ -383,9 +383,13 @@ def check_pyqt():
     PyQt 4.8 or later.
     """
     # pylint: disable=no-member
-    qtpy = try_import(
-        'qtpy',
-        'PyBitmessage requires qtpy, PyQt 4.8 or later and Qt 4.7 or later.')
+    try:
+        from fallback import qtpy
+    except ImportError:
+        logger.error(
+            'PyBitmessage requires qtpy, PyQt 4.8 or later and Qt 4.7 or later.'
+        )
+        qtpy = None
 
     if not qtpy:
         return False
diff --git a/src/fallback/__init__.py b/src/fallback/__init__.py
index 9a8d646f..bd1f51b9 100644
--- a/src/fallback/__init__.py
+++ b/src/fallback/__init__.py
@@ -30,3 +30,36 @@ else:
         if data:
             hasher.update(data)
         return hasher
+
+try:
+    import qtpy
+except ImportError:
+    try:
+        from PyQt5 import QtCore, QtGui, QtWidgets, QtNetwork, uic
+    except ImportError:
+        qtpy = None
+    else:
+        import sys
+        import types
+
+        QtCore.Signal = QtCore.pyqtSignal
+        context = {
+            'API': 'pyqt5',  # for tr
+            'PYQT_VERSION': QtCore.PYQT_VERSION_STR,
+            'QT_VERSION': QtCore.QT_VERSION_STR,
+            'QtCore': QtCore,
+            'QtGui': QtGui,
+            'QtWidgets': QtWidgets,
+            'QtNetwork': QtNetwork,
+            'uic': uic
+        }
+        try:
+            from PyQt5 import QtTest
+        except ImportError:
+            pass
+        else:
+            context['QtTest'] = QtTest
+        qtpy = types.ModuleType(
+            'qtpy', 'PyQt5 based dynamic fallback for qtpy')
+        qtpy.__dict__.update(context)
+        sys.modules['qtpy'] = qtpy

From b046898553652d16390518ab7572665165ce59d3 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Fri, 12 Apr 2019 12:33:24 +0300
Subject: [PATCH 14/36] Explicitly set wordWrap property to false in
 STableWidgets

on tabs "Send", "Blacklist" and "Network Status":
in qt5 it's probably true by default.
---
 src/bitmessageqt/bitmessageui.py  | 1 +
 src/bitmessageqt/blacklist.ui     | 3 +++
 src/bitmessageqt/networkstatus.ui | 3 +++
 3 files changed, 7 insertions(+)

diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py
index 136f4c8a..f7a59459 100644
--- a/src/bitmessageqt/bitmessageui.py
+++ b/src/bitmessageqt/bitmessageui.py
@@ -164,6 +164,7 @@ class Ui_MainWindow(object):
         self.tableWidgetAddressBook.horizontalHeader().setHighlightSections(False)
         self.tableWidgetAddressBook.horizontalHeader().setStretchLastSection(True)
         self.tableWidgetAddressBook.verticalHeader().setVisible(False)
+        self.tableWidgetAddressBook.setWordWrap(False)
         self.verticalSplitter_2.addWidget(self.tableWidgetAddressBook)
         self.addressBookCompleter = AddressBookCompleter()
         self.addressBookCompleter.setCompletionMode(QtWidgets.QCompleter.PopupCompletion)
diff --git a/src/bitmessageqt/blacklist.ui b/src/bitmessageqt/blacklist.ui
index 3068a6ae..0eb347a3 100644
--- a/src/bitmessageqt/blacklist.ui
+++ b/src/bitmessageqt/blacklist.ui
@@ -62,6 +62,9 @@
      <property name="sortingEnabled">
       <bool>true</bool>
      </property>
+     <property name="wordWrap">
+      <bool>false</bool>
+     </property>
      <attribute name="horizontalHeaderCascadingSectionResizes">
       <bool>true</bool>
      </attribute>
diff --git a/src/bitmessageqt/networkstatus.ui b/src/bitmessageqt/networkstatus.ui
index 7c40a002..64a3d48d 100644
--- a/src/bitmessageqt/networkstatus.ui
+++ b/src/bitmessageqt/networkstatus.ui
@@ -100,6 +100,9 @@
          <property name="sortingEnabled">
           <bool>true</bool>
          </property>
+         <property name="wordWrap">
+          <bool>false</bool>
+         </property>
          <attribute name="horizontalHeaderCascadingSectionResizes">
           <bool>true</bool>
          </attribute>

From 46d8576a64b2b6c9fa3e77a683a83a4a7d70d9f1 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Wed, 24 Apr 2019 14:40:25 +0300
Subject: [PATCH 15/36] Suppressed pylint relative-import and pycodestyle E402
 in depends

---
 src/depends.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/depends.py b/src/depends.py
index 113c8895..f4a5157c 100755
--- a/src/depends.py
+++ b/src/depends.py
@@ -190,7 +190,7 @@ def try_import(module, log_extra=False):
 def check_ripemd160():
     """Check availability of the RIPEMD160 hash function"""
     try:
-        from fallback import RIPEMD160Hash  # pylint: disable=relative-import
+        from fallback import RIPEMD160Hash
     except ImportError:
         return False
     return RIPEMD160Hash is not None

From 677c117290ad925086488968653babe9bb91a283 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Tue, 1 Sep 2020 12:31:05 +0300
Subject: [PATCH 16/36] Don't close BitmessageQtApplication.server in __del__()

---
 src/bitmessageqt/__init__.py | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py
index eddebeec..a175402d 100644
--- a/src/bitmessageqt/__init__.py
+++ b/src/bitmessageqt/__init__.py
@@ -4244,10 +4244,6 @@ class BitmessageQtApplication(QtWidgets.QApplication):
 
         self.setStyleSheet("QStatusBar::item { border: 0px solid black }")
 
-    def __del__(self):
-        if self.server:
-            self.server.close()
-
     def on_new_connection(self):
         if myapp:
             myapp.appIndicatorShow()

From 3e3985267a80556082979bbc556e95f60d4b0f6d Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Mon, 14 Sep 2020 13:30:11 +0300
Subject: [PATCH 17/36] Removed unused resources in ui-files

---
 src/bitmessageqt/blacklist.ui     | 3 ---
 src/bitmessageqt/networkstatus.ui | 3 ---
 src/bitmessageqt/settings.ui      | 3 ---
 3 files changed, 9 deletions(-)

diff --git a/src/bitmessageqt/blacklist.ui b/src/bitmessageqt/blacklist.ui
index 0eb347a3..c3b9b5a3 100644
--- a/src/bitmessageqt/blacklist.ui
+++ b/src/bitmessageqt/blacklist.ui
@@ -104,8 +104,5 @@
    <header>bitmessageqt.settingsmixin</header>
   </customwidget>
  </customwidgets>
- <resources>
-  <include location="bitmessage_icons.qrc"/>
- </resources>
  <connections/>
 </ui>
diff --git a/src/bitmessageqt/networkstatus.ui b/src/bitmessageqt/networkstatus.ui
index 64a3d48d..7830714a 100644
--- a/src/bitmessageqt/networkstatus.ui
+++ b/src/bitmessageqt/networkstatus.ui
@@ -299,8 +299,5 @@
    <header>bitmessageqt.settingsmixin</header>
   </customwidget>
  </customwidgets>
- <resources>
-  <include location="bitmessage_icons.qrc"/>
- </resources>
  <connections/>
 </ui>
diff --git a/src/bitmessageqt/settings.ui b/src/bitmessageqt/settings.ui
index 1e9a6f09..7ce1e389 100644
--- a/src/bitmessageqt/settings.ui
+++ b/src/bitmessageqt/settings.ui
@@ -1086,9 +1086,6 @@
   <tabstop>checkBoxSocksListen</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>
- <resources>
-  <include location="bitmessage_icons.qrc"/>
- </resources>
  <connections>
   <connection>
    <sender>buttonBox</sender>

From 782010fc1927d18dfb6726f3fe01328fe2c543f9 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Tue, 20 Oct 2020 14:42:58 +0300
Subject: [PATCH 18/36] Changes for PyInstaller to build with qtpy and PyQt4

---
 packages/pyinstaller/bitmessagemain.spec       | 18 +++++++++++++-----
 .../hooks/pyinstaller_rthook_pyqt4.py          | 10 ++++++++++
 2 files changed, 23 insertions(+), 5 deletions(-)
 create mode 100644 packages/pyinstaller/hooks/pyinstaller_rthook_pyqt4.py

diff --git a/packages/pyinstaller/bitmessagemain.spec b/packages/pyinstaller/bitmessagemain.spec
index d7d4d70d..739d0424 100644
--- a/packages/pyinstaller/bitmessagemain.spec
+++ b/packages/pyinstaller/bitmessagemain.spec
@@ -37,8 +37,17 @@ a = Analysis(
         'setuptools.msvc', '_cffi_backend',
         'plugins.menu_qrcode', 'plugins.proxyconfig_stem'
     ],
-    runtime_hooks=[os.path.join(hookspath, 'pyinstaller_rthook_plugins.py')],
-    excludes=['bsddb', 'bz2', 'tcl', 'tk', 'Tkinter', 'tests']
+    # https://github.com/pyinstaller/pyinstaller/wiki/Recipe-PyQt4-API-Version
+    runtime_hooks=[
+        os.path.join(hookspath, hook) for hook in (
+            'pyinstaller_rthook_pyqt4.py',
+            'pyinstaller_rthook_plugins.py'
+        )],
+    excludes=[
+        'bsddb', 'bz2',
+        'PyQt4.QtOpenGL', 'PyQt4.QtOpenGL', 'PyQt4.QtSql',
+        'PyQt4.QtSvg', 'PyQt4.QtTest', 'PyQt4.QtWebKit', 'PyQt4.QtXml',
+        'tcl', 'tk', 'Tkinter', 'win32ui', 'tests']
 )
 
 
@@ -77,9 +86,8 @@ a.datas += addTranslations()
 
 
 excluded_binaries = [
-    'QtOpenGL4.dll',
-    'QtSvg4.dll',
-    'QtXml4.dll',
+    'QtOpenGL4.dll', 'QtSql4.dll', 'QtSvg4.dll', 'QtTest4.dll',
+    'QtWebKit4.dll', 'QtXml4.dll'
 ]
 a.binaries = TOC([x for x in a.binaries if x[0] not in excluded_binaries])
 
diff --git a/packages/pyinstaller/hooks/pyinstaller_rthook_pyqt4.py b/packages/pyinstaller/hooks/pyinstaller_rthook_pyqt4.py
new file mode 100644
index 00000000..b30fb1cc
--- /dev/null
+++ b/packages/pyinstaller/hooks/pyinstaller_rthook_pyqt4.py
@@ -0,0 +1,10 @@
+# https://github.com/pyinstaller/pyinstaller/wiki/Recipe-PyQt4-API-Version
+import sip
+
+sip.setapi(u'QDate', 2)
+sip.setapi(u'QDateTime', 2)
+sip.setapi(u'QString', 2)
+sip.setapi(u'QTextStream', 2)
+sip.setapi(u'QTime', 2)
+sip.setapi(u'QUrl', 2)
+sip.setapi(u'QVariant', 2)

From 4480d5d1dd044b8385996c5397058ba682dee4dc Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Tue, 20 Oct 2020 14:47:21 +0300
Subject: [PATCH 19/36] winbuild.sh script: additional packages

---
 buildscripts/winbuild.sh | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/buildscripts/winbuild.sh b/buildscripts/winbuild.sh
index 66a2f7aa..e809089a 100755
--- a/buildscripts/winbuild.sh
+++ b/buildscripts/winbuild.sh
@@ -72,6 +72,8 @@ function install_python(){
         wine python -m pip install pytools==2020.2
 	echo "Upgrading pip"
 	wine python -m pip install --upgrade pip
+	# install pypiwin32 for win32com
+	wine python -m pip install pypiwin32
 }
 
 function install_pyqt(){
@@ -82,6 +84,8 @@ function install_pyqt(){
 		echo "Installing PyQt-${PYQT_VERSION} 32b"
 		wine PyQt${PYQT_VERSION}-x32.exe /S /WX
 	fi
+	# and qtpy
+	wine python -m pip install qtpy
 }
 
 function install_openssl(){

From 229cf1ded90d07ba8438da535cc149a522608be5 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Fri, 19 Feb 2021 22:21:22 +0200
Subject: [PATCH 20/36] Fix tray icon changing upon notification

---
 src/bitmessageqt/__init__.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py
index a175402d..1f2266e6 100644
--- a/src/bitmessageqt/__init__.py
+++ b/src/bitmessageqt/__init__.py
@@ -1413,7 +1413,8 @@ class MyForm(settingsmixin.SMainWindow):
     def notifierInit(self):
         def _simple_notify(
                 title, subtitle, category, label=None, icon=None):
-            self.tray.showMessage(title, subtitle, 1, 2000)
+            self.tray.showMessage(
+                title, subtitle, self.tray.NoIcon, msecs=2000)
 
         self._notifier = _simple_notify
 

From d75d38852210eb2288c22e989e8d71612141c3c0 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Sat, 27 Feb 2021 22:26:19 +0200
Subject: [PATCH 21/36] Sorted imports in __init__ and removed import from
 debug

---
 src/bitmessageqt/__init__.py | 49 +++++++++++++++++++-----------------
 1 file changed, 26 insertions(+), 23 deletions(-)

diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py
index 1f2266e6..07862e10 100644
--- a/src/bitmessageqt/__init__.py
+++ b/src/bitmessageqt/__init__.py
@@ -4,6 +4,7 @@ PyQt based UI for bitmessage, the main module
 
 import hashlib
 import locale
+import logging
 import os
 import random
 import string
@@ -17,48 +18,50 @@ from sqlite3 import register_adapter
 
 from PyQt5 import QtCore, QtGui, QtWidgets, QtNetwork
 
+# This is needed for tray icon
+import bitmessage_icons_rc  # noqa:F401 pylint: disable=unused-import
+import dialogs
+import helper_addressbook
+import helper_search
+import helper_sent
+import l10n
+import namecoin
+import paths
+import queues
+import settingsmixin
 import shared
+import shutdown
+import sound
 import state
-from debug import logger
-from tr import _translate
+import support
+from account import (
+    getSortedAccounts, getSortedSubscriptions, accountClass, BMAccount,
+    GatewayAccount, MailchuckAccount, AccountColor)
 from addresses import decodeAddress, addBMIfNotPresent
 from bitmessageui import Ui_MainWindow
 from bmconfigparser import BMConfigParser
-import namecoin
-from messageview import MessageView
 from foldertree import (
     AccountMixin, Ui_FolderWidget, Ui_AddressWidget, Ui_SubscriptionWidget,
     MessageList_AddressWidget, MessageList_SubjectWidget,
     Ui_AddressBookWidgetItemLabel, Ui_AddressBookWidgetItemAddress,
     MessageList_TimeWidget)
-import settingsmixin
-import support
-from helper_sql import sqlQuery, sqlExecute, sqlExecuteChunked, sqlStoredProcedure
-import helper_addressbook
-import helper_search
-import l10n
-from utils import str_broadcast_subscribers, avatarize
-from account import (
-    getSortedAccounts, getSortedSubscriptions, accountClass, BMAccount,
-    GatewayAccount, MailchuckAccount, AccountColor)
-import dialogs
+from helper_sql import (
+    sqlQuery, sqlExecute, sqlExecuteChunked, sqlStoredProcedure)
+from messageview import MessageView
 from network.stats import pendingDownload, pendingUpload
-from uisignaler import UISignaler
-import paths
 from proofofwork import getPowType
-import queues
-import shutdown
 from statusbar import BMStatusBar
-import sound
-# This is needed for tray icon
-import bitmessage_icons_rc  # noqa:F401 pylint: disable=unused-import
-import helper_sent
+from tr import _translate
+from uisignaler import UISignaler
+from utils import str_broadcast_subscribers, avatarize
 
 try:
     from plugins.plugin import get_plugin, get_plugins
 except ImportError:
     get_plugins = False
 
+logger = logging.getLogger('default')
+
 
 # TODO: rewrite
 def powQueueSize():

From caec9434b058f37cd4f8db1d7a456d4bee753579 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Sat, 8 May 2021 20:34:34 +0300
Subject: [PATCH 22/36] Replace unicode() by .decode() in
 bitmessageqt.foldertree

---
 src/bitmessageqt/foldertree.py | 47 ++++++++++++----------------------
 1 file changed, 17 insertions(+), 30 deletions(-)

diff --git a/src/bitmessageqt/foldertree.py b/src/bitmessageqt/foldertree.py
index 208bc2cb..0b64dab4 100644
--- a/src/bitmessageqt/foldertree.py
+++ b/src/bitmessageqt/foldertree.py
@@ -121,14 +121,12 @@ class AccountMixin(object):
 
     def defaultLabel(self):
         """Default label (in case no label is set manually)"""
-        queryreturn = None
-        retval = None
+        queryreturn = retval = None
         if self.type in (
                 AccountMixin.NORMAL,
                 AccountMixin.CHAN, AccountMixin.MAILINGLIST):
             try:
-                retval = unicode(
-                    BMConfigParser().get(self.address, 'label'), 'utf-8')
+                retval = BMConfigParser().get(self.address, 'label')
             except Exception:
                 queryreturn = sqlQuery(
                     'SELECT label FROM addressbook WHERE address=?',
@@ -139,15 +137,12 @@ class AccountMixin(object):
                 'SELECT label FROM subscriptions WHERE address=?',
                 self.address
             )
-        if queryreturn is not None:
-            if queryreturn != []:
-                for row in queryreturn:
-                    retval, = row
-                    retval = unicode(retval, 'utf-8')
+        if queryreturn:
+            retval = queryreturn[-1][0]
         elif self.address is None or self.type == AccountMixin.ALL:
             return _translate("MainWindow", "All accounts")
 
-        return retval or unicode(self.address, 'utf-8')
+        return (retval or self.address).decode('utf-8')
 
 
 class BMTreeWidgetItem(QtWidgets.QTreeWidgetItem, AccountMixin):
@@ -241,13 +236,12 @@ class Ui_AddressWidget(BMTreeWidgetItem, SettingsMixin):
     def _getLabel(self):
         if self.address is None:
             return _translate("MainWindow", "All accounts")
-        else:
-            try:
-                return unicode(
-                    BMConfigParser().get(self.address, 'label'),
-                    'utf-8', 'ignore')
-            except:
-                return unicode(self.address, 'utf-8')
+
+        try:
+            return BMConfigParser().get(
+                self.address, 'label').decode('utf-8', 'ignore')
+        except:
+            return self.address.decode('utf-8')
 
     def _getAddressBracket(self, unreadCount=False):
         ret = "" if self.isExpanded() \
@@ -318,11 +312,9 @@ class Ui_SubscriptionWidget(Ui_AddressWidget):
         queryreturn = sqlQuery(
             'SELECT label FROM subscriptions WHERE address=?',
             self.address)
-        if queryreturn != []:
-            for row in queryreturn:
-                retval, = row
-            return unicode(retval, 'utf-8', 'ignore')
-        return unicode(self.address, 'utf-8')
+        if queryreturn:
+            return queryreturn[-1][0].decode('utf-8', 'ignore')
+        return self.address.decode('utf-8')
 
     def setType(self):
         """Set account type"""
@@ -412,9 +404,7 @@ class MessageList_AddressWidget(BMAddressWidget):
                 AccountMixin.NORMAL,
                 AccountMixin.CHAN, AccountMixin.MAILINGLIST):
             try:
-                newLabel = unicode(
-                    BMConfigParser().get(self.address, 'label'),
-                    'utf-8', 'ignore')
+                newLabel = BMConfigParser().get(self.address, 'label')
             except:
                 queryreturn = sqlQuery(
                     'SELECT label FROM addressbook WHERE address=?',
@@ -424,10 +414,9 @@ class MessageList_AddressWidget(BMAddressWidget):
                 'SELECT label FROM subscriptions WHERE address=?',
                 self.address)
         if queryreturn:
-            for row in queryreturn:
-                newLabel = unicode(row[0], 'utf-8', 'ignore')
+            newLabel = queryreturn[-1][0]
 
-        self.label = newLabel
+        self.label = newLabel.decode('utf-8', 'ignore')
 
     def data(self, role):
         """Return object data (QT UI)"""
@@ -536,8 +525,6 @@ class Ui_AddressBookWidgetItem(BMAddressWidget):
                 sqlExecute(
                     'UPDATE subscriptions SET label=? WHERE address=?',
                     self.label, self.address)
-            else:
-                pass
         return super(Ui_AddressBookWidgetItem, self).setData(role, value)
 
     def __lt__(self, other):

From 6fd07a079d79ce7f80da5cbbbb0caef21e1b6823 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Sat, 8 May 2021 20:50:16 +0300
Subject: [PATCH 23/36] bitmessageqt.account: replace unicode() by .decode()
 and format

---
 src/bitmessageqt/account.py | 60 ++++++++++++++++++-------------------
 1 file changed, 29 insertions(+), 31 deletions(-)

diff --git a/src/bitmessageqt/account.py b/src/bitmessageqt/account.py
index 31780e20..a1331334 100644
--- a/src/bitmessageqt/account.py
+++ b/src/bitmessageqt/account.py
@@ -23,8 +23,8 @@ def getSortedAccounts():
     configSections = BMConfigParser().addresses()
     configSections.sort(
         cmp=lambda x, y: cmp(
-            unicode(BMConfigParser().get(x, 'label'), 'utf-8').lower(),
-            unicode(BMConfigParser().get(y, 'label'), 'utf-8').lower())
+            BMConfigParser().get(x, 'label').decode('utf-8').lower(),
+            BMConfigParser().get(y, 'label').decode('utf-8').lower())
     )
     return configSections
 
@@ -38,22 +38,21 @@ def getSortedSubscriptions(count=False):
     :retuns: dict keys are addresses, values are dicts containing settings
     :rtype: dict, default {}
     """
-    queryreturn = sqlQuery('SELECT label, address, enabled FROM subscriptions ORDER BY label COLLATE NOCASE ASC')
+    queryreturn = sqlQuery(
+        'SELECT label, address, enabled FROM subscriptions'
+        ' ORDER BY label COLLATE NOCASE ASC')
     ret = {}
-    for row in queryreturn:
-        label, address, enabled = row
-        ret[address] = {}
-        ret[address]["inbox"] = {}
-        ret[address]["inbox"]['label'] = label
-        ret[address]["inbox"]['enabled'] = enabled
-        ret[address]["inbox"]['count'] = 0
+    for label, address, enabled in queryreturn:
+        ret[address] = {'inbox': {}}
+        ret[address]['inbox'].update(label=label, enabled=enabled, count=0)
     if count:
-        queryreturn = sqlQuery('''SELECT fromaddress, folder, count(msgid) as cnt
-            FROM inbox, subscriptions ON subscriptions.address = inbox.fromaddress
-            WHERE read = 0 AND toaddress = ?
-            GROUP BY inbox.fromaddress, folder''', str_broadcast_subscribers)
-        for row in queryreturn:
-            address, folder, cnt = row
+        queryreturn = sqlQuery(
+            'SELECT fromaddress, folder, count(msgid) AS cnt'
+            ' FROM inbox, subscriptions'
+            ' ON subscriptions.address = inbox.fromaddress WHERE read = 0'
+            ' AND toaddress = ? GROUP BY inbox.fromaddress, folder',
+            str_broadcast_subscribers)
+        for address, folder, cnt in queryreturn:
             if folder not in ret[address]:
                 ret[address][folder] = {
                     'label': ret[address]['inbox']['label'],
@@ -105,7 +104,9 @@ class AccountColor(AccountMixin):
             elif BMConfigParser().safeGetBoolean(self.address, 'chan'):
                 self.type = AccountMixin.CHAN
             elif sqlQuery(
-                    '''select label from subscriptions where address=?''', self.address):
+                'SELECT label FROM subscriptions WHERE address=?',
+                self.address
+            ):
                 self.type = AccountMixin.SUBSCRIPTION
             else:
                 self.type = AccountMixin.NORMAL
@@ -149,28 +150,25 @@ class BMAccount(NoAccount):
                 self.type = AccountMixin.MAILINGLIST
         elif self.address == str_broadcast_subscribers:
             self.type = AccountMixin.BROADCAST
-        else:
-            queryreturn = sqlQuery(
-                '''select label from subscriptions where address=?''', self.address)
-            if queryreturn:
-                self.type = AccountMixin.SUBSCRIPTION
+        elif sqlQuery(
+            'SELECT label FROM subscriptions WHERE address=?', self.address
+        ):
+            self.type = AccountMixin.SUBSCRIPTION
 
     def getLabel(self, address=None):
         """Get a label for this bitmessage account"""
         address = super(BMAccount, self).getLabel(address)
         label = BMConfigParser().safeGet(address, 'label', address)
         queryreturn = sqlQuery(
-            '''select label from addressbook where address=?''', address)
-        if queryreturn != []:
-            for row in queryreturn:
-                label, = row
+            'SELECT label FROM addressbook WHERE address=?', address)
+        if queryreturn:
+            label = queryreturn[-1][0]
         else:
             queryreturn = sqlQuery(
-                '''select label from subscriptions where address=?''', address)
-            if queryreturn != []:
-                for row in queryreturn:
-                    label, = row
-        return unicode(label, 'utf-8')
+                'SELECT label FROM subscriptions WHERE address=?', address)
+            if queryreturn:
+                label = queryreturn[-1][0]
+        return label.decode('utf-8')
 
 
 class SubscriptionAccount(BMAccount):

From e57a4fa7a980ac1da3b9f6da043a8ec758b65ae5 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Sat, 8 May 2021 21:30:45 +0300
Subject: [PATCH 24/36] bitmessageqt.__init__: removed or replaced unicode(),
 formatted a bit

---
 src/bitmessageqt/__init__.py | 110 ++++++++++++++++++-----------------
 1 file changed, 56 insertions(+), 54 deletions(-)

diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py
index 07862e10..5c6bebdc 100644
--- a/src/bitmessageqt/__init__.py
+++ b/src/bitmessageqt/__init__.py
@@ -525,9 +525,10 @@ class MyForm(settingsmixin.SMainWindow):
 
         # get number of (unread) messages
         total = 0
-        queryreturn = sqlQuery('SELECT toaddress, folder, count(msgid) as cnt FROM inbox WHERE read = 0 GROUP BY toaddress, folder')
-        for row in queryreturn:
-            toaddress, folder, cnt = row
+        queryreturn = sqlQuery(
+            'SELECT toaddress, folder, count(msgid) as cnt'
+            ' FROM inbox WHERE read = 0 GROUP BY toaddress, folder')
+        for toaddress, folder, cnt in queryreturn:
             total += cnt
             if toaddress in db and folder in db[toaddress]:
                 db[toaddress][folder] = cnt
@@ -1236,7 +1237,7 @@ class MyForm(settingsmixin.SMainWindow):
         for row in queryreturn:
             toAddress, fromAddress, subject, _, msgid, received, read = row
             self.addMessageListItemInbox(
-                tableWidget, toAddress, fromAddress, unicode(subject, 'utf-8'),
+                tableWidget, toAddress, fromAddress, subject.decode('utf-8'),
                 msgid, received, read)
 
         tableWidget.horizontalHeader().setSortIndicator(
@@ -1446,8 +1447,7 @@ class MyForm(settingsmixin.SMainWindow):
     def notifierShow(
             self, title, subtitle, category, label=None, icon=None):
         self.playSound(category, label)
-        self._notifier(
-            unicode(title), unicode(subtitle), category, label, icon)
+        self._notifier(title, subtitle, category, label, icon)
 
     # tree
     def treeWidgetKeyPressEvent(self, event):
@@ -1949,16 +1949,18 @@ class MyForm(settingsmixin.SMainWindow):
             oldRows[item.address] = [item.label, item.type, i]
 
         if self.ui.tableWidgetAddressBook.rowCount() == 0:
-            self.ui.tableWidgetAddressBook.horizontalHeader().setSortIndicator(0, QtCore.Qt.AscendingOrder)
+            self.ui.tableWidgetAddressBook.horizontalHeader(
+            ).setSortIndicator(0, QtCore.Qt.AscendingOrder)
         if self.ui.tableWidgetAddressBook.isSortingEnabled():
             self.ui.tableWidgetAddressBook.setSortingEnabled(False)
 
         newRows = {}
         # subscriptions
-        queryreturn = sqlQuery('SELECT label, address FROM subscriptions WHERE enabled = 1')
-        for row in queryreturn:
-            label, address = row
-            newRows[address] = [unicode(label, 'utf-8'), AccountMixin.SUBSCRIPTION]
+        queryreturn = sqlQuery(
+            'SELECT label, address FROM subscriptions WHERE enabled = 1')
+        for label, address in queryreturn:
+            newRows[address] = [
+                label.decode('utf-8'), AccountMixin.SUBSCRIPTION]
         # chans
         addresses = getSortedAccounts()
         for address in addresses:
@@ -1969,10 +1971,9 @@ class MyForm(settingsmixin.SMainWindow):
             ):
                 newRows[address] = [account.getLabel(), AccountMixin.CHAN]
         # normal accounts
-        queryreturn = sqlQuery('SELECT * FROM addressbook')
-        for row in queryreturn:
-            label, address = row
-            newRows[address] = [unicode(label, 'utf-8'), AccountMixin.NORMAL]
+        queryreturn = sqlQuery('SELECT label, address FROM addressbook')
+        for label, address in queryreturn:
+            newRows[address] = [label.decode('utf-8'), AccountMixin.NORMAL]
 
         completerList = []
         for address in sorted(
@@ -2117,14 +2118,13 @@ class MyForm(settingsmixin.SMainWindow):
                             ).format(email))
                             return
                     status, addressVersionNumber, streamNumber = \
-                      decodeAddress(toAddress)[:3]
+                        decodeAddress(toAddress)[:3]
                     if status != 'success':
                         try:
-                            toAddress_value = unicode(
-                                toAddress, 'utf-8', 'ignore')
-                        except:
+                            toAddress_value = toAddress.decode('utf-8')
+                        except UnicodeDecodeError:
                             logger.warning(
-                                "Failed unicode(toAddress ):", exc_info=True)
+                                "Failed decoding toAddress ):", exc_info=True)
                         logger.error(
                             'Error: Could not decode recipient address %s: %s',
                             toAddress_value, status)
@@ -2331,13 +2331,15 @@ class MyForm(settingsmixin.SMainWindow):
         for addressInKeysFile in getSortedAccounts():
             isEnabled = BMConfigParser().getboolean(
                 addressInKeysFile, 'enabled')  # I realize that this is poor programming practice but I don't care. It's easier for others to read.
-            isMaillinglist = BMConfigParser().safeGetBoolean(addressInKeysFile, 'mailinglist')
+            isMaillinglist = BMConfigParser().safeGetBoolean(
+                addressInKeysFile, 'mailinglist')
             if isEnabled and not isMaillinglist:
-                label = unicode(BMConfigParser().get(addressInKeysFile, 'label'), 'utf-8', 'ignore').strip()
-                if label == "":
-                    label = addressInKeysFile
-                self.ui.comboBoxSendFrom.addItem(avatarize(addressInKeysFile), label, addressInKeysFile)
-#        self.ui.comboBoxSendFrom.model().sort(1, Qt.AscendingOrder)
+                label = (
+                    BMConfigParser().get(addressInKeysFile, 'label').decode(
+                        'utf-8', 'ignore').strip() or addressInKeysFile)
+                self.ui.comboBoxSendFrom.addItem(
+                    avatarize(addressInKeysFile), label, addressInKeysFile)
+        # self.ui.comboBoxSendFrom.model().sort(1, QtCore.Qt.AscendingOrder)
         for i in range(self.ui.comboBoxSendFrom.count()):
             address = self.ui.comboBoxSendFrom.itemData(
                 i, QtCore.Qt.UserRole)
@@ -2345,7 +2347,7 @@ class MyForm(settingsmixin.SMainWindow):
                 i, AccountColor(address).accountColor(),
                 QtCore.Qt.ForegroundRole)
         self.ui.comboBoxSendFrom.insertItem(0, '', '')
-        if(self.ui.comboBoxSendFrom.count() == 2):
+        if self.ui.comboBoxSendFrom.count() == 2:
             self.ui.comboBoxSendFrom.setCurrentIndex(1)
         else:
             self.ui.comboBoxSendFrom.setCurrentIndex(0)
@@ -2357,10 +2359,11 @@ class MyForm(settingsmixin.SMainWindow):
                 addressInKeysFile, 'enabled')  # I realize that this is poor programming practice but I don't care. It's easier for others to read.
             isChan = BMConfigParser().safeGetBoolean(addressInKeysFile, 'chan')
             if isEnabled and not isChan:
-                label = unicode(BMConfigParser().get(addressInKeysFile, 'label'), 'utf-8', 'ignore').strip()
-                if label == "":
-                    label = addressInKeysFile
-                self.ui.comboBoxSendFromBroadcast.addItem(avatarize(addressInKeysFile), label, addressInKeysFile)
+                label = (
+                    BMConfigParser().get(addressInKeysFile, 'label').decode(
+                        'utf-8', 'ignore').strip() or addressInKeysFile)
+                self.ui.comboBoxSendFromBroadcast.addItem(
+                    avatarize(addressInKeysFile), label, addressInKeysFile)
         for i in range(self.ui.comboBoxSendFromBroadcast.count()):
             address = self.ui.comboBoxSendFromBroadcast.itemData(
                 i, QtCore.Qt.UserRole)
@@ -2880,33 +2883,32 @@ class MyForm(settingsmixin.SMainWindow):
         if not msgid:
             return
         queryreturn = sqlQuery(
-            '''select message from inbox where msgid=?''', msgid)
-        if queryreturn != []:
-            for row in queryreturn:
-                messageText, = row
+            'SELECT message FROM inbox WHERE msgid=?', msgid)
+        try:
+            lines = queryreturn[-1][0].split('\n')
+        except IndexError:
+            lines = ''
 
-        lines = messageText.split('\n')
         totalLines = len(lines)
-        for i in xrange(totalLines):
+        for i in range(totalLines):
             if 'Message ostensibly from ' in lines[i]:
                 lines[i] = (
                     '<p style="font-size: 12px; color: grey;">%s</span></p>' %
                     lines[i]
                 )
             elif (
-                lines[i] ==
-                '------------------------------------------------------'
+                lines[i]
+                == '------------------------------------------------------'
             ):
                 lines[i] = '<hr>'
             elif (
-                lines[i] == '' and (i + 1) < totalLines and
-                lines[i + 1] !=
-                '------------------------------------------------------'
+                lines[i] == '' and (i + 1) < totalLines and lines[i + 1]
+                != '------------------------------------------------------'
             ):
                 lines[i] = '<br><br>'
         content = ' '.join(lines)  # To keep the whitespace between lines
         content = shared.fixPotentiallyInvalidUTF8Data(content)
-        content = unicode(content, 'utf-8')
+        content = content.decode('utf-8')
         textEdit.setHtml(content)
 
     def on_action_InboxMarkUnread(self):
@@ -3090,7 +3092,7 @@ class MyForm(settingsmixin.SMainWindow):
         self.setSendFromComboBox(toAddressAtCurrentInboxRow)
 
         quotedText = self.quoted_text(
-            unicode(messageAtCurrentInboxRow, 'utf-8', 'replace'))
+            messageAtCurrentInboxRow.decode('utf-8', 'replace'))
         widget['message'].setPlainText(quotedText)
         if acct.subject[0:3] in ('Re:', 'RE:'):
             widget['subject'].setText(
@@ -3717,7 +3719,6 @@ class MyForm(settingsmixin.SMainWindow):
             text = tableWidget.item(currentRow, currentColumn).label
         else:
             text = tableWidget.item(currentRow, currentColumn).data(QtCore.Qt.UserRole)
-        # text = unicode(str(text), 'utf-8', 'ignore')
         clipboard = QtWidgets.QApplication.clipboard()
         clipboard.setText(text)
 
@@ -3833,10 +3834,10 @@ class MyForm(settingsmixin.SMainWindow):
         self.setAddressSound(widget.item(widget.currentRow(), 0).text())
 
     def setAddressSound(self, addr):
-        filters = [unicode(_translate(
+        filters = [_translate(
             "MainWindow", "Sound files (%s)" %
             ' '.join(['*%s%s' % (os.extsep, ext) for ext in sound.extensions])
-        ))]
+        )]
         sourcefile = QtWidgets.QFileDialog.getOpenFileName(
             self, _translate("MainWindow", "Set notification sound..."),
             filter=';;'.join(filters)
@@ -3846,7 +3847,7 @@ class MyForm(settingsmixin.SMainWindow):
             return
 
         destdir = os.path.join(state.appdata, 'sounds')
-        destfile = unicode(addr) + os.path.splitext(sourcefile)[-1]
+        destfile = addr.decode('utf-8') + os.path.splitext(sourcefile)[-1]
         destination = os.path.join(destdir, destfile)
 
         if sourcefile == destination:
@@ -4093,16 +4094,16 @@ class MyForm(settingsmixin.SMainWindow):
         folder = self.getCurrentFolder()
         if msgid:
             queryreturn = sqlQuery(
-                '''SELECT message FROM %s WHERE %s=?''' % (
+                'SELECT message FROM %s WHERE %s=?' % (
                     ('sent', 'ackdata') if folder == 'sent'
                     else ('inbox', 'msgid')
                 ), msgid
             )
 
         try:
-            message = unicode(queryreturn[-1][0], 'utf-8')
+            message = queryreturn[-1][0].decode('utf-8')
         except NameError:
-            message = u""
+            message = u''
         except IndexError:
             # _translate() often returns unicode, no redefinition here!
             # pylint: disable=redefined-variable-type
@@ -4118,7 +4119,7 @@ class MyForm(settingsmixin.SMainWindow):
                 self.updateUnreadStatus(tableWidget, currentRow, msgid)
             # propagate
             if folder != 'sent' and sqlExecute(
-                '''UPDATE inbox SET read=1 WHERE msgid=? AND read=0''',
+                'UPDATE inbox SET read=1 WHERE msgid=? AND read=0',
                 msgid
             ) > 0:
                 self.propagateUnreadCount()
@@ -4134,8 +4135,9 @@ class MyForm(settingsmixin.SMainWindow):
         self.rerenderMessagelistToLabels()
         completerList = self.ui.lineEditTo.completer().model().stringList()
         for i in range(len(completerList)):
-            if unicode(completerList[i]).endswith(" <" + item.address + ">"):
-                completerList[i] = item.label + " <" + item.address + ">"
+            address_block = " <" + item.address + ">"
+            if completerList[i].endswith(address_block):
+                completerList[i] = item.label + address_block
         self.ui.lineEditTo.completer().model().setStringList(completerList)
 
     def tabWidgetCurrentChanged(self, n):

From 5acee0cf41dc7318400b595daa6f2e484342c259 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Sat, 8 May 2021 22:16:53 +0300
Subject: [PATCH 25/36] Remove redundant unicode() in
 plugins.indicator_libmessaging

---
 src/plugins/indicator_libmessaging.py | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/plugins/indicator_libmessaging.py b/src/plugins/indicator_libmessaging.py
index b471d2ef..4cd583e3 100644
--- a/src/plugins/indicator_libmessaging.py
+++ b/src/plugins/indicator_libmessaging.py
@@ -23,9 +23,9 @@ class IndicatorLibmessaging(object):
             return
 
         self._menu = {
-            'send': unicode(_translate('MainWindow', 'Send')),
-            'messages': unicode(_translate('MainWindow', 'Messages')),
-            'subscriptions': unicode(_translate('MainWindow', 'Subscriptions'))
+            'send': _translate('MainWindow', 'Send'),
+            'messages': _translate('MainWindow', 'Messages'),
+            'subscriptions': _translate('MainWindow', 'Subscriptions')
         }
 
         self.new_message_item = self.new_broadcast_item = None
@@ -45,12 +45,11 @@ class IndicatorLibmessaging(object):
 
     def show_unread(self, draw_attention=False):
         """
-        show the number of unread messages and subscriptions
+        Show the number of unread messages and subscriptions
         on the messaging menu
         """
         for source, count in zip(
-                ('messages', 'subscriptions'),
-                self.form.getUnread()
+            ('messages', 'subscriptions'), self.form.getUnread()
         ):
             if count > 0:
                 if self.app.has_source(source):

From 2f8734d60b36a8d77bc54a2a23fea5350ba41e08 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Wed, 9 Jun 2021 20:21:50 +0300
Subject: [PATCH 26/36] Change depends in stdeb.cfg

---
 stdeb.cfg | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/stdeb.cfg b/stdeb.cfg
index 0d4cfbcb..f337a9fe 100644
--- a/stdeb.cfg
+++ b/stdeb.cfg
@@ -2,8 +2,8 @@
 Package: pybitmessage
 Section: net
 Build-Depends: dh-python, libssl-dev, python-all-dev, python-setuptools, python-six
-Depends: openssl, python-setuptools
-Recommends: apparmor, python-msgpack, python-qt4, python-stem, tor
+Depends: openssl, python-setuptools, python-six
+Recommends: apparmor, python-msgpack, python-pyqt5, python-stem, tor
 Suggests: python-pyopencl, python-jsonrpclib, python-defusedxml, python-qrcode
 Suite: bionic
 Setup-Env-Vars: DEB_BUILD_OPTIONS=nocheck

From 9a1424c189b82d6a8b1f7312d63c708def1768a1 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Thu, 7 Oct 2021 18:31:51 +0300
Subject: [PATCH 27/36] qtpy based fallback for PyQt5

---
 src/depends.py           | 18 +++++------
 src/fallback/__init__.py | 64 +++++++++++++++++++++++-----------------
 2 files changed, 46 insertions(+), 36 deletions(-)

diff --git a/src/depends.py b/src/depends.py
index f4a5157c..5774c1ac 100755
--- a/src/depends.py
+++ b/src/depends.py
@@ -384,25 +384,25 @@ def check_pyqt():
     """
     # pylint: disable=no-member
     try:
-        from fallback import qtpy
+        from fallback import PyQt5
     except ImportError:
         logger.error(
-            'PyBitmessage requires qtpy, PyQt 4.8 or later and Qt 4.7 or later.'
-        )
-        qtpy = None
+            'PyBitmessage requires PyQt5 or qtpy, PyQt 4.8 or later'
+            ' and Qt 4.7 or later.')
+        PyQt5 = None
 
-    if not qtpy:
+    if not PyQt5:
         return False
 
-    logger.info('PyQt Version: %s', qtpy.PYQT_VERSION)
-    logger.info('Qt Version: %s', qtpy.QT_VERSION)
+    logger.info('PyQt Version: %s', PyQt5.PYQT_VERSION)
+    logger.info('Qt Version: %s', PyQt5.QT_VERSION)
     passed = True
-    if version.LooseVersion(qtpy.PYQT_VERSION) < '4.8':
+    if version.LooseVersion(PyQt5.PYQT_VERSION) < '4.8':
         logger.error(
             'This version of PyQt is too old. PyBitmessage requries'
             ' PyQt 4.8 or later.')
         passed = False
-    if version.LooseVersion(qtpy.QT_VERSION) < '4.7':
+    if version.LooseVersion(PyQt5.QT_VERSION) < '4.7':
         logger.error(
             'This version of Qt is too old. PyBitmessage requries'
             ' Qt 4.7 or later.')
diff --git a/src/fallback/__init__.py b/src/fallback/__init__.py
index bd1f51b9..06998e2a 100644
--- a/src/fallback/__init__.py
+++ b/src/fallback/__init__.py
@@ -32,34 +32,44 @@ else:
         return hasher
 
 try:
-    import qtpy
+    import PyQt5
 except ImportError:
     try:
-        from PyQt5 import QtCore, QtGui, QtWidgets, QtNetwork, uic
+        import qtpy as PyQt5
     except ImportError:
-        qtpy = None
-    else:
-        import sys
-        import types
+        pass
+else:
+    from PyQt5 import QtCore
 
-        QtCore.Signal = QtCore.pyqtSignal
-        context = {
-            'API': 'pyqt5',  # for tr
-            'PYQT_VERSION': QtCore.PYQT_VERSION_STR,
-            'QT_VERSION': QtCore.QT_VERSION_STR,
-            'QtCore': QtCore,
-            'QtGui': QtGui,
-            'QtWidgets': QtWidgets,
-            'QtNetwork': QtNetwork,
-            'uic': uic
-        }
-        try:
-            from PyQt5 import QtTest
-        except ImportError:
-            pass
-        else:
-            context['QtTest'] = QtTest
-        qtpy = types.ModuleType(
-            'qtpy', 'PyQt5 based dynamic fallback for qtpy')
-        qtpy.__dict__.update(context)
-        sys.modules['qtpy'] = qtpy
+    QtCore.Signal = QtCore.pyqtSignal
+    PyQt5.PYQT_VERSION = QtCore.PYQT_VERSION_STR
+    PyQt5.QT_VERSION = QtCore.QT_VERSION_STR
+    # try:
+    #     from qtpy import QtCore, QtGui, QtWidgets, QtNetwork, uic
+    # except ImportError:
+    #     PyQt5 = None
+    # else:
+    #     import sys
+    #     import types
+
+    #     QtCore.Signal = QtCore.pyqtSignal
+    #     context = {
+    #         'API': 'pyqt5',  # for tr
+    #         'PYQT_VERSION': QtCore.PYQT_VERSION_STR,
+    #         'QT_VERSION': QtCore.QT_VERSION_STR,
+    #         'QtCore': QtCore,
+    #         'QtGui': QtGui,
+    #         'QtWidgets': QtWidgets,
+    #         'QtNetwork': QtNetwork,
+    #         'uic': uic
+    #     }
+    #     try:
+    #         from PyQt5 import QtTest
+    #     except ImportError:
+    #         pass
+    #     else:
+    #         context['QtTest'] = QtTest
+    #     PyQt5 = types.ModuleType(
+    #         'PyQt5', 'qtpy based dynamic fallback for PyQt5')
+    #     PyQt5.__dict__.update(context)
+    #     sys.modules['PyQt5'] = PyQt5

From ced7b4df30877ff80b652db0ccc989df4c94250b Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Fri, 19 Nov 2021 23:11:11 +0200
Subject: [PATCH 28/36] Fix UnicodeEncodeError in bitmessageqt.blacklist when
 deleting an entry

---
 src/bitmessageqt/blacklist.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/bitmessageqt/blacklist.py b/src/bitmessageqt/blacklist.py
index 1875e001..0a1a2a3a 100644
--- a/src/bitmessageqt/blacklist.py
+++ b/src/bitmessageqt/blacklist.py
@@ -197,11 +197,11 @@ class Blacklist(QtWidgets.QWidget, RetranslateMixin):
         if BMConfigParser().get('bitmessagesettings', 'blackwhitelist') == 'black':
             sqlExecute(
                 '''DELETE FROM blacklist WHERE label=? AND address=?''',
-                str(labelAtCurrentRow), str(addressAtCurrentRow))
+                labelAtCurrentRow, addressAtCurrentRow)
         else:
             sqlExecute(
                 '''DELETE FROM whitelist WHERE label=? AND address=?''',
-                str(labelAtCurrentRow), str(addressAtCurrentRow))
+                labelAtCurrentRow, addressAtCurrentRow)
         self.tableWidgetBlacklist.removeRow(currentRow)
 
     def on_action_BlacklistClipboard(self):

From 327a539a552f4f48a6627d1f6d7f229b0a5426e8 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Mon, 29 Nov 2021 16:30:33 +0200
Subject: [PATCH 29/36] Replace removed cmp parameter of list.sort() by key in
 getSortedAccounts()

---
 src/bitmessageqt/account.py | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/bitmessageqt/account.py b/src/bitmessageqt/account.py
index a1331334..852eb836 100644
--- a/src/bitmessageqt/account.py
+++ b/src/bitmessageqt/account.py
@@ -22,10 +22,8 @@ def getSortedAccounts():
     """Get a sorted list of address config sections"""
     configSections = BMConfigParser().addresses()
     configSections.sort(
-        cmp=lambda x, y: cmp(
-            BMConfigParser().get(x, 'label').decode('utf-8').lower(),
-            BMConfigParser().get(y, 'label').decode('utf-8').lower())
-    )
+        key=lambda item:
+        BMConfigParser().get(item, 'label').decode('utf-8').lower())
     return configSections
 
 

From a0496813fad5eb7c91f4b1ba9b3a115a83adb5f6 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Mon, 29 Nov 2021 17:41:39 +0200
Subject: [PATCH 30/36] Fix imports in bitmessageqt.tests

---
 src/bitmessageqt/tests/main.py | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/bitmessageqt/tests/main.py b/src/bitmessageqt/tests/main.py
index 9ffba909..9631878d 100644
--- a/src/bitmessageqt/tests/main.py
+++ b/src/bitmessageqt/tests/main.py
@@ -4,7 +4,8 @@ import Queue
 import sys
 import unittest
 
-from qtpy import QtCore, QtWidgets
+from PyQt5 import QtCore, QtWidgets
+from six import string_types
 
 import bitmessageqt
 import queues
@@ -39,10 +40,7 @@ class TestMain(unittest.TestCase):
 
     def test_translate(self):
         """Check the results of _translate() with various args"""
-        self.assertIsInstance(
-            _translate("MainWindow", "Test"),
-            unicode
-        )
+        self.assertIsInstance(_translate("MainWindow", "Test"), string_types)
 
 
 class TestUISignaler(TestBase):

From d9fb640b26415cf60f8b6e68e51cfd45dea4d510 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Wed, 15 Dec 2021 19:10:27 +0200
Subject: [PATCH 31/36] Add python-qtpy into appimage recipe to build with Qt4

---
 packages/AppImage/PyBitmessage.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/AppImage/PyBitmessage.yml b/packages/AppImage/PyBitmessage.yml
index 4f0c7e3d..33e8ff00 100644
--- a/packages/AppImage/PyBitmessage.yml
+++ b/packages/AppImage/PyBitmessage.yml
@@ -11,6 +11,7 @@ ingredients:
     - python-msgpack
     - python-qrcode
     - python-qt4
+    - python-qtpy
     - python-setuptools
     - python-sip
     - python-six

From 14347689578225d4913525f0c363f476e0ad3890 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Wed, 15 Dec 2021 19:26:21 +0200
Subject: [PATCH 32/36] Try to fix the issue with XKB in appimage by adding
 xkb-data package

---
 packages/AppImage/PyBitmessage.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/AppImage/PyBitmessage.yml b/packages/AppImage/PyBitmessage.yml
index 33e8ff00..1738da08 100644
--- a/packages/AppImage/PyBitmessage.yml
+++ b/packages/AppImage/PyBitmessage.yml
@@ -16,6 +16,7 @@ ingredients:
     - python-sip
     - python-six
     - sni-qt
+    - xkb-data
   exclude:
     - libmng2
     - libncursesw5

From 991055621630bd2f190927a79876dd9c8fa0bd43 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Wed, 15 Dec 2021 19:31:33 +0200
Subject: [PATCH 33/36] Add "Ubuntu 20" key to depends.PACKAGES['qtpy'] dict

---
 src/depends.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/depends.py b/src/depends.py
index 5774c1ac..2519b5bd 100755
--- a/src/depends.py
+++ b/src/depends.py
@@ -59,6 +59,7 @@ PACKAGES = {
         "Debian": "python-qtpy",
         "Ubuntu": "python-qtpy",
         "Ubuntu 12": "python-qtpy",
+        "Ubuntu 20": "python-qtpy",
         "openSUSE": "python-QtPy",
         "Fedora": "python2-QtPy",
         "Guix": "",

From 1368013a4e9ab87cc0b52fb4075e93e09ccb4766 Mon Sep 17 00:00:00 2001
From: Dmitri Bogomolov <4glitch@gmail.com>
Date: Wed, 15 Dec 2021 20:53:57 +0200
Subject: [PATCH 34/36] Remove rebasing artifact in depends

---
 src/depends.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/depends.py b/src/depends.py
index 2519b5bd..4cbd2ef7 100755
--- a/src/depends.py
+++ b/src/depends.py
@@ -168,7 +168,7 @@ def detectOSRelease():
                     pass
         if detectOS.result == "Ubuntu" and ver < 14:
             detectOS.result = "Ubuntu 12"
-        elif detectOS.result == "Ubuntu" and version >= 20:
+        elif detectOS.result == "Ubuntu" and ver >= 20:
             detectOS.result = "Ubuntu 20"
 
 

From 4cd0df72993261631e4fdf0f6d1353fd48780751 Mon Sep 17 00:00:00 2001
From: Kashiko Koibumi <kashiko@tuta.io>
Date: Wed, 22 May 2024 13:05:32 +0900
Subject: [PATCH 35/36] use qtpy directly instead of using fallback-PyQt5

---
 docs/conf.py                            |  3 +-
 src/bitmessageqt/__init__.py            |  4 +-
 src/bitmessageqt/address_dialogs.py     |  2 +-
 src/bitmessageqt/addressvalidator.py    |  2 +-
 src/bitmessageqt/bitmessage_icons_rc.py |  2 +-
 src/bitmessageqt/bitmessageui.py        |  2 +-
 src/bitmessageqt/blacklist.py           |  2 +-
 src/bitmessageqt/dialogs.py             |  2 +-
 src/bitmessageqt/foldertree.py          |  2 +-
 src/bitmessageqt/languagebox.py         |  2 +-
 src/bitmessageqt/messagecompose.py      |  2 +-
 src/bitmessageqt/messageview.py         |  2 +-
 src/bitmessageqt/migrationwizard.py     |  3 +-
 src/bitmessageqt/networkstatus.py       |  2 +-
 src/bitmessageqt/newchandialog.py       |  2 +-
 src/bitmessageqt/retranslateui.py       |  2 +-
 src/bitmessageqt/settings.py            |  2 +-
 src/bitmessageqt/settingsmixin.py       |  2 +-
 src/bitmessageqt/statusbar.py           |  2 +-
 src/bitmessageqt/tests/main.py          |  2 +-
 src/bitmessageqt/uisignaler.py          |  2 +-
 src/bitmessageqt/utils.py               |  2 +-
 src/bitmessageqt/widgets.py             |  2 +-
 src/depends.py                          | 55 +++++++++++++++----------
 src/fallback/__init__.py                | 43 -------------------
 src/qidenticon.py                       |  5 +--
 src/tests/test_identicon.py             |  2 +-
 src/tr.py                               | 20 +--------
 28 files changed, 62 insertions(+), 113 deletions(-)

diff --git a/docs/conf.py b/docs/conf.py
index b0cfef7b..bc0505cc 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -216,8 +216,7 @@ autodoc_mock_imports = [
     'pkg_resources',
     'pycanberra',
     'pyopencl',
-    'PyQt4',
-    'PyQt5',
+    'qtpy',
     'qrcode',
     'stem',
     'xdg',
diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py
index 43b958a2..4b3e63da 100644
--- a/src/bitmessageqt/__init__.py
+++ b/src/bitmessageqt/__init__.py
@@ -16,7 +16,7 @@ import time
 from datetime import datetime, timedelta
 from sqlite3 import register_adapter
 
-from PyQt5 import QtCore, QtGui, QtWidgets, QtNetwork
+from qtpy import QtCore, QtGui, QtWidgets, QtNetwork
 
 import dialogs
 import helper_addressbook
@@ -1442,7 +1442,7 @@ class MyForm(settingsmixin.SMainWindow):
         self._theme_player = get_plugin('notification.sound', 'theme')
 
         try:
-            from PyQt5 import QtMultimedia
+            from qtpy import QtMultimedia
             self._player = QtMultimedia.QSound.play
         except ImportError:
             _plugin = get_plugin(
diff --git a/src/bitmessageqt/address_dialogs.py b/src/bitmessageqt/address_dialogs.py
index 92b18ae7..903b588a 100644
--- a/src/bitmessageqt/address_dialogs.py
+++ b/src/bitmessageqt/address_dialogs.py
@@ -6,7 +6,7 @@ Dialogs that work with BM address.
 
 import hashlib
 
-from PyQt5 import QtGui, QtWidgets
+from qtpy import QtGui, QtWidgets
 
 import queues
 import widgets
diff --git a/src/bitmessageqt/addressvalidator.py b/src/bitmessageqt/addressvalidator.py
index ac1e70bc..600347c6 100644
--- a/src/bitmessageqt/addressvalidator.py
+++ b/src/bitmessageqt/addressvalidator.py
@@ -6,7 +6,7 @@ used in `.dialogs.NewChanDialog`.
 
 from Queue import Empty
 
-from PyQt5 import QtGui
+from qtpy import QtGui
 
 from addresses import decodeAddress, addBMIfNotPresent
 from bmconfigparser import config
diff --git a/src/bitmessageqt/bitmessage_icons_rc.py b/src/bitmessageqt/bitmessage_icons_rc.py
index 5d792c48..68404748 100644
--- a/src/bitmessageqt/bitmessage_icons_rc.py
+++ b/src/bitmessageqt/bitmessage_icons_rc.py
@@ -7,7 +7,7 @@
 #
 # WARNING! All changes made in this file will be lost!
 
-from PyQt5 import QtCore
+from qtpy import QtCore
 
 qt_resource_data = "\
 \x00\x00\x03\x66\
diff --git a/src/bitmessageqt/bitmessageui.py b/src/bitmessageqt/bitmessageui.py
index bd888309..7a034dfa 100644
--- a/src/bitmessageqt/bitmessageui.py
+++ b/src/bitmessageqt/bitmessageui.py
@@ -1,7 +1,7 @@
 # pylint: skip-file
 # flake8: noqa
 
-from PyQt5 import QtCore, QtGui, QtWidgets
+from qtpy import QtCore, QtGui, QtWidgets
 from tr import _translate
 from bmconfigparser import config
 from foldertree import AddressBookCompleter
diff --git a/src/bitmessageqt/blacklist.py b/src/bitmessageqt/blacklist.py
index 52a366ac..ae271866 100644
--- a/src/bitmessageqt/blacklist.py
+++ b/src/bitmessageqt/blacklist.py
@@ -1,4 +1,4 @@
-from PyQt5 import QtCore, QtGui, QtWidgets
+from qtpy import QtCore, QtGui, QtWidgets
 
 import widgets
 from addresses import addBMIfNotPresent
diff --git a/src/bitmessageqt/dialogs.py b/src/bitmessageqt/dialogs.py
index fc828fef..07224f00 100644
--- a/src/bitmessageqt/dialogs.py
+++ b/src/bitmessageqt/dialogs.py
@@ -3,7 +3,7 @@ All dialogs are available in this module.
 """
 # pylint: disable=too-few-public-methods
 
-from PyQt5 import QtWidgets
+from qtpy import QtWidgets
 
 import paths
 import widgets
diff --git a/src/bitmessageqt/foldertree.py b/src/bitmessageqt/foldertree.py
index 235aaf5c..57c2cd12 100644
--- a/src/bitmessageqt/foldertree.py
+++ b/src/bitmessageqt/foldertree.py
@@ -6,7 +6,7 @@ Folder tree and messagelist widgets definitions.
 
 from cgi import escape
 
-from PyQt5 import QtCore, QtGui, QtWidgets
+from qtpy import QtCore, QtGui, QtWidgets
 
 from bmconfigparser import config
 from helper_sql import sqlExecute, sqlQuery
diff --git a/src/bitmessageqt/languagebox.py b/src/bitmessageqt/languagebox.py
index 1fd69334..c4b61154 100644
--- a/src/bitmessageqt/languagebox.py
+++ b/src/bitmessageqt/languagebox.py
@@ -3,7 +3,7 @@
 import glob
 import os
 
-from PyQt5 import QtCore, QtWidgets
+from qtpy import QtCore, QtWidgets
 
 import paths
 from bmconfigparser import config
diff --git a/src/bitmessageqt/messagecompose.py b/src/bitmessageqt/messagecompose.py
index c520030b..68de5ce0 100644
--- a/src/bitmessageqt/messagecompose.py
+++ b/src/bitmessageqt/messagecompose.py
@@ -1,6 +1,6 @@
 """The MessageCompose class definition"""
 
-from PyQt5 import QtCore, QtWidgets
+from qtpy import QtCore, QtWidgets
 from tr import _translate
 
 
diff --git a/src/bitmessageqt/messageview.py b/src/bitmessageqt/messageview.py
index 364a92c2..ebf23c87 100644
--- a/src/bitmessageqt/messageview.py
+++ b/src/bitmessageqt/messageview.py
@@ -4,7 +4,7 @@ text rendering, HTML sanitization, lazy rendering (as you scroll down),
 zoom and URL click warning popup.
 """
 
-from PyQt5 import QtCore, QtGui, QtWidgets
+from qtpy import QtCore, QtGui, QtWidgets
 
 from safehtmlparser import SafeHTMLParser
 from tr import _translate
diff --git a/src/bitmessageqt/migrationwizard.py b/src/bitmessageqt/migrationwizard.py
index 2bc32849..239770d2 100644
--- a/src/bitmessageqt/migrationwizard.py
+++ b/src/bitmessageqt/migrationwizard.py
@@ -1,5 +1,4 @@
-#!/usr/bin/env python2.7
-from PyQt5 import QtCore, QtWidgets
+from qtpy import QtCore, QtWidgets
 
 class MigrationWizardIntroPage(QtWidgets.QWizardPage):
     def __init__(self):
diff --git a/src/bitmessageqt/networkstatus.py b/src/bitmessageqt/networkstatus.py
index 318d44ab..9c7e5a25 100644
--- a/src/bitmessageqt/networkstatus.py
+++ b/src/bitmessageqt/networkstatus.py
@@ -4,7 +4,7 @@ Network status tab widget definition.
 
 import time
 
-from PyQt5 import QtCore, QtGui, QtWidgets
+from qtpy import QtCore, QtGui, QtWidgets
 
 import l10n
 import network.stats
diff --git a/src/bitmessageqt/newchandialog.py b/src/bitmessageqt/newchandialog.py
index f4a89eea..2091a7ab 100644
--- a/src/bitmessageqt/newchandialog.py
+++ b/src/bitmessageqt/newchandialog.py
@@ -2,7 +2,7 @@
 NewChanDialog class definition
 """
 
-from PyQt5 import QtCore, QtWidgets
+from qtpy import QtCore, QtWidgets
 
 import widgets
 from addresses import addBMIfNotPresent
diff --git a/src/bitmessageqt/retranslateui.py b/src/bitmessageqt/retranslateui.py
index dd08e53c..706c3e81 100644
--- a/src/bitmessageqt/retranslateui.py
+++ b/src/bitmessageqt/retranslateui.py
@@ -1,4 +1,4 @@
-from PyQt5 import QtWidgets
+from qtpy import QtWidgets
 
 import widgets
 
diff --git a/src/bitmessageqt/settings.py b/src/bitmessageqt/settings.py
index 34c9c5d0..c784b2aa 100644
--- a/src/bitmessageqt/settings.py
+++ b/src/bitmessageqt/settings.py
@@ -7,7 +7,7 @@ import os
 import sys
 import tempfile
 
-from PyQt5 import QtCore, QtGui, QtWidgets
+from qtpy import QtCore, QtGui, QtWidgets
 import six
 
 import debug
diff --git a/src/bitmessageqt/settingsmixin.py b/src/bitmessageqt/settingsmixin.py
index a5b8db5c..9e53c6fb 100644
--- a/src/bitmessageqt/settingsmixin.py
+++ b/src/bitmessageqt/settingsmixin.py
@@ -4,7 +4,7 @@ src/settingsmixin.py
 
 """
 
-from PyQt5 import QtCore, QtWidgets
+from qtpy import QtCore, QtWidgets
 
 
 class SettingsMixin(object):
diff --git a/src/bitmessageqt/statusbar.py b/src/bitmessageqt/statusbar.py
index 006ba564..478d570c 100644
--- a/src/bitmessageqt/statusbar.py
+++ b/src/bitmessageqt/statusbar.py
@@ -2,7 +2,7 @@
 
 from time import time
 
-from PyQt5 import QtWidgets
+from qtpy import QtWidgets
 
 
 class BMStatusBar(QtWidgets.QStatusBar):
diff --git a/src/bitmessageqt/tests/main.py b/src/bitmessageqt/tests/main.py
index 9631878d..1d65f16e 100644
--- a/src/bitmessageqt/tests/main.py
+++ b/src/bitmessageqt/tests/main.py
@@ -4,7 +4,7 @@ import Queue
 import sys
 import unittest
 
-from PyQt5 import QtCore, QtWidgets
+from qtpy import QtCore, QtWidgets
 from six import string_types
 
 import bitmessageqt
diff --git a/src/bitmessageqt/uisignaler.py b/src/bitmessageqt/uisignaler.py
index 6b72344e..8f34aff0 100644
--- a/src/bitmessageqt/uisignaler.py
+++ b/src/bitmessageqt/uisignaler.py
@@ -1,6 +1,6 @@
 import sys
 
-from PyQt5 import QtCore
+from qtpy import QtCore
 
 import queues
 from network.node import Peer
diff --git a/src/bitmessageqt/utils.py b/src/bitmessageqt/utils.py
index cb5aedcb..cdeb0331 100644
--- a/src/bitmessageqt/utils.py
+++ b/src/bitmessageqt/utils.py
@@ -1,7 +1,7 @@
 import hashlib
 import os
 
-from PyQt5 import QtGui
+from qtpy import QtGui
 
 import state
 from addresses import addBMIfNotPresent
diff --git a/src/bitmessageqt/widgets.py b/src/bitmessageqt/widgets.py
index c4a91375..e3232fe6 100644
--- a/src/bitmessageqt/widgets.py
+++ b/src/bitmessageqt/widgets.py
@@ -1,4 +1,4 @@
-from PyQt5 import uic
+from qtpy import uic
 import os.path
 import paths
 
diff --git a/src/depends.py b/src/depends.py
index 1c42f441..6aeb32ef 100755
--- a/src/depends.py
+++ b/src/depends.py
@@ -69,8 +69,8 @@ PACKAGES = {
         "description":
         "You only need qtpy if you want to use the GUI."
         " When only running as a daemon, this can be skipped.\n"
-        "Also maybe you need to install PyQt5 if your package manager"
-        " not installs it as qtpy dependency"
+        "Also maybe you need to install PyQt5 or PyQt4"
+        " if your package manager not installs it as qtpy dependency"
     },
     "msgpack": {
         "OpenBSD": "py-msgpack",
@@ -381,34 +381,47 @@ def check_curses():
 def check_pyqt():
     """Do pyqt dependency check.
 
-    Here we are checking for PyQt4 with its version, as for it require
+    Here we are checking for qtpy with its version, as for it require
     PyQt 4.8 or later.
     """
     # pylint: disable=no-member
     try:
-        from fallback import PyQt5
+        import qtpy
     except ImportError:
         logger.error(
-            'PyBitmessage requires PyQt5 or qtpy, PyQt 4.8 or later'
-            ' and Qt 4.7 or later.')
-        PyQt5 = None
-
-    if not PyQt5:
+            'PyBitmessage requires qtpy, and PyQt5 or PyQt4, '
+            ' PyQt 4.8 or later and Qt 4.7 or later.')
         return False
 
-    logger.info('PyQt Version: %s', PyQt5.PYQT_VERSION)
-    logger.info('Qt Version: %s', PyQt5.QT_VERSION)
+    from qtpy import QtCore
+    try:
+        logger.info('PyQt Version: %s', QtCore.PYQT_VERSION_STR)
+    except AttributeError:
+        logger.info('Can be PySide..')
+    try:
+        logger.info('Qt Version: %s', QtCore.__version__)
+    except AttributeError:
+        # Can be PySide..
+        pass
     passed = True
-    if version.LooseVersion(PyQt5.PYQT_VERSION) < '4.8':
-        logger.error(
-            'This version of PyQt is too old. PyBitmessage requries'
-            ' PyQt 4.8 or later.')
-        passed = False
-    if version.LooseVersion(PyQt5.QT_VERSION) < '4.7':
-        logger.error(
-            'This version of Qt is too old. PyBitmessage requries'
-            ' Qt 4.7 or later.')
-        passed = False
+    try:
+        if version.LooseVersion(QtCore.PYQT_VERSION_STR) < '4.8':
+            logger.error(
+                'This version of PyQt is too old. PyBitmessage requries'
+                ' PyQt 4.8 or later.')
+            passed = False
+    except AttributeError:
+        # Can be PySide..
+        pass
+    try:
+        if version.LooseVersion(QtCore.__version__) < '4.7':
+            logger.error(
+                'This version of Qt is too old. PyBitmessage requries'
+                ' Qt 4.7 or later.')
+            passed = False
+    except AttributeError:
+        # Can be PySide..
+        pass
     return passed
 
 
diff --git a/src/fallback/__init__.py b/src/fallback/__init__.py
index a0b8b6b4..f65999a1 100644
--- a/src/fallback/__init__.py
+++ b/src/fallback/__init__.py
@@ -30,46 +30,3 @@ else:
         if data:
             hasher.update(data)
         return hasher
-
-try:
-    import PyQt5
-except ImportError:
-    try:
-        import qtpy as PyQt5
-    except ImportError:
-        pass
-else:
-    from PyQt5 import QtCore
-
-    QtCore.Signal = QtCore.pyqtSignal
-    PyQt5.PYQT_VERSION = QtCore.PYQT_VERSION_STR
-    PyQt5.QT_VERSION = QtCore.QT_VERSION_STR
-    # try:
-    #     from qtpy import QtCore, QtGui, QtWidgets, QtNetwork, uic
-    # except ImportError:
-    #     PyQt5 = None
-    # else:
-    #     import sys
-    #     import types
-
-    #     QtCore.Signal = QtCore.pyqtSignal
-    #     context = {
-    #         'API': 'pyqt5',  # for tr
-    #         'PYQT_VERSION': QtCore.PYQT_VERSION_STR,
-    #         'QT_VERSION': QtCore.QT_VERSION_STR,
-    #         'QtCore': QtCore,
-    #         'QtGui': QtGui,
-    #         'QtWidgets': QtWidgets,
-    #         'QtNetwork': QtNetwork,
-    #         'uic': uic
-    #     }
-    #     try:
-    #         from PyQt5 import QtTest
-    #     except ImportError:
-    #         pass
-    #     else:
-    #         context['QtTest'] = QtTest
-    #     PyQt5 = types.ModuleType(
-    #         'PyQt5', 'qtpy based dynamic fallback for PyQt5')
-    #     PyQt5.__dict__.update(context)
-    #     sys.modules['PyQt5'] = PyQt5
diff --git a/src/qidenticon.py b/src/qidenticon.py
index 049c0b2a..722c47ca 100644
--- a/src/qidenticon.py
+++ b/src/qidenticon.py
@@ -42,10 +42,7 @@ Returns an instance of :class:`QPixmap` which have generated identicon image.
 
 from six.moves import range
 
-try:
-    from PyQt5 import QtCore, QtGui
-except (ImportError, RuntimeError):
-    from PyQt4 import QtCore, QtGui
+from qtpy import QtCore, QtGui
 
 
 class IdenticonRendererBase(object):
diff --git a/src/tests/test_identicon.py b/src/tests/test_identicon.py
index 4c6be32d..35503d1c 100644
--- a/src/tests/test_identicon.py
+++ b/src/tests/test_identicon.py
@@ -4,7 +4,7 @@ import atexit
 import unittest
 
 try:
-    from PyQt5 import QtGui, QtWidgets
+    from qtpy import QtGui, QtWidgets
     from xvfbwrapper import Xvfb
     from pybitmessage import qidenticon
 except ImportError:
diff --git a/src/tr.py b/src/tr.py
index 765ba55c..45e8668c 100644
--- a/src/tr.py
+++ b/src/tr.py
@@ -15,26 +15,10 @@ def _tr_dummy(context, text, disambiguation=None, n=None):
 
 if state.enableGUI and not state.curses:
     try:
-        from fallback import PyQt5  # noqa:F401
-        from PyQt5 import QtWidgets, QtCore
+        from qtpy import QtWidgets, QtCore
     except ImportError:
         _translate = _tr_dummy
     else:
-        try:
-            from PyQt5 import API
-        except ImportError:
-            API = 'pyqt5'
-        if API == 'pyqt5':
-            _translate = QtWidgets.QApplication.translate
-        else:
-            def _translate(context, text, disambiguation=None, n=None):
-                return (
-                    QtWidgets.QApplication.translate(
-                        context, text, disambiguation)
-                    if n is None else
-                    QtWidgets.QApplication.translate(
-                        context, text, disambiguation,
-                        QtCore.QCoreApplication.CodecForTr, n)
-                )
+        _translate = QtWidgets.QApplication.translate
 else:
     _translate = _tr_dummy

From d04d620c68bd80512174fc1c399f78fb7549c41c Mon Sep 17 00:00:00 2001
From: Kashiko Koibumi <kashiko@tuta.io>
Date: Mon, 27 May 2024 01:52:39 +0900
Subject: [PATCH 36/36] update translation files for using format() instead of
 arg()

---
 src/translations/bitmessage_ar.qm        | Bin 39410 -> 38947 bytes
 src/translations/bitmessage_ar.ts        | 146 ++++++-------
 src/translations/bitmessage_cs.qm        | Bin 55998 -> 55524 bytes
 src/translations/bitmessage_cs.ts        | 152 ++++++-------
 src/translations/bitmessage_da.qm        | Bin 51755 -> 51240 bytes
 src/translations/bitmessage_da.ts        | 146 ++++++-------
 src/translations/bitmessage_de.qm        | Bin 97474 -> 97681 bytes
 src/translations/bitmessage_de.ts        | 266 +++++++++++------------
 src/translations/bitmessage_en.qm        | Bin 81265 -> 80955 bytes
 src/translations/bitmessage_en.ts        | 208 +++++++++---------
 src/translations/bitmessage_en_pirate.qm | Bin 17497 -> 16990 bytes
 src/translations/bitmessage_en_pirate.ts | 104 ++++-----
 src/translations/bitmessage_eo.qm        | Bin 87362 -> 87560 bytes
 src/translations/bitmessage_eo.ts        | 256 +++++++++++-----------
 src/translations/bitmessage_fr.qm        | Bin 92731 -> 92929 bytes
 src/translations/bitmessage_fr.ts        | 256 +++++++++++-----------
 src/translations/bitmessage_it.qm        | Bin 20451 -> 19879 bytes
 src/translations/bitmessage_it.ts        | 110 +++++-----
 src/translations/bitmessage_ja.qm        | Bin 66472 -> 66668 bytes
 src/translations/bitmessage_ja.ts        | 254 +++++++++++-----------
 src/translations/bitmessage_nb.ts        |  76 +++----
 src/translations/bitmessage_nl.qm        | Bin 12417 -> 11909 bytes
 src/translations/bitmessage_nl.ts        | 112 +++++-----
 src/translations/bitmessage_no.qm        | Bin 59534 -> 59029 bytes
 src/translations/bitmessage_no.ts        | 158 +++++++-------
 src/translations/bitmessage_pl.qm        | Bin 91161 -> 91359 bytes
 src/translations/bitmessage_pl.ts        | 256 +++++++++++-----------
 src/translations/bitmessage_pt.qm        | Bin 5172 -> 4715 bytes
 src/translations/bitmessage_pt.ts        | 106 ++++-----
 src/translations/bitmessage_ru.qm        | Bin 86534 -> 86735 bytes
 src/translations/bitmessage_ru.ts        | 256 +++++++++++-----------
 src/translations/bitmessage_sk.qm        | Bin 90043 -> 90252 bytes
 src/translations/bitmessage_sk.ts        | 266 +++++++++++------------
 src/translations/bitmessage_sv.ts        | 104 ++++-----
 src/translations/bitmessage_zh_cn.ts     | 248 ++++++++++-----------
 src/translations/noarg.sh                |   7 +
 src/translations/update.sh               |   2 +
 37 files changed, 1749 insertions(+), 1740 deletions(-)
 create mode 100755 src/translations/noarg.sh
 create mode 100755 src/translations/update.sh

diff --git a/src/translations/bitmessage_ar.qm b/src/translations/bitmessage_ar.qm
index 892f61604c7d0314c27d1fad99d42ddc84a73641..6f2795451a825180ddc1bf77e6c00a0394580a1c 100644
GIT binary patch
delta 2894
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
SG&6KE*2z?z0|i~Dzy9CR)he9;

delta 3270
zcma)82~<;A60Mi~|Fb86lDI-xg32nOB8cn=BH#|FC`8C%HBk~;5Fv;gF5RNfU50kl
zv0c$N$8J|_mmVGMX2czB9ktc*IO^CfF6~j7N@9C(M*GY^2kO69^{Q^&s(L>gck_O=
z@alS){Q#Jy0Ip8}*j)gF&HyC(;``qK#+(H38UZlD8~1+&$d3b9k_XIL4S@O?Fs%~-
z+*x2A_C;B3m)VWLE@l9H&H-DG_WrMd-LVN^_Rqj=<>UD!AV`Zx`4SxCp8}XiZvl_<
zZvk8`fKRt(fDkDJEo}e@e*qzvW&@;`L&C}v0C2)CGb15o1%h?=g_M<IlxZ-$a0Wn`
z3PzP3Lc4i(nXv)V78YUvF{Bru-aH2~_C^4RJt31@2v8djQ{RZe3`JL<e1ktgw|_y!
zW;1{=9%ky-0?halR+qT|Oy=P9kx2lmBDmfi9Zs19&%b{RFmNgnt#1Qx^dqj_Fk{bh
z(p%~QFe-=yWj_GOT0r_$p`V&m66V;5Ow1$EnIV{98%e!{_70UKd)x*LIN>VMhhoM7
z%gBO>2qZ~KmO3{B43Lp^I}!Q(N95opq%NQjd36&L?4L*4d9eVbg2$~ufWg~&em9Zg
zUMk*{T0MYN#jCuJfV;-<KA-v+Ao3}1b0+Sqi+Gz2jR2i)@_xiJfuD?bxzc<bpz1j9
z9%BT^xXXLAQiZj5=Svr}NYN?2tYr_bOZbYp=K;oz;H&E+03xdSeb0XlAi2mNV5kBp
zjph$dRRb)Tz>m&q1&ANVZ<sU}duIm!fD}ttHJ5*S6|OyQ^P2@a0FlTpCvM@lnjbF*
z;4AqL(h*@_9sh9|I*i@Uf4OfYK%ZHRA`5F(sbmI!8wXHvh>1<z3NUgbllUW2uXbj1
zyZo`4nwTO9W|Y~)On-ySB!9(}ZED8SSeWfg2!K;1v%~i<C>xnwv(o{JcQcmy&e&r!
z8S~MHeE?=UGAGJ4NX^&GC8uMk=)sa}=vd~-hCEq~wLQ*;p2nuji(<p_u@phK*qF9d
z0Qnwv*v$)A%M^A})m}_M#pb3XlfH4Rp}~RyTiMywnDMNx?CMaAlPqG_K1F?rl3iDe
ze*Ig_Y~unJYj&1BkcR;Scd*Tiu*qgtuxHoz!_kajucV`%f0TXB#~OPqV_(EMViP>%
zvP&8Ow0>OPTV$;G4p&--y)rA6t53QM@I^Vd>8HN~^ghdNQ#YZ0B4_!c6TsNZ+_%;e
zWX|9&Y;(e?Fn`BgPs6}f0|ZWW*o?hK3kD@1)zZ0wl-6cMI82aMSBYcD7w7^DumoKN
z6|Qms&1}KE<gVD=-w2i-z%~0+uzm5*2yBF1@^0H@MxNkUe*`*DFZgGwm8p}07a9bV
zG)p*;`vn11-x7|F7z<F{T{y03Ic8cStk9(b2y%rBH;zZj-U^p`W6g*83->tT!MwY|
zLkA=9f+-W8-h$2L+af$;cEM>lDZIJ{WzP-5=QYzX(^}!{>nNRdqV8WkL;p1*uQM3X
zQz;6`%)xtOm&llU0_We&MYQ%}f2`?F(faUqfQg=Bui1!n(qpmiVKO$~OL2Z~1Hc@m
zxbP<0jn>-bw4vge0})6h6*oq_!c3yX`z3AYCq}%#{wa=SrTBO?_CWAp@uO8$0H0+_
zNJ=A)?>UL6981t?mPE{NLCU?260f!<to2n%@57S-IvXXaN!azHR@miKlVoH&GElir
zQg`Gk2KY>}_B?j^v^A1?Q9opWNKRE_X`;tSPTj@;1LjIDuR#V)jHI>vF<!lilB<a;
z(Enn|L#JMt*jC9yHTGEPLTTSLGX@M4Nuzu*voQ|RjLISaUcNN<Sr*Re5NXlQ7)0Jf
zx;(NQ&bPC4`Q#)l@m1*_E9IfLr27m=Wm>lMAi=H<xM!EMR!I+cMgYa#q-P6Jj(Z?&
zQ6Lbn1JY|1=kZ=CmA)9$fH$sG`oer36+NP4!h3tMDK5+8LvY<?ugq%=I`l}E`O$57
zL#D{GwyZ(Kf0Y$Iufh-1OWBOrB}ieg?9yp}ypWE_?kt&%%<yEt<ws!&@5|vk^fTq8
z+}nDSx<8XAK3@o6+#??W$Y9YN`I3L*e%Ld)dHsZec+t4Zf2a=y$i6Ob4#2L)$+k(J
zi(O_o+2zD6d24D7GF4)iB~*Sh7a3H#D}wZ;_|3>r^go5nl%*(!eS<(XD#h?k5daBq
z6ytX{0pxU3>~n1ZaGRhw=8OPCJIfTWKA(eg`vVrR&W}dxBIp&t9x{Y362{6j5Gb^Q
z;qcF!UKjS}X#(jl^3L>#NN({K9Tt#kdfy?1k9IW7F_c77lcOivSk^h-ApV`XUR)g4
zoAUuR7tJMs8anz@#FQAcxj9;+No~-p?S3syon(Zx(QIWe25o`5sd~_@%5V%2L?0-p
zlM34Gtg?c*@9f9Z1kwGfgg-K`{oQ<~Dh$mn`&C&inM}L(%<9w;N_c!piJ>Hn-U{zT
z*Y|XLmn7LiZw!oKte~lzi-A<pr7kuC4!Pua)VYKzX^2aW^^{OuAd2Grxe(3+!swT-
z-RTN-7lkzw|Mxul(<Zf#)wo6BO!Da=kM1`5e)1TtjJ4xXkIC1mwYj+^I-}7_%n;8Q
zQbree#@Y;9JO?QgKW=D_bfa+^FAH%SOUNOb?jB$}vB;g0`P9|J#Tqrrqry_CF>%C~
z{==t_rXvkqQZS%4Pp3BO^d^7xX#B6%nyd(p26wR}`d;FZJJdBmV{<w*;CnKID*9Th
zVd>M?i;x;RBGCLn%Z#Kq0*70JV#|<)G(Kql2kK0EEol5ZwIw+?SV&&e>Olu>?xVsJ
z$e(F#xZdjixA0e1ylt@_y{%kY`zYu=pUz|TMS8<@z1nEfno5mfh*yoBfgvs9;$nHk
zME^7-*yi)%kOUG<>k4cQw57n8UQ#$vV?s7LN25}FXnR7U&20D3O!0f~Q)y#TG=nb1
z%Tgjq;eQ#vA<Z51J{H$uPm;|6c!4>=D(l?*&x5}Oz~=h{jpO?j{`l$e^t8QeI_&%(
zuVx7Pgw>!=>|3|-R(=1BegB4c@JFBAkM7zx@q_Y5PvNJPGQDnkY`#_>SD-C6<T<43
zrbpX{z`g+z?PNo#$-WTh>x!qo+m{=4CR2ev&uCkdJgO+~?&yGLKR8Yua$IO&wkp}F
zAjhCjC^lfPmz2MAA(~vQ%_%A_Fq*_E+5&xgfj-wT9b{;z*X6tmS&PUO1lkE{C%kq~
JzPR06@*jZVK*|6B

diff --git a/src/translations/bitmessage_ar.ts b/src/translations/bitmessage_ar.ts
index 6bf906d7..4b3ba9c1 100644
--- a/src/translations/bitmessage_ar.ts
+++ b/src/translations/bitmessage_ar.ts
@@ -241,8 +241,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="594"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>واحد من العناوين، %1، حاصل على رقم إصدار 1، العناوين ذات رقم الإصدار 1 غير مدعومه حالياً، هل باستطاعتنا حذفه الآن؟</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>واحد من العناوين، {0}، حاصل على رقم إصدار 1، العناوين ذات رقم الإصدار 1 غير مدعومه حالياً، هل باستطاعتنا حذفه الآن؟</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="987"/>
@@ -261,13 +261,13 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="996"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="999"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>تم إرسال الرسالة في %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>تم إرسال الرسالة في {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -276,8 +276,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1005"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>تم استلام إشعار الاستلام للرسالة %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>تم استلام إشعار الاستلام للرسالة {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2131"/>
@@ -286,18 +286,18 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1011"/>
-        <source>Broadcast on %1</source>
-        <translation>البث في %1</translation>
+        <source>Broadcast on {0}</source>
+        <translation>البث في {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1014"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>مشكلة: العمل المطلوب من قبل المستلم أصعب من ما كنت مستعد للقيام به %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>مشكلة: العمل المطلوب من قبل المستلم أصعب من ما كنت مستعد للقيام به {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1017"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>مشكلة: مفتاح تشفير المرسل إليه غير جيد، لا يمكن تشفير الرسالة. %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>مشكلة: مفتاح تشفير المرسل إليه غير جيد، لا يمكن تشفير الرسالة. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1020"/>
@@ -306,8 +306,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1023"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>حالة غير معروفه: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>حالة غير معروفه: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1689"/>
@@ -347,10 +347,10 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1523"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation>يمكنك إدارة مفاتيحك بواسطة تعديل ملف keys.dat المحفوظ في
-%1 
+{0} 
 مهم جداً أن تحتفظ بنسخة إضافية من هذا الملف.</translation>
     </message>
     <message>
@@ -366,10 +366,10 @@ It is important that you back up this file.</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1530"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation>يمكنك إدارة مفاتيحك بواسطة تعديل ملف keys.dat المحفوظ في
-%1 
+{0} 
 مهم جداً أن تحتفظ بنسخة إضافية من هذا الملف. هل ترغب بفتح الملف الآن؟ تأكد من إغلاق البرنامج Bitmessage قبل تعديل الملف.</translation>
     </message>
     <message>
@@ -434,8 +434,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1595"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
-        <translation>تم تكوين زمرة بنجاح، لإتاحة الفرصة للأخرين بالإنضمام لمجموعتك أعطهم إسم الزمرة و هذا العنوان %1، هذا العنوان سيظهر ضمن هوياتك.</translation>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
+        <translation>تم تكوين زمرة بنجاح، لإتاحة الفرصة للأخرين بالإنضمام لمجموعتك أعطهم إسم الزمرة و هذا العنوان {0}، هذا العنوان سيظهر ضمن هوياتك.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1604"/>
@@ -502,53 +502,53 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1959"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1991"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2000"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
-        <translation>خطأ: عناوين ال Bitmessage تبدأ ب BM-، يرجى فحص %1</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
+        <translation>خطأ: عناوين ال Bitmessage تبدأ ب BM-، يرجى فحص {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2003"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>خطأ: لم يتم إدخال أو نسخ العنوان %1 بطريقة صحيحة، يرجى فحصه.</translation>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>خطأ: لم يتم إدخال أو نسخ العنوان {0} بطريقة صحيحة، يرجى فحصه.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2006"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
-        <translation>خطأ: العنوان %1 يحتوي على حروف غير صالحة، يرجى فحصه.</translation>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
+        <translation>خطأ: العنوان {0} يحتوي على حروف غير صالحة، يرجى فحصه.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2009"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
-        <translation>خطأ: رقم إصدار العنوان %1 عالي جداً، إما أن تقوم بتحديث برنامج Bitmessage أو أن شريكك ذكي جدأ.</translation>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <translation>خطأ: رقم إصدار العنوان {0} عالي جداً، إما أن تقوم بتحديث برنامج Bitmessage أو أن شريكك ذكي جدأ.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2012"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
-        <translation>بعض البيانات المشفرة ضمن العنوان %1 قصيرة جداً. يمكن أن يكون هناك خطأ في برنامج شريكك.</translation>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
+        <translation>بعض البيانات المشفرة ضمن العنوان {0} قصيرة جداً. يمكن أن يكون هناك خطأ في برنامج شريكك.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2015"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
-        <translation>بعض البيانات المشفرة ضمن العنوان %1 طويلة جداً. يمكن أن يكون هناك خطأ في برنامج شريكك.</translation>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
+        <translation>بعض البيانات المشفرة ضمن العنوان {0} طويلة جداً. يمكن أن يكون هناك خطأ في برنامج شريكك.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2018"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2021"/>
-        <source>Error: Something is wrong with the address %1.</source>
-        <translation>خطأ: هناك خطأ في هذا العنوان %1.</translation>
+        <source>Error: Something is wrong with the address {0}.</source>
+        <translation>خطأ: هناك خطأ في هذا العنوان {0}.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2089"/>
@@ -562,8 +562,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>بالنظر إلى العنوان %1, Bitmessage لم يستطع فهم رقم إصدار العنوان %2، ربما يجب عليك تحديث برنامج Bitmessage لإصداره الأخير.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>بالنظر إلى العنوان {0}, Bitmessage لم يستطع فهم رقم إصدار العنوان {1}، ربما يجب عليك تحديث برنامج Bitmessage لإصداره الأخير.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
@@ -572,8 +572,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>بالنظر إلى العنوان %1, Bitmessage لم يستطع فهم رقم إصدار العنوان %2، ربما يجب عليك تحديث برنامج Bitmessage لإصداره الأخير.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>بالنظر إلى العنوان {0}, Bitmessage لم يستطع فهم رقم إصدار العنوان {1}، ربما يجب عليك تحديث برنامج Bitmessage لإصداره الأخير.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2039"/>
@@ -707,8 +707,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2951"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>لم يستطع Bitmessage العثور على عنوانك %1, ربما قمت بحذف العنوان؟</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>لم يستطع Bitmessage العثور على عنوانك {0}, ربما قمت بحذف العنوان؟</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2954"/>
@@ -861,8 +861,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4361"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>أنت تستخدم نقطة عبور TCP %1 - يمكنك تغييره في قائمة الضبط.</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>أنت تستخدم نقطة عبور TCP {0} - يمكنك تغييره في قائمة الضبط.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/bitmessageui.py" line="648"/>
@@ -1056,7 +1056,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="44"/>
-        <source>Zoom level %1%</source>
+        <source>Zoom level {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1071,47 +1071,47 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4321"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1848"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2737"/>
-        <source>Waiting for PoW to finish... %1%</source>
+        <source>Waiting for PoW to finish... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2741"/>
-        <source>Shutting down Pybitmessage... %1%</source>
+        <source>Shutting down Pybitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2763"/>
-        <source>Waiting for objects to be sent... %1%</source>
+        <source>Waiting for objects to be sent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2773"/>
-        <source>Saving settings... %1%</source>
+        <source>Saving settings... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2782"/>
-        <source>Shutting down core... %1%</source>
+        <source>Shutting down core... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2785"/>
-        <source>Stopping notifications... %1%</source>
+        <source>Stopping notifications... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2791"/>
-        <source>Shutdown imminent... %1%</source>
+        <source>Shutdown imminent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
@@ -1140,7 +1140,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2718"/>
-        <source>Shutting down PyBitmessage... %1%</source>
+        <source>Shutting down PyBitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1160,12 +1160,12 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="165"/>
-        <source>Generating %1 new addresses.</source>
+        <source>Generating {0} new addresses.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="242"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1175,7 +1175,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1200,7 +1200,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="487"/>
-        <source>Broadcast sent on %1</source>
+        <source>Broadcast sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1220,7 +1220,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="647"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1232,17 +1232,17 @@ There is no required difficulty for version 2 addresses like this.</source>
     <message>
         <location filename="../class_singleWorker.py" line="675"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="684"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="696"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1252,7 +1252,7 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="819"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1267,12 +1267,12 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="942"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../upnp.py" line="220"/>
-        <source>UPnP port mapping established on port %1</source>
+        <source>UPnP port mapping established on port {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1635,27 +1635,27 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="137"/>
-        <source>Since startup on %1</source>
+        <source>Since startup on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="71"/>
-        <source>Down: %1/s  Total: %2</source>
+        <source>Down: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="73"/>
-        <source>Up: %1/s  Total: %2</source>
+        <source>Up: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="120"/>
-        <source>Total Connections: %1</source>
+        <source>Total Connections: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="129"/>
-        <source>Inventory lookups per second: %1</source>
+        <source>Inventory lookups per second: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff --git a/src/translations/bitmessage_cs.qm b/src/translations/bitmessage_cs.qm
index c25ccafac3de70f43735d13ce56b870a4f452c24..8fde0714829146363a484a3e9d35ed0f36890845 100644
GIT binary patch
delta 3298
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

delta 3776
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
ViY^-sbDo;9hFlOc_CzEQ{Tp_@@;(3n

diff --git a/src/translations/bitmessage_cs.ts b/src/translations/bitmessage_cs.ts
index 11ab163a..adcfd3d4 100644
--- a/src/translations/bitmessage_cs.ts
+++ b/src/translations/bitmessage_cs.ts
@@ -241,8 +241,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="594"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>Jedna z Vašich adres, %1, je stará adresa verze 1. Adresy verze 1 již nejsou podporovány. Můžeme ji nyní smazat?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>Jedna z Vašich adres, {0}, je stará adresa verze 1. Adresy verze 1 již nejsou podporovány. Můžeme ji nyní smazat?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="987"/>
@@ -261,13 +261,13 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="996"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>Zpráva odeslána. Čekám na potvrzení. Odesláno v %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>Zpráva odeslána. Čekám na potvrzení. Odesláno v {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="999"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>Zpráva odeslána. Odesláno v %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>Zpráva odeslána. Odesláno v {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -276,8 +276,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1005"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>Potvrzení o přijetí zprávy %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>Potvrzení o přijetí zprávy {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2131"/>
@@ -286,18 +286,18 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1011"/>
-        <source>Broadcast on %1</source>
-        <translation>Rozesláno v %1</translation>
+        <source>Broadcast on {0}</source>
+        <translation>Rozesláno v {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1014"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>Problém: Obtížnost práce požadovaná adresátem je vyšší než Vámi povolené maximum. %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>Problém: Obtížnost práce požadovaná adresátem je vyšší než Vámi povolené maximum. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1017"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>Problém: Šifrovací klíč adresáta je nepoužitelný. Zprávu nelze zašifrovat. %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>Problém: Šifrovací klíč adresáta je nepoužitelný. Zprávu nelze zašifrovat. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1020"/>
@@ -306,8 +306,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1023"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>Neznámý stav: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>Neznámý stav: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1689"/>
@@ -347,10 +347,10 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1523"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation>Své klíče můžete spravovat editováním souboru keys.dat, který najdete zde:
- %1 
+ {0} 
 Je důležité si tento soubor zazálohovat.</translation>
     </message>
     <message>
@@ -366,10 +366,10 @@ Je důležité si tento soubor zazálohovat.</translation>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1530"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation>Své klíče můžete spravovat editováním souboru keys.dat, který najdete zde:
- %1 
+ {0} 
 Je důležité si tento soubor zazálohovat. Přejete si tento soubor nyní otevřít? (Nezapomeňte zavřít Bitmessage předtím, než provedete jakékoli změny.)</translation>
     </message>
     <message>
@@ -434,8 +434,8 @@ Je důležité si tento soubor zazálohovat. Přejete si tento soubor nyní otev
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1595"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
-        <translation>Kanál byl úspěšně vytvořen. Když chcete jiným lidem povolit připojit se k Vašemu kanálu, řekněte jim jméno kanálu a tuto adresu Bitmessage: %1. Tuto adresu také najdete v sekci &quot;Vaše identity&quot;.</translation>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
+        <translation>Kanál byl úspěšně vytvořen. Když chcete jiným lidem povolit připojit se k Vašemu kanálu, řekněte jim jméno kanálu a tuto adresu Bitmessage: {0}. Tuto adresu také najdete v sekci &quot;Vaše identity&quot;.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1604"/>
@@ -502,53 +502,53 @@ Je důležité si tento soubor zazálohovat. Přejete si tento soubor nyní otev
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1959"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
-        <translation>Zpráva, kterou se snažíte poslat, je o %1 bajtů delší, než je dovoleno. (Maximum je 261644 bajtů). Zkuste ji prosím před odesláním zkrátit.</translation>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <translation>Zpráva, kterou se snažíte poslat, je o {0} bajtů delší, než je dovoleno. (Maximum je 261644 bajtů). Zkuste ji prosím před odesláním zkrátit.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1991"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2000"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
-        <translation>Chyba: Adresy Bitmessage začínají na BM-   Zkontroluje prosím %1</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
+        <translation>Chyba: Adresy Bitmessage začínají na BM-   Zkontroluje prosím {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2003"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>Chyba: Adresa %1 nebyla správně opsána nebo zkopírována. Zkontrolujte ji prosím.</translation>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>Chyba: Adresa {0} nebyla správně opsána nebo zkopírována. Zkontrolujte ji prosím.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2006"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
-        <translation>Chyba: Adresa %1 obsahuje neplatné znaky. Zkontrolujte ji prosím.</translation>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
+        <translation>Chyba: Adresa {0} obsahuje neplatné znaky. Zkontrolujte ji prosím.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2009"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
-        <translation>Chyba: Verze adresy %1 je příliš vysoká. Buď používáte starou verzi Bitmessage a je čas na aktualizaci, nebo si Váš známý dělá legraci.</translation>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <translation>Chyba: Verze adresy {0} je příliš vysoká. Buď používáte starou verzi Bitmessage a je čas na aktualizaci, nebo si Váš známý dělá legraci.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2012"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Chyba: Některá data zakódovaná v adrese %1 jsou příliš krátká. Možná je to chyba softwaru, který Váš známý používá.</translation>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Chyba: Některá data zakódovaná v adrese {0} jsou příliš krátká. Možná je to chyba softwaru, který Váš známý používá.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2015"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Chyba: Některá data zakódovaná v adrese %1 jsou příliš dlouhá. Možná je to chyba softwaru, který Váš známý používá.</translation>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Chyba: Některá data zakódovaná v adrese {0} jsou příliš dlouhá. Možná je to chyba softwaru, který Váš známý používá.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2018"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Chyba: Některá data zakódovaná v adrese %1 mají neplatný formát. Možná je to chyba softwaru, který Váš známý používá.</translation>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Chyba: Některá data zakódovaná v adrese {0} mají neplatný formát. Možná je to chyba softwaru, který Váš známý používá.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2021"/>
-        <source>Error: Something is wrong with the address %1.</source>
-        <translation>Chyba: Nastal problém s adresou %1.</translation>
+        <source>Error: Something is wrong with the address {0}.</source>
+        <translation>Chyba: Nastal problém s adresou {0}.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2089"/>
@@ -562,8 +562,8 @@ Je důležité si tento soubor zazálohovat. Přejete si tento soubor nyní otev
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Co se týče adresy %1, Bitmessage nerozumí jejímu číslu verze &quot;%2&quot;. Možná byste měl(a) aktualizovat Bitmessage na nejnovější verzi.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Co se týče adresy {0}, Bitmessage nerozumí jejímu číslu verze &quot;{1}&quot;. Možná byste měl(a) aktualizovat Bitmessage na nejnovější verzi.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
@@ -572,8 +572,8 @@ Je důležité si tento soubor zazálohovat. Přejete si tento soubor nyní otev
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Co se týče adresy %1, Bitmessage neumí zpracovat její číslo proudu &quot;%2&quot;. Možná byste měl(a) aktualizovat Bitmessage na nejnovější verzi.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Co se týče adresy {0}, Bitmessage neumí zpracovat její číslo proudu &quot;{1}&quot;. Možná byste měl(a) aktualizovat Bitmessage na nejnovější verzi.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2039"/>
@@ -707,8 +707,8 @@ Je důležité si tento soubor zazálohovat. Přejete si tento soubor nyní otev
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2951"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>Bitmessage nemůže najít Vaši adresu %1. Možná jste ji odstranil(a)?</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>Bitmessage nemůže najít Vaši adresu {0}. Možná jste ji odstranil(a)?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2954"/>
@@ -861,8 +861,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4361"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>Používáte TCP port %1. (To lze změnit v nastavení).</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>Používáte TCP port {0}. (To lze změnit v nastavení).</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/bitmessageui.py" line="648"/>
@@ -1056,7 +1056,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="44"/>
-        <source>Zoom level %1%</source>
+        <source>Zoom level {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1071,47 +1071,47 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4321"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1848"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2737"/>
-        <source>Waiting for PoW to finish... %1%</source>
+        <source>Waiting for PoW to finish... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2741"/>
-        <source>Shutting down Pybitmessage... %1%</source>
+        <source>Shutting down Pybitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2763"/>
-        <source>Waiting for objects to be sent... %1%</source>
+        <source>Waiting for objects to be sent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2773"/>
-        <source>Saving settings... %1%</source>
+        <source>Saving settings... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2782"/>
-        <source>Shutting down core... %1%</source>
+        <source>Shutting down core... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2785"/>
-        <source>Stopping notifications... %1%</source>
+        <source>Stopping notifications... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2791"/>
-        <source>Shutdown imminent... %1%</source>
+        <source>Shutdown imminent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
@@ -1134,7 +1134,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2718"/>
-        <source>Shutting down PyBitmessage... %1%</source>
+        <source>Shutting down PyBitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1154,12 +1154,12 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="165"/>
-        <source>Generating %1 new addresses.</source>
+        <source>Generating {0} new addresses.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="242"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1169,7 +1169,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1194,7 +1194,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="487"/>
-        <source>Broadcast sent on %1</source>
+        <source>Broadcast sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1214,7 +1214,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="647"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1226,17 +1226,17 @@ There is no required difficulty for version 2 addresses like this.</source>
     <message>
         <location filename="../class_singleWorker.py" line="675"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="684"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="696"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1246,7 +1246,7 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="819"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1261,12 +1261,12 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="942"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../upnp.py" line="220"/>
-        <source>UPnP port mapping established on port %1</source>
+        <source>UPnP port mapping established on port {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1629,27 +1629,27 @@ Možnost &quot;Náhodné číslo&quot; je nastavena jako výchozí, deterministi
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="137"/>
-        <source>Since startup on %1</source>
+        <source>Since startup on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="71"/>
-        <source>Down: %1/s  Total: %2</source>
+        <source>Down: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="73"/>
-        <source>Up: %1/s  Total: %2</source>
+        <source>Up: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="120"/>
-        <source>Total Connections: %1</source>
+        <source>Total Connections: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="129"/>
-        <source>Inventory lookups per second: %1</source>
+        <source>Inventory lookups per second: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff --git a/src/translations/bitmessage_da.qm b/src/translations/bitmessage_da.qm
index e5588987d61b2cbd158dd2b8b9444f3daa08fb46..1b4366011f9a29afbab0e833797b0c7327ffe3f8 100644
GIT binary patch
delta 3458
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

delta 3802
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

diff --git a/src/translations/bitmessage_da.ts b/src/translations/bitmessage_da.ts
index fcf80470..707967e7 100644
--- a/src/translations/bitmessage_da.ts
+++ b/src/translations/bitmessage_da.ts
@@ -241,8 +241,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="594"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>En af dine adresser, %1 er en gammel version 1-addresse. Version 1-addresser understøttes ikke længere. Må vi slette den?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>En af dine adresser, {0} er en gammel version 1-addresse. Version 1-addresser understøttes ikke længere. Må vi slette den?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="987"/>
@@ -261,13 +261,13 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="996"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>Besked afsendt. Afventer bekræftelse på modtagelse. Sendt %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>Besked afsendt. Afventer bekræftelse på modtagelse. Sendt {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="999"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>Besked sendt. Sendt %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>Besked sendt. Sendt {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -276,8 +276,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1005"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>Bekræftelse på modtagelse er modtaget %1 </translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>Bekræftelse på modtagelse er modtaget {0} </translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2131"/>
@@ -286,18 +286,18 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1011"/>
-        <source>Broadcast on %1</source>
-        <translation>Afsendt %1</translation>
+        <source>Broadcast on {0}</source>
+        <translation>Afsendt {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1014"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>Problem: Beregningen som kræves af modtageren er mere besværlig end du accepterer. %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>Problem: Beregningen som kræves af modtageren er mere besværlig end du accepterer. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1017"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>Problem: Modtagerens krypteringsnøgle virker ikke. Beskeden kunne ikke krypteres. %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>Problem: Modtagerens krypteringsnøgle virker ikke. Beskeden kunne ikke krypteres. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1020"/>
@@ -306,8 +306,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1023"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>Ukendt status: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>Ukendt status: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1689"/>
@@ -347,10 +347,10 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1523"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation>Du kan administrere dine nøgler ved at redigere keys.dat-filen i
-%1
+{0}
 Det er vigtigt at tage backup af denne fil.</translation>
     </message>
     <message>
@@ -366,10 +366,10 @@ Det er vigtigt at tage backup af denne fil.</translation>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1530"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation>Du kan administrere dine nøgler ved at redigere keys.dat-filen i
-%1
+{0}
 Det er vigtigt at tage backup af denne fil. (Sørg for at lukke Bitmessage før du foretager ændringer.)</translation>
     </message>
     <message>
@@ -434,8 +434,8 @@ Det er vigtigt at tage backup af denne fil. (Sørg for at lukke Bitmessage før
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1595"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
-        <translation>Ny kanal oprettet. For at andre kan blive medlem skal du oplyse dem kanalnavnet og denne Bitmessage-adresse: %1. Denne adresse vises også i &apos;Dine identiteter&apos;.</translation>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
+        <translation>Ny kanal oprettet. For at andre kan blive medlem skal du oplyse dem kanalnavnet og denne Bitmessage-adresse: {0}. Denne adresse vises også i &apos;Dine identiteter&apos;.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1604"/>
@@ -502,53 +502,53 @@ Det er vigtigt at tage backup af denne fil. (Sørg for at lukke Bitmessage før
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1959"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
-        <translation>Beskeden som du prøver at sende er %1 byte for lang. (Den maksimale størrelse er 261644 byte). Prøv at gøre den kortere før afsendelsen.</translation>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <translation>Beskeden som du prøver at sende er {0} byte for lang. (Den maksimale størrelse er 261644 byte). Prøv at gøre den kortere før afsendelsen.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1991"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2000"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
-        <translation>Fejl: Bitmessage-adresser starter med BM-   Check %1</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
+        <translation>Fejl: Bitmessage-adresser starter med BM-   Check {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2003"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>Fejl: Adressen %1 er skrever eller kopieret forkert.  Tjek den venligst.</translation>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>Fejl: Adressen {0} er skrever eller kopieret forkert.  Tjek den venligst.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2006"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
-        <translation>Fejl: Adressen %1 indeholder ugyldige tegn. Tjek den venligst.</translation>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
+        <translation>Fejl: Adressen {0} indeholder ugyldige tegn. Tjek den venligst.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2009"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2012"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2015"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2018"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2021"/>
-        <source>Error: Something is wrong with the address %1.</source>
-        <translation>Fejl: Der er noget galt med adressen %1.</translation>
+        <source>Error: Something is wrong with the address {0}.</source>
+        <translation>Fejl: Der er noget galt med adressen {0}.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2089"/>
@@ -562,8 +562,8 @@ Det er vigtigt at tage backup af denne fil. (Sørg for at lukke Bitmessage før
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Vedrørende adressen %1, Bitmessage forstår ikke addreseversion %2. Måske bør du opgradere Bitmessage til den nyeste version.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Vedrørende adressen {0}, Bitmessage forstår ikke addreseversion {1}. Måske bør du opgradere Bitmessage til den nyeste version.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
@@ -572,8 +572,8 @@ Det er vigtigt at tage backup af denne fil. (Sørg for at lukke Bitmessage før
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Vedrørende adressen %1, Bitmessage kan ikke håndtere flod nummer %2. Måske bør du opgradere Bitmessage til den nyeste version.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Vedrørende adressen {0}, Bitmessage kan ikke håndtere flod nummer {1}. Måske bør du opgradere Bitmessage til den nyeste version.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2039"/>
@@ -707,8 +707,8 @@ Det er vigtigt at tage backup af denne fil. (Sørg for at lukke Bitmessage før
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2951"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>Bitmessage kan ikke finde din adresse %1. Måske har du fjernet den?</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>Bitmessage kan ikke finde din adresse {0}. Måske har du fjernet den?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2954"/>
@@ -865,8 +865,8 @@ Er du sikker på at du vil slette denne kanal?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4361"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>Du bruger TCP-port %1. (Dette kan ændres i indstillingerne).</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>Du bruger TCP-port {0}. (Dette kan ændres i indstillingerne).</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/bitmessageui.py" line="648"/>
@@ -1060,8 +1060,8 @@ Er du sikker på at du vil slette denne kanal?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="44"/>
-        <source>Zoom level %1%</source>
-        <translation>Zoom %1%</translation>
+        <source>Zoom level {0}%</source>
+        <translation>Zoom {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/blacklist.py" line="91"/>
@@ -1075,47 +1075,47 @@ Er du sikker på at du vil slette denne kanal?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4321"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1848"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2737"/>
-        <source>Waiting for PoW to finish... %1%</source>
+        <source>Waiting for PoW to finish... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2741"/>
-        <source>Shutting down Pybitmessage... %1%</source>
+        <source>Shutting down Pybitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2763"/>
-        <source>Waiting for objects to be sent... %1%</source>
+        <source>Waiting for objects to be sent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2773"/>
-        <source>Saving settings... %1%</source>
+        <source>Saving settings... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2782"/>
-        <source>Shutting down core... %1%</source>
+        <source>Shutting down core... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2785"/>
-        <source>Stopping notifications... %1%</source>
+        <source>Stopping notifications... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2791"/>
-        <source>Shutdown imminent... %1%</source>
+        <source>Shutdown imminent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
@@ -1136,7 +1136,7 @@ Er du sikker på at du vil slette denne kanal?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2718"/>
-        <source>Shutting down PyBitmessage... %1%</source>
+        <source>Shutting down PyBitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1156,12 +1156,12 @@ Er du sikker på at du vil slette denne kanal?</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="165"/>
-        <source>Generating %1 new addresses.</source>
+        <source>Generating {0} new addresses.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="242"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1171,7 +1171,7 @@ Er du sikker på at du vil slette denne kanal?</translation>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1196,7 +1196,7 @@ Er du sikker på at du vil slette denne kanal?</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="487"/>
-        <source>Broadcast sent on %1</source>
+        <source>Broadcast sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1216,7 +1216,7 @@ Er du sikker på at du vil slette denne kanal?</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="647"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1228,17 +1228,17 @@ There is no required difficulty for version 2 addresses like this.</source>
     <message>
         <location filename="../class_singleWorker.py" line="675"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="684"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="696"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1248,7 +1248,7 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="819"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1263,12 +1263,12 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="942"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../upnp.py" line="220"/>
-        <source>UPnP port mapping established on port %1</source>
+        <source>UPnP port mapping established on port {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1631,27 +1631,27 @@ Som standard er tilfældige tal valgt, men der er både fordele og ulemper ved a
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="137"/>
-        <source>Since startup on %1</source>
+        <source>Since startup on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="71"/>
-        <source>Down: %1/s  Total: %2</source>
+        <source>Down: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="73"/>
-        <source>Up: %1/s  Total: %2</source>
+        <source>Up: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="120"/>
-        <source>Total Connections: %1</source>
+        <source>Total Connections: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="129"/>
-        <source>Inventory lookups per second: %1</source>
+        <source>Inventory lookups per second: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff --git a/src/translations/bitmessage_de.qm b/src/translations/bitmessage_de.qm
index ef443a619e0e40e55aede8479d45b488e57652f4..e42c1760a3ef57b38624c14f3ff0d4606f57589b 100644
GIT binary patch
delta 6500
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
F@L%f(j3fX6

delta 6111
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
T5jbAf_z`;yw&92$Y4ZC&g~Hu4

diff --git a/src/translations/bitmessage_de.ts b/src/translations/bitmessage_de.ts
index 69cdd2a8..ff23a30c 100644
--- a/src/translations/bitmessage_de.ts
+++ b/src/translations/bitmessage_de.ts
@@ -314,8 +314,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="587"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>Eine Ihrer Adressen, %1, ist eine alte Adresse der Version 1 und wird nicht mehr unterstützt. Soll sie jetzt gelöscht werden?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>Eine Ihrer Adressen, {0}, ist eine alte Adresse der Version 1 und wird nicht mehr unterstützt. Soll sie jetzt gelöscht werden?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1034"/>
@@ -334,13 +334,13 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1043"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>Nachricht gesendet. Warte auf Bestätigung. Zeitpunkt der Sendung: %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>Nachricht gesendet. Warte auf Bestätigung. Zeitpunkt der Sendung: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1046"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>Nachricht gesendet. Zeitpunkt der Sendung: %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>Nachricht gesendet. Zeitpunkt der Sendung: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -349,8 +349,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1052"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>Bestätigung der Nachricht erhalten %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>Bestätigung der Nachricht erhalten {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2140"/>
@@ -359,18 +359,18 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1061"/>
-        <source>Broadcast on %1</source>
-        <translation>Rundruf um %1</translation>
+        <source>Broadcast on {0}</source>
+        <translation>Rundruf um {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1064"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>Problem: Die vom Empfänger geforderte Arbeit ist schwerer als Sie bereit sind, zu berechnen. %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>Problem: Die vom Empfänger geforderte Arbeit ist schwerer als Sie bereit sind, zu berechnen. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1067"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>Problem: Der Verschlüsselungscode des Empfängers ist nicht in Ordnung. Nachricht konnte nicht verschlüsselt werden. %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>Problem: Der Verschlüsselungscode des Empfängers ist nicht in Ordnung. Nachricht konnte nicht verschlüsselt werden. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1070"/>
@@ -379,8 +379,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1073"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>Unbekannter Status: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>Unbekannter Status: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1612"/>
@@ -420,10 +420,10 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1463"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation>Sie können Ihre Schlüssel verwalten, indem Sie die keys.dat bearbeiten, die im Ordner
-%1 liegt.
+{0} liegt.
 Es ist empfehlenswert, vorher ein Backup dieser Datei anzulegen.</translation>
     </message>
     <message>
@@ -439,10 +439,10 @@ Es ist empfehlenswert, vorher ein Backup dieser Datei anzulegen.</translation>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1470"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation>Sie können Ihre Schlüssel verwalten, indem Sie die keys.dat bearbeiten,
-die im Ordner %1 liegt.
+die im Ordner {0} liegt.
 Es ist empfehlenswert, vorher ein Backup dieser Datei anzulegen. Möchten Sie die Datei jetzt öffnen?
 (Stellen Sie sicher, dass Sie Bitmessage beendet haben, bevor Sie etwas ändern.)</translation>
     </message>
@@ -508,7 +508,7 @@ Es ist empfehlenswert, vorher ein Backup dieser Datei anzulegen. Möchten Sie di
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1603"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -576,52 +576,52 @@ Es ist empfehlenswert, vorher ein Backup dieser Datei anzulegen. Möchten Sie di
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1899"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
-        <translation>Die Nachricht, die Sie zu senden versuchen, ist %1 Byte zu lang. (Maximum 261.644 Bytes). Bitte verringern Sie ihre Größe vor dem Senden.</translation>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <translation>Die Nachricht, die Sie zu senden versuchen, ist {0} Byte zu lang. (Maximum 261.644 Bytes). Bitte verringern Sie ihre Größe vor dem Senden.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1941"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
-        <translation>Fehler: Ihr Konto war an keiner E-Mail Schnittstelle registriert. Registrierung als %1 wird versandt, bitte vor einem erneutem Sendeversuch auf die Registrierungsverarbeitung warten.</translation>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
+        <translation>Fehler: Ihr Konto war an keiner E-Mail Schnittstelle registriert. Registrierung als {0} wird versandt, bitte vor einem erneutem Sendeversuch auf die Registrierungsverarbeitung warten.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2008"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2011"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2014"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2017"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2020"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2023"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2029"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -636,8 +636,8 @@ Es ist empfehlenswert, vorher ein Backup dieser Datei anzulegen. Möchten Sie di
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Aufgrund der Adresse %1 kann Bitmessage Adressen mit der Version %2 nicht verarbeiten. Möglicherweise müssen Sie Bitmessage auf die aktuelle Version aktualisieren.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Aufgrund der Adresse {0} kann Bitmessage Adressen mit der Version {1} nicht verarbeiten. Möglicherweise müssen Sie Bitmessage auf die aktuelle Version aktualisieren.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
@@ -646,8 +646,8 @@ Es ist empfehlenswert, vorher ein Backup dieser Datei anzulegen. Möchten Sie di
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Aufgrund der Adresse %1 kann Bitmessage den Datenstrom  mit der Version %2 nicht verarbeiten. Möglicherweise müssen Sie Bitmessage auf die aktuelle Version aktualisieren.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Aufgrund der Adresse {0} kann Bitmessage den Datenstrom  mit der Version {1} nicht verarbeiten. Möglicherweise müssen Sie Bitmessage auf die aktuelle Version aktualisieren.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2035"/>
@@ -781,8 +781,8 @@ Es ist empfehlenswert, vorher ein Backup dieser Datei anzulegen. Möchten Sie di
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3012"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>Bitmessage kann Ihre Adresse %1 nicht finden. Haben Sie sie gelöscht?</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>Bitmessage kann Ihre Adresse {0} nicht finden. Haben Sie sie gelöscht?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3015"/>
@@ -939,7 +939,7 @@ Sind Sie sicher, dass Sie das Chan löschen möchten?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4374"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1134,8 +1134,8 @@ Sind Sie sicher, dass Sie das Chan löschen möchten?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="47"/>
-        <source>Zoom level %1%</source>
-        <translation>Zoom-Stufe %1%</translation>
+        <source>Zoom level {0}%</source>
+        <translation>Zoom-Stufe {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/blacklist.py" line="90"/>
@@ -1149,48 +1149,48 @@ Sind Sie sicher, dass Sie das Chan löschen möchten?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4334"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1774"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
-        <translation>Neue Version von PyBitmessage steht zur Verfügung: %1. Sie können sie von https://github.com/Bitmessage/PyBitmessage/releases/latest herunterladen.</translation>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <translation>Neue Version von PyBitmessage steht zur Verfügung: {0}. Sie können sie von https://github.com/Bitmessage/PyBitmessage/releases/latest herunterladen.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2774"/>
-        <source>Waiting for PoW to finish... %1%</source>
-        <translation>Warte auf Abschluss von Berechnungen (PoW)... %1%</translation>
+        <source>Waiting for PoW to finish... {0}%</source>
+        <translation>Warte auf Abschluss von Berechnungen (PoW)... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2784"/>
-        <source>Shutting down Pybitmessage... %1%</source>
-        <translation>PyBitmessage wird beendet... %1%</translation>
+        <source>Shutting down Pybitmessage... {0}%</source>
+        <translation>PyBitmessage wird beendet... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2802"/>
-        <source>Waiting for objects to be sent... %1%</source>
-        <translation>Warte auf Versand von Objekten... %1%</translation>
+        <source>Waiting for objects to be sent... {0}%</source>
+        <translation>Warte auf Versand von Objekten... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2822"/>
-        <source>Saving settings... %1%</source>
-        <translation>Einstellungen werden gespeichert... %1%</translation>
+        <source>Saving settings... {0}%</source>
+        <translation>Einstellungen werden gespeichert... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2835"/>
-        <source>Shutting down core... %1%</source>
-        <translation>Kern wird beendet... %1%</translation>
+        <source>Shutting down core... {0}%</source>
+        <translation>Kern wird beendet... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2841"/>
-        <source>Stopping notifications... %1%</source>
-        <translation>Beende Benachrichtigungen... %1%</translation>
+        <source>Stopping notifications... {0}%</source>
+        <translation>Beende Benachrichtigungen... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2845"/>
-        <source>Shutdown imminent... %1%</source>
-        <translation>Unmittelbar vor Beendung... %1%</translation>
+        <source>Shutdown imminent... {0}%</source>
+        <translation>Unmittelbar vor Beendung... {0}%</translation>
     </message>
     <message numerus="yes">
         <location filename="../bitmessageqt/bitmessageui.py" line="706"/>
@@ -1204,8 +1204,8 @@ Sind Sie sicher, dass Sie das Chan löschen möchten?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2742"/>
-        <source>Shutting down PyBitmessage... %1%</source>
-        <translation>PyBitmessage wird beendet... %1%</translation>
+        <source>Shutting down PyBitmessage... {0}%</source>
+        <translation>PyBitmessage wird beendet... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1148"/>
@@ -1224,13 +1224,13 @@ Sind Sie sicher, dass Sie das Chan löschen möchten?</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="170"/>
-        <source>Generating %1 new addresses.</source>
-        <translation>Erzeuge %1 neue Addressen.</translation>
+        <source>Generating {0} new addresses.</source>
+        <translation>Erzeuge {0} neue Addressen.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="247"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
-        <translation>%1 befindet sich bereits unter Ihren Identitäten, wird nicht doppelt hinzugefügt.</translation>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <translation>{0} befindet sich bereits unter Ihren Identitäten, wird nicht doppelt hinzugefügt.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="283"/>
@@ -1239,7 +1239,7 @@ Sind Sie sicher, dass Sie das Chan löschen möchten?</translation>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1264,8 +1264,8 @@ Sind Sie sicher, dass Sie das Chan löschen möchten?</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="518"/>
-        <source>Broadcast sent on %1</source>
-        <translation>Rundruf verschickt um %1</translation>
+        <source>Broadcast sent on {0}</source>
+        <translation>Rundruf verschickt um {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="587"/>
@@ -1284,7 +1284,7 @@ Sind Sie sicher, dass Sie das Chan löschen möchten?</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="673"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
         <translation>Problem: Der Empfänger benutzt ein mobiles Gerät und erfordert eine unverschlüsselte Empfängeraddresse. Dies ist in Ihren Einstellungen jedoch nicht zulässig. 1%</translation>
     </message>
     <message>
@@ -1297,17 +1297,17 @@ Version-2-Addressen wie die des Empfängers haben keine Schweirigkeitserforderun
     <message>
         <location filename="../class_singleWorker.py" line="701"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
-        <translation>Arbeit für Nachrichtenversand wird errichtet. Vom Empfänger geforderte Schwierigkeit: %1 und %2</translation>
+Receiver&apos;s required difficulty: {0} and {1}</source>
+        <translation>Arbeit für Nachrichtenversand wird errichtet. Vom Empfänger geforderte Schwierigkeit: {0} und {1}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="710"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
-        <translation>Problem: Die vom Empfänger verlangte Arbeit (%1 und %2) ist schwieriger, als Sie in den Einstellungen erlaubt haben. %3</translation>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
+        <translation>Problem: Die vom Empfänger verlangte Arbeit ({0} und {1}) ist schwieriger, als Sie in den Einstellungen erlaubt haben. {2}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="722"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
         <translation>Problem: Sie versuchen, eine Nachricht an sich zu versenden, aber Ihr Schlüssel befindet sich nicht in der keys.dat-Datei. Die Nachricht kann nicht verschlüsselt werden. 1%</translation>
     </message>
     <message>
@@ -1317,8 +1317,8 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="845"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
-        <translation>Nachricht gesendet. Auf Bestätigung wird gewartet. Zeitpunkt der  Sendung: %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
+        <translation>Nachricht gesendet. Auf Bestätigung wird gewartet. Zeitpunkt der  Sendung: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1037"/>
@@ -1332,13 +1332,13 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="963"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
-        <translation>Nachfrage nach dem öffentlichen Schlüssel läuft, auf Antwort wird gewartet. Nachgefragt am %1</translation>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
+        <translation>Nachfrage nach dem öffentlichen Schlüssel läuft, auf Antwort wird gewartet. Nachgefragt am {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="235"/>
-        <source>UPnP port mapping established on port %1</source>
-        <translation>UPnP Port-Mapping eingerichtet auf Port %1</translation>
+        <source>UPnP port mapping established on port {0}</source>
+        <translation>UPnP Port-Mapping eingerichtet auf Port {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="264"/>
@@ -1382,28 +1382,28 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="211"/>
-        <source>Problem communicating with proxy: %1. Please check your network settings.</source>
-        <translation>Kommunikationsfehler mit dem Proxy: %1. Bitte überprüfen Sie Ihre Netzwerkeinstellungen.</translation>
+        <source>Problem communicating with proxy: {0}. Please check your network settings.</source>
+        <translation>Kommunikationsfehler mit dem Proxy: {0}. Bitte überprüfen Sie Ihre Netzwerkeinstellungen.</translation>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="240"/>
-        <source>SOCKS5 Authentication problem: %1. Please check your SOCKS5 settings.</source>
-        <translation>SOCKS5-Authentizierung fehlgeschlagen: %1. Bitte überprüfen Sie Ihre SOCKS5-Einstellungen.</translation>
+        <source>SOCKS5 Authentication problem: {0}. Please check your SOCKS5 settings.</source>
+        <translation>SOCKS5-Authentizierung fehlgeschlagen: {0}. Bitte überprüfen Sie Ihre SOCKS5-Einstellungen.</translation>
     </message>
     <message>
         <location filename="../class_receiveDataThread.py" line="171"/>
-        <source>The time on your computer, %1, may be wrong. Please verify your settings.</source>
-        <translation>Die Uhrzeit ihres Computers, %1, ist möglicherweise falsch. Bitte überprüfen Sie Ihre einstellungen.</translation>
+        <source>The time on your computer, {0}, may be wrong. Please verify your settings.</source>
+        <translation>Die Uhrzeit ihres Computers, {0}, ist möglicherweise falsch. Bitte überprüfen Sie Ihre einstellungen.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="101"/>
-        <source>The name %1 was not found.</source>
-        <translation>Der Name %1 wurde nicht gefunden.</translation>
+        <source>The name {0} was not found.</source>
+        <translation>Der Name {0} wurde nicht gefunden.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="110"/>
-        <source>The namecoin query failed (%1)</source>
-        <translation>Namecoin-abfrage fehlgeschlagen (%1)</translation>
+        <source>The namecoin query failed ({0})</source>
+        <translation>Namecoin-abfrage fehlgeschlagen ({0})</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="113"/>
@@ -1412,18 +1412,18 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../namecoin.py" line="119"/>
-        <source>The name %1 has no valid JSON data.</source>
-        <translation>Der Name %1 beinhaltet keine gültige JSON-Daten.</translation>
+        <source>The name {0} has no valid JSON data.</source>
+        <translation>Der Name {0} beinhaltet keine gültige JSON-Daten.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="127"/>
-        <source>The name %1 has no associated Bitmessage address.</source>
-        <translation>Der Name %1 hat keine zugewiesene Bitmessageaddresse.</translation>
+        <source>The name {0} has no associated Bitmessage address.</source>
+        <translation>Der Name {0} hat keine zugewiesene Bitmessageaddresse.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="147"/>
-        <source>Success!  Namecoind version %1 running.</source>
-        <translation>Erfolg! Namecoind Version %1 läuft.</translation>
+        <source>Success!  Namecoind version {0} running.</source>
+        <translation>Erfolg! Namecoind Version {0} läuft.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="153"/>
@@ -1481,53 +1481,53 @@ Willkommen zu einfachem und sicherem Bitmessage
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1960"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address %1</source>
-        <translation>Fehler: Bitmessage Adressen starten mit BM-   Bitte überprüfen Sie die Empfängeradresse %1</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address {0}</source>
+        <translation>Fehler: Bitmessage Adressen starten mit BM-   Bitte überprüfen Sie die Empfängeradresse {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1966"/>
-        <source>Error: The recipient address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>Fehler: Die Empfängeradresse %1 wurde nicht korrekt getippt oder kopiert. Bitte überprüfen.</translation>
+        <source>Error: The recipient address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>Fehler: Die Empfängeradresse {0} wurde nicht korrekt getippt oder kopiert. Bitte überprüfen.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1972"/>
-        <source>Error: The recipient address %1 contains invalid characters. Please check it.</source>
-        <translation>Fehler: Die Empfängeradresse %1 beinhaltet ungültig Zeichen. Bitte überprüfen.</translation>
+        <source>Error: The recipient address {0} contains invalid characters. Please check it.</source>
+        <translation>Fehler: Die Empfängeradresse {0} beinhaltet ungültig Zeichen. Bitte überprüfen.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1978"/>
-        <source>Error: The version of the recipient address %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
-        <translation>Fehler: Die Empfängerdresseversion von %1 ist zu hoch. Entweder Sie müssen Ihre Bitmessage Software aktualisieren oder Ihr Bekannter ist sehr clever.</translation>
+        <source>Error: The version of the recipient address {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <translation>Fehler: Die Empfängerdresseversion von {0} ist zu hoch. Entweder Sie müssen Ihre Bitmessage Software aktualisieren oder Ihr Bekannter ist sehr clever.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1986"/>
-        <source>Error: Some data encoded in the recipient address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Fehler: Einige Daten die in der Empfängerdresse %1 codiert sind, sind zu kurz. Es könnte sein, dass etwas mit der Software Ihres Bekannten nicht stimmt.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Fehler: Einige Daten die in der Empfängerdresse {0} codiert sind, sind zu kurz. Es könnte sein, dass etwas mit der Software Ihres Bekannten nicht stimmt.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1994"/>
-        <source>Error: Some data encoded in the recipient address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Fehler: Einige Daten die in der Empfängeradresse %1 codiert sind, sind zu lang. Es könnte sein, dass etwas mit der Software Ihres Bekannten nicht stimmt.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Fehler: Einige Daten die in der Empfängeradresse {0} codiert sind, sind zu lang. Es könnte sein, dass etwas mit der Software Ihres Bekannten nicht stimmt.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2002"/>
-        <source>Error: Some data encoded in the recipient address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Fehler: Einige codierte Daten in der Empfängeradresse %1 sind ungültig. Es könnte etwas mit der Software Ihres Bekannten sein.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Fehler: Einige codierte Daten in der Empfängeradresse {0} sind ungültig. Es könnte etwas mit der Software Ihres Bekannten sein.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2010"/>
-        <source>Error: Something is wrong with the recipient address %1.</source>
-        <translation>Fehler: Mit der Empfängeradresse %1 stimmt etwas nicht.</translation>
+        <source>Error: Something is wrong with the recipient address {0}.</source>
+        <translation>Fehler: Mit der Empfängeradresse {0} stimmt etwas nicht.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2160"/>
-        <source>Error: %1</source>
-        <translation>Fehler: %1</translation>
+        <source>Error: {0}</source>
+        <translation>Fehler: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2277"/>
-        <source>From %1</source>
-        <translation>Von %1</translation>
+        <source>From {0}</source>
+        <translation>Von {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2719"/>
@@ -1572,7 +1572,7 @@ Willkommen zu einfachem und sicherem Bitmessage
     <message numerus="yes">
         <location filename="../bitmessageqt/address_dialogs.py" line="194"/>
         <source>Display the %n recent broadcast(s) from this address.</source>
-        <translation><numerusform>Den letzten %1 Rundruf von dieser Addresse anzeigen.</numerusform><numerusform>Die letzten %1 Rundrufe von dieser Addresse anzeigen.</numerusform></translation>
+        <translation><numerusform>Den letzten {0} Rundruf von dieser Addresse anzeigen.</numerusform><numerusform>Die letzten {0} Rundrufe von dieser Addresse anzeigen.</numerusform></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/bitmessageui.py" line="658"/>
@@ -1619,8 +1619,8 @@ Willkommen zu einfachem und sicherem Bitmessage
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="72"/>
-        <source>The link &quot;%1&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
-        <translation>Der Link &quot;%1&quot; wird in Browser geöffnet. Es kann ein Sicherheitsrisiko darstellen, es könnte Sie de-anonymisieren oder schädliche Aktivitäten durchführen. Sind Sie sicher?</translation>
+        <source>The link &quot;{0}&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
+        <translation>Der Link &quot;{0}&quot; wird in Browser geöffnet. Es kann ein Sicherheitsrisiko darstellen, es könnte Sie de-anonymisieren oder schädliche Aktivitäten durchführen. Sind Sie sicher?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="117"/>
@@ -1955,8 +1955,8 @@ Die Zufallszahlen-Option ist standardmässig gewählt, jedoch haben deterministi
     </message>
     <message>
         <location filename="../bitmessageqt/dialogs.py" line="58"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>Sie benutzen TCP-Port %1 (Dieser kann in den Einstellungen verändert werden).</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>Sie benutzen TCP-Port {0} (Dieser kann in den Einstellungen verändert werden).</translation>
     </message>
 </context>
 <context>
@@ -2008,28 +2008,28 @@ Die Zufallszahlen-Option ist standardmässig gewählt, jedoch haben deterministi
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="171"/>
-        <source>Since startup on %1</source>
-        <translation>Seit Start der Anwendung am %1</translation>
+        <source>Since startup on {0}</source>
+        <translation>Seit Start der Anwendung am {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="90"/>
-        <source>Down: %1/s  Total: %2</source>
-        <translation>Herunter: %1/s  Insg.: %2</translation>
+        <source>Down: {0}/s  Total: {1}</source>
+        <translation>Herunter: {0}/s  Insg.: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="92"/>
-        <source>Up: %1/s  Total: %2</source>
-        <translation>Hoch: %1/s Insg.: %2</translation>
+        <source>Up: {0}/s  Total: {1}</source>
+        <translation>Hoch: {0}/s Insg.: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="153"/>
-        <source>Total Connections: %1</source>
-        <translation>Verbindungen insgesamt: %1</translation>
+        <source>Total Connections: {0}</source>
+        <translation>Verbindungen insgesamt: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="163"/>
-        <source>Inventory lookups per second: %1</source>
-        <translation>Inventory lookups pro Sekunde: %1</translation>
+        <source>Inventory lookups per second: {0}</source>
+        <translation>Inventory lookups pro Sekunde: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.ui" line="256"/>
@@ -2194,8 +2194,8 @@ Die Zufallszahlen-Option ist standardmässig gewählt, jedoch haben deterministi
     <name>newchandialog</name>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="38"/>
-        <source>Successfully created / joined chan %1</source>
-        <translation>Chan %1 erfolgreich erstellt/beigetreten</translation>
+        <source>Successfully created / joined chan {0}</source>
+        <translation>Chan {0} erfolgreich erstellt/beigetreten</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="44"/>
diff --git a/src/translations/bitmessage_en.qm b/src/translations/bitmessage_en.qm
index 4751f4ca1a79835180d272a4b023afb6b34b38c9..71a25005981bf7a657344b246fa16f1201b279fa 100644
GIT binary patch
delta 5926
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
WF<Jjhn7XfDMhxc`<DHd3$bSKxJlg00

delta 6182
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

diff --git a/src/translations/bitmessage_en.ts b/src/translations/bitmessage_en.ts
index 05e9cc4b..8525b52c 100644
--- a/src/translations/bitmessage_en.ts
+++ b/src/translations/bitmessage_en.ts
@@ -281,8 +281,8 @@ Please type the desired email address (including @mailchuck.com) below:</transla
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="599"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="992"/>
@@ -301,13 +301,13 @@ Please type the desired email address (including @mailchuck.com) below:</transla
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1001"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>Message sent. Waiting for acknowledgement. Sent at %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>Message sent. Waiting for acknowledgement. Sent at {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1004"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>Message sent. Sent at %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>Message sent. Sent at {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -316,8 +316,8 @@ Please type the desired email address (including @mailchuck.com) below:</transla
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1010"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>Acknowledgement of the message received %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>Acknowledgement of the message received {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2139"/>
@@ -326,18 +326,18 @@ Please type the desired email address (including @mailchuck.com) below:</transla
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1019"/>
-        <source>Broadcast on %1</source>
-        <translation>Broadcast on %1</translation>
+        <source>Broadcast on {0}</source>
+        <translation>Broadcast on {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1022"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1025"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1028"/>
@@ -346,8 +346,8 @@ Please type the desired email address (including @mailchuck.com) below:</transla
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1031"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>Unknown status: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>Unknown status: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1697"/>
@@ -387,10 +387,10 @@ Please type the desired email address (including @mailchuck.com) below:</transla
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1531"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</translation>
     </message>
     <message>
@@ -406,10 +406,10 @@ It is important that you back up this file.</translation>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1538"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</translation>
     </message>
     <message>
@@ -474,8 +474,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1603"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
-        <translation>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</translation>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
+        <translation>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1612"/>
@@ -545,53 +545,53 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1967"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
-        <translation>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</translation>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <translation>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1999"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
-        <translation>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</translation>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
+        <translation>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2008"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
-        <translation>Error: Bitmessage addresses start with BM-   Please check %1</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
+        <translation>Error: Bitmessage addresses start with BM-   Please check {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2011"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>Error: The address %1 is not typed or copied correctly. Please check it.</translation>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>Error: The address {0} is not typed or copied correctly. Please check it.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2014"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
-        <translation>Error: The address %1 contains invalid characters. Please check it.</translation>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
+        <translation>Error: The address {0} contains invalid characters. Please check it.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2017"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
-        <translation>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</translation>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <translation>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2020"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</translation>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2023"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</translation>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</translation>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2029"/>
-        <source>Error: Something is wrong with the address %1.</source>
-        <translation>Error: Something is wrong with the address %1.</translation>
+        <source>Error: Something is wrong with the address {0}.</source>
+        <translation>Error: Something is wrong with the address {0}.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2097"/>
@@ -605,8 +605,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2038"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2042"/>
@@ -615,8 +615,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2042"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2047"/>
@@ -750,8 +750,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2964"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>Bitmessage cannot find your address %1. Perhaps you removed it?</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>Bitmessage cannot find your address {0}. Perhaps you removed it?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2967"/>
@@ -908,8 +908,8 @@ Are you sure you want to delete the channel?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4374"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>You are using TCP port %1. (This can be changed in the settings).</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>You are using TCP port {0}. (This can be changed in the settings).</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/bitmessageui.py" line="648"/>
@@ -1103,8 +1103,8 @@ Are you sure you want to delete the channel?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="44"/>
-        <source>Zoom level %1%</source>
-        <translation>Zoom level %1%</translation>
+        <source>Zoom level {0}%</source>
+        <translation>Zoom level {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/blacklist.py" line="91"/>
@@ -1118,48 +1118,48 @@ Are you sure you want to delete the channel?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4334"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
-        <translation>Display the %1 recent broadcast(s) from this address.</translation>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
+        <translation>Display the {0} recent broadcast(s) from this address.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1856"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
-        <translation>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</translation>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <translation>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2756"/>
-        <source>Waiting for PoW to finish... %1%</source>
-        <translation>Waiting for PoW to finish... %1%</translation>
+        <source>Waiting for PoW to finish... {0}%</source>
+        <translation>Waiting for PoW to finish... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2760"/>
-        <source>Shutting down Pybitmessage... %1%</source>
-        <translation>Shutting down Pybitmessage... %1%</translation>
+        <source>Shutting down Pybitmessage... {0}%</source>
+        <translation>Shutting down Pybitmessage... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2776"/>
-        <source>Waiting for objects to be sent... %1%</source>
-        <translation>Waiting for objects to be sent... %1%</translation>
+        <source>Waiting for objects to be sent... {0}%</source>
+        <translation>Waiting for objects to be sent... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2786"/>
-        <source>Saving settings... %1%</source>
-        <translation>Saving settings... %1%</translation>
+        <source>Saving settings... {0}%</source>
+        <translation>Saving settings... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2795"/>
-        <source>Shutting down core... %1%</source>
-        <translation>Shutting down core... %1%</translation>
+        <source>Shutting down core... {0}%</source>
+        <translation>Shutting down core... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2798"/>
-        <source>Stopping notifications... %1%</source>
-        <translation>Stopping notifications... %1%</translation>
+        <source>Stopping notifications... {0}%</source>
+        <translation>Stopping notifications... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2804"/>
-        <source>Shutdown imminent... %1%</source>
-        <translation>Shutdown imminent... %1%</translation>
+        <source>Shutdown imminent... {0}%</source>
+        <translation>Shutdown imminent... {0}%</translation>
     </message>
     <message numerus="yes">
         <location filename="../bitmessageqt/bitmessageui.py" line="689"/>
@@ -1179,8 +1179,8 @@ Are you sure you want to delete the channel?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2730"/>
-        <source>Shutting down PyBitmessage... %1%</source>
-        <translation>Shutting down PyBitmessage... %1%</translation>
+        <source>Shutting down PyBitmessage... {0}%</source>
+        <translation>Shutting down PyBitmessage... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1104"/>
@@ -1199,13 +1199,13 @@ Are you sure you want to delete the channel?</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="165"/>
-        <source>Generating %1 new addresses.</source>
-        <translation>Generating %1 new addresses.</translation>
+        <source>Generating {0} new addresses.</source>
+        <translation>Generating {0} new addresses.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="242"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
-        <translation>%1 is already in &apos;Your Identities&apos;. Not adding it again.</translation>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <translation>{0} is already in &apos;Your Identities&apos;. Not adding it again.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="278"/>
@@ -1214,8 +1214,8 @@ Are you sure you want to delete the channel?</translation>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
-        <translation>SOCKS5 Authentication problem: %1</translation>
+        <source>SOCKS5 Authentication problem: {0}</source>
+        <translation>SOCKS5 Authentication problem: {0}</translation>
     </message>
     <message>
         <location filename="../class_sqlThread.py" line="565"/>
@@ -1239,8 +1239,8 @@ Are you sure you want to delete the channel?</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="490"/>
-        <source>Broadcast sent on %1</source>
-        <translation>Broadcast sent on %1</translation>
+        <source>Broadcast sent on {0}</source>
+        <translation>Broadcast sent on {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="559"/>
@@ -1259,8 +1259,8 @@ Are you sure you want to delete the channel?</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="647"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
-        <translation>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</translation>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
+        <translation>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="661"/>
@@ -1272,19 +1272,19 @@ There is no required difficulty for version 2 addresses like this.</translation>
     <message>
         <location filename="../class_singleWorker.py" line="675"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</translation>
+Receiver&apos;s required difficulty: {0} and {1}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="684"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
-        <translation>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</translation>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
+        <translation>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="696"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
-        <translation>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</translation>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
+        <translation>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1007"/>
@@ -1293,8 +1293,8 @@ Receiver&apos;s required difficulty: %1 and %2</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="819"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
-        <translation>Message sent. Waiting for acknowledgement. Sent on %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
+        <translation>Message sent. Waiting for acknowledgement. Sent on {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="995"/>
@@ -1308,13 +1308,13 @@ Receiver&apos;s required difficulty: %1 and %2</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="942"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
-        <translation>Sending public key request. Waiting for reply. Requested at %1</translation>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
+        <translation>Sending public key request. Waiting for reply. Requested at {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="220"/>
-        <source>UPnP port mapping established on port %1</source>
-        <translation>UPnP port mapping established on port %1</translation>
+        <source>UPnP port mapping established on port {0}</source>
+        <translation>UPnP port mapping established on port {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="244"/>
@@ -1703,28 +1703,28 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="137"/>
-        <source>Since startup on %1</source>
-        <translation>Since startup on %1</translation>
+        <source>Since startup on {0}</source>
+        <translation>Since startup on {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="71"/>
-        <source>Down: %1/s  Total: %2</source>
-        <translation>Down: %1/s  Total: %2</translation>
+        <source>Down: {0}/s  Total: {1}</source>
+        <translation>Down: {0}/s  Total: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="73"/>
-        <source>Up: %1/s  Total: %2</source>
-        <translation>Up: %1/s  Total: %2</translation>
+        <source>Up: {0}/s  Total: {1}</source>
+        <translation>Up: {0}/s  Total: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="120"/>
-        <source>Total Connections: %1</source>
-        <translation>Total Connections: %1</translation>
+        <source>Total Connections: {0}</source>
+        <translation>Total Connections: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="129"/>
-        <source>Inventory lookups per second: %1</source>
-        <translation>Inventory lookups per second: %1</translation>
+        <source>Inventory lookups per second: {0}</source>
+        <translation>Inventory lookups per second: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.ui" line="214"/>
diff --git a/src/translations/bitmessage_en_pirate.qm b/src/translations/bitmessage_en_pirate.qm
index 69e6bde80093b2b1fb33eac0eba92e595a373db1..753e7e1aa6f9eb30367c1489a9e77030178e29fc 100644
GIT binary patch
delta 17
YcmccF!FaEQaYMKhdj|sp0}~@706Q)Oq5uE@

delta 445
zcmccD!g#ZTaYMLMy*>j2<2Q!s47dOzh6EQ}L;%hLF~q<;ITSI1oO%Xr9BNE(h=YWk
zk>vc~><Bmul@W`|Md6vD@QCJ2ekdZM!N8rElwVrnl9`y3pU#z$no|H_GVm3rmXu`X
zr58i^lNoiT1qB>aQh=x^wHPKUATKwWS6bXqC^I=f&pju<xHz$>5^4fxQchxWc1~t-
X372nTW?pz^UP^vBLkG}(OpJ^G^OP~O

diff --git a/src/translations/bitmessage_en_pirate.ts b/src/translations/bitmessage_en_pirate.ts
index 69642a96..48f60e6c 100644
--- a/src/translations/bitmessage_en_pirate.ts
+++ b/src/translations/bitmessage_en_pirate.ts
@@ -241,7 +241,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="594"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -261,12 +261,12 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="996"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="999"/>
-        <source>Message sent. Sent at %1</source>
+        <source>Message sent. Sent at {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -276,7 +276,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1005"/>
-        <source>Acknowledgement of the message received %1</source>
+        <source>Acknowledgement of the message received {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -286,17 +286,17 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1011"/>
-        <source>Broadcast on %1</source>
+        <source>Broadcast on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1014"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1017"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -306,7 +306,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1023"/>
-        <source>Unknown status: %1 %2</source>
+        <source>Unknown status: {0} {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -347,7 +347,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1523"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -364,7 +364,7 @@ It is important that you back up this file.</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1530"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -430,7 +430,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1595"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -498,52 +498,52 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1959"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1991"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2000"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2003"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2006"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2009"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2012"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2015"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2018"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2021"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -558,7 +558,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -568,7 +568,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -703,7 +703,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2951"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -857,7 +857,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4361"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1052,7 +1052,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="44"/>
-        <source>Zoom level %1%</source>
+        <source>Zoom level {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1067,47 +1067,47 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4321"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1848"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2737"/>
-        <source>Waiting for PoW to finish... %1%</source>
+        <source>Waiting for PoW to finish... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2741"/>
-        <source>Shutting down Pybitmessage... %1%</source>
+        <source>Shutting down Pybitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2763"/>
-        <source>Waiting for objects to be sent... %1%</source>
+        <source>Waiting for objects to be sent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2773"/>
-        <source>Saving settings... %1%</source>
+        <source>Saving settings... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2782"/>
-        <source>Shutting down core... %1%</source>
+        <source>Shutting down core... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2785"/>
-        <source>Stopping notifications... %1%</source>
+        <source>Stopping notifications... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2791"/>
-        <source>Shutdown imminent... %1%</source>
+        <source>Shutdown imminent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
@@ -1128,7 +1128,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2718"/>
-        <source>Shutting down PyBitmessage... %1%</source>
+        <source>Shutting down PyBitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1148,12 +1148,12 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="165"/>
-        <source>Generating %1 new addresses.</source>
+        <source>Generating {0} new addresses.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="242"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1163,7 +1163,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1188,7 +1188,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="487"/>
-        <source>Broadcast sent on %1</source>
+        <source>Broadcast sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1208,7 +1208,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="647"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1220,17 +1220,17 @@ There is no required difficulty for version 2 addresses like this.</source>
     <message>
         <location filename="../class_singleWorker.py" line="675"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="684"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="696"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1240,7 +1240,7 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="819"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1255,12 +1255,12 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="942"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../upnp.py" line="220"/>
-        <source>UPnP port mapping established on port %1</source>
+        <source>UPnP port mapping established on port {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1623,27 +1623,27 @@ T&apos; &apos;Random Number&apos; option be selected by default but deterministi
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="137"/>
-        <source>Since startup on %1</source>
+        <source>Since startup on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="71"/>
-        <source>Down: %1/s  Total: %2</source>
+        <source>Down: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="73"/>
-        <source>Up: %1/s  Total: %2</source>
+        <source>Up: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="120"/>
-        <source>Total Connections: %1</source>
+        <source>Total Connections: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="129"/>
-        <source>Inventory lookups per second: %1</source>
+        <source>Inventory lookups per second: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff --git a/src/translations/bitmessage_eo.qm b/src/translations/bitmessage_eo.qm
index 77c20edfbc100594577d3e66405b12d4c0e33e21..76fac0960defd52d61cd0e5895ffd01e9e7096f2 100644
GIT binary patch
delta 6327
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

delta 6230
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

diff --git a/src/translations/bitmessage_eo.ts b/src/translations/bitmessage_eo.ts
index 5707a390..835de58d 100644
--- a/src/translations/bitmessage_eo.ts
+++ b/src/translations/bitmessage_eo.ts
@@ -350,8 +350,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="597"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>Iu de viaj adresoj, %1, estas malnova versio 1 adreso. Versioj 1 adresoj ne estas jam subtenataj. Ĉu ni povas forigi ĝin?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>Iu de viaj adresoj, {0}, estas malnova versio 1 adreso. Versioj 1 adresoj ne estas jam subtenataj. Ĉu ni povas forigi ĝin?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1030"/>
@@ -370,13 +370,13 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1039"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>Mesaĝo sendita. Atendado je konfirmo. Sendita je %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>Mesaĝo sendita. Atendado je konfirmo. Sendita je {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1042"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>Mesaĝo sendita. Sendita je %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>Mesaĝo sendita. Sendita je {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -385,8 +385,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1048"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>Ricevis konfirmon de la mesaĝo je %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>Ricevis konfirmon de la mesaĝo je {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2140"/>
@@ -395,18 +395,18 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1057"/>
-        <source>Broadcast on %1</source>
-        <translation>Elsendo je %1</translation>
+        <source>Broadcast on {0}</source>
+        <translation>Elsendo je {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1060"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>Problemo: la demandita laboro de la ricevonto estas pli malfacila ol vi pretas fari. %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>Problemo: la demandita laboro de la ricevonto estas pli malfacila ol vi pretas fari. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1063"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>Problemo: la ĉifroŝlosilo de la ricevonto estas rompita. Ne povis ĉifri la mesaĝon. %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>Problemo: la ĉifroŝlosilo de la ricevonto estas rompita. Ne povis ĉifri la mesaĝon. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1066"/>
@@ -415,8 +415,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1069"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>Nekonata stato: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>Nekonata stato: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1610"/>
@@ -456,10 +456,10 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1459"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation>Vi povas administri viajn ŝlosilojn per redakti la dosieron “keys.dat” en la dosierujo
-%1.
+{0}.
 Estas grava, ke vi faru sekurkopion de tiu dosiero.</translation>
     </message>
     <message>
@@ -475,10 +475,10 @@ Estas grava, ke vi faru sekurkopion de tiu dosiero.</translation>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1466"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation>Vi povas administri viajn ŝlosilojn per redakti la dosieron “keys.dat” en la dosierujo
-%1.
+{0}.
 Estas grava, ke vi faru sekurkopion de tiu dosiero. Ĉu vi volas malfermi la dosieron nun? (Bonvolu certigi ke Bitmesaĝo estas fermita antaŭ fari ŝanĝojn.)</translation>
     </message>
     <message>
@@ -543,7 +543,7 @@ Estas grava, ke vi faru sekurkopion de tiu dosiero. Ĉu vi volas malfermi la dos
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1603"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -611,52 +611,52 @@ Estas grava, ke vi faru sekurkopion de tiu dosiero. Ĉu vi volas malfermi la dos
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1899"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
-        <translation>La mesaĝon kiun vi provis sendi estas tro longa je %1 bitokoj. (La maksimumo estas 261644 bitokoj.) Bonvolu mallongigi ĝin antaŭ sendado.</translation>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <translation>La mesaĝon kiun vi provis sendi estas tro longa je {0} bitokoj. (La maksimumo estas 261644 bitokoj.) Bonvolu mallongigi ĝin antaŭ sendado.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1941"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
-        <translation>Eraro: via konto ne estas registrita je retpoŝta kluzo. Registranta nun kiel %1, bonvolu atendi ĝis la registrado finos antaŭ vi reprovos sendi iun ajn.</translation>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
+        <translation>Eraro: via konto ne estas registrita je retpoŝta kluzo. Registranta nun kiel {0}, bonvolu atendi ĝis la registrado finos antaŭ vi reprovos sendi iun ajn.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2008"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2011"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2014"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2017"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2020"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2023"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2029"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -671,8 +671,8 @@ Estas grava, ke vi faru sekurkopion de tiu dosiero. Ĉu vi volas malfermi la dos
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Dum prilaborado de adreso adreso %1, Bitmesaĝo ne povas kompreni numerojn %2 de adresversioj. Eble ĝisdatigu Bitmesaĝon al la plej nova versio.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Dum prilaborado de adreso adreso {0}, Bitmesaĝo ne povas kompreni numerojn {1} de adresversioj. Eble ĝisdatigu Bitmesaĝon al la plej nova versio.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
@@ -681,8 +681,8 @@ Estas grava, ke vi faru sekurkopion de tiu dosiero. Ĉu vi volas malfermi la dos
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Dum prilaborado de adreso %1, Bitmesaĝo ne povas priservi %2 fluojn numerojn. Eble ĝisdatigu Bitmesaĝon al la plej nova versio.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Dum prilaborado de adreso {0}, Bitmesaĝo ne povas priservi {1} fluojn numerojn. Eble ĝisdatigu Bitmesaĝon al la plej nova versio.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2035"/>
@@ -816,8 +816,8 @@ Estas grava, ke vi faru sekurkopion de tiu dosiero. Ĉu vi volas malfermi la dos
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3043"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>Bitmesaĝo ne povas trovi vian adreson %1. Ĉu eble vi forviŝis ĝin?</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>Bitmesaĝo ne povas trovi vian adreson {0}. Ĉu eble vi forviŝis ĝin?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3046"/>
@@ -974,7 +974,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4374"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1169,8 +1169,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="56"/>
-        <source>Zoom level %1%</source>
-        <translation>Pligrandigo: %1</translation>
+        <source>Zoom level {0}%</source>
+        <translation>Pligrandigo: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/blacklist.py" line="91"/>
@@ -1184,48 +1184,48 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4334"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1774"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
-        <translation>La nova versio de PyBitmessage estas disponebla: %1. Elŝutu ĝin de https://github.com/Bitmessage/PyBitmessage/releases/latest</translation>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <translation>La nova versio de PyBitmessage estas disponebla: {0}. Elŝutu ĝin de https://github.com/Bitmessage/PyBitmessage/releases/latest</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2817"/>
-        <source>Waiting for PoW to finish... %1%</source>
-        <translation>Atendado ĝis laborpruvo finiĝos… %1%</translation>
+        <source>Waiting for PoW to finish... {0}%</source>
+        <translation>Atendado ĝis laborpruvo finiĝos… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2826"/>
-        <source>Shutting down Pybitmessage... %1%</source>
-        <translation>Fermado de PyBitmessage… %1%</translation>
+        <source>Shutting down Pybitmessage... {0}%</source>
+        <translation>Fermado de PyBitmessage… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2845"/>
-        <source>Waiting for objects to be sent... %1%</source>
-        <translation>Atendado ĝis objektoj estos senditaj… %1%</translation>
+        <source>Waiting for objects to be sent... {0}%</source>
+        <translation>Atendado ĝis objektoj estos senditaj… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2862"/>
-        <source>Saving settings... %1%</source>
-        <translation>Konservado de agordoj… %1%</translation>
+        <source>Saving settings... {0}%</source>
+        <translation>Konservado de agordoj… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2875"/>
-        <source>Shutting down core... %1%</source>
-        <translation>Fermado de kerno… %1%</translation>
+        <source>Shutting down core... {0}%</source>
+        <translation>Fermado de kerno… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2881"/>
-        <source>Stopping notifications... %1%</source>
-        <translation>Haltigado de sciigoj… %1%</translation>
+        <source>Stopping notifications... {0}%</source>
+        <translation>Haltigado de sciigoj… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2885"/>
-        <source>Shutdown imminent... %1%</source>
-        <translation>Fermado tuj… %1%</translation>
+        <source>Shutdown imminent... {0}%</source>
+        <translation>Fermado tuj… {0}%</translation>
     </message>
     <message numerus="yes">
         <location filename="../bitmessageqt/bitmessageui.py" line="706"/>
@@ -1239,8 +1239,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2783"/>
-        <source>Shutting down PyBitmessage... %1%</source>
-        <translation>Fermado de PyBitmessage… %1%</translation>
+        <source>Shutting down PyBitmessage... {0}%</source>
+        <translation>Fermado de PyBitmessage… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1144"/>
@@ -1259,13 +1259,13 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="219"/>
-        <source>Generating %1 new addresses.</source>
-        <translation>Kreado de %1 novaj adresoj.</translation>
+        <source>Generating {0} new addresses.</source>
+        <translation>Kreado de {0} novaj adresoj.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="323"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
-        <translation>%1 jam estas en ‘Viaj Identigoj’. Ĝi ne estos aldonita ree.</translation>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <translation>{0} jam estas en ‘Viaj Identigoj’. Ĝi ne estos aldonita ree.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="377"/>
@@ -1274,7 +1274,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1299,8 +1299,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="612"/>
-        <source>Broadcast sent on %1</source>
-        <translation>Elsendo sendita je %1</translation>
+        <source>Broadcast sent on {0}</source>
+        <translation>Elsendo sendita je {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="722"/>
@@ -1319,8 +1319,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="877"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
-        <translation>Eraro: celadreso estas portebla aparato kiu necesas, ke la celadreso estu enhavita en la mesaĝo, sed tio estas malpermesita ne viaj agordoj. %1</translation>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
+        <translation>Eraro: celadreso estas portebla aparato kiu necesas, ke la celadreso estu enhavita en la mesaĝo, sed tio estas malpermesita ne viaj agordoj. {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="908"/>
@@ -1332,19 +1332,19 @@ Malfacilaĵo ne estas bezonata por adresoj versioj 2, kiel tiu ĉi adreso.</tran
     <message>
         <location filename="../class_singleWorker.py" line="944"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation>Kalkulado de laborpruvo, kiu endas por sendi mesaĝon.
-Ricevonto postulas malfacilaĵon: %1 kaj %2</translation>
+Ricevonto postulas malfacilaĵon: {0} kaj {1}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="986"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
-        <translation>Eraro: la demandita laboro de la ricevonto (%1 kaj %2) estas pli malfacila ol vi pretas fari. %3</translation>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
+        <translation>Eraro: la demandita laboro de la ricevonto ({0} kaj {1}) estas pli malfacila ol vi pretas fari. {2}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1010"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
-        <translation>Eraro: Vi provis sendi mesaĝon al vi mem aŭ al kanalo, tamen via ĉifroŝlosilo ne estas trovebla en la dosiero keys.dat. Mesaĝo ne povis esti ĉifrita. %1</translation>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
+        <translation>Eraro: Vi provis sendi mesaĝon al vi mem aŭ al kanalo, tamen via ĉifroŝlosilo ne estas trovebla en la dosiero keys.dat. Mesaĝo ne povis esti ĉifrita. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1045"/>
@@ -1353,8 +1353,8 @@ Ricevonto postulas malfacilaĵon: %1 kaj %2</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1214"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
-        <translation>Mesaĝo sendita. Atendado je konfirmo. Sendita je %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
+        <translation>Mesaĝo sendita. Atendado je konfirmo. Sendita je {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1033"/>
@@ -1368,13 +1368,13 @@ Ricevonto postulas malfacilaĵon: %1 kaj %2</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1383"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
-        <translation>Sendado de peto pri publika ĉifroŝlosilo. Atendado je respondo. Petis je %1</translation>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
+        <translation>Sendado de peto pri publika ĉifroŝlosilo. Atendado je respondo. Petis je {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="267"/>
-        <source>UPnP port mapping established on port %1</source>
-        <translation>UPnP pord-mapigo farita je pordo %1</translation>
+        <source>UPnP port mapping established on port {0}</source>
+        <translation>UPnP pord-mapigo farita je pordo {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="293"/>
@@ -1418,18 +1418,18 @@ Ricevonto postulas malfacilaĵon: %1 kaj %2</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="119"/>
-        <source>The name %1 was not found.</source>
-        <translation>La nomo %1 ne trovita.</translation>
+        <source>The name {0} was not found.</source>
+        <translation>La nomo {0} ne trovita.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="130"/>
-        <source>The namecoin query failed (%1)</source>
-        <translation>La namecoin-peto fiaskis (%1)</translation>
+        <source>The namecoin query failed ({0})</source>
+        <translation>La namecoin-peto fiaskis ({0})</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="134"/>
-        <source>Unknown namecoin interface type: %1</source>
-        <translation>Nekonata tipo de namecoin-fasado: %1</translation>
+        <source>Unknown namecoin interface type: {0}</source>
+        <translation>Nekonata tipo de namecoin-fasado: {0}</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="139"/>
@@ -1438,13 +1438,13 @@ Ricevonto postulas malfacilaĵon: %1 kaj %2</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="156"/>
-        <source>The name %1 has no associated Bitmessage address.</source>
-        <translation>La nomo %1 ne estas atribuita kun bitmesaĝa adreso.</translation>
+        <source>The name {0} has no associated Bitmessage address.</source>
+        <translation>La nomo {0} ne estas atribuita kun bitmesaĝa adreso.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="185"/>
-        <source>Success!  Namecoind version %1 running.</source>
-        <translation>Sukceso! Namecoind versio %1 funkcias.</translation>
+        <source>Success!  Namecoind version {0} running.</source>
+        <translation>Sukceso! Namecoind versio {0} funkcias.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="196"/>
@@ -1507,53 +1507,53 @@ Bonvenon al facila kaj sekura Bitmesaĝo
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1960"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address %1</source>
-        <translation>Eraro: bitmesaĝaj adresoj komenciĝas kun BM-. Bonvolu kontroli la adreson de ricevonto %1</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address {0}</source>
+        <translation>Eraro: bitmesaĝaj adresoj komenciĝas kun BM-. Bonvolu kontroli la adreson de ricevonto {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1966"/>
-        <source>Error: The recipient address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>Eraro: la adreso de ricevonto %1 estas malprave tajpita aŭ kopiita. Bonvolu kontroli ĝin.</translation>
+        <source>Error: The recipient address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>Eraro: la adreso de ricevonto {0} estas malprave tajpita aŭ kopiita. Bonvolu kontroli ĝin.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1972"/>
-        <source>Error: The recipient address %1 contains invalid characters. Please check it.</source>
-        <translation>Eraro: la adreso de ricevonto %1 enhavas malpermesatajn simbolojn. Bonvolu kontroli ĝin.</translation>
+        <source>Error: The recipient address {0} contains invalid characters. Please check it.</source>
+        <translation>Eraro: la adreso de ricevonto {0} enhavas malpermesatajn simbolojn. Bonvolu kontroli ĝin.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1978"/>
-        <source>Error: The version of the recipient address %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
-        <translation>Eraro: la versio de adreso de ricevonto %1 estas tro alta. Eble vi devas ĝisdatigi vian bitmesaĝan programon aŭ via sagaca konato uzas alian programon.</translation>
+        <source>Error: The version of the recipient address {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <translation>Eraro: la versio de adreso de ricevonto {0} estas tro alta. Eble vi devas ĝisdatigi vian bitmesaĝan programon aŭ via sagaca konato uzas alian programon.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1986"/>
-        <source>Error: Some data encoded in the recipient address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Eraro: kelkaj datumoj koditaj en la adreso de ricevonto %1 estas tro mallongaj. Povus esti ke io en la programo de via konato malfunkcias.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Eraro: kelkaj datumoj koditaj en la adreso de ricevonto {0} estas tro mallongaj. Povus esti ke io en la programo de via konato malfunkcias.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1994"/>
-        <source>Error: Some data encoded in the recipient address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Eraro: kelkaj datumoj koditaj en la adreso de ricevonto %1 estas tro longaj. Povus esti ke io en la programo de via konato malfunkcias.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Eraro: kelkaj datumoj koditaj en la adreso de ricevonto {0} estas tro longaj. Povus esti ke io en la programo de via konato malfunkcias.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2002"/>
-        <source>Error: Some data encoded in the recipient address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Eraro: kelkaj datumoj koditaj en la adreso de ricevonto %1 estas misformitaj. Povus esti ke io en la programo de via konato malfunkcias.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Eraro: kelkaj datumoj koditaj en la adreso de ricevonto {0} estas misformitaj. Povus esti ke io en la programo de via konato malfunkcias.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2010"/>
-        <source>Error: Something is wrong with the recipient address %1.</source>
-        <translation>Eraro: io malĝustas kun la adreso de ricevonto %1.</translation>
+        <source>Error: Something is wrong with the recipient address {0}.</source>
+        <translation>Eraro: io malĝustas kun la adreso de ricevonto {0}.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2159"/>
-        <source>Error: %1</source>
-        <translation>Eraro: %1</translation>
+        <source>Error: {0}</source>
+        <translation>Eraro: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2276"/>
-        <source>From %1</source>
-        <translation>De %1</translation>
+        <source>From {0}</source>
+        <translation>De {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2680"/>
@@ -1665,8 +1665,8 @@ Bonvenon al facila kaj sekura Bitmesaĝo
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="84"/>
-        <source>The link &quot;%1&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
-        <translation>La ligilo &quot;%1&quot; estos malfermita per foliumilo. Tio povas esti malsekura, ĝi povos malanonimigi vin aŭ elŝuti malicajn datumojn. Ĉu vi certas?</translation>
+        <source>The link &quot;{0}&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
+        <translation>La ligilo &quot;{0}&quot; estos malfermita per foliumilo. Tio povas esti malsekura, ĝi povos malanonimigi vin aŭ elŝuti malicajn datumojn. Ĉu vi certas?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="134"/>
@@ -2001,8 +2001,8 @@ La “hazardnombra” adreso estas antaŭagordita, sed antaŭkalkuleblaj adresoj
     </message>
     <message>
         <location filename="../bitmessageqt/dialogs.py" line="64"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>Vi uzas TCP-pordon %1 (tio ĉi estas ŝanĝebla en la agordoj).</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>Vi uzas TCP-pordon {0} (tio ĉi estas ŝanĝebla en la agordoj).</translation>
     </message>
 </context>
 <context>
@@ -2054,28 +2054,28 @@ La “hazardnombra” adreso estas antaŭagordita, sed antaŭkalkuleblaj adresoj
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="242"/>
-        <source>Since startup on %1</source>
-        <translation>Ekde lanĉo de la programo je %1</translation>
+        <source>Since startup on {0}</source>
+        <translation>Ekde lanĉo de la programo je {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="140"/>
-        <source>Down: %1/s  Total: %2</source>
-        <translation>Elŝuto: %1/s Sume: %2</translation>
+        <source>Down: {0}/s  Total: {1}</source>
+        <translation>Elŝuto: {0}/s Sume: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="146"/>
-        <source>Up: %1/s  Total: %2</source>
-        <translation>Alŝuto: %1/s Sume: %2</translation>
+        <source>Up: {0}/s  Total: {1}</source>
+        <translation>Alŝuto: {0}/s Sume: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="219"/>
-        <source>Total Connections: %1</source>
-        <translation>Ĉiuj konektoj: %1</translation>
+        <source>Total Connections: {0}</source>
+        <translation>Ĉiuj konektoj: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="234"/>
-        <source>Inventory lookups per second: %1</source>
-        <translation>Petoj pri inventaro en sekundo: %1</translation>
+        <source>Inventory lookups per second: {0}</source>
+        <translation>Petoj pri inventaro en sekundo: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.ui" line="256"/>
@@ -2240,8 +2240,8 @@ La “hazardnombra” adreso estas antaŭagordita, sed antaŭkalkuleblaj adresoj
     <name>newchandialog</name>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="68"/>
-        <source>Successfully created / joined chan %1</source>
-        <translation>Sukcese kreis / anigis al la kanalo %1</translation>
+        <source>Successfully created / joined chan {0}</source>
+        <translation>Sukcese kreis / anigis al la kanalo {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="75"/>
diff --git a/src/translations/bitmessage_fr.qm b/src/translations/bitmessage_fr.qm
index 8cb08a3ad728c12b465349fc4b3be1cb1c2a9230..d54bf1649533cafe0ae660f2a3a35bfb1c7d5ff5 100644
GIT binary patch
delta 6280
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
b&l<rL;l)NV4^z1p>uyQ?@If!OBK&^<kF*bD

delta 6065
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

diff --git a/src/translations/bitmessage_fr.ts b/src/translations/bitmessage_fr.ts
index 149fd1ef..44fa0248 100644
--- a/src/translations/bitmessage_fr.ts
+++ b/src/translations/bitmessage_fr.ts
@@ -314,8 +314,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="597"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>Une de vos adresses, %1, est une vieille adresse de la version 1. Les adresses de la version 1 ne sont plus supportées. Nous pourrions la supprimer maintenant?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>Une de vos adresses, {0}, est une vieille adresse de la version 1. Les adresses de la version 1 ne sont plus supportées. Nous pourrions la supprimer maintenant?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1042"/>
@@ -334,13 +334,13 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1051"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>Message envoyé. En attente de l’accusé de réception. Envoyé %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>Message envoyé. En attente de l’accusé de réception. Envoyé {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1054"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>Message envoyé. Envoyé %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>Message envoyé. Envoyé {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -349,8 +349,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1060"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>Accusé de réception reçu %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>Accusé de réception reçu {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2152"/>
@@ -359,18 +359,18 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1069"/>
-        <source>Broadcast on %1</source>
-        <translation>Message de diffusion du %1</translation>
+        <source>Broadcast on {0}</source>
+        <translation>Message de diffusion du {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1072"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>Problème : Le travail demandé par le destinataire est plus difficile que ce que vous avez paramétré. %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>Problème : Le travail demandé par le destinataire est plus difficile que ce que vous avez paramétré. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1075"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>Problème : la clé de chiffrement du destinataire n’est pas bonne. Il n’a pas été possible de chiffrer le message. %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>Problème : la clé de chiffrement du destinataire n’est pas bonne. Il n’a pas été possible de chiffrer le message. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1078"/>
@@ -379,8 +379,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1081"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>Statut inconnu : %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>Statut inconnu : {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1622"/>
@@ -420,9 +420,9 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1471"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
-        <translation>Vous pouvez éditer vos clés en éditant le fichier keys.dat stocké dans le répertoire %1.
+        <translation>Vous pouvez éditer vos clés en éditant le fichier keys.dat stocké dans le répertoire {0}.
 Il est important de faire des sauvegardes de ce fichier.</translation>
     </message>
     <message>
@@ -438,9 +438,9 @@ Il est important de faire des sauvegardes de ce fichier.</translation>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1478"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
-        <translation>Vous pouvez éditer vos clés en éditant le fichier keys.dat stocké dans le répertoire %1. Il est important de faire des sauvegardes de ce fichier. Souhaitez-vous l’ouvrir maintenant? (Assurez-vous de fermer Bitmessage avant d’effectuer des changements.)</translation>
+        <translation>Vous pouvez éditer vos clés en éditant le fichier keys.dat stocké dans le répertoire {0}. Il est important de faire des sauvegardes de ce fichier. Souhaitez-vous l’ouvrir maintenant? (Assurez-vous de fermer Bitmessage avant d’effectuer des changements.)</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1485"/>
@@ -504,7 +504,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1603"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -573,52 +573,52 @@ Le destinataire doit l’obtenir avant ce temps. Si votre client Bitmessage ne r
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1911"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
-        <translation>Le message que vous essayez d’envoyer est trop long de %1 octets (le  maximum est 261644 octets). Veuillez le réduire avant de l’envoyer.</translation>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <translation>Le message que vous essayez d’envoyer est trop long de {0} octets (le  maximum est 261644 octets). Veuillez le réduire avant de l’envoyer.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1953"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
-        <translation>Erreur : votre compte n’a pas été inscrit à une passerelle de courrier électronique. Envoi de l’inscription maintenant en tant que %1, veuillez patienter tandis que l’inscription est en cours de traitement, avant de retenter l’envoi.</translation>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
+        <translation>Erreur : votre compte n’a pas été inscrit à une passerelle de courrier électronique. Envoi de l’inscription maintenant en tant que {0}, veuillez patienter tandis que l’inscription est en cours de traitement, avant de retenter l’envoi.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2008"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2011"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2014"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2017"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2020"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2023"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2029"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -633,8 +633,8 @@ Le destinataire doit l’obtenir avant ce temps. Si votre client Bitmessage ne r
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2038"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Concernant l’adresse %1, Bitmessage ne peut pas comprendre les numéros de version de %2. Essayez de mettre à jour Bitmessage vers la dernière version.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Concernant l’adresse {0}, Bitmessage ne peut pas comprendre les numéros de version de {1}. Essayez de mettre à jour Bitmessage vers la dernière version.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2042"/>
@@ -643,8 +643,8 @@ Le destinataire doit l’obtenir avant ce temps. Si votre client Bitmessage ne r
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2042"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Concernant l’adresse %1, Bitmessage ne peut pas supporter les nombres de flux de %2. Essayez de mettre à jour Bitmessage vers la dernière version.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Concernant l’adresse {0}, Bitmessage ne peut pas supporter les nombres de flux de {1}. Essayez de mettre à jour Bitmessage vers la dernière version.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2047"/>
@@ -778,8 +778,8 @@ Le destinataire doit l’obtenir avant ce temps. Si votre client Bitmessage ne r
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3038"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>Bitmessage ne peut pas trouver votre adresse %1. Peut-être l’avez-vous supprimée?</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>Bitmessage ne peut pas trouver votre adresse {0}. Peut-être l’avez-vous supprimée?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3041"/>
@@ -936,7 +936,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4374"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1131,8 +1131,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="47"/>
-        <source>Zoom level %1%</source>
-        <translation>Niveau de zoom %1%</translation>
+        <source>Zoom level {0}%</source>
+        <translation>Niveau de zoom {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/blacklist.py" line="91"/>
@@ -1146,48 +1146,48 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4334"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1786"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
-        <translation>Une nouvelle version de PyBitmessage est disponible : %1. Veuillez la télécharger depuis https://github.com/Bitmessage/PyBitmessage/releases/latest</translation>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <translation>Une nouvelle version de PyBitmessage est disponible : {0}. Veuillez la télécharger depuis https://github.com/Bitmessage/PyBitmessage/releases/latest</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2801"/>
-        <source>Waiting for PoW to finish... %1%</source>
-        <translation>En attente de la fin de la PoW… %1%</translation>
+        <source>Waiting for PoW to finish... {0}%</source>
+        <translation>En attente de la fin de la PoW… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2811"/>
-        <source>Shutting down Pybitmessage... %1%</source>
-        <translation>Pybitmessage en cours d’arrêt… %1%</translation>
+        <source>Shutting down Pybitmessage... {0}%</source>
+        <translation>Pybitmessage en cours d’arrêt… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2830"/>
-        <source>Waiting for objects to be sent... %1%</source>
-        <translation>En attente de l’envoi des objets… %1%</translation>
+        <source>Waiting for objects to be sent... {0}%</source>
+        <translation>En attente de l’envoi des objets… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2848"/>
-        <source>Saving settings... %1%</source>
-        <translation>Enregistrement des paramètres… %1%</translation>
+        <source>Saving settings... {0}%</source>
+        <translation>Enregistrement des paramètres… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2861"/>
-        <source>Shutting down core... %1%</source>
-        <translation>Cœur en cours d’arrêt… %1%</translation>
+        <source>Shutting down core... {0}%</source>
+        <translation>Cœur en cours d’arrêt… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2867"/>
-        <source>Stopping notifications... %1%</source>
-        <translation>Arrêt des notifications… %1%</translation>
+        <source>Stopping notifications... {0}%</source>
+        <translation>Arrêt des notifications… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2871"/>
-        <source>Shutdown imminent... %1%</source>
-        <translation>Arrêt imminent… %1%</translation>
+        <source>Shutdown imminent... {0}%</source>
+        <translation>Arrêt imminent… {0}%</translation>
     </message>
     <message numerus="yes">
         <location filename="../bitmessageqt/bitmessageui.py" line="706"/>
@@ -1201,8 +1201,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2769"/>
-        <source>Shutting down PyBitmessage... %1%</source>
-        <translation>PyBitmessage en cours d’arrêt… %1%</translation>
+        <source>Shutting down PyBitmessage... {0}%</source>
+        <translation>PyBitmessage en cours d’arrêt… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1156"/>
@@ -1221,13 +1221,13 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="219"/>
-        <source>Generating %1 new addresses.</source>
-        <translation>Production de %1 nouvelles adresses.</translation>
+        <source>Generating {0} new addresses.</source>
+        <translation>Production de {0} nouvelles adresses.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="323"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
-        <translation>%1 est déjà dans &quot;Vos identités&quot;. Il ne sera pas ajouté de nouveau.</translation>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <translation>{0} est déjà dans &quot;Vos identités&quot;. Il ne sera pas ajouté de nouveau.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="377"/>
@@ -1236,7 +1236,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1261,8 +1261,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="613"/>
-        <source>Broadcast sent on %1</source>
-        <translation>Message de diffusion envoyé %1</translation>
+        <source>Broadcast sent on {0}</source>
+        <translation>Message de diffusion envoyé {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="721"/>
@@ -1281,8 +1281,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="878"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
-        <translation>Problème : la destination est un dispositif mobile qui nécessite que la destination soit incluse dans le message mais ceci n’est pas autorisé dans vos paramètres. %1</translation>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
+        <translation>Problème : la destination est un dispositif mobile qui nécessite que la destination soit incluse dans le message mais ceci n’est pas autorisé dans vos paramètres. {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="909"/>
@@ -1294,19 +1294,19 @@ Il n’y a pas de difficulté requise pour les adresses version 2 comme celle-ci
     <message>
         <location filename="../class_singleWorker.py" line="944"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation>Travail en cours afin d’envoyer le message.
-Difficulté requise du destinataire : %1 et %2</translation>
+Difficulté requise du destinataire : {0} et {1}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="984"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
-        <translation>Problème : Le travail demandé par le destinataire (%1 and %2) est plus difficile que ce que vous avez paramétré. %3</translation>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
+        <translation>Problème : Le travail demandé par le destinataire ({0} and {1}) est plus difficile que ce que vous avez paramétré. {2}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1012"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
-        <translation>Problème : Vous essayez d’envoyer un message à un canal ou à vous-même mais votre clef de chiffrement n’a pas été trouvée dans le fichier keys.dat. Le message ne peut pas être chiffré. %1</translation>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
+        <translation>Problème : Vous essayez d’envoyer un message à un canal ou à vous-même mais votre clef de chiffrement n’a pas été trouvée dans le fichier keys.dat. Le message ne peut pas être chiffré. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1057"/>
@@ -1315,8 +1315,8 @@ Difficulté requise du destinataire : %1 et %2</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1218"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
-        <translation>Message envoyé. En attente de l’accusé de réception. Envoyé %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
+        <translation>Message envoyé. En attente de l’accusé de réception. Envoyé {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1045"/>
@@ -1330,13 +1330,13 @@ Difficulté requise du destinataire : %1 et %2</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1387"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
-        <translation>Envoi d’une demande de clef publique. En attente d’une réponse. Demandée à %1</translation>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
+        <translation>Envoi d’une demande de clef publique. En attente d’une réponse. Demandée à {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="235"/>
-        <source>UPnP port mapping established on port %1</source>
-        <translation>Transfert de port UPnP établi sur le port %1</translation>
+        <source>UPnP port mapping established on port {0}</source>
+        <translation>Transfert de port UPnP établi sur le port {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="264"/>
@@ -1380,13 +1380,13 @@ Difficulté requise du destinataire : %1 et %2</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="115"/>
-        <source>The name %1 was not found.</source>
-        <translation>Le nom %1 n&apos;a pas été trouvé.</translation>
+        <source>The name {0} was not found.</source>
+        <translation>Le nom {0} n&apos;a pas été trouvé.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="124"/>
-        <source>The namecoin query failed (%1)</source>
-        <translation>La requête Namecoin a échouée (%1)</translation>
+        <source>The namecoin query failed ({0})</source>
+        <translation>La requête Namecoin a échouée ({0})</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="127"/>
@@ -1395,18 +1395,18 @@ Difficulté requise du destinataire : %1 et %2</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="133"/>
-        <source>The name %1 has no valid JSON data.</source>
-        <translation>Le nom %1 n&apos;a aucune donnée JSON valide.</translation>
+        <source>The name {0} has no valid JSON data.</source>
+        <translation>Le nom {0} n&apos;a aucune donnée JSON valide.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="141"/>
-        <source>The name %1 has no associated Bitmessage address.</source>
-        <translation>Le nom %1 n&apos;a aucune adresse Bitmessage d&apos;associée.</translation>
+        <source>The name {0} has no associated Bitmessage address.</source>
+        <translation>Le nom {0} n&apos;a aucune adresse Bitmessage d&apos;associée.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="171"/>
-        <source>Success!  Namecoind version %1 running.</source>
-        <translation>Succès ! Namecoind version %1 en cours d&apos;exécution.</translation>
+        <source>Success!  Namecoind version {0} running.</source>
+        <translation>Succès ! Namecoind version {0} en cours d&apos;exécution.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="182"/>
@@ -1470,53 +1470,53 @@ Bienvenue dans le facile et sécurisé Bitmessage
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1972"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address %1</source>
-        <translation>Erreur : Les adresses Bitmessage commencent par BM- Veuillez vérifier l&apos;adresse du destinataire %1</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address {0}</source>
+        <translation>Erreur : Les adresses Bitmessage commencent par BM- Veuillez vérifier l&apos;adresse du destinataire {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1978"/>
-        <source>Error: The recipient address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>Erreur : L’adresse du destinataire %1 n’est pas correctement tapée ou recopiée. Veuillez la vérifier.</translation>
+        <source>Error: The recipient address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>Erreur : L’adresse du destinataire {0} n’est pas correctement tapée ou recopiée. Veuillez la vérifier.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1984"/>
-        <source>Error: The recipient address %1 contains invalid characters. Please check it.</source>
-        <translation>Erreur : L’adresse du destinataire %1 contient des caractères invalides. Veuillez la vérifier.</translation>
+        <source>Error: The recipient address {0} contains invalid characters. Please check it.</source>
+        <translation>Erreur : L’adresse du destinataire {0} contient des caractères invalides. Veuillez la vérifier.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1990"/>
-        <source>Error: The version of the recipient address %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
-        <translation>Erreur : la version de l’adresse destinataire %1 est trop élevée. Vous devez mettre à niveau votre logiciel Bitmessage ou alors celui de votre connaissance est plus intelligent.</translation>
+        <source>Error: The version of the recipient address {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <translation>Erreur : la version de l’adresse destinataire {0} est trop élevée. Vous devez mettre à niveau votre logiciel Bitmessage ou alors celui de votre connaissance est plus intelligent.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1998"/>
-        <source>Error: Some data encoded in the recipient address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Erreur : quelques données codées dans l’adresse destinataire %1 sont trop courtes. Il pourrait y avoir un soucis avec le logiciel de votre connaissance.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Erreur : quelques données codées dans l’adresse destinataire {0} sont trop courtes. Il pourrait y avoir un soucis avec le logiciel de votre connaissance.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2006"/>
-        <source>Error: Some data encoded in the recipient address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Erreur : quelques données codées dans l’adresse destinataire %1 sont trop longues. Il pourrait y avoir un soucis avec le logiciel de votre connaissance.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Erreur : quelques données codées dans l’adresse destinataire {0} sont trop longues. Il pourrait y avoir un soucis avec le logiciel de votre connaissance.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2014"/>
-        <source>Error: Some data encoded in the recipient address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Erreur : quelques données codées dans l’adresse destinataire %1 sont mal formées. Il pourrait y avoir un soucis avec le logiciel de votre connaissance.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Erreur : quelques données codées dans l’adresse destinataire {0} sont mal formées. Il pourrait y avoir un soucis avec le logiciel de votre connaissance.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2022"/>
-        <source>Error: Something is wrong with the recipient address %1.</source>
-        <translation>Erreur : quelque chose ne va pas avec l&apos;adresse de destinataire %1.</translation>
+        <source>Error: Something is wrong with the recipient address {0}.</source>
+        <translation>Erreur : quelque chose ne va pas avec l&apos;adresse de destinataire {0}.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2172"/>
-        <source>Error: %1</source>
-        <translation>Erreur : %1</translation>
+        <source>Error: {0}</source>
+        <translation>Erreur : {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2289"/>
-        <source>From %1</source>
-        <translation>De %1</translation>
+        <source>From {0}</source>
+        <translation>De {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2692"/>
@@ -1628,8 +1628,8 @@ Bienvenue dans le facile et sécurisé Bitmessage
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="72"/>
-        <source>The link &quot;%1&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
-        <translation>Le lien &quot;%1&quot; s&apos;ouvrira dans un navigateur. Cela pourrait être un risque de sécurité, cela pourrait vous désanonymiser ou télécharger des données malveillantes. Êtes-vous sûr(e) ?</translation>
+        <source>The link &quot;{0}&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
+        <translation>Le lien &quot;{0}&quot; s&apos;ouvrira dans un navigateur. Cela pourrait être un risque de sécurité, cela pourrait vous désanonymiser ou télécharger des données malveillantes. Êtes-vous sûr(e) ?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="117"/>
@@ -1964,8 +1964,8 @@ L’option &quot;Nombre Aléatoire&quot; est sélectionnée par défaut mais les
     </message>
     <message>
         <location filename="../bitmessageqt/dialogs.py" line="58"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>Vous utilisez le port TCP %1. (Ceci peut être changé dans les paramètres).</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>Vous utilisez le port TCP {0}. (Ceci peut être changé dans les paramètres).</translation>
     </message>
 </context>
 <context>
@@ -2017,28 +2017,28 @@ L’option &quot;Nombre Aléatoire&quot; est sélectionnée par défaut mais les
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="171"/>
-        <source>Since startup on %1</source>
-        <translation>Démarré depuis le %1</translation>
+        <source>Since startup on {0}</source>
+        <translation>Démarré depuis le {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="90"/>
-        <source>Down: %1/s  Total: %2</source>
-        <translation>Téléchargées : %1/s  Total : %2</translation>
+        <source>Down: {0}/s  Total: {1}</source>
+        <translation>Téléchargées : {0}/s  Total : {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="92"/>
-        <source>Up: %1/s  Total: %2</source>
-        <translation>Téléversées : %1/s  Total : %2</translation>
+        <source>Up: {0}/s  Total: {1}</source>
+        <translation>Téléversées : {0}/s  Total : {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="153"/>
-        <source>Total Connections: %1</source>
-        <translation>Total des connexions : %1</translation>
+        <source>Total Connections: {0}</source>
+        <translation>Total des connexions : {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="163"/>
-        <source>Inventory lookups per second: %1</source>
-        <translation>Consultations d’inventaire par seconde : %1</translation>
+        <source>Inventory lookups per second: {0}</source>
+        <translation>Consultations d’inventaire par seconde : {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.ui" line="256"/>
@@ -2203,8 +2203,8 @@ L’option &quot;Nombre Aléatoire&quot; est sélectionnée par défaut mais les
     <name>newchandialog</name>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="38"/>
-        <source>Successfully created / joined chan %1</source>
-        <translation>Le canal %1 a été rejoint ou créé avec succès.</translation>
+        <source>Successfully created / joined chan {0}</source>
+        <translation>Le canal {0} a été rejoint ou créé avec succès.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="44"/>
diff --git a/src/translations/bitmessage_it.qm b/src/translations/bitmessage_it.qm
index d38e68bcbefa8b2931e7cd8aa7d982c5c33a8a48..8b2e991529957789d98dd66a9869c2332225a637 100644
GIT binary patch
delta 1198
zcmY*XdrVVz6#j1SqmNstAfm!d%d|i{Xesh4PvvQ{ftxU$Zs8H=1m@a=V#Xs_5;NCq
z1R)pE2;q@18OX!Q1`&+gBH1R}I?T+>7M94EI41&&Y%vV79ptb5aqqdm-#zC$-}$~X
z*U9v@F-?KS6dAxZ1Ho4Tei(@Q8p!(!FwO(78|nNAC`|_r6f|dOT}9v<IKcD`_zSD_
z(+7Mz{fu}BexL`)@`BLEQu2FHW?Tba@J05yWgw&!*{v#yO*mLy1MFYNp{nZuIyPfm
z3XYV~eFlSL&UnIULG2|M5HyGGGGD-a2Ddd0z#(fh=F-Li<u*pywF2z%WwZfA$S5-L
zK0`z#m&y5&&bwb`O4t4X68agtwF9uUG0odNL^zRY8>B{AiOfU~5w-YB(Tvu$MRwxh
zW55t6>n!{Y(7I)p9E29UTh@F37SXMc-L1O`q?gJbw{9m|iLAPTCzLN)U3)SRbDxcI
zoC5Y)*^c~oY3!ryxO$TEjqKEUIvc=x<Tl{>zRhTz;WWD%fyAwxrr>?RmHL!R8cPRK
z&75u6MEZ?$@2sZ*v2mO`rUwYi<1U|NXxuB@fPsLbeYk<J59vJ14WB*&B!A0|wENM0
z3HQZ<fpF@%$!a~IU*=<%FOWQ~ymg9vh;QWMOKI%A-TaI9?vPA7`216!!i7j9f4ZK4
zGo$&7Pn<x?DBtF$!iaJHlUJ!A<N-f^oQOr%@Y7vUfUcGQn<ZkQLxN8^<!25GvA=!?
zBzc6MneS;q4hUl#6UWsHclyb|jA-GP!&IMkOCGE8(BxI}?4Kw`Y>{7Xn0tdZp>X4a
zfZ5F$yS5pv$K=z8^8q1B{vc<AahD=a_>%zF6-RHhP=12q`UF{EI;WWWh$J`9DE;Ph
z$@oHLVDDd)*C>UvAwk8;_EFla<S1oV;=e>|Qu%w{8W}RLQn{>j-zc4AwJwXww(t^>
z{6IC7yh`@nR9zESXy_Hy=N_s~a*N7p8cJU-2Cv+p-V0*WXFrpgM)Beg<W|aFv0X{x
zm{!Gm-CK#nE^)y(gj9b{T+o%%dQ7Xu&a>oZm-@B3w`k40)h#Ij<aVICuj&a9U@TBi
zFr=pC(PqpnSKrnw(mr)d;hZ+e&&%N=vkh0gYSIWs@9*{WZa*N)@>cA~A$oq&+nhG|
zytl`^6R<MgORwyqre`!}Jv9-=G!vDC6}?nO9T%m+q@1h#VkomuS_)4HtwjXt6l4Pg
zdUj^poX(=-Hl5REuQcg$>8&fO)YV4RNgtd2Mv6_#GR9lVvsn0Nb&}gM8(4eLZqqs5
z)Kxo9R_KaKN-7A#<_y~?8aW;LkA^Wxu2h5m|Bd|f9F;{UbZHK|-Bw&#=CC{CpLOxs
RzkOsjbyOvH6B`-B{0A6jN8tbf

delta 1618
zcmaJ=4@{J082^2D-*@occgN8M9_i|i;vn$&bEv=}g7Qal1tk!aChj;c?%=#L?qjDo
zIMcadQouenCq%kYrh=51Ofa*w*=*rl4p*zCV_F$1O=_k#d+>nS)Sm6W=g<2-zvuTn
z&wG2?nUVLI)>(0xe*<hA5PcBfdV#rL0wt$_xDjA^9Ql_3M=tPOX<MG&zZ_gM3nY96
zZpSS;6u@=RVbTb=?k*sog<`LqE;oYDI|9tspkUh=5aU3>b|vXnyjWciEE-4Anxg<Z
z13JxuGAG4zZ(^A@op82b-G_c4as<1bS|D*f&T5*0BFh$x<O~3OIK%H62coo$ekKu$
z3ue+EJ3vGVn8IQ5pLvOK+_?hG?_%7RPQbj4X$v1B!YNF94;9Lv!why2QFEv?kI^$~
zX$7ORIA!M>P7sNeva8#5R6IkjYUb$fXL3VFCXn*8JjK%pEKHJjmT#iwO63EplXO2)
z>S1*LVOI0xJ3xk-)vSCA$iB`l=+7k`&DwhtXe6JozJGFn)MU0Pr3)}EW%su*)WOGW
zcdQ+lC$Qb756HjB_HHZ#GEcC59bptNXTKPYB^)1na;*_Cj&Z4DJE&ucvz(^UrZ;iv
z4(cR*PCNJfg>%$;1XtepDUck+ZCp>li%s0l8(tu*hih-5#H2&qp_eHk<`-_DiijnP
zQiDuq=~8t4c!oBct>_P;th9Q?xqUSGJd@(5Qo5CMJV@J08!^2Xl&Tz}Hfw_lz9*fe
zl)jbe_`iboH;(|866vZ;XC4oJ_1IRxFhBU{APp{|CHVA5G^oU3KJ0QaEoB)$YtNsA
zy@`+h<_{n?O^TPtM6TdF4%6;4XY;!<?h=Dz{I4Z<fTu4jm3|AwH%WDJy??gSKKcUj
z*`Pd-d5eZWpgbbbLrA`+JU&F(3pNP+TH<f47NW<G5r<L1wr&x{zZP0Q{{fg2CG7l;
z){qq^bntVD+qiIH_v6G#CyZ)iXpA$2QA0H?`IPFFh8jR0qS~4@lh&tI?Ok&Nm>Kt)
zYLKCEnlA<PVyo(`<{G_*PAQ(%M+$0>pSBm<qpr_sAsRE(H_z__WceY%5rsq}L|Vn_
zquWA;5}%+JZ--o88b!q#G>JwkqUhHQii9=qHz!rRBrVA(Jjh*pmdTW^$Imw!VGgFh
z3>5T>D6o6I)+)QfYj=wYhGO~}tfIkamYBq_zSk4RWQ<BGGn?g<B)x6E$ka=oWSz`t
z?%SMvTf>;7-?O8QFyMa7@Dh(`bs2IzZnxbgIz4W0`UK$JEM4D~?88cbBDJv)?^5*%
zp{IMFOc2xD=LgJ)>Bv*l)`USVlbG&(ANHYbKPY}Ic`*3MNYUg8?P6LgrY+Y!>y2rD
z%2+pLJVevu|37*2(T8fcUG#ZsYrLXWtn-rR%W+uUxlXIgQx#fh_bsZdtfh4Z0uZbf
zo;oq$C>?g!>dCk!#A_Etr@LzMqI4#AmUL9m`w>b2|Ha@7tWKBBQD>_OC;Z~N3a_o!
zxq4!!0Whu8=5gn{JoJWY*G}T|6)vl-#^v;i+Pqbio^KWHKI_z}k`UcxPIslp2Q?*6
PJdr?RP!n}7W0-#d<FI*e

diff --git a/src/translations/bitmessage_it.ts b/src/translations/bitmessage_it.ts
index dbefce30..229e02fa 100644
--- a/src/translations/bitmessage_it.ts
+++ b/src/translations/bitmessage_it.ts
@@ -279,8 +279,8 @@ Il gateway email non condurrà operazioni PGP a vostro nome. È possibile
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="594"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>Uno dei tuoi indirizzi, %1, è un indirizzo vecchio versione 1. Gli indirizzi versione 1 non sono più supportati. Posso eliminarlo ora?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>Uno dei tuoi indirizzi, {0}, è un indirizzo vecchio versione 1. Gli indirizzi versione 1 non sono più supportati. Posso eliminarlo ora?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="987"/>
@@ -299,13 +299,13 @@ Il gateway email non condurrà operazioni PGP a vostro nome. È possibile
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="996"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="999"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>Messaggio inviato. Inviato a %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>Messaggio inviato. Inviato a {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -314,7 +314,7 @@ Il gateway email non condurrà operazioni PGP a vostro nome. È possibile
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1005"/>
-        <source>Acknowledgement of the message received %1</source>
+        <source>Acknowledgement of the message received {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -324,17 +324,17 @@ Il gateway email non condurrà operazioni PGP a vostro nome. È possibile
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1011"/>
-        <source>Broadcast on %1</source>
+        <source>Broadcast on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1014"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1017"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -344,7 +344,7 @@ Il gateway email non condurrà operazioni PGP a vostro nome. È possibile
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1023"/>
-        <source>Unknown status: %1 %2</source>
+        <source>Unknown status: {0} {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -385,7 +385,7 @@ Il gateway email non condurrà operazioni PGP a vostro nome. È possibile
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1523"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -402,7 +402,7 @@ It is important that you back up this file.</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1530"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -468,7 +468,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1595"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -536,52 +536,52 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1959"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1991"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2000"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2003"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2006"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2009"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2012"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2015"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2018"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2021"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -596,7 +596,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -606,7 +606,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -741,7 +741,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2951"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -895,7 +895,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4361"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1090,7 +1090,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="44"/>
-        <source>Zoom level %1%</source>
+        <source>Zoom level {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1105,47 +1105,47 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4321"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1848"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2737"/>
-        <source>Waiting for PoW to finish... %1%</source>
+        <source>Waiting for PoW to finish... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2741"/>
-        <source>Shutting down Pybitmessage... %1%</source>
+        <source>Shutting down Pybitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2763"/>
-        <source>Waiting for objects to be sent... %1%</source>
+        <source>Waiting for objects to be sent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2773"/>
-        <source>Saving settings... %1%</source>
+        <source>Saving settings... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2782"/>
-        <source>Shutting down core... %1%</source>
+        <source>Shutting down core... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2785"/>
-        <source>Stopping notifications... %1%</source>
+        <source>Stopping notifications... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2791"/>
-        <source>Shutdown imminent... %1%</source>
+        <source>Shutdown imminent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
@@ -1166,7 +1166,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2718"/>
-        <source>Shutting down PyBitmessage... %1%</source>
+        <source>Shutting down PyBitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1186,12 +1186,12 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="165"/>
-        <source>Generating %1 new addresses.</source>
+        <source>Generating {0} new addresses.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="242"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1201,7 +1201,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1226,7 +1226,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="487"/>
-        <source>Broadcast sent on %1</source>
+        <source>Broadcast sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1246,7 +1246,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="647"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1258,17 +1258,17 @@ There is no required difficulty for version 2 addresses like this.</source>
     <message>
         <location filename="../class_singleWorker.py" line="675"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="684"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="696"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1278,7 +1278,7 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="819"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1293,12 +1293,12 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="942"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../upnp.py" line="220"/>
-        <source>UPnP port mapping established on port %1</source>
+        <source>UPnP port mapping established on port {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1660,27 +1660,27 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="137"/>
-        <source>Since startup on %1</source>
+        <source>Since startup on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="71"/>
-        <source>Down: %1/s  Total: %2</source>
+        <source>Down: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="73"/>
-        <source>Up: %1/s  Total: %2</source>
+        <source>Up: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="120"/>
-        <source>Total Connections: %1</source>
-        <translation>Connessioni totali: %1</translation>
+        <source>Total Connections: {0}</source>
+        <translation>Connessioni totali: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="129"/>
-        <source>Inventory lookups per second: %1</source>
+        <source>Inventory lookups per second: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff --git a/src/translations/bitmessage_ja.qm b/src/translations/bitmessage_ja.qm
index 77fa63d1a56a57cc9ccf7027e4239bd296202a80..8637aa2e127307a220983e1c4b545ed2d0b9f72b 100644
GIT binary patch
delta 6170
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

delta 5896
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

diff --git a/src/translations/bitmessage_ja.ts b/src/translations/bitmessage_ja.ts
index f11289f5..2b1ebe97 100644
--- a/src/translations/bitmessage_ja.ts
+++ b/src/translations/bitmessage_ja.ts
@@ -352,8 +352,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="597"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>%1は古いバージョン1のアドレスです。バージョン1のアドレスはサポートが終了しています。すぐに削除しますか?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>{0}は古いバージョン1のアドレスです。バージョン1のアドレスはサポートが終了しています。すぐに削除しますか?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1030"/>
@@ -372,13 +372,13 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1039"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>メッセージを送信しました。 確認応答を待っています。 %1 で送信されました</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>メッセージを送信しました。 確認応答を待っています。 {0} で送信されました</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1042"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>メッセージは送信されました。送信先: %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>メッセージは送信されました。送信先: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -387,8 +387,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1048"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>メッセージの確認を受け取りました %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>メッセージの確認を受け取りました {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2140"/>
@@ -397,18 +397,18 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1057"/>
-        <source>Broadcast on %1</source>
-        <translation>配信: %1</translation>
+        <source>Broadcast on {0}</source>
+        <translation>配信: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1060"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>問題: 受信者が要求している処理は現在あなたが設定しているよりも高い難易度です。 %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>問題: 受信者が要求している処理は現在あなたが設定しているよりも高い難易度です。 {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1063"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>問題: 受信者の暗号鍵は正当でない物です。メッセージを暗号化できません。 %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>問題: 受信者の暗号鍵は正当でない物です。メッセージを暗号化できません。 {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1066"/>
@@ -417,8 +417,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1069"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>不明なステータス: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>不明なステータス: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1610"/>
@@ -458,9 +458,9 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1459"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
-        <translation>%1
+        <translation>{0}
 に保存されているkeys.datファイルを編集することで鍵を管理できます。
 このファイルをバックアップしておくことは重要です。</translation>
     </message>
@@ -477,9 +477,9 @@ It is important that you back up this file.</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1466"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
-        <translation>%1
+        <translation>{0}
 に保存されているkeys.datファイルを編集することで鍵を管理できます。
 ファイルをバックアップしておくことは重要です。すぐにファイルを開きますか?(必ず編集する前にBitmessageを終了してください)</translation>
     </message>
@@ -545,7 +545,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1603"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -616,52 +616,52 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1899"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
-        <translation>送信しようとしているメッセージが %1 バイト長すぎます。  (最大は261644バイトです)。 送信する前に短くしてください。</translation>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <translation>送信しようとしているメッセージが {0} バイト長すぎます。  (最大は261644バイトです)。 送信する前に短くしてください。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1941"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
-        <translation>エラー: アカウントがメールゲートウェイに登録されていません。 今 %1 として登録を送信しています。送信を再試行する前に、登録が処理されるのをお待ちください。</translation>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
+        <translation>エラー: アカウントがメールゲートウェイに登録されていません。 今 {0} として登録を送信しています。送信を再試行する前に、登録が処理されるのをお待ちください。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2008"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2011"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2014"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2017"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2020"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2023"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2029"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -676,8 +676,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>アドレス %1 に接続しています。%2 のバージョン番号は処理できません。Bitmessageを最新のバージョンへアップデートしてください。</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>アドレス {0} に接続しています。{1} のバージョン番号は処理できません。Bitmessageを最新のバージョンへアップデートしてください。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
@@ -686,8 +686,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>アドレス %1 に接続しています。%2 のストリーム番号は処理できません。Bitmessageを最新のバージョンへアップデートしてください。</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>アドレス {0} に接続しています。{1} のストリーム番号は処理できません。Bitmessageを最新のバージョンへアップデートしてください。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2035"/>
@@ -821,8 +821,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3043"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>アドレス %1 が見つかりません。既に削除していませんか?</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>アドレス {0} が見つかりません。既に削除していませんか?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3046"/>
@@ -979,7 +979,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4374"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1174,8 +1174,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="56"/>
-        <source>Zoom level %1%</source>
-        <translation>ズーム レベル %1%</translation>
+        <source>Zoom level {0}%</source>
+        <translation>ズーム レベル {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/blacklist.py" line="91"/>
@@ -1189,48 +1189,48 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4334"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1774"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
-        <translation>新しいバージョンの PyBitmessage が利用可能です: %1。  https://github.com/Bitmessage/PyBitmessage/releases/latest からダウンロードしてください</translation>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <translation>新しいバージョンの PyBitmessage が利用可能です: {0}。  https://github.com/Bitmessage/PyBitmessage/releases/latest からダウンロードしてください</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2817"/>
-        <source>Waiting for PoW to finish... %1%</source>
-        <translation>PoW(プルーフオブワーク)が完了するのを待っています... %1%</translation>
+        <source>Waiting for PoW to finish... {0}%</source>
+        <translation>PoW(プルーフオブワーク)が完了するのを待っています... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2826"/>
-        <source>Shutting down Pybitmessage... %1%</source>
-        <translation>Pybitmessageをシャットダウンしています... %1%</translation>
+        <source>Shutting down Pybitmessage... {0}%</source>
+        <translation>Pybitmessageをシャットダウンしています... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2845"/>
-        <source>Waiting for objects to be sent... %1%</source>
-        <translation>オブジェクトの送信待ち... %1%</translation>
+        <source>Waiting for objects to be sent... {0}%</source>
+        <translation>オブジェクトの送信待ち... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2862"/>
-        <source>Saving settings... %1%</source>
-        <translation>設定を保存しています... %1%</translation>
+        <source>Saving settings... {0}%</source>
+        <translation>設定を保存しています... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2875"/>
-        <source>Shutting down core... %1%</source>
-        <translation>コアをシャットダウンしています... %1%</translation>
+        <source>Shutting down core... {0}%</source>
+        <translation>コアをシャットダウンしています... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2881"/>
-        <source>Stopping notifications... %1%</source>
-        <translation>通知を停止しています... %1%</translation>
+        <source>Stopping notifications... {0}%</source>
+        <translation>通知を停止しています... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2885"/>
-        <source>Shutdown imminent... %1%</source>
-        <translation>すぐにシャットダウンします... %1%</translation>
+        <source>Shutdown imminent... {0}%</source>
+        <translation>すぐにシャットダウンします... {0}%</translation>
     </message>
     <message numerus="yes">
         <location filename="../bitmessageqt/bitmessageui.py" line="706"/>
@@ -1244,8 +1244,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2783"/>
-        <source>Shutting down PyBitmessage... %1%</source>
-        <translation>PyBitmessageをシャットダウンしています... %1%</translation>
+        <source>Shutting down PyBitmessage... {0}%</source>
+        <translation>PyBitmessageをシャットダウンしています... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1144"/>
@@ -1264,13 +1264,13 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="219"/>
-        <source>Generating %1 new addresses.</source>
-        <translation>%1 の新しいアドレスを生成しています。</translation>
+        <source>Generating {0} new addresses.</source>
+        <translation>{0} の新しいアドレスを生成しています。</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="323"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
-        <translation>%1はすでに「アドレス一覧」にあります。 もう一度追加できません。</translation>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <translation>{0}はすでに「アドレス一覧」にあります。 もう一度追加できません。</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="377"/>
@@ -1279,7 +1279,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1304,8 +1304,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="612"/>
-        <source>Broadcast sent on %1</source>
-        <translation>配信が送信されました %1</translation>
+        <source>Broadcast sent on {0}</source>
+        <translation>配信が送信されました {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="722"/>
@@ -1324,8 +1324,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="877"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
-        <translation>問題: メッセージに含まれた宛先のリクエストはモバイルデバイスですが、設定では許可されていません。 %1</translation>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
+        <translation>問題: メッセージに含まれた宛先のリクエストはモバイルデバイスですが、設定では許可されていません。 {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="908"/>
@@ -1337,18 +1337,18 @@ There is no required difficulty for version 2 addresses like this.</source>
     <message>
         <location filename="../class_singleWorker.py" line="944"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation>メッセージの送信に必要な処理を行っています。
-受信者の必要な難易度: %1 および %2</translation>
+受信者の必要な難易度: {0} および {1}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="986"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
-        <translation>問題: 受信者が要求している処理 (%1 および %2) は、現在あなたが設定しているよりも高い難易度です。 %3</translation>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
+        <translation>問題: 受信者が要求している処理 ({0} および {1}) は、現在あなたが設定しているよりも高い難易度です。 {2}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1010"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
         <translation>問題: あなた自身またはチャンネルにメッセージを送信しようとしていますが、暗号鍵がkeys.datファイルに見つかりませんでした。 メッセージを暗号化できませんでした。 %1</translation>
     </message>
     <message>
@@ -1358,8 +1358,8 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1214"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
-        <translation>メッセージを送信しました。 確認応答を待っています。 %1 で送信しました</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
+        <translation>メッセージを送信しました。 確認応答を待っています。 {0} で送信しました</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1033"/>
@@ -1373,13 +1373,13 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1383"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
-        <translation>公開鍵のリクエストを送信しています。 返信を待っています。 %1 でリクエストしました</translation>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
+        <translation>公開鍵のリクエストを送信しています。 返信を待っています。 {0} でリクエストしました</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="267"/>
-        <source>UPnP port mapping established on port %1</source>
-        <translation>ポート%1でUPnPポートマッピングが確立しました</translation>
+        <source>UPnP port mapping established on port {0}</source>
+        <translation>ポート{0}でUPnPポートマッピングが確立しました</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="293"/>
@@ -1423,18 +1423,18 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../namecoin.py" line="119"/>
-        <source>The name %1 was not found.</source>
-        <translation>名前 %1 が見つかりませんでした。</translation>
+        <source>The name {0} was not found.</source>
+        <translation>名前 {0} が見つかりませんでした。</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="130"/>
-        <source>The namecoin query failed (%1)</source>
-        <translation>namecoin のクエリに失敗しました (%1)</translation>
+        <source>The namecoin query failed ({0})</source>
+        <translation>namecoin のクエリに失敗しました ({0})</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="134"/>
-        <source>Unknown namecoin interface type: %1</source>
-        <translation>不明な namecoin インターフェースタイプ: %1</translation>
+        <source>Unknown namecoin interface type: {0}</source>
+        <translation>不明な namecoin インターフェースタイプ: {0}</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="139"/>
@@ -1443,13 +1443,13 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../namecoin.py" line="156"/>
-        <source>The name %1 has no associated Bitmessage address.</source>
-        <translation>名前 %1 は関連付けられた Bitmessage アドレスがありません。</translation>
+        <source>The name {0} has no associated Bitmessage address.</source>
+        <translation>名前 {0} は関連付けられた Bitmessage アドレスがありません。</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="185"/>
-        <source>Success!  Namecoind version %1 running.</source>
-        <translation>成功!  Namecoind バージョン %1 が実行中。</translation>
+        <source>Success!  Namecoind version {0} running.</source>
+        <translation>成功!  Namecoind バージョン {0} が実行中。</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="196"/>
@@ -1513,53 +1513,53 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1960"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address %1</source>
-        <translation>エラー: BitmessageのアドレスはBM-で始まります。 受信者のアドレス %1 を確認してください</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address {0}</source>
+        <translation>エラー: BitmessageのアドレスはBM-で始まります。 受信者のアドレス {0} を確認してください</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1966"/>
-        <source>Error: The recipient address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>エラー: 受信者のアドレス %1 は正しく入力、またはコピーされていません。確認して下さい。</translation>
+        <source>Error: The recipient address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>エラー: 受信者のアドレス {0} は正しく入力、またはコピーされていません。確認して下さい。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1972"/>
-        <source>Error: The recipient address %1 contains invalid characters. Please check it.</source>
-        <translation>エラー: 受信者のアドレス %1 は不正な文字を含んでいます。確認して下さい。</translation>
+        <source>Error: The recipient address {0} contains invalid characters. Please check it.</source>
+        <translation>エラー: 受信者のアドレス {0} は不正な文字を含んでいます。確認して下さい。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1978"/>
-        <source>Error: The version of the recipient address %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
-        <translation>エラー: 受信者アドレスのバージョン %1 は高すぎます。 Bitmessageソフトウェアをアップグレードする必要があるか、連絡先が賢明になっているかのいずれかです。</translation>
+        <source>Error: The version of the recipient address {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <translation>エラー: 受信者アドレスのバージョン {0} は高すぎます。 Bitmessageソフトウェアをアップグレードする必要があるか、連絡先が賢明になっているかのいずれかです。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1986"/>
-        <source>Error: Some data encoded in the recipient address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
-        <translation>エラー: アドレス %1 でエンコードされたデータが短すぎます。連絡先のソフトウェアが何かしら誤っている可能性があります。</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
+        <translation>エラー: アドレス {0} でエンコードされたデータが短すぎます。連絡先のソフトウェアが何かしら誤っている可能性があります。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1994"/>
-        <source>Error: Some data encoded in the recipient address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
-        <translation>エラー: 受信者のアドレス %1 でエンコードされたデータが短すぎます。連絡先のソフトウェアが何かしら誤っている可能性があります。</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
+        <translation>エラー: 受信者のアドレス {0} でエンコードされたデータが短すぎます。連絡先のソフトウェアが何かしら誤っている可能性があります。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2002"/>
-        <source>Error: Some data encoded in the recipient address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
-        <translation>エラー: 受信者のアドレス %1 でエンコードされたデータの一部が不正です。連絡先のソフトウェアが何かしら誤っている可能性があります。</translation>
+        <source>Error: Some data encoded in the recipient address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <translation>エラー: 受信者のアドレス {0} でエンコードされたデータの一部が不正です。連絡先のソフトウェアが何かしら誤っている可能性があります。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2010"/>
-        <source>Error: Something is wrong with the recipient address %1.</source>
-        <translation>エラー: 受信者のアドレス %1 には何かしら誤りがあります。</translation>
+        <source>Error: Something is wrong with the recipient address {0}.</source>
+        <translation>エラー: 受信者のアドレス {0} には何かしら誤りがあります。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2159"/>
-        <source>Error: %1</source>
-        <translation>エラー: %1</translation>
+        <source>Error: {0}</source>
+        <translation>エラー: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2276"/>
-        <source>From %1</source>
-        <translation>送信元 %1</translation>
+        <source>From {0}</source>
+        <translation>送信元 {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2680"/>
@@ -1671,8 +1671,8 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="84"/>
-        <source>The link &quot;%1&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
-        <translation>リンク &quot;%1&quot; はブラウザで開きます。 セキュリティリスクの可能性があります。匿名性がなくなったり、悪意のあるデータをダウンロードする可能性があります。 よろしいですか?</translation>
+        <source>The link &quot;{0}&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
+        <translation>リンク &quot;{0}&quot; はブラウザで開きます。 セキュリティリスクの可能性があります。匿名性がなくなったり、悪意のあるデータをダウンロードする可能性があります。 よろしいですか?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="134"/>
@@ -2006,8 +2006,8 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/dialogs.py" line="64"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>使用中のポート %1 (設定で変更できます)。</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>使用中のポート {0} (設定で変更できます)。</translation>
     </message>
 </context>
 <context>
@@ -2059,28 +2059,28 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="242"/>
-        <source>Since startup on %1</source>
-        <translation>起動日時 %1</translation>
+        <source>Since startup on {0}</source>
+        <translation>起動日時 {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="140"/>
-        <source>Down: %1/s  Total: %2</source>
-        <translation>ダウン: %1/秒  合計: %2</translation>
+        <source>Down: {0}/s  Total: {1}</source>
+        <translation>ダウン: {0}/秒  合計: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="146"/>
-        <source>Up: %1/s  Total: %2</source>
-        <translation>アップ: %1/秒  合計: %2</translation>
+        <source>Up: {0}/s  Total: {1}</source>
+        <translation>アップ: {0}/秒  合計: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="219"/>
-        <source>Total Connections: %1</source>
-        <translation>接続数: %1</translation>
+        <source>Total Connections: {0}</source>
+        <translation>接続数: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="234"/>
-        <source>Inventory lookups per second: %1</source>
-        <translation>毎秒のインベントリ検索: %1</translation>
+        <source>Inventory lookups per second: {0}</source>
+        <translation>毎秒のインベントリ検索: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.ui" line="256"/>
@@ -2245,8 +2245,8 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     <name>newchandialog</name>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="68"/>
-        <source>Successfully created / joined chan %1</source>
-        <translation>チャンネル %1 を正常に作成 / 参加しました</translation>
+        <source>Successfully created / joined chan {0}</source>
+        <translation>チャンネル {0} を正常に作成 / 参加しました</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="75"/>
diff --git a/src/translations/bitmessage_nb.ts b/src/translations/bitmessage_nb.ts
index 21f641c0..0ee74d6a 100644
--- a/src/translations/bitmessage_nb.ts
+++ b/src/translations/bitmessage_nb.ts
@@ -240,7 +240,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="564"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -250,12 +250,12 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="786"/>
-        <source>%1 hours</source>
+        <source>{0} hours</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="789"/>
-        <source>%1 days</source>
+        <source>{0} days</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -275,12 +275,12 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="974"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="977"/>
-        <source>Message sent. Sent at %1</source>
+        <source>Message sent. Sent at {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -290,7 +290,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="983"/>
-        <source>Acknowledgement of the message received %1</source>
+        <source>Acknowledgement of the message received {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -300,17 +300,17 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="989"/>
-        <source>Broadcast on %1</source>
+        <source>Broadcast on {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="992"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="995"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -320,7 +320,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1001"/>
-        <source>Unknown status: %1 %2</source>
+        <source>Unknown status: {0} {1}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -361,7 +361,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1499"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation type="unfinished"/>
     </message>
@@ -378,7 +378,7 @@ It is important that you back up this file.</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1506"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation type="unfinished"/>
     </message>
@@ -444,7 +444,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1571"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -512,52 +512,52 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1951"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1979"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1988"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1991"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1994"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1997"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2000"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2003"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2006"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2009"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -572,7 +572,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2018"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -582,7 +582,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2022"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -722,7 +722,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2849"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -876,7 +876,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4253"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1081,7 +1081,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="44"/>
-        <source>Zoom level %1%</source>
+        <source>Zoom level {0}%</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1096,7 +1096,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4213"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"/>
     </message>
 </context>
@@ -1449,47 +1449,47 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="15"/>
-        <source>Since startup on %1</source>
+        <source>Since startup on {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="57"/>
-        <source>Objects to be synced: %1</source>
+        <source>Objects to be synced: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="48"/>
-        <source>Processed %1 person-to-person messages.</source>
+        <source>Processed {0} person-to-person messages.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="53"/>
-        <source>Processed %1 broadcast messages.</source>
+        <source>Processed {0} broadcast messages.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="58"/>
-        <source>Processed %1 public keys.</source>
+        <source>Processed {0} public keys.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="66"/>
-        <source>Down: %1/s  Total: %2</source>
+        <source>Down: {0}/s  Total: {1}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="68"/>
-        <source>Up: %1/s  Total: %2</source>
+        <source>Up: {0}/s  Total: {1}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="115"/>
-        <source>Total Connections: %1</source>
+        <source>Total Connections: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="124"/>
-        <source>Inventory lookups per second: %1</source>
+        <source>Inventory lookups per second: {0}</source>
         <translation type="unfinished"/>
     </message>
 </context>
diff --git a/src/translations/bitmessage_nl.qm b/src/translations/bitmessage_nl.qm
index 72a7ade246f4d25a7a10aafa654fa76faccfbfa6..94ba152484a43c901f5f47efd3270b39da63a5c8 100644
GIT binary patch
delta 1180
zcmZ8feN0t#7=F$@ANQVn&*1{Xy<9-JaQPAe0SOJ3R%)3J+R~H?Fh^{B?cO;c1Hy|l
zH)kx+Q`D4<Hf#|lGh*f-`U5PZ!jEAN=Ne5%YfG|$uG**`JacRQarT_wIq&a%p7(j)
z{kspAb;br40qF=3S^&rcK<pV{a|YlT0k(ewMBD~mO6T|MK-ETI#SElN$*doOG+hRS
zt%USjHu02+zAKR1CBStYayRRvnxXWGK)M~)9h-=a2-`Fdcn{#|u5ln}oikq&-$&6q
zci3n<in{E?HazzlMc}B3iLYSC;Tj;N4LhrwiT|KfIZQ!1b`|Kras{vZj{(Uq;=}52
zz%Aq6`8gnFQBZpp0KHv^kEXDQLZKk+H2*IM#Xm|2LYol$kDdTLal(<vNnY3^4EIuT
zRKM`$>OKni+C*ol@ULY9U>mVy&h!G27c6zZ(w*>=mJeRO1*mhDj{<D$G%VLz$0#t>
za=Xh-Cq1IpE>q}wQNR2d&lRG#dmRvWQ_K(S3j#^a;)(KuZ0He3%W3H{pE&U@&*6K-
zNoysbZ8On#RC?^}Mo##XwD|{46uL{Q9LS=jg;HG_9kI+ydlxA%{%5JbLjXczrBfLv
ziAB<2cLW`(lg68pDX>IdbLTxe(IFR91vzPSkGyqeibS1q`Mx1K(I+2hBXR1OeEbj#
zqn?p3_2dEepnOl{<l)Im;A$=>nN=D)Nu2tp(tG0~GY?hHE(uPYP^La%1gW{!qG>wn
z9<cVe-=veJCfc7hF>!^pKe+V6S7H67m;&@T+gjxhUVPIwGE9qHWwwcr$JwA!T~k`Y
zow%m1U0PHnL9H+5_t07O*wsfkK$U%2C5Z%=y=I1I@8c#WW!X=!`<qdW+Rr%_IM`kL
zxo$3BjN}lC7*$NZBd9h}amW=%%EBlo{MOO=)pa(^babnn*!8_*x@itbdrK>6t!2hF
zTJ5J#GP3j9+v}s5X_xjzfWo|YwPB&21T`k6ZPhM2c`vd|x6RVg_!K>+?iR604+M8I
z;yJx}LkD@^*b*|i%0p{lq8edh!UYq3A<k9FB$7XO=K33%z3OamXL1Rnox=?zSUz9P
z1z1{Fq#I{^9z)eL29u;It59P6<=EzIK{i@#OZ^o-D~%VlG_fVS)yUB!jNi4q!SA#o
zRd~wS?|R~)Qjc-b<$6#myvmAH!{^@eP*uLs>|Xt#YH-XQr3%@`4X-cjJ}<mzLC*j9
n-Ou}L{eiuHZ+*k=hQ|5=FQs@}a_-9+EKJDLt%s=6A_)Hhj%XvQ

delta 1646
zcmb7EeN2>f9RECb&vSRry})sDcf5!kF9%2{f*OXVqA(qH^u|k@fS&LK2iJ4S9U~lg
zkx}L-(MxE=3>`U%l1(gQSZ+bOS%EaP(fWf8v^kAzGFzJ27ak}`YwNe&eSW|1@B90F
zKi`)<^#yhI#)aMqfIR@{Qvj|DSa=-RoB(Kgfb8=?;5e`~p6o+FX*#fY2<$~G`JV(k
zQUC<RfxWSeutUPAK5z{zU^)n{mHdNtLeU|ocXy%8%>d$`M?l6cz~aHCrhdSyoRBt=
zZ^3rxCJ{XiTa%iw7SFtN2EaiHBXf|uuMCLUi9E+H!k>|^*ayV@ff}&|ux`N-hk*kB
zj@w^SQlXO!-!=*8-eAH*NKjxhlNxXWFkfe~F4I|io)I5A3@?I>%mL#7Jt$>*+evBA
zQRcJd9TfPSg#J3_zHB3)>X9uOZ3m2JWvfT)fCXW)_qLA%{B_we7ZLk6%D$`ZBVj?Z
zpPI~6L6cnDz)|MQ<hr4gblxtvw5|mf4a*;O?FORD<%bLFy+o*&Uudoe45EBMDUh<K
zB#hd_K7Kl#G8<$!e?yt*^I4&5DU~pRb;eNzWVhI=dn7FUTefpQ1Na5AA11s{n8|jx
z1_EIPY=5<tgypc84PQ_T?{O(N-=Rvp#-)~0q9M)PmQn981$>h$-2E{S+{W#BnFPe1
z;@;g$jzR0Wi)||abq#l0PMI4bxnI)*s1hLx*QI32XiQPrNJ3(-DcXM+q|z%Dr>7E#
z>{SeZK&^<4QrbqSvgTvT&W16nXugE%CnSsvQFeN#E~2uPKW32-U8ri6;um^YqdL<|
zr7~r!E*$SC0w*8y71<3(`IP)3nvG$8l|B_vMDXq`y4R2KEtghOM%&a21PaKQ)McY|
zwj@ay9j-pH_71hCOWmWHq(pD1ds=A-L+)z4jE#C1x<tcQlXAa7P0Zxyl<_%D<Js@Y
zAzIVQQw2<Ynvv=W8aA)?x!Q8-d5O0CqYc!<Pqc5Z3!xsruKm<S!Yo&{y^Naz*d>fx
zqaE_6cgAd;>MB(@+^h?AjuV#YT;4pIp(`1>T^sjP;5xs7#9%5BB;*4mjOdXt^1gqf
zl>%|6{FB8>3Vg@E*F(f%;|>~#L%s=ZW_L6@td!?sgKxdr=+kT0=&VRmO;IZ77w_Au
zjgwiEd`FCd-7VT{Jd^Hw)s$wP>l0)X+-`e`U~vngXQ|~``nT9U7U>b=A^%w4Vsqv^
z-j%*r%*$tazcvT)OoH!<B`S`1VSyFNe<?8Lh~=WIO0>8=c2A`{m3S@I<Y_&b5i4}w
zM4D&?nx_OmbkT(WW6@V)X6a`)(`cIhUo_7)_wdNv!|dLR)wA3Gf$0zReRA5G{lHz}
z1D3xH^db1KRs8Rl`YfR;t+=>?nwRddJ6$Ev*mt-pJ<>s4DmY)9vHQ6NkH;aF%=!ga
z2ql6jRM<U2n(wz*KcC2l8=xn$d3?TYG3Isr4yV1S-05(83>h!j9nMYksLEbF!>qR1
a9b%qCEOu2vSL6~!p=c)lUJ@>2m_Gpt{9+>j

diff --git a/src/translations/bitmessage_nl.ts b/src/translations/bitmessage_nl.ts
index 3e7c1640..dd77549e 100644
--- a/src/translations/bitmessage_nl.ts
+++ b/src/translations/bitmessage_nl.ts
@@ -242,7 +242,7 @@ Voer het gewenste e-mail adres (inclusief @mailchuck.com) hieronder in:</transla
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="594"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -262,13 +262,13 @@ Voer het gewenste e-mail adres (inclusief @mailchuck.com) hieronder in:</transla
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="996"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>Bericht verzonden. Wachten op bevestiging. Verzonden op %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>Bericht verzonden. Wachten op bevestiging. Verzonden op {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="999"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>Bericht verzonden. Verzonden op %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>Bericht verzonden. Verzonden op {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -277,8 +277,8 @@ Voer het gewenste e-mail adres (inclusief @mailchuck.com) hieronder in:</transla
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1005"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>Bevestiging van het bericht ontvangen op %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>Bevestiging van het bericht ontvangen op {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2131"/>
@@ -287,17 +287,17 @@ Voer het gewenste e-mail adres (inclusief @mailchuck.com) hieronder in:</transla
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1011"/>
-        <source>Broadcast on %1</source>
+        <source>Broadcast on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1014"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1017"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -307,8 +307,8 @@ Voer het gewenste e-mail adres (inclusief @mailchuck.com) hieronder in:</transla
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1023"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>Status onbekend: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>Status onbekend: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1689"/>
@@ -348,7 +348,7 @@ Voer het gewenste e-mail adres (inclusief @mailchuck.com) hieronder in:</transla
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1523"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -365,7 +365,7 @@ It is important that you back up this file.</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1530"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -431,7 +431,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1595"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -499,52 +499,52 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1959"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1991"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2000"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2003"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2006"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2009"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2012"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2015"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2018"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2021"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -559,7 +559,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -569,7 +569,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -704,7 +704,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2951"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -858,7 +858,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4361"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1053,7 +1053,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="44"/>
-        <source>Zoom level %1%</source>
+        <source>Zoom level {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1068,47 +1068,47 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4321"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1848"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2737"/>
-        <source>Waiting for PoW to finish... %1%</source>
+        <source>Waiting for PoW to finish... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2741"/>
-        <source>Shutting down Pybitmessage... %1%</source>
+        <source>Shutting down Pybitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2763"/>
-        <source>Waiting for objects to be sent... %1%</source>
+        <source>Waiting for objects to be sent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2773"/>
-        <source>Saving settings... %1%</source>
+        <source>Saving settings... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2782"/>
-        <source>Shutting down core... %1%</source>
+        <source>Shutting down core... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2785"/>
-        <source>Stopping notifications... %1%</source>
+        <source>Stopping notifications... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2791"/>
-        <source>Shutdown imminent... %1%</source>
+        <source>Shutdown imminent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
@@ -1129,7 +1129,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2718"/>
-        <source>Shutting down PyBitmessage... %1%</source>
+        <source>Shutting down PyBitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1149,12 +1149,12 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="165"/>
-        <source>Generating %1 new addresses.</source>
+        <source>Generating {0} new addresses.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="242"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1164,7 +1164,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1189,7 +1189,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="487"/>
-        <source>Broadcast sent on %1</source>
+        <source>Broadcast sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1209,7 +1209,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="647"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1221,17 +1221,17 @@ There is no required difficulty for version 2 addresses like this.</source>
     <message>
         <location filename="../class_singleWorker.py" line="675"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="684"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="696"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1241,7 +1241,7 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="819"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1256,12 +1256,12 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="942"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../upnp.py" line="220"/>
-        <source>UPnP port mapping established on port %1</source>
+        <source>UPnP port mapping established on port {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1623,27 +1623,27 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="137"/>
-        <source>Since startup on %1</source>
+        <source>Since startup on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="71"/>
-        <source>Down: %1/s  Total: %2</source>
+        <source>Down: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="73"/>
-        <source>Up: %1/s  Total: %2</source>
+        <source>Up: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="120"/>
-        <source>Total Connections: %1</source>
+        <source>Total Connections: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="129"/>
-        <source>Inventory lookups per second: %1</source>
+        <source>Inventory lookups per second: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff --git a/src/translations/bitmessage_no.qm b/src/translations/bitmessage_no.qm
index 493d09ef7b51950aec8162fdd7ca145657d77c5e..9f2d9efbeb9540ff17539a3d439bcd96bb75c880 100644
GIT binary patch
delta 3967
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
LT1}gi$1wi_?e>J4

delta 4332
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
b`Amb!JlAB-vy?$ahn<<_I=G4)6fpK5u?={M

diff --git a/src/translations/bitmessage_no.ts b/src/translations/bitmessage_no.ts
index bb1d5278..d0ab3946 100644
--- a/src/translations/bitmessage_no.ts
+++ b/src/translations/bitmessage_no.ts
@@ -241,8 +241,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="594"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>En av dine gamle adresser er av den første typen og derfor ikke lenger støttet: %1. Derfor kan den vel slettes?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>En av dine gamle adresser er av den første typen og derfor ikke lenger støttet: {0}. Derfor kan den vel slettes?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="987"/>
@@ -261,13 +261,13 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="996"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>Beskjed sendt. Venter på bekreftelse. Sendt %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>Beskjed sendt. Venter på bekreftelse. Sendt {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="999"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>Beskjed sendt. Sendt %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>Beskjed sendt. Sendt {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -276,8 +276,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1005"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>Bekreftelse på beskjeden mottatt %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>Bekreftelse på beskjeden mottatt {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2131"/>
@@ -286,18 +286,18 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1011"/>
-        <source>Broadcast on %1</source>
-        <translation>Kringkasting på %1</translation>
+        <source>Broadcast on {0}</source>
+        <translation>Kringkasting på {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1014"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>Problem: Det nødvendige arbeidet som kreves utført av mottaker er mer krevende enn det som er satt som akseptabelt. %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>Problem: Det nødvendige arbeidet som kreves utført av mottaker er mer krevende enn det som er satt som akseptabelt. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1017"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>Problem: Mottakerens nøkkel kunne ikke brukes til å kryptere beskjeden. %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>Problem: Mottakerens nøkkel kunne ikke brukes til å kryptere beskjeden. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1020"/>
@@ -306,8 +306,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1023"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>Ukjent status: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>Ukjent status: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1689"/>
@@ -347,10 +347,10 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1523"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation>Du kan administrere nøklene dine ved å endre filen keys.dat lagret i 
- %1  
+ {0}  
 Det er viktig at du tar en sikkerhetskopi av denne filen.</translation>
     </message>
     <message>
@@ -366,10 +366,10 @@ Det er viktig at du tar en sikkerhetskopi av denne filen.</translation>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1530"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation>Du kan administrere dine nøkler ved å endre på filen keys.dat lagret i
- %1 
+ {0} 
 Det er viktig at du tar sikkerhetskopi av denne filen. Vil du åpne denne filen nå? (Vær sikker på å få avsluttet Bitmessage før du gjør endringer.)</translation>
     </message>
     <message>
@@ -434,8 +434,8 @@ Det er viktig at du tar sikkerhetskopi av denne filen. Vil du åpne denne filen
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1595"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
-        <translation>Opprettet ny kanal. For å la andre delta i din nye kanal gir du dem dem kanalnavnet og denne Bitmessage-adressen: %1. Denne adressen vises også i &apos;Dine identiteter&apos;.</translation>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
+        <translation>Opprettet ny kanal. For å la andre delta i din nye kanal gir du dem dem kanalnavnet og denne Bitmessage-adressen: {0}. Denne adressen vises også i &apos;Dine identiteter&apos;.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1604"/>
@@ -502,53 +502,53 @@ Det er viktig at du tar sikkerhetskopi av denne filen. Vil du åpne denne filen
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1959"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1991"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2000"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
-        <translation>Feil: Bitmessage-adresser begynner med BM-. Vennligst sjekk %1</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
+        <translation>Feil: Bitmessage-adresser begynner med BM-. Vennligst sjekk {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2003"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>Feil: Adressen %1 er skrevet eller kopiert inn feil. Vennligst sjekk den.</translation>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>Feil: Adressen {0} er skrevet eller kopiert inn feil. Vennligst sjekk den.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2006"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
-        <translation>Feil: Adressen %1 innerholder ugyldige tegn. Vennligst sjekk den.</translation>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
+        <translation>Feil: Adressen {0} innerholder ugyldige tegn. Vennligst sjekk den.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2009"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
-        <translation>Feil: Typenummeret for adressen %1 er for høy. Enten trenger du å oppgradere Bitmessaage-programvaren eller så er det fordi kontakten din har funnet på noe smart.</translation>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <translation>Feil: Typenummeret for adressen {0} er for høy. Enten trenger du å oppgradere Bitmessaage-programvaren eller så er det fordi kontakten din har funnet på noe smart.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2012"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Feil: Noen av de kodede dataene i adressen %1 er for korte. Det kan hende det er noe galt med programvaren til kontakten din.</translation>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Feil: Noen av de kodede dataene i adressen {0} er for korte. Det kan hende det er noe galt med programvaren til kontakten din.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2015"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Feil: Noen av de kodede dataene i adressen %1 er for lange. Det kan hende det er noe galt med programvaren til kontakten din.</translation>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Feil: Noen av de kodede dataene i adressen {0} er for lange. Det kan hende det er noe galt med programvaren til kontakten din.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2018"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2021"/>
-        <source>Error: Something is wrong with the address %1.</source>
-        <translation>Feil: Noe er galt med adressen %1.</translation>
+        <source>Error: Something is wrong with the address {0}.</source>
+        <translation>Feil: Noe er galt med adressen {0}.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2089"/>
@@ -562,8 +562,8 @@ Det er viktig at du tar sikkerhetskopi av denne filen. Vil du åpne denne filen
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Angående adressen %1, Bitmessage forstår ikke adressetypenumre for %2. Oppdater Bitmessage til siste versjon.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Angående adressen {0}, Bitmessage forstår ikke adressetypenumre for {1}. Oppdater Bitmessage til siste versjon.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
@@ -572,8 +572,8 @@ Det er viktig at du tar sikkerhetskopi av denne filen. Vil du åpne denne filen
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Angående adressen %1, Bitmessage kan ikke håndtere strømnumre for %2. Oppdater Bitmessage til siste utgivelse.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Angående adressen {0}, Bitmessage kan ikke håndtere strømnumre for {1}. Oppdater Bitmessage til siste utgivelse.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2039"/>
@@ -707,8 +707,8 @@ Det er viktig at du tar sikkerhetskopi av denne filen. Vil du åpne denne filen
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2951"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>Bitmessage kan ikke finne adressen %1. Kanskje du fjernet den?</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>Bitmessage kan ikke finne adressen {0}. Kanskje du fjernet den?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2954"/>
@@ -861,8 +861,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4361"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>Du benytter TCP-port %1. (Dette kan endres på i innstillingene).</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>Du benytter TCP-port {0}. (Dette kan endres på i innstillingene).</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/bitmessageui.py" line="648"/>
@@ -1056,8 +1056,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="44"/>
-        <source>Zoom level %1%</source>
-        <translation>Zoom nivå %1%</translation>
+        <source>Zoom level {0}%</source>
+        <translation>Zoom nivå {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/blacklist.py" line="91"/>
@@ -1071,47 +1071,47 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4321"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1848"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2737"/>
-        <source>Waiting for PoW to finish... %1%</source>
+        <source>Waiting for PoW to finish... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2741"/>
-        <source>Shutting down Pybitmessage... %1%</source>
+        <source>Shutting down Pybitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2763"/>
-        <source>Waiting for objects to be sent... %1%</source>
+        <source>Waiting for objects to be sent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2773"/>
-        <source>Saving settings... %1%</source>
+        <source>Saving settings... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2782"/>
-        <source>Shutting down core... %1%</source>
+        <source>Shutting down core... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2785"/>
-        <source>Stopping notifications... %1%</source>
+        <source>Stopping notifications... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2791"/>
-        <source>Shutdown imminent... %1%</source>
+        <source>Shutdown imminent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
@@ -1132,7 +1132,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2718"/>
-        <source>Shutting down PyBitmessage... %1%</source>
+        <source>Shutting down PyBitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1152,12 +1152,12 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="165"/>
-        <source>Generating %1 new addresses.</source>
+        <source>Generating {0} new addresses.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="242"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1167,7 +1167,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1192,7 +1192,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="487"/>
-        <source>Broadcast sent on %1</source>
+        <source>Broadcast sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1212,7 +1212,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="647"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1224,17 +1224,17 @@ There is no required difficulty for version 2 addresses like this.</source>
     <message>
         <location filename="../class_singleWorker.py" line="675"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="684"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="696"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1244,7 +1244,7 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="819"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1259,12 +1259,12 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="942"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../upnp.py" line="220"/>
-        <source>UPnP port mapping established on port %1</source>
+        <source>UPnP port mapping established on port {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1627,27 +1627,27 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="137"/>
-        <source>Since startup on %1</source>
-        <translation>Siden oppstart på %1</translation>
+        <source>Since startup on {0}</source>
+        <translation>Siden oppstart på {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="71"/>
-        <source>Down: %1/s  Total: %2</source>
-        <translation>Ned: %1/s Totalt: %2</translation>
+        <source>Down: {0}/s  Total: {1}</source>
+        <translation>Ned: {0}/s Totalt: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="73"/>
-        <source>Up: %1/s  Total: %2</source>
-        <translation>Opp: %1/s Totalt: %2</translation>
+        <source>Up: {0}/s  Total: {1}</source>
+        <translation>Opp: {0}/s Totalt: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="120"/>
-        <source>Total Connections: %1</source>
-        <translation>Antall tilkoblinger: %1</translation>
+        <source>Total Connections: {0}</source>
+        <translation>Antall tilkoblinger: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="129"/>
-        <source>Inventory lookups per second: %1</source>
+        <source>Inventory lookups per second: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff --git a/src/translations/bitmessage_pl.qm b/src/translations/bitmessage_pl.qm
index fb31e8d552193358b8243a8b0faa5c265c14fc51..215ad8cffdbd5cd8052d9b16f13ca532327d0223 100644
GIT binary patch
delta 6129
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

delta 5944
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
NJLy<c(Sro~{SR4Uqh0_2

diff --git a/src/translations/bitmessage_pl.ts b/src/translations/bitmessage_pl.ts
index 89c6162e..ee8a3e89 100644
--- a/src/translations/bitmessage_pl.ts
+++ b/src/translations/bitmessage_pl.ts
@@ -354,8 +354,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="597"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>Jeden z adresów, %1, jest starym adresem wersji 1. Adresy tej wersji nie są już wspierane. Usunąć go?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>Jeden z adresów, {0}, jest starym adresem wersji 1. Adresy tej wersji nie są już wspierane. Usunąć go?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1030"/>
@@ -374,13 +374,13 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1039"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>Wiadomość wysłana. Oczekiwanie na potwierdzenie odbioru. Wysłano o %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>Wiadomość wysłana. Oczekiwanie na potwierdzenie odbioru. Wysłano o {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1042"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>Wiadomość wysłana. Wysłano o %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>Wiadomość wysłana. Wysłano o {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -389,8 +389,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1048"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>Otrzymano potwierdzenie odbioru wiadomości %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>Otrzymano potwierdzenie odbioru wiadomości {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2140"/>
@@ -399,18 +399,18 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1057"/>
-        <source>Broadcast on %1</source>
-        <translation>Wysłana o %1</translation>
+        <source>Broadcast on {0}</source>
+        <translation>Wysłana o {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1060"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>Problem: dowód pracy wymagany przez odbiorcę jest trudniejszy niż zaakceptowany przez Ciebie. %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>Problem: dowód pracy wymagany przez odbiorcę jest trudniejszy niż zaakceptowany przez Ciebie. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1063"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>Problem: klucz szyfrujący odbiorcy jest nieprawidłowy. Nie można zaszyfrować wiadomości. %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>Problem: klucz szyfrujący odbiorcy jest nieprawidłowy. Nie można zaszyfrować wiadomości. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1066"/>
@@ -419,8 +419,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1069"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>Nieznany status: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>Nieznany status: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1610"/>
@@ -460,10 +460,10 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1459"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation>Możesz zarządzać swoimi kluczami edytując plik keys.dat znajdujący się
-%1
+{0}
 Zaleca się zrobienie kopii zapasowej tego pliku.</translation>
     </message>
     <message>
@@ -479,10 +479,10 @@ Zaleca się zrobienie kopii zapasowej tego pliku.</translation>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1466"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation>Możesz zarządzać swoimi kluczami edytując plik keys.dat znajdujący się
-%1
+{0}
 Zaleca się zrobienie kopii zapasowej tego pliku. Czy chcesz otworzyć ten plik teraz? (Zamknij Bitmessage przed wprowadzeniem jakichkolwiek zmian.)</translation>
     </message>
     <message>
@@ -547,7 +547,7 @@ Zaleca się zrobienie kopii zapasowej tego pliku. Czy chcesz otworzyć ten plik
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1603"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -618,52 +618,52 @@ Zwykle 4-5 dniowy TTL jest odpowiedni.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1899"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
-        <translation>Wiadomość jest za długa o %1 bajtów (maksymalna długość wynosi 261644 bajty). Przed wysłaniem należy ją skrócić.</translation>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <translation>Wiadomość jest za długa o {0} bajtów (maksymalna długość wynosi 261644 bajty). Przed wysłaniem należy ją skrócić.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1941"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
-        <translation>Błąd: Twoje konto nie było zarejestrowane w bramce poczty. Rejestrowanie jako %1, proszę poczekać na zakończenie procesu przed ponowną próbą wysłania wiadomości.</translation>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
+        <translation>Błąd: Twoje konto nie było zarejestrowane w bramce poczty. Rejestrowanie jako {0}, proszę poczekać na zakończenie procesu przed ponowną próbą wysłania wiadomości.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2008"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2011"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2014"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2017"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2020"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2023"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2029"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -678,8 +678,8 @@ Zwykle 4-5 dniowy TTL jest odpowiedni.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Odnośnie adresu %1, Bitmessage nie potrafi odczytać wersji adresu %2. Może uaktualnij Bitmessage do najnowszej wersji.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Odnośnie adresu {0}, Bitmessage nie potrafi odczytać wersji adresu {1}. Może uaktualnij Bitmessage do najnowszej wersji.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
@@ -688,8 +688,8 @@ Zwykle 4-5 dniowy TTL jest odpowiedni.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Odnośnie adresu %1, Bitmessage nie potrafi operować na strumieniu adresu %2. Może uaktualnij Bitmessage do najnowszej wersji.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Odnośnie adresu {0}, Bitmessage nie potrafi operować na strumieniu adresu {1}. Może uaktualnij Bitmessage do najnowszej wersji.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2035"/>
@@ -823,8 +823,8 @@ Zwykle 4-5 dniowy TTL jest odpowiedni.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3043"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>Bitmessage nie może odnaleźć Twojego adresu %1. Może go usunąłeś?</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>Bitmessage nie może odnaleźć Twojego adresu {0}. Może go usunąłeś?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3046"/>
@@ -981,7 +981,7 @@ Czy na pewno chcesz usunąć ten kanał?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4374"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1176,8 +1176,8 @@ Czy na pewno chcesz usunąć ten kanał?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="56"/>
-        <source>Zoom level %1%</source>
-        <translation>Poziom powiększenia %1%</translation>
+        <source>Zoom level {0}%</source>
+        <translation>Poziom powiększenia {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/blacklist.py" line="91"/>
@@ -1191,48 +1191,48 @@ Czy na pewno chcesz usunąć ten kanał?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4334"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1774"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
-        <translation>Nowa wersja Bitmessage jest dostępna: %1. Pobierz ją z https://github.com/Bitmessage/PyBitmessage/releases/latest</translation>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <translation>Nowa wersja Bitmessage jest dostępna: {0}. Pobierz ją z https://github.com/Bitmessage/PyBitmessage/releases/latest</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2817"/>
-        <source>Waiting for PoW to finish... %1%</source>
-        <translation>Oczekiwanie na wykonanie dowodu pracy… %1%</translation>
+        <source>Waiting for PoW to finish... {0}%</source>
+        <translation>Oczekiwanie na wykonanie dowodu pracy… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2826"/>
-        <source>Shutting down Pybitmessage... %1%</source>
-        <translation>Zamykanie PyBitmessage… %1%</translation>
+        <source>Shutting down Pybitmessage... {0}%</source>
+        <translation>Zamykanie PyBitmessage… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2845"/>
-        <source>Waiting for objects to be sent... %1%</source>
-        <translation>Oczekiwanie na wysłanie obiektów… %1%</translation>
+        <source>Waiting for objects to be sent... {0}%</source>
+        <translation>Oczekiwanie na wysłanie obiektów… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2862"/>
-        <source>Saving settings... %1%</source>
-        <translation>Zapisywanie ustawień… %1%</translation>
+        <source>Saving settings... {0}%</source>
+        <translation>Zapisywanie ustawień… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2875"/>
-        <source>Shutting down core... %1%</source>
-        <translation>Zamykanie rdzenia programu… %1%</translation>
+        <source>Shutting down core... {0}%</source>
+        <translation>Zamykanie rdzenia programu… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2881"/>
-        <source>Stopping notifications... %1%</source>
-        <translation>Zatrzymywanie powiadomień… %1%</translation>
+        <source>Stopping notifications... {0}%</source>
+        <translation>Zatrzymywanie powiadomień… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2885"/>
-        <source>Shutdown imminent... %1%</source>
-        <translation>Zaraz zamknę… %1%</translation>
+        <source>Shutdown imminent... {0}%</source>
+        <translation>Zaraz zamknę… {0}%</translation>
     </message>
     <message numerus="yes">
         <location filename="../bitmessageqt/bitmessageui.py" line="706"/>
@@ -1246,8 +1246,8 @@ Czy na pewno chcesz usunąć ten kanał?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2783"/>
-        <source>Shutting down PyBitmessage... %1%</source>
-        <translation>Zamykanie PyBitmessage… %1%</translation>
+        <source>Shutting down PyBitmessage... {0}%</source>
+        <translation>Zamykanie PyBitmessage… {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1144"/>
@@ -1266,13 +1266,13 @@ Czy na pewno chcesz usunąć ten kanał?</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="219"/>
-        <source>Generating %1 new addresses.</source>
-        <translation>Generowanie %1 nowych adresów.</translation>
+        <source>Generating {0} new addresses.</source>
+        <translation>Generowanie {0} nowych adresów.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="323"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
-        <translation>%1 jest już w &apos;Twoich tożsamościach&apos;. Nie zostanie tu dodany.</translation>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <translation>{0} jest już w &apos;Twoich tożsamościach&apos;. Nie zostanie tu dodany.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="377"/>
@@ -1281,7 +1281,7 @@ Czy na pewno chcesz usunąć ten kanał?</translation>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1306,8 +1306,8 @@ Czy na pewno chcesz usunąć ten kanał?</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="612"/>
-        <source>Broadcast sent on %1</source>
-        <translation>Wysłano: %1</translation>
+        <source>Broadcast sent on {0}</source>
+        <translation>Wysłano: {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="722"/>
@@ -1326,8 +1326,8 @@ Czy na pewno chcesz usunąć ten kanał?</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="877"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
-        <translation>Problem: adres docelowy jest urządzeniem przenośnym, które wymaga, aby adres docelowy był zawarty w wiadomości, ale jest to zabronione w Twoich ustawieniach. %1</translation>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
+        <translation>Problem: adres docelowy jest urządzeniem przenośnym, które wymaga, aby adres docelowy był zawarty w wiadomości, ale jest to zabronione w Twoich ustawieniach. {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="908"/>
@@ -1339,19 +1339,19 @@ Nie ma wymaganej trudności dla adresów w wersji 2, takich jak ten adres.</tran
     <message>
         <location filename="../class_singleWorker.py" line="944"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation>Wykonywanie dowodu pracy niezbędnego do wysłania wiadomości.
-Odbiorca wymaga trudności: %1 i %2</translation>
+Odbiorca wymaga trudności: {0} i {1}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="986"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
-        <translation>Problem: dowód pracy wymagany przez odbiorcę (%1 i %2) jest trudniejszy niż chciałbyś wykonać. %3</translation>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
+        <translation>Problem: dowód pracy wymagany przez odbiorcę ({0} i {1}) jest trudniejszy niż chciałbyś wykonać. {2}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1010"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
-        <translation>Problem: próbujesz wysłać wiadomość do siebie lub na kanał, ale Twój klucz szyfrujący nie został znaleziony w pliku keys.dat. Nie można zaszyfrować wiadomości. %1</translation>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
+        <translation>Problem: próbujesz wysłać wiadomość do siebie lub na kanał, ale Twój klucz szyfrujący nie został znaleziony w pliku keys.dat. Nie można zaszyfrować wiadomości. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1045"/>
@@ -1360,8 +1360,8 @@ Odbiorca wymaga trudności: %1 i %2</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1214"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
-        <translation>Wiadomość wysłana. Oczekiwanie na potwierdzenie odbioru. Wysłano o %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
+        <translation>Wiadomość wysłana. Oczekiwanie na potwierdzenie odbioru. Wysłano o {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1033"/>
@@ -1375,13 +1375,13 @@ Odbiorca wymaga trudności: %1 i %2</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1383"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
-        <translation>Wysyłanie prośby o klucz publiczny. Oczekiwanie na odpowiedź. Zapytano o %1</translation>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
+        <translation>Wysyłanie prośby o klucz publiczny. Oczekiwanie na odpowiedź. Zapytano o {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="267"/>
-        <source>UPnP port mapping established on port %1</source>
-        <translation>Mapowanie portów UPnP wykonano na porcie %1</translation>
+        <source>UPnP port mapping established on port {0}</source>
+        <translation>Mapowanie portów UPnP wykonano na porcie {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="293"/>
@@ -1425,18 +1425,18 @@ Odbiorca wymaga trudności: %1 i %2</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="119"/>
-        <source>The name %1 was not found.</source>
-        <translation>Ksywka %1 nie została znaleziona.</translation>
+        <source>The name {0} was not found.</source>
+        <translation>Ksywka {0} nie została znaleziona.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="130"/>
-        <source>The namecoin query failed (%1)</source>
-        <translation>Zapytanie namecoin nie powiodło się (%1)</translation>
+        <source>The namecoin query failed ({0})</source>
+        <translation>Zapytanie namecoin nie powiodło się ({0})</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="134"/>
-        <source>Unknown namecoin interface type: %1</source>
-        <translation>Nieznany typ interfejsu namecoin: %1</translation>
+        <source>Unknown namecoin interface type: {0}</source>
+        <translation>Nieznany typ interfejsu namecoin: {0}</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="139"/>
@@ -1445,13 +1445,13 @@ Odbiorca wymaga trudności: %1 i %2</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="156"/>
-        <source>The name %1 has no associated Bitmessage address.</source>
-        <translation>Ksywka %1 nie ma powiązanego adresu Bitmessage.</translation>
+        <source>The name {0} has no associated Bitmessage address.</source>
+        <translation>Ksywka {0} nie ma powiązanego adresu Bitmessage.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="185"/>
-        <source>Success!  Namecoind version %1 running.</source>
-        <translation>Namecoind wersja %1 działa poprawnie!</translation>
+        <source>Success!  Namecoind version {0} running.</source>
+        <translation>Namecoind wersja {0} działa poprawnie!</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="196"/>
@@ -1514,53 +1514,53 @@ Witamy w przyjaznym i bezpiecznym Bitmessage
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1960"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address %1</source>
-        <translation>Błąd: adresy Bitmessage zaczynają się od BM-. Proszę sprawdzić adres odbiorcy %1.</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address {0}</source>
+        <translation>Błąd: adresy Bitmessage zaczynają się od BM-. Proszę sprawdzić adres odbiorcy {0}.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1966"/>
-        <source>Error: The recipient address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>Błąd: adres odbiorcy %1 nie został skopiowany lub przepisany poprawnie. Proszę go sprawdzić.</translation>
+        <source>Error: The recipient address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>Błąd: adres odbiorcy {0} nie został skopiowany lub przepisany poprawnie. Proszę go sprawdzić.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1972"/>
-        <source>Error: The recipient address %1 contains invalid characters. Please check it.</source>
-        <translation>Błąd: adres odbiorcy %1 zawiera nieprawidłowe znaki. Proszę go sprawdzić.</translation>
+        <source>Error: The recipient address {0} contains invalid characters. Please check it.</source>
+        <translation>Błąd: adres odbiorcy {0} zawiera nieprawidłowe znaki. Proszę go sprawdzić.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1978"/>
-        <source>Error: The version of the recipient address %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
-        <translation>Błąd: wersja adresu odbiorcy %1 jest za wysoka. Musisz albo zaktualizować Twoje oprogramowanie Bitmessage, albo twój znajomy Cię trolluje.</translation>
+        <source>Error: The version of the recipient address {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <translation>Błąd: wersja adresu odbiorcy {0} jest za wysoka. Musisz albo zaktualizować Twoje oprogramowanie Bitmessage, albo twój znajomy Cię trolluje.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1986"/>
-        <source>Error: Some data encoded in the recipient address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Błąd: niektóre dane zakodowane w adresie odbiorcy %1 są zbyt krótkie. Być może coś nie działa należycie w programie Twojego znajomego.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Błąd: niektóre dane zakodowane w adresie odbiorcy {0} są zbyt krótkie. Być może coś nie działa należycie w programie Twojego znajomego.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1994"/>
-        <source>Error: Some data encoded in the recipient address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Błąd: niektóre dane zakodowane w adresie odbiorcy %1 są zbyt długie. Być może coś nie działa należycie w programie Twojego znajomego.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Błąd: niektóre dane zakodowane w adresie odbiorcy {0} są zbyt długie. Być może coś nie działa należycie w programie Twojego znajomego.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2002"/>
-        <source>Error: Some data encoded in the recipient address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Błąd: niektóre dane zakodowane w adresie odbiorcy %1 są uszkodzone. Być może coś nie działa należycie w programie Twojego znajomego.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Błąd: niektóre dane zakodowane w adresie odbiorcy {0} są uszkodzone. Być może coś nie działa należycie w programie Twojego znajomego.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2010"/>
-        <source>Error: Something is wrong with the recipient address %1.</source>
-        <translation>Błąd: coś jest nie tak z adresem odbiorcy %1.</translation>
+        <source>Error: Something is wrong with the recipient address {0}.</source>
+        <translation>Błąd: coś jest nie tak z adresem odbiorcy {0}.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2159"/>
-        <source>Error: %1</source>
-        <translation>Błąd: %1</translation>
+        <source>Error: {0}</source>
+        <translation>Błąd: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2276"/>
-        <source>From %1</source>
-        <translation>Od %1</translation>
+        <source>From {0}</source>
+        <translation>Od {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2680"/>
@@ -1672,8 +1672,8 @@ Witamy w przyjaznym i bezpiecznym Bitmessage
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="84"/>
-        <source>The link &quot;%1&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
-        <translation>Odnośnik &quot;%1&quot; zostanie otwarty w przeglądarce. Może to spowodować zagrożenie bezpieczeństwa, może on ujawnić Twoją anonimowość lub pobrać złośliwe dane. Czy jesteś pewien?</translation>
+        <source>The link &quot;{0}&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
+        <translation>Odnośnik &quot;{0}&quot; zostanie otwarty w przeglądarce. Może to spowodować zagrożenie bezpieczeństwa, może on ujawnić Twoją anonimowość lub pobrać złośliwe dane. Czy jesteś pewien?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="134"/>
@@ -2008,8 +2008,8 @@ Generowanie adresów „losowych” jest wybrane domyślnie, jednak deterministy
     </message>
     <message>
         <location filename="../bitmessageqt/dialogs.py" line="64"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>Btimessage używa portu TCP %1. (Można go zmienić w ustawieniach).</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>Btimessage używa portu TCP {0}. (Można go zmienić w ustawieniach).</translation>
     </message>
 </context>
 <context>
@@ -2061,28 +2061,28 @@ Generowanie adresów „losowych” jest wybrane domyślnie, jednak deterministy
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="242"/>
-        <source>Since startup on %1</source>
-        <translation>Od startu programu o %1</translation>
+        <source>Since startup on {0}</source>
+        <translation>Od startu programu o {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="140"/>
-        <source>Down: %1/s  Total: %2</source>
-        <translation>Pobieranie: %1/s W całości: %2</translation>
+        <source>Down: {0}/s  Total: {1}</source>
+        <translation>Pobieranie: {0}/s W całości: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="146"/>
-        <source>Up: %1/s  Total: %2</source>
-        <translation>Wysyłanie: %1/s W całości: %2</translation>
+        <source>Up: {0}/s  Total: {1}</source>
+        <translation>Wysyłanie: {0}/s W całości: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="219"/>
-        <source>Total Connections: %1</source>
-        <translation>Wszystkich połączeń: %1</translation>
+        <source>Total Connections: {0}</source>
+        <translation>Wszystkich połączeń: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="234"/>
-        <source>Inventory lookups per second: %1</source>
-        <translation>Zapytań o elementy na sekundę: %1</translation>
+        <source>Inventory lookups per second: {0}</source>
+        <translation>Zapytań o elementy na sekundę: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.ui" line="256"/>
@@ -2247,8 +2247,8 @@ Generowanie adresów „losowych” jest wybrane domyślnie, jednak deterministy
     <name>newchandialog</name>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="68"/>
-        <source>Successfully created / joined chan %1</source>
-        <translation>Pomyślnie utworzono / dołączono do kanału %1</translation>
+        <source>Successfully created / joined chan {0}</source>
+        <translation>Pomyślnie utworzono / dołączono do kanału {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="75"/>
diff --git a/src/translations/bitmessage_pt.qm b/src/translations/bitmessage_pt.qm
index 9c6b34023dc9c6675307ce3a13886583b2edc05b..6a8aed93eaeb0b4f0b7f9477b1aa934b15cd5110 100644
GIT binary patch
delta 470
zcmdm@@mghqO#NvFh71=52L2-qtUW9Y3~b#DtaE^TwtWn&YnCuD@I7Z>TgeQRf5X5Y
z=E}ez;LqSb?Fa({V;6+xvSJ9T*u%iUFa<(${$~i!tODv|WaM1%g@J+T1mo<rKt8_&
z<L)IubJ*T8?loQsRDTLWPn<1i$;*`U@+|`c%QdF!wTBrPcw?B&^6MBFxc@Nk;sIL4
zE62PqE|!6T)r%!{y&ljB(k$8B>lhfgvM1gZmo#OKtJ})Jz`l~Txgiy3Z!X*2FrXry
zgOhm~#p@5TukLvaG%B3Kg6$(v)|6w<ZabhW!a2=jl7UwGaL&4F3e^3RbAio&ppmCJ
zUxfStx_Smz>Kh-RDa~B#?0x~Au#@|ZkUG$u4(>M!SwL}Do+<WHKwlN{>}D(m>d%1C
ze2aM1W&-&vQ+Qn>JsB7#uVz#fOXNGJFA3Dk#J{`b9RmZ$%uJvknkGNs@!G7zbd5zy
z(l@oZI59m{p*S_KL{A|YNGc?jC{!ENPM*Lj!k9PNfIXAHn!$jfmID}W3~WGbHhCGl
UF*8)f=J)J{T<je{VJ1dK0G;-F6#xJL

delta 976
zcma)4T}V@L6hHUwe(Y|$n~6~~gAvUnL>r<-g(6Hu(jHp4f)(6t|K`ngSG!kMLAymk
z5k|&cpGFwygZa^e`QkK!0;Qn0>?sI*F&aTs5PhF^_aL@G2X=q^o!|eQ^E>x{-*0|Y
zGf<_^1N8U-Tu*@QX8^d1z}`j9%>X+-4B%V>Zq$PMGVtAP0A+ii{l+r@>avNpCfIj!
z7639P3g00pp9T<rQo_(@0D6HMoIviXpt8f*hkHlOHH_l<=O$hoT%!y0uD9m^*be&j
znWtEKz|xdR1K7V>W*j(5tYpZ;Ivl-@>9tP+*ka7sRSLioV#aGn5U;R1d$6_D#~w~k
z1Mnm4`LhJA%iNo8taHrqWBp4wGGros#6;n-iMl;t-NAjt0-tp@+l(FqLiG#e%%ZS8
z6hZ71?!0Qm#$SY?-M`Vmys*6g2kv&uMsl4vK(|dce?z0w_FVZEG=9OJ^Bl!|t0U7=
ziMuO~ETv+7)I{e!vHCW0CL{U}c7XAK+O*-2^JTpoTmN!pwGX(<br}~<<5sZMxNq5L
zaAM6=ExpLN*LM+Bm14xB5=E=?1n}vRG>_M346qec-0<<T=mnn@D}lpbqcO@i(55`~
zi9cb}>+$v$;O5^0{~7qQiw2+1x{7KglR8wD)JhB9qSCf}7O!Siw5;MQslJl@`yapY
zQel_Ei9XFQOYua^sS-_-m6&Q$a3@KOC?qLqq%|5%;vJEKREE5e%AXC!VC`O#3iO55
zNK!to$qB{mA%x>nq&F_BT6x<sNshN;uatDEFu>L&$x2XGqKOoUk%Xd<NWsb_^h;CJ
E9~#EK&j0`b

diff --git a/src/translations/bitmessage_pt.ts b/src/translations/bitmessage_pt.ts
index 8c43b926..7aeed231 100644
--- a/src/translations/bitmessage_pt.ts
+++ b/src/translations/bitmessage_pt.ts
@@ -241,7 +241,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="594"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -261,12 +261,12 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="996"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>Mensagem enviada. Aguardando confirmação. Enviada a %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>Mensagem enviada. Aguardando confirmação. Enviada a {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="999"/>
-        <source>Message sent. Sent at %1</source>
+        <source>Message sent. Sent at {0}</source>
         <translation>Mensagem enviada. Enviada a 1%</translation>
     </message>
     <message>
@@ -276,7 +276,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1005"/>
-        <source>Acknowledgement of the message received %1</source>
+        <source>Acknowledgement of the message received {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -286,17 +286,17 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1011"/>
-        <source>Broadcast on %1</source>
+        <source>Broadcast on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1014"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1017"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -306,7 +306,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1023"/>
-        <source>Unknown status: %1 %2</source>
+        <source>Unknown status: {0} {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -347,7 +347,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1523"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -364,7 +364,7 @@ It is important that you back up this file.</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1530"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -430,7 +430,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1595"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -498,52 +498,52 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1959"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1991"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2000"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2003"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2006"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2009"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2012"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2015"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2018"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2021"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -558,7 +558,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -568,7 +568,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -703,7 +703,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2951"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -857,7 +857,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4361"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1052,7 +1052,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="44"/>
-        <source>Zoom level %1%</source>
+        <source>Zoom level {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1067,47 +1067,47 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4321"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1848"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2737"/>
-        <source>Waiting for PoW to finish... %1%</source>
+        <source>Waiting for PoW to finish... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2741"/>
-        <source>Shutting down Pybitmessage... %1%</source>
+        <source>Shutting down Pybitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2763"/>
-        <source>Waiting for objects to be sent... %1%</source>
+        <source>Waiting for objects to be sent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2773"/>
-        <source>Saving settings... %1%</source>
+        <source>Saving settings... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2782"/>
-        <source>Shutting down core... %1%</source>
+        <source>Shutting down core... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2785"/>
-        <source>Stopping notifications... %1%</source>
+        <source>Stopping notifications... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2791"/>
-        <source>Shutdown imminent... %1%</source>
+        <source>Shutdown imminent... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
@@ -1128,7 +1128,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2718"/>
-        <source>Shutting down PyBitmessage... %1%</source>
+        <source>Shutting down PyBitmessage... {0}%</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1148,12 +1148,12 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="165"/>
-        <source>Generating %1 new addresses.</source>
+        <source>Generating {0} new addresses.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="242"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1163,7 +1163,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1188,7 +1188,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="487"/>
-        <source>Broadcast sent on %1</source>
+        <source>Broadcast sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1208,7 +1208,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="647"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1220,17 +1220,17 @@ There is no required difficulty for version 2 addresses like this.</source>
     <message>
         <location filename="../class_singleWorker.py" line="675"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="684"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="696"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1240,7 +1240,7 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="819"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1255,12 +1255,12 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="942"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../upnp.py" line="220"/>
-        <source>UPnP port mapping established on port %1</source>
+        <source>UPnP port mapping established on port {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -1622,27 +1622,27 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="137"/>
-        <source>Since startup on %1</source>
+        <source>Since startup on {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="71"/>
-        <source>Down: %1/s  Total: %2</source>
+        <source>Down: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="73"/>
-        <source>Up: %1/s  Total: %2</source>
+        <source>Up: {0}/s  Total: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="120"/>
-        <source>Total Connections: %1</source>
+        <source>Total Connections: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="129"/>
-        <source>Inventory lookups per second: %1</source>
+        <source>Inventory lookups per second: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff --git a/src/translations/bitmessage_ru.qm b/src/translations/bitmessage_ru.qm
index 8c0269b9e18ecc2f219729d227bb411c4f72f23e..2642035b4cc8479c6b87d7ac4bdd4b231f0342da 100644
GIT binary patch
delta 6265
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

delta 6032
zcmaJ@cU+Xm);_cQZg0{B0ap+Nr59-dloCa%BBF>O$SMfzBCIH=tOQ%I0FH<tf(pil
zL|u(7YBc7%RxH?i5{dWoDzRTRmV0)I3i<NgKllyr&YYR&JkN8^%-Ic`1<jnwJ{my<
z08<4Ja~**5EkJb%z;Gu3Q!jwg{{Tp90vKlm@OnSM_<=aT5g;=RNa*(fYMkGB7npN)
z0I}DAxi$e{q%ANH-2md9yT%Sn;A9^Kcya?cOBjFxAK<Kd128`iIQ3zmff@7hpV0ut
zmw?mK48-d&aQ1!;#D5BKH?#4ed%znL4kRoZc)E4knIH(?hrn)tbbT9un++I*KLa?`
z2nIWr1H7pRa|i;sTnpAsm|WvJux)=25Sa${eEfaIJ{V+yaf<_CP?NU?;1_dnI%x%D
zPy={WH2|!!2cOGj0B2u8fLSL%R4s%z&jUyv0K--u1CS+ljW@1B#6RN!`rE^ZL0{px
z7ot}Rk%4&-JGB@{|3(-!6Ip`gUE}#<Fs6Je5SR6kn1%DMhA?)w1`+lB36cu@G2{P%
zWNtZ*D<PHF3gG?}@**;k;ua{hZU*3PgBgto(B(1|t#<(kJ_EBBtwKh$FzXvk#1zLv
zBLRx;!fa(7kO8w`VZwT3s0~)lv<CRC4Ax~CqHI~vyw?Z;nnR0bDN=gpAZ!c71;5OP
z-4~G>$2)Ldwgli-2wcl=2beYmZuLRrf*;^#?_~f>74Y(>PJktwiD2z>TpvLU8>Ilx
zl1X0+)Ht=8^mE+@L@p-|Vq1U{e-Mv}4*-6>Lp%yFZn+upDnWoAB}C(I&<aqvfDBFc
z!3_tHn9I0<gDsgj4v}ASBI$q|XIvtgZ*hYsnIzZY5CGqVDE%4$W{Jty6I=kc1(50;
zD2+6Stloyy`Wul0&1`^~k>sG~W&qahuF>llIVJW6n4LymZNPI!wra=+RwzKPQWocX
z1TbIB66f9r*c-wc6nq;sf5dYB0jbZZU^(B_jgc(38K`x`JC^$^93O?V0`8UqOlV;Z
zn~P&gF)MS(3)HremE*h{54y|BU8Dr)_mZWVqXIDB&MLob0EGL9wL~{RN0ZE2n%4=?
z)Wm9>cn`qPl=V$A2E-<^&P+sv>JO~Tx%~ms)vPOXenj&`v#v|i0A97Teq#y%&c9|e
zvoWKWWo+>h4v>IEw&eUy0OOl%*?g4l!fdwD&R+p$>}SjCgRmNs*tWh+0Dlm+b10U(
zrgkygt$ha~Y+-wg@c{OB?7^xMAblsX17qa4;Y;?=)N246m$M_LF#t7L?98`Fec%{&
zk;`2G!9sTJSuL7S%&vW#0x<U?yCG#h0(N5W7av2wGWN+D{7&A?ZsREcdRKRiciytk
zE{ehW52$AUS{DIOwTk^95i{3t*qt*=05;^XU+qOVXP;zbR?7fhcrmh6td4=h8PhG}
z(3}NK;2vy54#$|#7}WSg1~dE&nla`BlWw#EGmK^w-@0JmFk-Sr$mC5UMxDn&$=)zC
z-l60_vY65rm#}PBFJl%BMs26qFw5)l+qxICwSoW)oXoU1BI243rp0Lke%CPCdSif9
z51IX2f`IT|GDjXd0&z5FjuqJfcr(mp!=pIAfVqD78Netj=JpJ0fQr`~a>E7t!$Xd9
zHIDO2I6jZDY$v|v_?^@|26!0E@y}!fl(}$1p2q;#r*k6jUIZBMznqj3orxrzj6~GB
zU^Qp5_YnY_u^d$cQa<n`XRb#ZklwF3Wpfok+(n#4+lQey)^L{k<3VMeoK=2~0Q>fF
z>Yfz<k>2L4*7b`SV>qo}BNP2cadv4E@Zk7l&i*MFFgJs9;w+kJR3)cvG1j}|Le7I>
zu>fWXoR@55X#5Gzzrzf$16FYjrs9TP*<8z9DS%TiZq$P$^v)}8?qnt25$#;nB@fiP
zKX-a1mZSR+?xI4J^vf6A`Vk#KLdv<#H_rlO_2FtZQPfhL$=x<624Ltsu6CIbz?nDP
zi(3q_jKa9L#-N7It=vv7ZoKpX&#)3Dnv%ow5w@WxYI*)?0|4@)c+uDJyD)$^rg9Fp
z?i`-NJqtVF2c9B50Ta5zD{Bk}a4zI6h%(2<^PacN`!;~z5e=`>6wBdJ3$L;R0eBza
zRkt@_Yqj9jWw+u@IF;A94w1Wl#amxA4^2mSTbKNbJw3T=G_36!&)am3H!tw^L}L8>
zo4ljm4M2QO^KNl*-zq=eolD4U9iMkU2Bmd4&-=ICA#7Zlt9)z4E!^-Z-<SIYh+8|~
z_em%Aa1VZbPy#aWjz8`Yy4k1~e@3_qn#P)6-jsyyP32b&MAz@F<I^9c0N)n#zaKjk
zpfj2O{ed84<PiVlreoMY4)afGtg*pe;a^{%1SlE7zg~;q;o1Cqw^Fd$A};VBy=lNk
zGJ*f{t7%C6MuG8f@c@ra1${PRCv!^|*q?fW9WGShv8o7L?>m7{@+5$yaKVVvxWU7F
zf++X^u)bWNSccy4%@E|)BhbMOf`S+X5XT5gU%v-<K2)$I!WzwcP(XVzc$tA<#UoFw
zf6qyRIvq7%y%f}c=a2Vym|#uW34mRP1v}QE`QobtXFM!`aN-1K-XWz-tl;dgSdOJ<
z1sATwAf=^(%T@Sb8FW(c&(UuIY+nk68b7T6MxkgLx}O*cjiRxk@d|}TiZ%eYz0ii-
zLq>dr_GK5*Og|S2$9&y_R9Of!>ZIuIS3<?ZC^TK3Ff#)W^m-+ndKUqn8l@kJ<dLu>
z`2moAnZmmJc%ZgJ*c$W(JKa^GHW4#jEfww)J;#J<gg>-lLa$wfKhDK+E!!zPw*XBz
z=BDuH<PLxx?}d+QG>EL<Z4rrXMboSn35pb$$#Rj9eI7t*B@*6KW9BzSl2UvDG5bZm
z>y+q)@gn=@hp@+&h}^g(0NbC6{Nn5Yo(e=kWAXQpI#IBZIl%2zqL>lo04GcIBa!qH
z#q39bl})0NA2wrx=AucOS!kNq9iqj>WjM|iRUW>M$bS;mwTEKE2o==}ys+_Ph`tfs
z0a)iM+WHQkSiesY9sdOZmv0wcsf__*0HSL}oj^RVi>?o^Mqs|8hlW^|Kbwml%CV2g
z^TcjrQqXK#@en6u^0b*aY&RPq=Ym)>c1|{c!7_1rTLQZFl{n)?DmIP_V#Ue^fc=f)
z>}?^)kf}H?Vhs?d6tVh70Dz>gxM&=<=#|^Wi+`#_*WVVe2u6<tY!a_X9|3T@NW6LG
zGkl12h<6&|KB5icoq;IrDi`riT{TdJc&`dg+}5NKA0P$zkhrKHiF<|k@JeJvHC5bp
zzXYFJ#^Q5RV*uJM#ph+60Fye!*IwXTao{cSjalvZ(0C<&z7QoVd?exjwi};n!z6uj
z&|F7XN%~Lv5uapv68l=*fBYPYGu;AkQ7dsPKY->QC-HlE2*5-$Nb-eY5P;7_N!Yju
ze1aQE5(3@>c%GG{xF`Wa4@y!u)gp!aCD|_#(AEzU<u3fab+|;ONyH4jB*mc>=$SCd
z?Af@_<8(>&(<At@87*nJ+6J&ESaSKK3qVJs<X%NON*gbEbp?U2oFuO^hoB^PzmUQY
zsGZPN%I_V64+)vnI0wx%=c?2;1i!b3N(Y+YMoHCDr<m3FKsg~D{t~a@UR$Kar|}@)
zwbF{;asE=1w00LZBvK)*tHZM0Jwdv5yf5~6wRD{v8R3nUp03BT?1+@MxuQAov8Ed}
zVBp*J!?`0}<IOqJYccq=I<3)<L{=pIePn-pkZh5@x0V9ox5!-WERd-hnTK*Z_IL-G
z_i<}{&9=(|`mDgG)f8FecgR#)q%5`>8QIE}C2c<haDSt0V%<D!y)$GPZ}In86J^Q@
zKP6s1M`hETFw>{=WTjtPW8-)rtGK=ck>8XxTVKP>-^jL{c@M<!psaP66yWMq+1|bl
z*x3?f2h^Pa^~SQJCO9r%B)g!*eZ2i-9f2MA_&hFqvveNbey8y!3M)sy!$9h0Wxm|n
zNxMsuD&pjT9k|orBh%QvcJ6f7kr7%Wb4NC@rh%4yBsj&_vBcGfO|f)f;hOW7#@cTz
zuk*=VT51=;)`g$73nal*V&5O<wO;m)d}2vcT+A)I$IC+URcRTM(hAgal~Ufd58dLD
zj(?`q#?_)<_r=Da7Z)g$-6FJVS63FfN#&ll91H+|I`ZG<G_R9O?+oNpm8UV~dGtn1
z9*D_|26&7jv*<DpGac?t9?mQ~4|>&O7;SRz|F_X@Jt7x<jCAnw|1(nC;x&LV8_V=%
zf*60sjq$<15GD%bdKMr0e)<2-Mf&}>xxTdTdK>M({94%LJGwR?f!@tGq#pu9%yc=*
z8DISY9-p*`rM<qeqD4WD0y}qknleL<dFf<15|qz%FlMZo;fyciu0sg^UD!T_3c~aA
zRr&sZ3P85gyeJDA6J90Lo#gUq*(mxrJg!S^BNlO@uEPuTN}v1kFdZG?shjy}SQfGP
zG@)8zMUM@yB#UU}Fb~~yc|<048LrkxSuO2L%STjxjEsxSBFS`rWa3{A^`$mZ-ugr3
z##&|6UP89eA+etNEmC9VkZAfo)=D@3E+&L}hWDXKvF7^8nX&W9sE?D@al^<Px-Q;`
z7RBiVb*HUy2T3)}8R>+v+SMaB^GJz)e(bmf0$tipNO3S-7h_IYNvBCOJ)4xMJH>H)
zs`ek_i&>UJWHjV2Jo3KGSLJ@Ru{vcS@v1Q}CPupRYFZ<SRqxMSS`Jev75QoEEaenk
zz{FHr+K^J9Elbr3sauXIjhbp<hhd+%?;WiuC`g;4kn61PB9GS<K$`laV#W05EE9||
zrl+Sy=?Rp7iu9(A*?Miz4D88_HQhHg^>3EAaXwX`)-7iUoBTqjsk$opu&R+1(bT+w
zI;xiB-C+|`nxl5r)3{dsh!oRh({<IP-86kLAwl%qOcU+%LVMDqRa8;OnH4$)5e8X>
zYpQ!pkEH6N*pJi4bX(BJMNzsXpRG=#i{tSZ&rhjk(r=5MyV?DIu^Y?IQ-8t*{T5-f
z_V+j?83UZC-)xtzlZ@!CLNo1(*$zFSHqcXZ>i@)|Eh$;RAzqX-&sC=f*nK+OG(N3R
zr(S_Vty8hU#l;2Xu%qYKn`-mtEn;DkDkEEJy)eHAgdp0u@C)7MM>M9|=L^dT8BR&L
zDXsq6c|gwtddFu@S7)eZDCJqXxmik`?jMh^G^X#%&8S&<KfRKlLG_~%<<@LHjQ_Ic
z_~$jmUw`_)hDfN*Vnc_X2+VZ|^cK~_n54>Abc3KRSUjJN=wB}j{R;{!8eL)W5rtM$
zF^GlBwpO|89W%1ZkqVa^AO%|M<$v&r61{6gomZFZXTM*4g?vR<)cfctYO9|hNn(04
zUof$Mc2oZ~iDLKBnF_fwEmxs)f5RGoqtV@$pj`qPZ<-ooLRk%i#kSoShc`G$?7J_f
za~o{M7TuR@Z?GjHbWEd<ha4Pq4ICW1bwKNnODCzal=5lQ75PQ-$!S?RiVV2}f*HEk
zM4Ql9%aDBfdy}e%><%=y+5V%awlrH2;z5sZaMTm7yC^>QagzjPwo<2hfjUh+y+GHM
zKelquZ!8H47PrycwWm<>#I!8EPLoyn@;FtZT&<E%&QfL-WOmo<)J6%x<l;7((9TT`
zf6>g24%lq-Nwc)g6+ArY$@bNHRjPJuAbB)+S1=<)INDh|+r@aB#~wDb>WM>|q{0T6
zqbOA5=xbqUqp7z3a6Qq!KQfb;1Tp=Xp-dzbpudFVV58$#yYxp-BAKTnHYZD&Ew{n_
z+m1bQ;ml?XnaG;b!NiPSd1k7I@$}h9i=pFG)8%RT3i<Q`UG<F)jg#l8@^zh1oAR8?
zGk0Um@c#8=hA^Rc6L-7qYTO0H#HI(+VMw!%U)KV;e6&iPmV+N2HF5@z%=jaQ_I;a9
zhEVb@u!oXz8vV{1mF!wq`c|Wz|E^F#>}%d~iLD$n`qUwe;<J>Kuw$#!^3~Jxx?VW?
zsG4y+vWGa-81RW5BKjO*qDLVQRVkH<N$M<>QZIj3Og^8C#q99bVS+I`H^$@tWQV7J
s_K{IS-rwg|bCOS@_LK_9S`i7Uu`waRJ@T`w$ul9gnBbn3Cd4oBKgO(|#sB~S

diff --git a/src/translations/bitmessage_ru.ts b/src/translations/bitmessage_ru.ts
index 4a80f62e..0fac3766 100644
--- a/src/translations/bitmessage_ru.ts
+++ b/src/translations/bitmessage_ru.ts
@@ -314,8 +314,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="595"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>Один из Ваших адресов, %1, является устаревшим адресом версии 1. Адреса версии 1 больше не поддерживаются. Хотите ли Вы удалить его сейчас?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>Один из Ваших адресов, {0}, является устаревшим адресом версии 1. Адреса версии 1 больше не поддерживаются. Хотите ли Вы удалить его сейчас?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1039"/>
@@ -334,13 +334,13 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1048"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>Сообщение отправлено. Ожидаем подтверждения. Отправлено в %1 </translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>Сообщение отправлено. Ожидаем подтверждения. Отправлено в {0} </translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1051"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>Сообщение отправлено в %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>Сообщение отправлено в {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -349,8 +349,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1057"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>Доставлено в %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>Доставлено в {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2149"/>
@@ -359,18 +359,18 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1066"/>
-        <source>Broadcast on %1</source>
-        <translation>Рассылка на %1</translation>
+        <source>Broadcast on {0}</source>
+        <translation>Рассылка на {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1069"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>Проблема: Ваш получатель требует более сложных вычислений, чем максимум, указанный в Ваших настройках. %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>Проблема: Ваш получатель требует более сложных вычислений, чем максимум, указанный в Ваших настройках. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1072"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>Проблема: ключ получателя неправильный. Невозможно зашифровать сообщение. %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>Проблема: ключ получателя неправильный. Невозможно зашифровать сообщение. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1075"/>
@@ -379,8 +379,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1078"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>Неизвестный статус: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>Неизвестный статус: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1619"/>
@@ -421,10 +421,10 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1468"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation>Вы можете управлять Вашими ключами, редактируя файл keys.dat, находящийся в
- %1 
+ {0} 
 Создайте резервную копию этого файла перед тем как будете его редактировать.</translation>
     </message>
     <message>
@@ -442,7 +442,7 @@ It is important that you back up this file.</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1475"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation type="unfinished"/>
     </message>
@@ -508,7 +508,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1603"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -579,52 +579,52 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1908"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
-        <translation>Сообщение, которое вы пытаетесь отправить, длиннее максимально допустимого на %1 байт. (Максимально допустимое значение 261644 байта). Пожалуйста, сократите сообщение перед отправкой.</translation>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <translation>Сообщение, которое вы пытаетесь отправить, длиннее максимально допустимого на {0} байт. (Максимально допустимое значение 261644 байта). Пожалуйста, сократите сообщение перед отправкой.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1950"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
-        <translation>Ошибка: ваш аккаунт не зарегистрирован на Email-шлюзе. Отправка регистрации %1, пожалуйста, подождите пока процесс регистрации не завершится, прежде чем попытаться отправить сообщение заново.</translation>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
+        <translation>Ошибка: ваш аккаунт не зарегистрирован на Email-шлюзе. Отправка регистрации {0}, пожалуйста, подождите пока процесс регистрации не завершится, прежде чем попытаться отправить сообщение заново.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2008"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2011"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2014"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2017"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2020"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2023"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2029"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -639,8 +639,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2035"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>По поводу адреса %1: Bitmessage не поддерживает адреса версии %2. Возможно вам нужно обновить клиент Bitmessage.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>По поводу адреса {0}: Bitmessage не поддерживает адреса версии {1}. Возможно вам нужно обновить клиент Bitmessage.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2039"/>
@@ -649,8 +649,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2039"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>По поводу адреса %1: Bitmessage не поддерживает поток номер %2. Возможно вам нужно обновить клиент Bitmessage.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>По поводу адреса {0}: Bitmessage не поддерживает поток номер {1}. Возможно вам нужно обновить клиент Bitmessage.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2044"/>
@@ -784,8 +784,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3022"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>Bitmessage не может найти Ваш адрес %1. Возможно Вы удалили его?</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>Bitmessage не может найти Ваш адрес {0}. Возможно Вы удалили его?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3025"/>
@@ -942,7 +942,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4374"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1137,8 +1137,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="47"/>
-        <source>Zoom level %1%</source>
-        <translation>Увеличение %1%</translation>
+        <source>Zoom level {0}%</source>
+        <translation>Увеличение {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/blacklist.py" line="91"/>
@@ -1152,48 +1152,48 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4334"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1783"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
-        <translation>Доступна новая версия PyBitmessage: %1. Загрузите её:  https://github.com/Bitmessage/PyBitmessage/releases/latest</translation>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <translation>Доступна новая версия PyBitmessage: {0}. Загрузите её:  https://github.com/Bitmessage/PyBitmessage/releases/latest</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2785"/>
-        <source>Waiting for PoW to finish... %1%</source>
-        <translation>Ожидание окончания PoW... %1%</translation>
+        <source>Waiting for PoW to finish... {0}%</source>
+        <translation>Ожидание окончания PoW... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2795"/>
-        <source>Shutting down Pybitmessage... %1%</source>
-        <translation>Завершение PyBitmessage... %1%</translation>
+        <source>Shutting down Pybitmessage... {0}%</source>
+        <translation>Завершение PyBitmessage... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2814"/>
-        <source>Waiting for objects to be sent... %1%</source>
-        <translation>Ожидание отправки объектов... %1%</translation>
+        <source>Waiting for objects to be sent... {0}%</source>
+        <translation>Ожидание отправки объектов... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2832"/>
-        <source>Saving settings... %1%</source>
-        <translation>Сохранение настроек... %1%</translation>
+        <source>Saving settings... {0}%</source>
+        <translation>Сохранение настроек... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2845"/>
-        <source>Shutting down core... %1%</source>
-        <translation>Завершение работы ядра... %1%</translation>
+        <source>Shutting down core... {0}%</source>
+        <translation>Завершение работы ядра... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2851"/>
-        <source>Stopping notifications... %1%</source>
-        <translation>Остановка сервиса уведомлений... %1%</translation>
+        <source>Stopping notifications... {0}%</source>
+        <translation>Остановка сервиса уведомлений... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2855"/>
-        <source>Shutdown imminent... %1%</source>
-        <translation>Завершение вот-вот произойдет... %1%</translation>
+        <source>Shutdown imminent... {0}%</source>
+        <translation>Завершение вот-вот произойдет... {0}%</translation>
     </message>
     <message numerus="yes">
         <location filename="../bitmessageqt/bitmessageui.py" line="706"/>
@@ -1207,8 +1207,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2753"/>
-        <source>Shutting down PyBitmessage... %1%</source>
-        <translation>Завершение PyBitmessage... %1%</translation>
+        <source>Shutting down PyBitmessage... {0}%</source>
+        <translation>Завершение PyBitmessage... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1153"/>
@@ -1227,13 +1227,13 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="219"/>
-        <source>Generating %1 new addresses.</source>
-        <translation>Создание %1 новых адресов.</translation>
+        <source>Generating {0} new addresses.</source>
+        <translation>Создание {0} новых адресов.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="323"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
-        <translation>%1 уже имеется в ваших адресах. Не добавляю его снова.</translation>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <translation>{0} уже имеется в ваших адресах. Не добавляю его снова.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="377"/>
@@ -1242,7 +1242,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1267,8 +1267,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="613"/>
-        <source>Broadcast sent on %1</source>
-        <translation>Рассылка отправлена на %1</translation>
+        <source>Broadcast sent on {0}</source>
+        <translation>Рассылка отправлена на {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="721"/>
@@ -1287,8 +1287,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="878"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
-        <translation>Проблема: адресат является мобильным устройством, которое требует, чтобы адрес назначения был включен в сообщение, однако, это запрещено в ваших настройках. %1</translation>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
+        <translation>Проблема: адресат является мобильным устройством, которое требует, чтобы адрес назначения был включен в сообщение, однако, это запрещено в ваших настройках. {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="909"/>
@@ -1300,19 +1300,19 @@ There is no required difficulty for version 2 addresses like this.</source>
     <message>
         <location filename="../class_singleWorker.py" line="944"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation>Выполнение работы, требуемой для отправки сообщения.
-Получатель запросил сложность: %1 и %2</translation>
+Получатель запросил сложность: {0} и {1}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="984"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
-        <translation>Проблема: сложность, затребованная получателем (%1 и %2) гораздо больше, чем вы готовы сделать. %3</translation>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
+        <translation>Проблема: сложность, затребованная получателем ({0} и {1}) гораздо больше, чем вы готовы сделать. {2}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1012"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
-        <translation>Проблема: вы пытаетесь отправить сообщение самому себе или в чан, но ваш ключ шифрования не найден в файле ключей keys.dat. Невозможно зашифровать сообщение. %1</translation>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
+        <translation>Проблема: вы пытаетесь отправить сообщение самому себе или в чан, но ваш ключ шифрования не найден в файле ключей keys.dat. Невозможно зашифровать сообщение. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1054"/>
@@ -1321,8 +1321,8 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1218"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
-        <translation>Отправлено. Ожидаем подтверждения. Отправлено в %1 </translation>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
+        <translation>Отправлено. Ожидаем подтверждения. Отправлено в {0} </translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1042"/>
@@ -1336,13 +1336,13 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1387"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
-        <translation>Отправка запроса открытого ключа шифрования. Ожидание ответа. Запрошено в %1</translation>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
+        <translation>Отправка запроса открытого ключа шифрования. Ожидание ответа. Запрошено в {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="235"/>
-        <source>UPnP port mapping established on port %1</source>
-        <translation>Распределение портов UPnP завершилось выделением порта %1</translation>
+        <source>UPnP port mapping established on port {0}</source>
+        <translation>Распределение портов UPnP завершилось выделением порта {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="264"/>
@@ -1386,13 +1386,13 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../namecoin.py" line="115"/>
-        <source>The name %1 was not found.</source>
-        <translation>Имя %1  не найдено.</translation>
+        <source>The name {0} was not found.</source>
+        <translation>Имя {0}  не найдено.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="124"/>
-        <source>The namecoin query failed (%1)</source>
-        <translation>Запрос к namecoin не удался (%1).</translation>
+        <source>The namecoin query failed ({0})</source>
+        <translation>Запрос к namecoin не удался ({0}).</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="127"/>
@@ -1401,18 +1401,18 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../namecoin.py" line="133"/>
-        <source>The name %1 has no valid JSON data.</source>
-        <translation>Имя %1 не содержит корректных данных JSON.</translation>
+        <source>The name {0} has no valid JSON data.</source>
+        <translation>Имя {0} не содержит корректных данных JSON.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="141"/>
-        <source>The name %1 has no associated Bitmessage address.</source>
-        <translation>Имя %1 не имеет связанного адреса Bitmessage.</translation>
+        <source>The name {0} has no associated Bitmessage address.</source>
+        <translation>Имя {0} не имеет связанного адреса Bitmessage.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="171"/>
-        <source>Success!  Namecoind version %1 running.</source>
-        <translation>Успех! Namecoind версии %1 работает.</translation>
+        <source>Success!  Namecoind version {0} running.</source>
+        <translation>Успех! Namecoind версии {0} работает.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="182"/>
@@ -1475,53 +1475,53 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1969"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address %1</source>
-        <translation>Ошибка: адреса Bitmessage начинаются с &quot;BM-&quot;. Пожалуйста, проверьте адрес получателя %1.</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address {0}</source>
+        <translation>Ошибка: адреса Bitmessage начинаются с &quot;BM-&quot;. Пожалуйста, проверьте адрес получателя {0}.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1975"/>
-        <source>Error: The recipient address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>Ошибка: адрес получателя %1 набран или скопирован неправильно. Пожалуйста, проверьте его.</translation>
+        <source>Error: The recipient address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>Ошибка: адрес получателя {0} набран или скопирован неправильно. Пожалуйста, проверьте его.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1981"/>
-        <source>Error: The recipient address %1 contains invalid characters. Please check it.</source>
-        <translation>Ошибка: адрес получателя %1 содержит недопустимые символы. Пожалуйста, проверьте его.</translation>
+        <source>Error: The recipient address {0} contains invalid characters. Please check it.</source>
+        <translation>Ошибка: адрес получателя {0} содержит недопустимые символы. Пожалуйста, проверьте его.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1987"/>
-        <source>Error: The version of the recipient address %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
-        <translation>Ошибка: версия адреса получателя %1 слишком высокая. Либо вам нужно обновить программу Bitmessage, либо ваш знакомый - умник.</translation>
+        <source>Error: The version of the recipient address {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <translation>Ошибка: версия адреса получателя {0} слишком высокая. Либо вам нужно обновить программу Bitmessage, либо ваш знакомый - умник.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1995"/>
-        <source>Error: Some data encoded in the recipient address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Ошибка: часть данных, закодированных в адресе получателя %1 слишком короткая. Видимо, что-то не так с программой, используемой вашим знакомым.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Ошибка: часть данных, закодированных в адресе получателя {0} слишком короткая. Видимо, что-то не так с программой, используемой вашим знакомым.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2003"/>
-        <source>Error: Some data encoded in the recipient address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Ошибка: часть данных, закодированных в адресе получателя %1 слишком длинная. Видимо, что-то не так с программой, используемой вашим знакомым.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Ошибка: часть данных, закодированных в адресе получателя {0} слишком длинная. Видимо, что-то не так с программой, используемой вашим знакомым.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2011"/>
-        <source>Error: Some data encoded in the recipient address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Ошибка: часть данных, закодированных в адресе получателя %1 сформирована неправильно. Видимо, что-то не так с программой, используемой вашим знакомым.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Ошибка: часть данных, закодированных в адресе получателя {0} сформирована неправильно. Видимо, что-то не так с программой, используемой вашим знакомым.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2019"/>
-        <source>Error: Something is wrong with the recipient address %1.</source>
-        <translation>Ошибка: что-то не так с адресом получателя %1.</translation>
+        <source>Error: Something is wrong with the recipient address {0}.</source>
+        <translation>Ошибка: что-то не так с адресом получателя {0}.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2169"/>
-        <source>Error: %1</source>
-        <translation>Ошибка: %1</translation>
+        <source>Error: {0}</source>
+        <translation>Ошибка: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2286"/>
-        <source>From %1</source>
-        <translation>От %1</translation>
+        <source>From {0}</source>
+        <translation>От {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2732"/>
@@ -1566,7 +1566,7 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     <message numerus="yes">
         <location filename="../bitmessageqt/address_dialogs.py" line="194"/>
         <source>Display the %n recent broadcast(s) from this address.</source>
-        <translation><numerusform>Показать %1 прошлую рассылку с этого адреса.</numerusform><numerusform>Показать %1 прошлых рассылки с этого адреса.</numerusform><numerusform>Показать %1 прошлых рассылок с этого адреса.</numerusform><numerusform>Показать %1 прошлых рассылок с этого адреса.</numerusform></translation>
+        <translation><numerusform>Показать {0} прошлую рассылку с этого адреса.</numerusform><numerusform>Показать {0} прошлых рассылки с этого адреса.</numerusform><numerusform>Показать {0} прошлых рассылок с этого адреса.</numerusform><numerusform>Показать {0} прошлых рассылок с этого адреса.</numerusform></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/bitmessageui.py" line="658"/>
@@ -1613,8 +1613,8 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="72"/>
-        <source>The link &quot;%1&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
-        <translation>Ссылка &quot;%1&quot; откроется в браузере. Это может быть угрозой безопасности, например деанонимизировать вас или привести к скачиванию вредоносных данных. Вы уверены?</translation>
+        <source>The link &quot;{0}&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
+        <translation>Ссылка &quot;{0}&quot; откроется в браузере. Это может быть угрозой безопасности, например деанонимизировать вас или привести к скачиванию вредоносных данных. Вы уверены?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="117"/>
@@ -1948,8 +1948,8 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/dialogs.py" line="58"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>Вы используете TCP порт %1. (Его можно поменять в настройках).</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>Вы используете TCP порт {0}. (Его можно поменять в настройках).</translation>
     </message>
 </context>
 <context>
@@ -2001,28 +2001,28 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="171"/>
-        <source>Since startup on %1</source>
-        <translation>С начала работы, %1</translation>
+        <source>Since startup on {0}</source>
+        <translation>С начала работы, {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="90"/>
-        <source>Down: %1/s  Total: %2</source>
-        <translation>Загрузка: %1/s Всего: %2</translation>
+        <source>Down: {0}/s  Total: {1}</source>
+        <translation>Загрузка: {0}/s Всего: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="92"/>
-        <source>Up: %1/s  Total: %2</source>
-        <translation>Отправка: %1/s Всего: %2</translation>
+        <source>Up: {0}/s  Total: {1}</source>
+        <translation>Отправка: {0}/s Всего: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="153"/>
-        <source>Total Connections: %1</source>
-        <translation>Всего соединений: %1</translation>
+        <source>Total Connections: {0}</source>
+        <translation>Всего соединений: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="163"/>
-        <source>Inventory lookups per second: %1</source>
-        <translation>Поисков в каталоге в секунду: %1</translation>
+        <source>Inventory lookups per second: {0}</source>
+        <translation>Поисков в каталоге в секунду: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.ui" line="256"/>
@@ -2187,8 +2187,8 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     <name>newchandialog</name>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="38"/>
-        <source>Successfully created / joined chan %1</source>
-        <translation>Успешно создан / подключен чан %1</translation>
+        <source>Successfully created / joined chan {0}</source>
+        <translation>Успешно создан / подключен чан {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="44"/>
diff --git a/src/translations/bitmessage_sk.qm b/src/translations/bitmessage_sk.qm
index 26c2a24d6b127a7fe5aa2c47d03ac662cf8029e2..b963125f798ab3d9448975f2efdda7f03767b943 100644
GIT binary patch
delta 6331
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

delta 6060
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
HBzpW8rP0lv

diff --git a/src/translations/bitmessage_sk.ts b/src/translations/bitmessage_sk.ts
index 8c3b0209..c80d23dd 100644
--- a/src/translations/bitmessage_sk.ts
+++ b/src/translations/bitmessage_sk.ts
@@ -311,8 +311,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="587"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>Jedna z vašich adries, %1, je stará verzia adresy, 1. Verzie adresy 1 už nie sú podporované. Odstrániť ju teraz?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>Jedna z vašich adries, {0}, je stará verzia adresy, 1. Verzie adresy 1 už nie sú podporované. Odstrániť ju teraz?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1034"/>
@@ -331,13 +331,13 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1043"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>Správa odoslaná. Čakanie na potvrdenie. Odoslaná %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>Správa odoslaná. Čakanie na potvrdenie. Odoslaná {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1046"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>Správa odoslaná. Odoslaná %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>Správa odoslaná. Odoslaná {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -346,8 +346,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1052"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>Potvrdenie prijatia správy %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>Potvrdenie prijatia správy {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2140"/>
@@ -356,18 +356,18 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1061"/>
-        <source>Broadcast on %1</source>
+        <source>Broadcast on {0}</source>
         <translation>Rozoslané 1%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1064"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>Problém: práca požadovná príjemcom je oveľa ťažšia, než je povolené v nastaveniach. %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>Problém: práca požadovná príjemcom je oveľa ťažšia, než je povolené v nastaveniach. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1067"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>Problém: šifrovací kľúč príjemcu je nesprávny. Nie je možné zašifrovať správu. %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>Problém: šifrovací kľúč príjemcu je nesprávny. Nie je možné zašifrovať správu. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1070"/>
@@ -376,8 +376,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1073"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>Neznámy stav: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>Neznámy stav: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1612"/>
@@ -417,10 +417,10 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1463"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation>Kľúče môžete spravovať úpravou súboru keys.dat, ktorý je uložený v adresári
-%1 
+{0} 
 Tento súbor je dôležité zálohovať.</translation>
     </message>
     <message>
@@ -436,10 +436,10 @@ Tento súbor je dôležité zálohovať.</translation>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1470"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation>Kľúče môžete spravovať úpravou súboru keys.dat, ktorý je uložený v adresári
-%1 
+{0} 
 Tento súbor je dôležité zálohovať. Chcete tento súbor teraz otvoriť? (Nezabudnite zatvoriť Bitmessage pred vykonaním akýchkoľvek zmien.)</translation>
     </message>
     <message>
@@ -504,7 +504,7 @@ Tento súbor je dôležité zálohovať. Chcete tento súbor teraz otvoriť? (Ne
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1603"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -572,52 +572,52 @@ Tento súbor je dôležité zálohovať. Chcete tento súbor teraz otvoriť? (Ne
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1899"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
-        <translation>Správa, ktorú skúšate poslať, má %1 bajtov naviac. (Maximum je 261 644 bajtov). Prosím pred odoslaním skrátiť.</translation>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <translation>Správa, ktorú skúšate poslať, má {0} bajtov naviac. (Maximum je 261 644 bajtov). Prosím pred odoslaním skrátiť.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1941"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
-        <translation>Chyba: Váš účet nebol registrovaný na e-mailovej bráne. Skúšam registrovať ako %1, prosím počkajte na spracovanie registrácie pred opakovaným odoslaním správy.</translation>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
+        <translation>Chyba: Váš účet nebol registrovaný na e-mailovej bráne. Skúšam registrovať ako {0}, prosím počkajte na spracovanie registrácie pred opakovaným odoslaním správy.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2008"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2011"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2014"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2017"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2020"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2023"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2029"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -632,8 +632,8 @@ Tento súbor je dôležité zálohovať. Chcete tento súbor teraz otvoriť? (Ne
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Čo sa týka adresy %1, Bitmessage nepozná číslo verzie adresy %2. Možno by ste mali upgradenúť Bitmessage na najnovšiu verziu.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Čo sa týka adresy {0}, Bitmessage nepozná číslo verzie adresy {1}. Možno by ste mali upgradenúť Bitmessage na najnovšiu verziu.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
@@ -642,8 +642,8 @@ Tento súbor je dôležité zálohovať. Chcete tento súbor teraz otvoriť? (Ne
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>Čo sa týka adresy %1, Bitmessage nespracováva číslo prúdu %2. Možno by ste mali upgradenúť Bitmessage na najnovšiu verziu.</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>Čo sa týka adresy {0}, Bitmessage nespracováva číslo prúdu {1}. Možno by ste mali upgradenúť Bitmessage na najnovšiu verziu.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2035"/>
@@ -777,8 +777,8 @@ Tento súbor je dôležité zálohovať. Chcete tento súbor teraz otvoriť? (Ne
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3012"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>Bitmessage nemôže nájsť vašu adresu %1. Možno ste ju odstránili?</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>Bitmessage nemôže nájsť vašu adresu {0}. Možno ste ju odstránili?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3015"/>
@@ -935,7 +935,7 @@ Ste si istý, že chcete kanál odstrániť?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4374"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1130,8 +1130,8 @@ Ste si istý, že chcete kanál odstrániť?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="47"/>
-        <source>Zoom level %1%</source>
-        <translation>Úroveň priblíženia %1%</translation>
+        <source>Zoom level {0}%</source>
+        <translation>Úroveň priblíženia {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/blacklist.py" line="90"/>
@@ -1145,48 +1145,48 @@ Ste si istý, že chcete kanál odstrániť?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4334"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1774"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
-        <translation>K dispozícii je nová verzia PyBitmessage: %1. Môžete ju stiahnuť na https://github.com/Bitmessage/PyBitmessage/releases/latest</translation>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <translation>K dispozícii je nová verzia PyBitmessage: {0}. Môžete ju stiahnuť na https://github.com/Bitmessage/PyBitmessage/releases/latest</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2774"/>
-        <source>Waiting for PoW to finish... %1%</source>
-        <translation>Čakám na ukončenie práce... %1%</translation>
+        <source>Waiting for PoW to finish... {0}%</source>
+        <translation>Čakám na ukončenie práce... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2784"/>
-        <source>Shutting down Pybitmessage... %1%</source>
-        <translation>Ukončujem PyBitmessage... %1%</translation>
+        <source>Shutting down Pybitmessage... {0}%</source>
+        <translation>Ukončujem PyBitmessage... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2802"/>
-        <source>Waiting for objects to be sent... %1%</source>
-        <translation>Čakám na odoslanie objektov... %1%</translation>
+        <source>Waiting for objects to be sent... {0}%</source>
+        <translation>Čakám na odoslanie objektov... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2822"/>
-        <source>Saving settings... %1%</source>
-        <translation>Ukladám nastavenia... %1%</translation>
+        <source>Saving settings... {0}%</source>
+        <translation>Ukladám nastavenia... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2835"/>
-        <source>Shutting down core... %1%</source>
-        <translation>Ukončujem jadro... %1%</translation>
+        <source>Shutting down core... {0}%</source>
+        <translation>Ukončujem jadro... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2841"/>
-        <source>Stopping notifications... %1%</source>
-        <translation>Zastavujem oznámenia... %1%</translation>
+        <source>Stopping notifications... {0}%</source>
+        <translation>Zastavujem oznámenia... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2845"/>
-        <source>Shutdown imminent... %1%</source>
-        <translation>Posledná fáza ukončenia... %1%</translation>
+        <source>Shutdown imminent... {0}%</source>
+        <translation>Posledná fáza ukončenia... {0}%</translation>
     </message>
     <message numerus="yes">
         <location filename="../bitmessageqt/bitmessageui.py" line="706"/>
@@ -1200,8 +1200,8 @@ Ste si istý, že chcete kanál odstrániť?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2742"/>
-        <source>Shutting down PyBitmessage... %1%</source>
-        <translation>Ukončujem PyBitmessage... %1%</translation>
+        <source>Shutting down PyBitmessage... {0}%</source>
+        <translation>Ukončujem PyBitmessage... {0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1148"/>
@@ -1220,13 +1220,13 @@ Ste si istý, že chcete kanál odstrániť?</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="170"/>
-        <source>Generating %1 new addresses.</source>
-        <translation>Vytváram %1 nových adries.</translation>
+        <source>Generating {0} new addresses.</source>
+        <translation>Vytváram {0} nových adries.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="247"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
-        <translation>%1 sa už nachádza medzi vášmi identitami, nepridávam dvojmo.</translation>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <translation>{0} sa už nachádza medzi vášmi identitami, nepridávam dvojmo.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="283"/>
@@ -1235,7 +1235,7 @@ Ste si istý, že chcete kanál odstrániť?</translation>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1260,8 +1260,8 @@ Ste si istý, že chcete kanál odstrániť?</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="518"/>
-        <source>Broadcast sent on %1</source>
-        <translation>Rozoslané %1</translation>
+        <source>Broadcast sent on {0}</source>
+        <translation>Rozoslané {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="587"/>
@@ -1280,8 +1280,8 @@ Ste si istý, že chcete kanál odstrániť?</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="673"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
-        <translation>Problém: adresa príjemcu je na mobilnom zariadení a požaduje, aby správy obsahovali nezašifrovanú adresu príjemcu. Vaše nastavenia však túto možnost nemajú povolenú. %1</translation>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
+        <translation>Problém: adresa príjemcu je na mobilnom zariadení a požaduje, aby správy obsahovali nezašifrovanú adresu príjemcu. Vaše nastavenia však túto možnost nemajú povolenú. {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="687"/>
@@ -1293,19 +1293,19 @@ Adresy verzie dva, ako táto, nepožadujú obtiažnosť.</translation>
     <message>
         <location filename="../class_singleWorker.py" line="701"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation>Vykonávam prácu potrebnú na odoslanie správy.
-Priímcova požadovaná obtiažnosť: %1 a %2</translation>
+Priímcova požadovaná obtiažnosť: {0} a {1}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="710"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
-        <translation>Problém: Práca požadovná príjemcom (%1 a %2) je obtiažnejšia, ako máte povolené. %3</translation>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
+        <translation>Problém: Práca požadovná príjemcom ({0} a {1}) je obtiažnejšia, ako máte povolené. {2}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="722"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
-        <translation>Problém: skúšate odslať správu sami sebe, ale nemôžem nájsť šifrovací kľúč v súbore keys.dat. Nemožno správu zašifrovať: %1</translation>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
+        <translation>Problém: skúšate odslať správu sami sebe, ale nemôžem nájsť šifrovací kľúč v súbore keys.dat. Nemožno správu zašifrovať: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1049"/>
@@ -1314,8 +1314,8 @@ Priímcova požadovaná obtiažnosť: %1 a %2</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="845"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
-        <translation>Správa odoslaná. Čakanie na potvrdenie. Odoslaná %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
+        <translation>Správa odoslaná. Čakanie na potvrdenie. Odoslaná {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1037"/>
@@ -1329,13 +1329,13 @@ Priímcova požadovaná obtiažnosť: %1 a %2</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="963"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
-        <translation>Odosielam požiadavku na verejný kľúč. Čakám na odpoveď. Vyžiadaný %1</translation>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
+        <translation>Odosielam požiadavku na verejný kľúč. Čakám na odpoveď. Vyžiadaný {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="235"/>
-        <source>UPnP port mapping established on port %1</source>
-        <translation>Mapovanie portov UPnP vytvorené na porte %1</translation>
+        <source>UPnP port mapping established on port {0}</source>
+        <translation>Mapovanie portov UPnP vytvorené na porte {0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="264"/>
@@ -1379,28 +1379,28 @@ Priímcova požadovaná obtiažnosť: %1 a %2</translation>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="211"/>
-        <source>Problem communicating with proxy: %1. Please check your network settings.</source>
-        <translation>Problém komunikácie s proxy: %1. Prosím skontrolujte nastavenia siete.</translation>
+        <source>Problem communicating with proxy: {0}. Please check your network settings.</source>
+        <translation>Problém komunikácie s proxy: {0}. Prosím skontrolujte nastavenia siete.</translation>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="240"/>
-        <source>SOCKS5 Authentication problem: %1. Please check your SOCKS5 settings.</source>
-        <translation>Problém autentikácie SOCKS5: %1. Prosím skontrolujte nastavenia SOCKS5.</translation>
+        <source>SOCKS5 Authentication problem: {0}. Please check your SOCKS5 settings.</source>
+        <translation>Problém autentikácie SOCKS5: {0}. Prosím skontrolujte nastavenia SOCKS5.</translation>
     </message>
     <message>
         <location filename="../class_receiveDataThread.py" line="171"/>
-        <source>The time on your computer, %1, may be wrong. Please verify your settings.</source>
-        <translation>Čas na vašom počítači, %1, možno nie je správny. Prosím, skontrolujete nastavenia.</translation>
+        <source>The time on your computer, {0}, may be wrong. Please verify your settings.</source>
+        <translation>Čas na vašom počítači, {0}, možno nie je správny. Prosím, skontrolujete nastavenia.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="101"/>
-        <source>The name %1 was not found.</source>
+        <source>The name {0} was not found.</source>
         <translation>Meno % nenájdené.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="110"/>
-        <source>The namecoin query failed (%1)</source>
-        <translation>Dotaz prostredníctvom namecoinu zlyhal (%1)</translation>
+        <source>The namecoin query failed ({0})</source>
+        <translation>Dotaz prostredníctvom namecoinu zlyhal ({0})</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="113"/>
@@ -1409,18 +1409,18 @@ Priímcova požadovaná obtiažnosť: %1 a %2</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="119"/>
-        <source>The name %1 has no valid JSON data.</source>
-        <translation>Meno %1 neobsahuje planté JSON dáta.</translation>
+        <source>The name {0} has no valid JSON data.</source>
+        <translation>Meno {0} neobsahuje planté JSON dáta.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="127"/>
-        <source>The name %1 has no associated Bitmessage address.</source>
-        <translation>Meno %1 nemá priradenú žiadnu adresu Bitmessage.</translation>
+        <source>The name {0} has no associated Bitmessage address.</source>
+        <translation>Meno {0} nemá priradenú žiadnu adresu Bitmessage.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="147"/>
-        <source>Success!  Namecoind version %1 running.</source>
-        <translation>Úspech! Namecoind verzia %1 spustený.</translation>
+        <source>Success!  Namecoind version {0} running.</source>
+        <translation>Úspech! Namecoind verzia {0} spustený.</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="153"/>
@@ -1479,53 +1479,53 @@ Vitajte v jednoduchom a bezpečnom Bitmessage
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1960"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address %1</source>
-        <translation>Chyba: Bitmessage adresy začínajú s BM- Prosím skontrolujte adresu príjemcu %1</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address {0}</source>
+        <translation>Chyba: Bitmessage adresy začínajú s BM- Prosím skontrolujte adresu príjemcu {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1966"/>
-        <source>Error: The recipient address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>Chyba: adresa príjemcu %1 nie je na správne napísaná alebo skopírovaná. Prosím skontrolujte ju.</translation>
+        <source>Error: The recipient address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>Chyba: adresa príjemcu {0} nie je na správne napísaná alebo skopírovaná. Prosím skontrolujte ju.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1972"/>
-        <source>Error: The recipient address %1 contains invalid characters. Please check it.</source>
-        <translation>Chyba: adresa príjemcu %1 obsahuje neplatné znaky. Prosím skontrolujte ju.</translation>
+        <source>Error: The recipient address {0} contains invalid characters. Please check it.</source>
+        <translation>Chyba: adresa príjemcu {0} obsahuje neplatné znaky. Prosím skontrolujte ju.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1978"/>
-        <source>Error: The version of the recipient address %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
-        <translation>Chyba: verzia adresy príjemcu %1 je príliš veľká. Buď musíte aktualizovať program Bitmessage alebo váš známy s vami žartuje.</translation>
+        <source>Error: The version of the recipient address {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <translation>Chyba: verzia adresy príjemcu {0} je príliš veľká. Buď musíte aktualizovať program Bitmessage alebo váš známy s vami žartuje.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1986"/>
-        <source>Error: Some data encoded in the recipient address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Chyba: niektoré údaje zakódované v adrese príjemcu %1 sú príliš krátke. Softér vášho známeho možno nefunguje správne.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Chyba: niektoré údaje zakódované v adrese príjemcu {0} sú príliš krátke. Softér vášho známeho možno nefunguje správne.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1994"/>
-        <source>Error: Some data encoded in the recipient address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Chyba: niektoré údaje zakódované v adrese príjemcu %1 sú príliš dlhé. Softvér vášho známeho možno nefunguje správne.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Chyba: niektoré údaje zakódované v adrese príjemcu {0} sú príliš dlhé. Softvér vášho známeho možno nefunguje správne.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2002"/>
-        <source>Error: Some data encoded in the recipient address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
-        <translation>Chyba: niektoré údaje zakódované v adrese príjemcu %1 sú poškodené. Softvér vášho známeho možno nefunguje správne.</translation>
+        <source>Error: Some data encoded in the recipient address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <translation>Chyba: niektoré údaje zakódované v adrese príjemcu {0} sú poškodené. Softvér vášho známeho možno nefunguje správne.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2010"/>
-        <source>Error: Something is wrong with the recipient address %1.</source>
-        <translation>Chyba: niečo s adresou príjemcu %1 je nie je v poriadku.</translation>
+        <source>Error: Something is wrong with the recipient address {0}.</source>
+        <translation>Chyba: niečo s adresou príjemcu {0} je nie je v poriadku.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2160"/>
-        <source>Error: %1</source>
-        <translation>Chyba: %1</translation>
+        <source>Error: {0}</source>
+        <translation>Chyba: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2277"/>
-        <source>From %1</source>
-        <translation>Od %1</translation>
+        <source>From {0}</source>
+        <translation>Od {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2719"/>
@@ -1570,7 +1570,7 @@ Vitajte v jednoduchom a bezpečnom Bitmessage
     <message numerus="yes">
         <location filename="../bitmessageqt/address_dialogs.py" line="194"/>
         <source>Display the %n recent broadcast(s) from this address.</source>
-        <translation><numerusform>Zobraziť poslednú %1 hromadnú správu z tejto adresy.</numerusform><numerusform>Zobraziť posledné %1 hromadné správy z tejto adresy.</numerusform><numerusform>Zobraziť posledných %1 hromadných správ z tejto adresy.</numerusform></translation>
+        <translation><numerusform>Zobraziť poslednú {0} hromadnú správu z tejto adresy.</numerusform><numerusform>Zobraziť posledné {0} hromadné správy z tejto adresy.</numerusform><numerusform>Zobraziť posledných {0} hromadných správ z tejto adresy.</numerusform></translation>
     </message>
     <message>
         <location filename="../bitmessageqt/bitmessageui.py" line="658"/>
@@ -1617,8 +1617,8 @@ Vitajte v jednoduchom a bezpečnom Bitmessage
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="72"/>
-        <source>The link &quot;%1&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
-        <translation>Odkaz &quot;%1&quot; bude otvorený v prehliadači. Tento úkon môže predstavovať bezpečnostné riziko a Vás deanonymizovať, alebo vykonať škodlivú činnost. Ste si istý?</translation>
+        <source>The link &quot;{0}&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
+        <translation>Odkaz &quot;{0}&quot; bude otvorený v prehliadači. Tento úkon môže predstavovať bezpečnostné riziko a Vás deanonymizovať, alebo vykonať škodlivú činnost. Ste si istý?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="117"/>
@@ -1953,8 +1953,8 @@ Predvoľba je pomocou generátora náhodných čísiel, ale deterministické adr
     </message>
     <message>
         <location filename="../bitmessageqt/dialogs.py" line="58"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>Používate port TCP %1. (Možno zmeniť v nastaveniach).</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>Používate port TCP {0}. (Možno zmeniť v nastaveniach).</translation>
     </message>
 </context>
 <context>
@@ -2006,28 +2006,28 @@ Predvoľba je pomocou generátora náhodných čísiel, ale deterministické adr
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="171"/>
-        <source>Since startup on %1</source>
-        <translation>Od spustenia %1</translation>
+        <source>Since startup on {0}</source>
+        <translation>Od spustenia {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="90"/>
-        <source>Down: %1/s  Total: %2</source>
-        <translation>Prijatých: %1/s  Spolu: %2</translation>
+        <source>Down: {0}/s  Total: {1}</source>
+        <translation>Prijatých: {0}/s  Spolu: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="92"/>
-        <source>Up: %1/s  Total: %2</source>
-        <translation>Odoslaných: %1/s  Spolu: %2</translation>
+        <source>Up: {0}/s  Total: {1}</source>
+        <translation>Odoslaných: {0}/s  Spolu: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="153"/>
-        <source>Total Connections: %1</source>
-        <translation>Spojení spolu: %1</translation>
+        <source>Total Connections: {0}</source>
+        <translation>Spojení spolu: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="163"/>
-        <source>Inventory lookups per second: %1</source>
-        <translation>Vyhľadaní v inventári za sekundu: %1</translation>
+        <source>Inventory lookups per second: {0}</source>
+        <translation>Vyhľadaní v inventári za sekundu: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.ui" line="256"/>
@@ -2192,8 +2192,8 @@ Predvoľba je pomocou generátora náhodných čísiel, ale deterministické adr
     <name>newchandialog</name>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="38"/>
-        <source>Successfully created / joined chan %1</source>
-        <translation>Kanál %1 úspešne vytvorený/pripojený</translation>
+        <source>Successfully created / joined chan {0}</source>
+        <translation>Kanál {0} úspešne vytvorený/pripojený</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="44"/>
diff --git a/src/translations/bitmessage_sv.ts b/src/translations/bitmessage_sv.ts
index 015546b3..8b854d5d 100644
--- a/src/translations/bitmessage_sv.ts
+++ b/src/translations/bitmessage_sv.ts
@@ -240,7 +240,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="586"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -260,12 +260,12 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="996"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="999"/>
-        <source>Message sent. Sent at %1</source>
+        <source>Message sent. Sent at {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -275,7 +275,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1005"/>
-        <source>Acknowledgement of the message received %1</source>
+        <source>Acknowledgement of the message received {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -285,17 +285,17 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1011"/>
-        <source>Broadcast on %1</source>
+        <source>Broadcast on {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1014"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1017"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -305,7 +305,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1023"/>
-        <source>Unknown status: %1 %2</source>
+        <source>Unknown status: {0} {1}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -346,7 +346,7 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1523"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
         <translation type="unfinished"/>
     </message>
@@ -363,7 +363,7 @@ It is important that you back up this file.</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1530"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
         <translation type="unfinished"/>
     </message>
@@ -429,7 +429,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1595"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -497,52 +497,52 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1959"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1991"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2000"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2003"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2006"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2009"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2012"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2015"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2018"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2021"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -557,7 +557,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -567,7 +567,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2034"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -702,7 +702,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2917"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -856,7 +856,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4321"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1051,7 +1051,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="44"/>
-        <source>Zoom level %1%</source>
+        <source>Zoom level {0}%</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1066,47 +1066,47 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4281"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1848"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2703"/>
-        <source>Waiting for PoW to finish... %1%</source>
+        <source>Waiting for PoW to finish... {0}%</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2707"/>
-        <source>Shutting down Pybitmessage... %1%</source>
+        <source>Shutting down Pybitmessage... {0}%</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2729"/>
-        <source>Waiting for objects to be sent... %1%</source>
+        <source>Waiting for objects to be sent... {0}%</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2739"/>
-        <source>Saving settings... %1%</source>
+        <source>Saving settings... {0}%</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2748"/>
-        <source>Shutting down core... %1%</source>
+        <source>Shutting down core... {0}%</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2751"/>
-        <source>Stopping notifications... %1%</source>
+        <source>Stopping notifications... {0}%</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2757"/>
-        <source>Shutdown imminent... %1%</source>
+        <source>Shutdown imminent... {0}%</source>
         <translation type="unfinished"/>
     </message>
     <message numerus="yes">
@@ -1121,7 +1121,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2684"/>
-        <source>Shutting down PyBitmessage... %1%</source>
+        <source>Shutting down PyBitmessage... {0}%</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1141,12 +1141,12 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="165"/>
-        <source>Generating %1 new addresses.</source>
+        <source>Generating {0} new addresses.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="242"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1156,7 +1156,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="210"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1181,7 +1181,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="487"/>
-        <source>Broadcast sent on %1</source>
+        <source>Broadcast sent on {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1201,7 +1201,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="647"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1213,17 +1213,17 @@ There is no required difficulty for version 2 addresses like this.</source>
     <message>
         <location filename="../class_singleWorker.py" line="675"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="684"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="696"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1233,7 +1233,7 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="819"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1248,12 +1248,12 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="942"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../upnp.py" line="217"/>
-        <source>UPnP port mapping established on port %1</source>
+        <source>UPnP port mapping established on port {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1601,27 +1601,27 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="137"/>
-        <source>Since startup on %1</source>
+        <source>Since startup on {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="71"/>
-        <source>Down: %1/s  Total: %2</source>
+        <source>Down: {0}/s  Total: {1}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="73"/>
-        <source>Up: %1/s  Total: %2</source>
+        <source>Up: {0}/s  Total: {1}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="120"/>
-        <source>Total Connections: %1</source>
+        <source>Total Connections: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="129"/>
-        <source>Inventory lookups per second: %1</source>
+        <source>Inventory lookups per second: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
diff --git a/src/translations/bitmessage_zh_cn.ts b/src/translations/bitmessage_zh_cn.ts
index 474f8c6c..534e2f7a 100644
--- a/src/translations/bitmessage_zh_cn.ts
+++ b/src/translations/bitmessage_zh_cn.ts
@@ -352,8 +352,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="597"/>
-        <source>One of your addresses, %1, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
-        <translation>您的地址中的一个, %1,是一个过时的版本1地址. 版本1地址已经不再受到支持了. 我们可以将它删除掉么?</translation>
+        <source>One of your addresses, {0}, is an old version 1 address. Version 1 addresses are no longer supported. May we delete it now?</source>
+        <translation>您的地址中的一个, {0},是一个过时的版本1地址. 版本1地址已经不再受到支持了. 我们可以将它删除掉么?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1030"/>
@@ -372,13 +372,13 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1039"/>
-        <source>Message sent. Waiting for acknowledgement. Sent at %1</source>
-        <translation>消息已经发送. 正在等待回执. 发送于 %1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent at {0}</source>
+        <translation>消息已经发送. 正在等待回执. 发送于 {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1042"/>
-        <source>Message sent. Sent at %1</source>
-        <translation>消息已经发送. 发送于 %1</translation>
+        <source>Message sent. Sent at {0}</source>
+        <translation>消息已经发送. 发送于 {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1002"/>
@@ -387,8 +387,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1048"/>
-        <source>Acknowledgement of the message received %1</source>
-        <translation>消息的回执已经收到于 %1</translation>
+        <source>Acknowledgement of the message received {0}</source>
+        <translation>消息的回执已经收到于 {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2140"/>
@@ -397,18 +397,18 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1057"/>
-        <source>Broadcast on %1</source>
-        <translation>已经广播于 %1</translation>
+        <source>Broadcast on {0}</source>
+        <translation>已经广播于 {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1060"/>
-        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. %1</source>
-        <translation>错误: 收件人要求的做工量大于我们的最大接受做工量。 %1</translation>
+        <source>Problem: The work demanded by the recipient is more difficult than you are willing to do. {0}</source>
+        <translation>错误: 收件人要求的做工量大于我们的最大接受做工量。 {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1063"/>
-        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. %1</source>
-        <translation>错误: 收件人的加密密钥是无效的。不能加密消息。 %1</translation>
+        <source>Problem: The recipient&apos;s encryption key is no good. Could not encrypt message. {0}</source>
+        <translation>错误: 收件人的加密密钥是无效的。不能加密消息。 {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1066"/>
@@ -417,8 +417,8 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1069"/>
-        <source>Unknown status: %1 %2</source>
-        <translation>未知状态: %1 %2</translation>
+        <source>Unknown status: {0} {1}</source>
+        <translation>未知状态: {0} {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1610"/>
@@ -458,9 +458,9 @@ Please type the desired email address (including @mailchuck.com) below:</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1459"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file.</source>
-        <translation>您可以通过编辑储存在 %1 的 keys.dat 来编辑密钥。备份这个文件十分重要。</translation>
+        <translation>您可以通过编辑储存在 {0} 的 keys.dat 来编辑密钥。备份这个文件十分重要。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1466"/>
@@ -475,9 +475,9 @@ It is important that you back up this file.</source>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1466"/>
         <source>You may manage your keys by editing the keys.dat file stored in
- %1 
+ {0} 
 It is important that you back up this file. Would you like to open the file now? (Be sure to close Bitmessage before making any changes.)</source>
-        <translation>您可以通过编辑储存在 %1 的 keys.dat 来编辑密钥。备份这个文件十分重要。您现在想打开这个文件么?(请在进行任何修改前关闭比特信)</translation>
+        <translation>您可以通过编辑储存在 {0} 的 keys.dat 来编辑密钥。备份这个文件十分重要。您现在想打开这个文件么?(请在进行任何修改前关闭比特信)</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1473"/>
@@ -541,7 +541,7 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1603"/>
-        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: %1. This address also appears in &apos;Your Identities&apos;.</source>
+        <source>Successfully created chan. To let others join your chan, give them the chan name and this Bitmessage address: {0}. This address also appears in &apos;Your Identities&apos;.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -610,52 +610,52 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1899"/>
-        <source>The message that you are trying to send is too long by %1 bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
+        <source>The message that you are trying to send is too long by {0} bytes. (The maximum is 261644 bytes). Please cut it down before sending.</source>
         <translation>您正在尝试发送的信息已超过 %1 个字节太长(最大为261644个字节),发送前请先缩短一些。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1941"/>
-        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as %1, please wait for the registration to be processed before retrying sending.</source>
+        <source>Error: Your account wasn&apos;t registered at an email gateway. Sending registration now as {0}, please wait for the registration to be processed before retrying sending.</source>
         <translation>错误: 您的帐户没有在电子邮件网关注册。现在发送注册为%1​​, 注册正在处理请稍候重试发送.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2008"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check %1</source>
+        <source>Error: Bitmessage addresses start with BM-   Please check {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2011"/>
-        <source>Error: The address %1 is not typed or copied correctly. Please check it.</source>
+        <source>Error: The address {0} is not typed or copied correctly. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2014"/>
-        <source>Error: The address %1 contains invalid characters. Please check it.</source>
+        <source>Error: The address {0} contains invalid characters. Please check it.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2017"/>
-        <source>Error: The address version in %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <source>Error: The address version in {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2020"/>
-        <source>Error: Some data encoded in the address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2023"/>
-        <source>Error: Some data encoded in the address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Error: Some data encoded in the address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2029"/>
-        <source>Error: Something is wrong with the address %1.</source>
+        <source>Error: Something is wrong with the address {0}.</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -670,8 +670,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2026"/>
-        <source>Concerning the address %1, Bitmessage cannot understand address version numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>地址 %1 的地址版本号 %2 无法被比特信理解。也许您应该升级您的比特信到最新版本。</translation>
+        <source>Concerning the address {0}, Bitmessage cannot understand address version numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>地址 {0} 的地址版本号 {1} 无法被比特信理解。也许您应该升级您的比特信到最新版本。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
@@ -680,8 +680,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2030"/>
-        <source>Concerning the address %1, Bitmessage cannot handle stream numbers of %2. Perhaps upgrade Bitmessage to the latest version.</source>
-        <translation>地址 %1 的节点流序号 %2 无法被比特信所理解。也许您应该升级您的比特信到最新版本。</translation>
+        <source>Concerning the address {0}, Bitmessage cannot handle stream numbers of {1}. Perhaps upgrade Bitmessage to the latest version.</source>
+        <translation>地址 {0} 的节点流序号 {1} 无法被比特信所理解。也许您应该升级您的比特信到最新版本。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2035"/>
@@ -815,8 +815,8 @@ It is important that you back up this file. Would you like to open the file now?
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3043"/>
-        <source>Bitmessage cannot find your address %1. Perhaps you removed it?</source>
-        <translation>比特信无法找到您的地址 %1 ,也许您已经把它删掉了?</translation>
+        <source>Bitmessage cannot find your address {0}. Perhaps you removed it?</source>
+        <translation>比特信无法找到您的地址 {0} ,也许您已经把它删掉了?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="3046"/>
@@ -973,7 +973,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4374"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1168,7 +1168,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="56"/>
-        <source>Zoom level %1%</source>
+        <source>Zoom level {0}%</source>
         <translation>缩放级别%1%</translation>
     </message>
     <message>
@@ -1183,48 +1183,48 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="4334"/>
-        <source>Display the %1 recent broadcast(s) from this address.</source>
+        <source>Display the {0} recent broadcast(s) from this address.</source>
         <translation type="unfinished"/>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1774"/>
-        <source>New version of PyBitmessage is available: %1. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
-        <translation>PyBitmessage的新版本可用: %1. 从https://github.com/Bitmessage/PyBitmessage/releases/latest下载</translation>
+        <source>New version of PyBitmessage is available: {0}. Download it from https://github.com/Bitmessage/PyBitmessage/releases/latest</source>
+        <translation>PyBitmessage的新版本可用: {0}. 从https://github.com/Bitmessage/PyBitmessage/releases/latest下载</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2817"/>
-        <source>Waiting for PoW to finish... %1%</source>
-        <translation>等待PoW完成...%1%</translation>
+        <source>Waiting for PoW to finish... {0}%</source>
+        <translation>等待PoW完成...{0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2826"/>
-        <source>Shutting down Pybitmessage... %1%</source>
-        <translation>关闭Pybitmessage ...%1%</translation>
+        <source>Shutting down Pybitmessage... {0}%</source>
+        <translation>关闭Pybitmessage ...{0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2845"/>
-        <source>Waiting for objects to be sent... %1%</source>
-        <translation>等待要发送对象...%1%</translation>
+        <source>Waiting for objects to be sent... {0}%</source>
+        <translation>等待要发送对象...{0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2862"/>
-        <source>Saving settings... %1%</source>
-        <translation>保存设置...%1%</translation>
+        <source>Saving settings... {0}%</source>
+        <translation>保存设置...{0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2875"/>
-        <source>Shutting down core... %1%</source>
-        <translation>关闭核心...%1%</translation>
+        <source>Shutting down core... {0}%</source>
+        <translation>关闭核心...{0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2881"/>
-        <source>Stopping notifications... %1%</source>
-        <translation>停止通知...%1%</translation>
+        <source>Stopping notifications... {0}%</source>
+        <translation>停止通知...{0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2885"/>
-        <source>Shutdown imminent... %1%</source>
-        <translation>关闭即将来临...%1%</translation>
+        <source>Shutdown imminent... {0}%</source>
+        <translation>关闭即将来临...{0}%</translation>
     </message>
     <message numerus="yes">
         <location filename="../bitmessageqt/bitmessageui.py" line="706"/>
@@ -1238,8 +1238,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2783"/>
-        <source>Shutting down PyBitmessage... %1%</source>
-        <translation>关闭PyBitmessage...%1%</translation>
+        <source>Shutting down PyBitmessage... {0}%</source>
+        <translation>关闭PyBitmessage...{0}%</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1144"/>
@@ -1258,13 +1258,13 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="219"/>
-        <source>Generating %1 new addresses.</source>
-        <translation>生成%1个新地址.</translation>
+        <source>Generating {0} new addresses.</source>
+        <translation>生成{0}个新地址.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="323"/>
-        <source>%1 is already in &apos;Your Identities&apos;. Not adding it again.</source>
-        <translation>%1已经在&apos;您的身份&apos;. 不必重新添加.</translation>
+        <source>{0} is already in &apos;Your Identities&apos;. Not adding it again.</source>
+        <translation>{0}已经在&apos;您的身份&apos;. 不必重新添加.</translation>
     </message>
     <message>
         <location filename="../class_addressGenerator.py" line="377"/>
@@ -1273,7 +1273,7 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_outgoingSynSender.py" line="228"/>
-        <source>SOCKS5 Authentication problem: %1</source>
+        <source>SOCKS5 Authentication problem: {0}</source>
         <translation type="unfinished"/>
     </message>
     <message>
@@ -1298,8 +1298,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="612"/>
-        <source>Broadcast sent on %1</source>
-        <translation>广播发送%1</translation>
+        <source>Broadcast sent on {0}</source>
+        <translation>广播发送{0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="722"/>
@@ -1318,8 +1318,8 @@ Are you sure you want to delete the channel?</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="877"/>
-        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  %1</source>
-        <translation>问题:对方是移动设备,并且对方的地址包含在此消息中,但是您的设置禁止了。 %1</translation>
+        <source>Problem: Destination is a mobile device who requests that the destination be included in the message but this is disallowed in your settings.  {0}</source>
+        <translation>问题:对方是移动设备,并且对方的地址包含在此消息中,但是您的设置禁止了。 {0}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="908"/>
@@ -1331,19 +1331,19 @@ There is no required difficulty for version 2 addresses like this.</source>
     <message>
         <location filename="../class_singleWorker.py" line="944"/>
         <source>Doing work necessary to send message.
-Receiver&apos;s required difficulty: %1 and %2</source>
+Receiver&apos;s required difficulty: {0} and {1}</source>
         <translation>做必要的工作, 以发送短信.
-接收者的要求难度: %1与%2</translation>
+接收者的要求难度: {0}与{1}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="986"/>
-        <source>Problem: The work demanded by the recipient (%1 and %2) is more difficult than you are willing to do. %3</source>
-        <translation>问题: 由接收者(%1%2)要求的工作量比您愿意做的工作量來得更困难. %3</translation>
+        <source>Problem: The work demanded by the recipient ({0} and {1}) is more difficult than you are willing to do. {2}</source>
+        <translation>问题: 由接收者({0}{1})要求的工作量比您愿意做的工作量來得更困难. {2}</translation>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1010"/>
-        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. %1</source>
-        <translation>问题: 您正在尝试将信息发送给自己或频道, 但您的加密密钥无法在keys.dat文件中找到. 无法加密信息. %1</translation>
+        <source>Problem: You are trying to send a message to yourself or a chan but your encryption key could not be found in the keys.dat file. Could not encrypt message. {0}</source>
+        <translation>问题: 您正在尝试将信息发送给自己或频道, 但您的加密密钥无法在keys.dat文件中找到. 无法加密信息. {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1045"/>
@@ -1352,8 +1352,8 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1214"/>
-        <source>Message sent. Waiting for acknowledgement. Sent on %1</source>
-        <translation>信息发送. 等待确认. 已发送%1</translation>
+        <source>Message sent. Waiting for acknowledgement. Sent on {0}</source>
+        <translation>信息发送. 等待确认. 已发送{0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1033"/>
@@ -1367,13 +1367,13 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../class_singleWorker.py" line="1383"/>
-        <source>Sending public key request. Waiting for reply. Requested at %1</source>
-        <translation>发送公钥的请求. 等待回复. 请求在%1</translation>
+        <source>Sending public key request. Waiting for reply. Requested at {0}</source>
+        <translation>发送公钥的请求. 等待回复. 请求在{0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="267"/>
-        <source>UPnP port mapping established on port %1</source>
-        <translation>UPnP端口映射建立在端口%1</translation>
+        <source>UPnP port mapping established on port {0}</source>
+        <translation>UPnP端口映射建立在端口{0}</translation>
     </message>
     <message>
         <location filename="../upnp.py" line="293"/>
@@ -1417,18 +1417,18 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../namecoin.py" line="119"/>
-        <source>The name %1 was not found.</source>
-        <translation>名字%1未找到。</translation>
+        <source>The name {0} was not found.</source>
+        <translation>名字{0}未找到。</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="130"/>
-        <source>The namecoin query failed (%1)</source>
-        <translation>域名币查询失败(%1)</translation>
+        <source>The namecoin query failed ({0})</source>
+        <translation>域名币查询失败({0})</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="134"/>
-        <source>Unknown namecoin interface type: %1</source>
-        <translation>未知的 Namecoin 界面类型: %1</translation>
+        <source>Unknown namecoin interface type: {0}</source>
+        <translation>未知的 Namecoin 界面类型: {0}</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="139"/>
@@ -1437,13 +1437,13 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../namecoin.py" line="156"/>
-        <source>The name %1 has no associated Bitmessage address.</source>
-        <translation> 名字%1没有关联比特信地址。</translation>
+        <source>The name {0} has no associated Bitmessage address.</source>
+        <translation> 名字{0}没有关联比特信地址。</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="185"/>
-        <source>Success!  Namecoind version %1 running.</source>
-        <translation>成功!域名币系统%1运行中。</translation>
+        <source>Success!  Namecoind version {0} running.</source>
+        <translation>成功!域名币系统{0}运行中。</translation>
     </message>
     <message>
         <location filename="../namecoin.py" line="196"/>
@@ -1506,53 +1506,53 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1960"/>
-        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address %1</source>
-        <translation>错误:Bitmessage地址是以BM-开头的,请检查收信地址%1.</translation>
+        <source>Error: Bitmessage addresses start with BM-   Please check the recipient address {0}</source>
+        <translation>错误:Bitmessage地址是以BM-开头的,请检查收信地址{0}.</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1966"/>
-        <source>Error: The recipient address %1 is not typed or copied correctly. Please check it.</source>
-        <translation>错误:收信地址%1未填写或复制错误。请检查。</translation>
+        <source>Error: The recipient address {0} is not typed or copied correctly. Please check it.</source>
+        <translation>错误:收信地址{0}未填写或复制错误。请检查。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1972"/>
-        <source>Error: The recipient address %1 contains invalid characters. Please check it.</source>
-        <translation>错误:收信地址%1还有非法字符。请检查。</translation>
+        <source>Error: The recipient address {0} contains invalid characters. Please check it.</source>
+        <translation>错误:收信地址{0}还有非法字符。请检查。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1978"/>
-        <source>Error: The version of the recipient address %1 is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
-        <translation>错误:收信地址 %1 版本太高。要么您需要更新您的软件,要么对方需要降级 。</translation>
+        <source>Error: The version of the recipient address {0} is too high. Either you need to upgrade your Bitmessage software or your acquaintance is being clever.</source>
+        <translation>错误:收信地址 {0} 版本太高。要么您需要更新您的软件,要么对方需要降级 。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1986"/>
-        <source>Error: Some data encoded in the recipient address %1 is too short. There might be something wrong with the software of your acquaintance.</source>
-        <translation>错误:收信地址%1编码数据太短。可能对方使用的软件有问题。</translation>
+        <source>Error: Some data encoded in the recipient address {0} is too short. There might be something wrong with the software of your acquaintance.</source>
+        <translation>错误:收信地址{0}编码数据太短。可能对方使用的软件有问题。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="1994"/>
-        <source>Error: Some data encoded in the recipient address %1 is too long. There might be something wrong with the software of your acquaintance.</source>
+        <source>Error: Some data encoded in the recipient address {0} is too long. There might be something wrong with the software of your acquaintance.</source>
         <translation>错误:</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2002"/>
-        <source>Error: Some data encoded in the recipient address %1 is malformed. There might be something wrong with the software of your acquaintance.</source>
-        <translation>错误:收信地址%1编码数据太长。可能对方使用的软件有问题。</translation>
+        <source>Error: Some data encoded in the recipient address {0} is malformed. There might be something wrong with the software of your acquaintance.</source>
+        <translation>错误:收信地址{0}编码数据太长。可能对方使用的软件有问题。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2010"/>
-        <source>Error: Something is wrong with the recipient address %1.</source>
-        <translation>错误:收信地址%1有问题。</translation>
+        <source>Error: Something is wrong with the recipient address {0}.</source>
+        <translation>错误:收信地址{0}有问题。</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2159"/>
-        <source>Error: %1</source>
-        <translation>错误:%1</translation>
+        <source>Error: {0}</source>
+        <translation>错误:{0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2276"/>
-        <source>From %1</source>
-        <translation>来自 %1</translation>
+        <source>From {0}</source>
+        <translation>来自 {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/__init__.py" line="2680"/>
@@ -1664,8 +1664,8 @@ Receiver&apos;s required difficulty: %1 and %2</source>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="84"/>
-        <source>The link &quot;%1&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
-        <translation>此链接“%1”将在浏览器中打开。可能会有安全风险,可能会暴露您或下载恶意数据。确定吗?</translation>
+        <source>The link &quot;{0}&quot; will open in a browser. It may be a security risk, it could de-anonymise you or download malicious data. Are you sure?</source>
+        <translation>此链接“{0}”将在浏览器中打开。可能会有安全风险,可能会暴露您或下载恶意数据。确定吗?</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/messageview.py" line="134"/>
@@ -1999,8 +1999,8 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/dialogs.py" line="64"/>
-        <source>You are using TCP port %1. (This can be changed in the settings).</source>
-        <translation>您正在使用TCP端口 %1 。(可以在设置中修改)。</translation>
+        <source>You are using TCP port {0}. (This can be changed in the settings).</source>
+        <translation>您正在使用TCP端口 {0} 。(可以在设置中修改)。</translation>
     </message>
 </context>
 <context>
@@ -2052,28 +2052,28 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="242"/>
-        <source>Since startup on %1</source>
-        <translation>自从%1启动</translation>
+        <source>Since startup on {0}</source>
+        <translation>自从{0}启动</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="140"/>
-        <source>Down: %1/s  Total: %2</source>
-        <translation>下: %1/秒 总计: %2</translation>
+        <source>Down: {0}/s  Total: {1}</source>
+        <translation>下: {0}/秒 总计: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="146"/>
-        <source>Up: %1/s  Total: %2</source>
-        <translation>上: %1/秒 总计: %2</translation>
+        <source>Up: {0}/s  Total: {1}</source>
+        <translation>上: {0}/秒 总计: {1}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="219"/>
-        <source>Total Connections: %1</source>
-        <translation>总的连接数: %1</translation>
+        <source>Total Connections: {0}</source>
+        <translation>总的连接数: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.py" line="234"/>
-        <source>Inventory lookups per second: %1</source>
-        <translation>每秒库存查询: %1</translation>
+        <source>Inventory lookups per second: {0}</source>
+        <translation>每秒库存查询: {0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/networkstatus.ui" line="256"/>
@@ -2238,8 +2238,8 @@ The &apos;Random Number&apos; option is selected by default but deterministic ad
     <name>newchandialog</name>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="68"/>
-        <source>Successfully created / joined chan %1</source>
-        <translation>成功创建或加入频道%1</translation>
+        <source>Successfully created / joined chan {0}</source>
+        <translation>成功创建或加入频道{0}</translation>
     </message>
     <message>
         <location filename="../bitmessageqt/newchandialog.py" line="75"/>
diff --git a/src/translations/noarg.sh b/src/translations/noarg.sh
new file mode 100755
index 00000000..50d45d32
--- /dev/null
+++ b/src/translations/noarg.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+files=`ls *.ts`
+tmp_file=/tmp/noarg.sh.txt
+for file in $files; do
+  cat $file | sed 's/%1/{0}/g' | sed 's/%2/{1}/g' | sed 's/%3/{2}/g' > $tmp_file
+  mv $tmp_file $file
+done
diff --git a/src/translations/update.sh b/src/translations/update.sh
new file mode 100755
index 00000000..b3221486
--- /dev/null
+++ b/src/translations/update.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+lrelease-qt4 bitmessage.pro