diff --git a/gajim/gtk/dialogs.py b/gajim/gtk/dialogs.py
index ff7510e46529d1270213a4e2a8f527b104c54a73..8033d0fdca3dfab3a1ca13904024939ec115f92b 100644
--- a/gajim/gtk/dialogs.py
+++ b/gajim/gtk/dialogs.py
@@ -15,6 +15,7 @@
 from collections import namedtuple
 
 from gi.repository import Gtk
+from gi.repository import Pango
 
 from gajim.common import app
 from gajim.common import helpers
@@ -53,6 +54,11 @@ class DialogButton(namedtuple('DialogButton', ('response text callback args '
                 default_kwargs['response'] = Gtk.ResponseType.OK
                 default_kwargs['text'] = _('Delete')
                 default_kwargs['action'] = ButtonAction.DESTRUCTIVE
+
+            elif type_ == 'Remove':
+                default_kwargs['response'] = Gtk.ResponseType.OK
+                default_kwargs['text'] = _('Remove')
+                default_kwargs['action'] = ButtonAction.DESTRUCTIVE
             else:
                 raise ValueError('Unknown button type: %s ' % type_)
 
@@ -1037,6 +1043,37 @@ class NewConfirmationDialog(Gtk.MessageDialog):
         self.show_all()
 
 
+class NewConfirmationCheckDialog(NewConfirmationDialog):
+    def __init__(self, title, text, sec_text, check_text,
+                 buttons, modal=True, transient_for=None):
+        NewConfirmationDialog.__init__(self,
+                                       title,
+                                       text,
+                                       sec_text,
+                                       buttons,
+                                       transient_for=transient_for,
+                                       modal=modal)
+
+        self._checkbutton = Gtk.CheckButton.new_with_mnemonic(check_text)
+        self._checkbutton.set_can_focus(False)
+        self._checkbutton.set_margin_start(30)
+        self._checkbutton.set_margin_end(30)
+        label = self._checkbutton.get_child()
+        label.set_line_wrap(True)
+        label.set_max_width_chars(50)
+        label.set_halign(Gtk.Align.START)
+        label.set_line_wrap_mode(Pango.WrapMode.WORD)
+        label.set_margin_start(10)
+
+        self.get_content_area().add(self._checkbutton)
+
+    def _on_response(self, _dialog, response):
+        button = self._buttons.get(response)
+        if button is not None:
+            button.args.insert(0, self._checkbutton.get_active())
+        super()._on_response(_dialog, response)
+
+
 class ShortcutsWindow:
     def __init__(self):
         transient = app.app.get_active_window()
diff --git a/gajim/roster_window.py b/gajim/roster_window.py
index 48beeb5f5429d42f58e1f824493f2314e5009f6f..81e59e849869818e43f9db8ec8f7039dec42a067 100644
--- a/gajim/roster_window.py
+++ b/gajim/roster_window.py
@@ -71,6 +71,8 @@ from gajim.gtk.dialogs import InputDialog
 from gajim.gtk.dialogs import WarningDialog
 from gajim.gtk.dialogs import InformationDialog
 from gajim.gtk.dialogs import NonModalConfirmationDialog
+from gajim.gtk.dialogs import NewConfirmationCheckDialog
+from gajim.gtk.dialogs import DialogButton
 from gajim.gtk.join_groupchat import JoinGroupchatWindow
 from gajim.gtk.single_message import SingleMessageWindow
 from gajim.gtk.add_contact import AddNewContactWindow
@@ -3347,7 +3349,7 @@ class RosterWindow:
         """
         Remove a contact. list_ is a list of (contact, account) tuples
         """
-        def on_ok(is_checked, list_):
+        def on_ok(is_checked):
             remove_auth = True
             if len(list_) == 1:
                 contact = list_[0][0]
@@ -3366,8 +3368,8 @@ class RosterWindow:
                     contact.show = 'offline'
                     app.contacts.add_contact(account, contact)
                     self.add_contact(contact.jid, account)
-        def on_ok2(list_):
-            on_ok(False, list_)
+        def on_ok2():
+            on_ok(False)
 
         if len(list_) == 1:
             contact = list_[0][0]
@@ -3380,19 +3382,22 @@ class RosterWindow:
                 ConfirmationDialog(pritext, sectext + \
                     _('By removing this contact you also remove authorization '
                     'resulting in them always seeing you as offline.'),
-                    on_response_ok=(on_ok2, list_))
+                    on_response_ok=on_ok2)
             elif _('Not in Roster') in contact.get_shown_groups():
                 # Contact is not in roster
                 ConfirmationDialog(pritext, sectext + \
-                    _('Do you want to continue?'), on_response_ok=(on_ok2,
-                    list_))
+                    _('Do you want to continue?'), on_response_ok=on_ok2)
             else:
-                ConfirmationDialogCheck(pritext, sectext + \
+                NewConfirmationCheckDialog(
+                    _('Remove'),
+                    pritext, sectext + \
                     _('By removing this contact you also by default remove '
-                    'authorization resulting in them always seeing you as'
-                    ' offline.'),
-                    _('I want this contact to know my status after removal'),
-                    on_response_ok=(on_ok, list_))
+                      'authorization resulting in them always seeing you as'
+                      ' offline.'),
+                    _('_I want this contact to know my status after removal'),
+                    [DialogButton.make('Cancel'),
+                     DialogButton.make('Remove', callback=on_ok)],
+                     modal=False).show()
         else:
             # several contact to remove at the same time
             pritext = _('Contacts will be removed from your roster')
@@ -3403,8 +3408,7 @@ class RosterWindow:
             sectext = _('By removing these contacts:%s\nyou also remove '
                 'authorization resulting in them always seeing you as '
                 'offline.') % jids
-            ConfirmationDialog(pritext, sectext,
-                on_response_ok=(on_ok2, list_))
+            ConfirmationDialog(pritext, sectext, on_response_ok=on_ok2)
 
     def on_send_custom_status(self, widget, contact_list, show, group=None):
         """