diff --git a/gajim/accounts_window.py b/gajim/accounts_window.py
index 01970826e3ebe5a15564a91d520a34a8f619a919..836ce800a249e2a22564b808d62496c0938013b5 100644
--- a/gajim/accounts_window.py
+++ b/gajim/accounts_window.py
@@ -177,10 +177,7 @@ class AccountsWindow(Gtk.ApplicationWindow):
 
     def on_remove_account(self, button, account):
         if app.events.get_events(account):
-            dialogs.ErrorDialog(
-                _('Unread events'),
-                _('Read all pending events before removing this account.'),
-                transient_for=self)
+            app.interface.raise_dialog('unread-events-on-remove')
             return
 
         if app.config.get_per('accounts', account, 'is_zeroconf'):
@@ -361,10 +358,7 @@ class Account(Gtk.Box):
         if (account in app.connections and
                 app.connections[account].connected > 0):
             # connecting or connected
-            dialogs.ErrorDialog(
-                _('You are currently connected to the server'),
-                _('To disable the account, you must be disconnected.'),
-                transient_for=self.parent)
+            app.interface.raise_dialog('connected-on-disable-account')
             switch.set_active(not state)
             return
         if state:
diff --git a/gajim/adhoc_commands.py b/gajim/adhoc_commands.py
index 03f23b56fed06886ecf801deec18fb890d30454a..0b9a1fd94940033de045739de573cf71fbef8890 100644
--- a/gajim/adhoc_commands.py
+++ b/gajim/adhoc_commands.py
@@ -364,10 +364,8 @@ class CommandWindow:
         if self.data_form_widget.get_data_form():
             df = self.data_form_widget.get_data_form()
             if not df.is_valid():
-                dialogs.ErrorDialog(
-                    _('Invalid Form'),
-                    _('The form is not filled correctly.'),
-                    transient_for=self.window)
+                app.interface.raise_dialog(
+                    'invalid-form', transient_for=self.window)
                 self.data_form_widget.set_sensitive(True)
                 return
             self.data_form_widget.data_form.type_ = 'submit'
diff --git a/gajim/app_actions.py b/gajim/app_actions.py
index d32989993a1db275f33cdc012e5aa8fa042ca767..67cf5bef863a553a03586939b787570453759af4 100644
--- a/gajim/app_actions.py
+++ b/gajim/app_actions.py
@@ -124,8 +124,7 @@ class AppActions():
         account = param.get_string()
         invisible_show = app.SHOW_LIST.index('invisible')
         if app.connections[account].connected == invisible_show:
-            dialogs.ErrorDialog(_(
-                'You cannot join a group chat while you are invisible'))
+            app.interface.raise_dialog('join-while-invisible')
             return
         if 'join_gc' in interface.instances[account]:
             interface.instances[account]['join_gc'].present()
diff --git a/gajim/chat_control_base.py b/gajim/chat_control_base.py
index 2de753bbab1816126afb25486013f387e36e816c..d053cfe76442fded41c4ad4ca69932c9a1497d12 100644
--- a/gajim/chat_control_base.py
+++ b/gajim/chat_control_base.py
@@ -694,8 +694,7 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools):
 
             if send_message and app.connections[self.account].connected < 2:
                 # we are not connected
-                dialogs.ErrorDialog(_('A connection is not available'),
-                    _('Your message can not be sent until you are connected.'))
+                app.interface.raise_dialog('not-connected-while-sending')
             elif send_message:
                 self.send_message(message, xhtml=xhtml)
             else:
diff --git a/gajim/dataforms_widget.py b/gajim/dataforms_widget.py
index 3f8d7b8ea2ccdaa592176b66e6fd0282f47da8ed..702282de156f61c60617cbc87d9d3fd7886bcf35 100644
--- a/gajim/dataforms_widget.py
+++ b/gajim/dataforms_widget.py
@@ -37,6 +37,7 @@ from gajim import dialogs
 
 from gajim.common import dataforms
 from gajim.common import helpers
+from gajim.common import app
 
 import itertools
 
@@ -641,12 +642,10 @@ class SingleForm(Gtk.Table, object):
         try:
             newtext = helpers.parse_jid(newtext)
         except helpers.InvalidFormat as s:
-            dialogs.ErrorDialog(_('Invalid JID'), str(s))
+            app.interface.raise_dialog('invalid-jid-with-error', str(s))    
             return
         if newtext in field.values:
-            dialogs.ErrorDialog(
-                    _('JID already in list'),
-                    _('The JID you entered is already in the list. Choose another one.'))
+            app.interface.raise_dialog('jid-in-list')
             GLib.idle_add(treeview.set_cursor, path)
             return
         model[path][0]=newtext
diff --git a/gajim/dialog_messages.py b/gajim/dialog_messages.py
index 0aef894b3694fbf4cb85c5ce40987a55d81da902..5542084a381a75a23e2d82a192db5362e25f38dd 100644
--- a/gajim/dialog_messages.py
+++ b/gajim/dialog_messages.py
@@ -22,10 +22,52 @@ from collections import namedtuple
 from gi.repository import GLib
 
 from gajim.common.app import app
+from gajim.dialogs import ErrorDialog
 
 Message = namedtuple('Message', ['title', 'text', 'dialog'])
 
-messages = {}
+messages = {
+    'start-chat-not-connected': Message(
+        _('You are not connected to the server'),
+        _('You can not start a new conversation unless you are connected.'),
+        ErrorDialog),
+
+    'invalid-jid-with-error': Message(
+        _('Invalid JID'),
+        '%s',
+        ErrorDialog),
+
+    'unread-events-on-remove-account': Message(
+        _('Unread events'),
+        _('Read all pending events before removing this account.'),
+        ErrorDialog),
+
+    'connected-on-disable-account': Message(
+        _('You are currently connected to the server'),
+        _('To disable the account, you must be disconnected.'),
+        ErrorDialog),
+
+    'invalid-form': Message(
+        _('Invalid Form'),
+        _('The form is not filled correctly.'),
+        ErrorDialog),
+
+    'join-while-invisible': Message(
+        _('Invisible'),
+        _('You cannot join a group chat while you are invisible'),
+        ErrorDialog),
+
+    'not-connected-while-sending': Message(
+        _('A connection is not available'),
+        _('Your message can not be sent until you are connected.'),
+        ErrorDialog),
+
+    'jid-in-list': Message(
+        _('JID already in list'),
+        _('The JID you entered is already in the list. Choose another one.'),
+        ErrorDialog),
+
+    }
 
 
 def get_dialog(name, *args, **kwargs):
@@ -42,8 +84,10 @@ def get_dialog(name, *args, **kwargs):
 
     if args:
         message_text = message.text % args
-    else:
+    elif kwargs:
         message_text = message.text % kwargs
+    else:
+        message_text = message.text
     dialog = message.dialog(message.title,
                             GLib.markup_escape_text(message_text),
                             transient_for=transient_for)
diff --git a/gajim/dialogs.py b/gajim/dialogs.py
index 8b0675ea45307769784ec8a2a45028594ed6edcb..d468aaed012b09397ecf7c09bd6fc0d4fe4c569b 100644
--- a/gajim/dialogs.py
+++ b/gajim/dialogs.py
@@ -2879,16 +2879,12 @@ class StartChatDialog(Gtk.ApplicationWindow):
     def _start_new_chat(self, row):
         if row.new:
             if not app.account_is_connected(row.account):
-                ErrorDialog(
-                    _('You are not connected to the server'),
-                    _('You can not start a new conversation'
-                      ' unless you are connected.'),
-                    transient_for=self)
+                app.interface.raise_dialog('start-chat-not-connected')
                 return
             try:
                 helpers.parse_jid(row.jid)
             except helpers.InvalidFormat as e:
-                ErrorDialog(_('Invalid JID'), str(e), transient_for=self)
+                app.interface.raise_dialog('invalid-jid-with-error', str(e))
                 return
 
         if row.groupchat: