diff --git a/gajim/gtk/account_wizard.py b/gajim/gtk/account_wizard.py
index 968b9bb115cfc3f7f1e87aae19fea3ffa5019315..af288e49fcbb8b321af928da0d2a3aa003611fef 100644
--- a/gajim/gtk/account_wizard.py
+++ b/gajim/gtk/account_wizard.py
@@ -22,6 +22,7 @@
 
 from nbxmpp.client import Client
 from nbxmpp.protocol import JID
+from nbxmpp.protocol import validate_domainpart
 from nbxmpp.const import Mode
 from nbxmpp.const import StreamError
 from nbxmpp.const import ConnectionProtocol
@@ -61,7 +62,8 @@ def __init__(self):
                         css_class='suggested-action')
         self.add_button('connect', _('Connect'), css_class='suggested-action')
         self.add_button('next', _('Next'), css_class='suggested-action')
-        self.add_button('login', _('Log In'), css_class='suggested-action')
+        self.add_button('login', _('Log In'), complete=True,
+                        css_class='suggested-action')
         self.add_button('back', _('Back'))
 
         self.add_pages({'login': Login(self._on_button_clicked),
@@ -302,7 +304,8 @@ def _test_anonymous_server(self, ignore_all_errors=False):
             advanced,
             ignore_all_errors)
 
-        self._client.subscribe('anonymous-supported', self._on_anonymous_supported)
+        self._client.subscribe('anonymous-supported',
+                               self._on_anonymous_supported)
         self._client.connect()
 
     def _register_with_server(self, ignore_all_errors=False):
@@ -675,38 +678,16 @@ def _on_visit_server(self, _widget):
         open_uri(server)
         return Gdk.EVENT_STOP
 
-    def _check_port_entry(self):
-        port = self._ui.custom_port_entry.get_text()
-        if port == '':
-            self._show_icon(False)
-            return False
+    def _set_complete(self, *args):
         try:
-            port = int(port)
+            self.get_server()
         except Exception:
-            self._show_icon(True)
-            self._ui.custom_port_entry.set_icon_tooltip_text(
-                Gtk.EntryIconPosition.SECONDARY, _('Must be a port number'))
-            return False
-
-        if port not in range(0, 65535):
-            self._show_icon(True)
-            self._ui.custom_port_entry.set_icon_tooltip_text(
-                Gtk.EntryIconPosition.SECONDARY,
-                _('Port must be a number between 0 and 65535'))
-            return False
-
-        self._show_icon(False)
-        return True
-
-    def _show_icon(self, show):
-        icon = 'dialog-warning-symbolic' if show else None
-        self._ui.log_in_address_entry.set_icon_from_icon_name(
-            Gtk.EntryIconPosition.SECONDARY, icon)
+            self.complete = False
+            self._ui.visit_server_button.set_visible(False)
+        else:
+            self.complete = True
+            self._ui.visit_server_button.set_visible(True)
 
-    def _set_complete(self, *args):
-        server = self._ui.server_comboboxtext_sign_up_entry.get_text()
-        self._ui.visit_server_button.set_visible(server)
-        self.complete = server
         self.get_toplevel().update_page_complete()
 
     def is_anonymous(self):
@@ -716,7 +697,8 @@ def is_advanced(self):
         return self._ui.sign_up_advanced_checkbutton.get_active()
 
     def get_server(self):
-        return self._ui.server_comboboxtext_sign_up_entry.get_text()
+        return validate_domainpart(
+            self._ui.server_comboboxtext_sign_up_entry.get_text())
 
     @staticmethod
     def _on_activate_link(_label, uri):
@@ -730,10 +712,13 @@ class AdvancedSettings(Page):
     def __init__(self):
         Page.__init__(self)
         self.title = _('Advanced settings')
+        self.complete = False
 
         self._ui = get_builder('account_wizard.ui')
         self._ui.manage_proxies_button.connect('clicked',
                                                self._on_proxy_manager)
+        self._ui.custom_host_entry.connect('changed', self._set_complete)
+        self._ui.custom_port_entry.connect('changed', self._set_complete)
         self.pack_start(self._ui.advanced_grid, True, True, 0)
 
         self.show_all()
@@ -771,6 +756,59 @@ def get_custom_host(self):
                 protocol,
                 ConnectionType(con_type))
 
+    def _show_host_icon(self, show):
+        icon = 'dialog-warning-symbolic' if show else None
+        self._ui.custom_host_entry.set_icon_from_icon_name(
+            Gtk.EntryIconPosition.SECONDARY, icon)
+
+    def _show_port_icon(self, show):
+        icon = 'dialog-warning-symbolic' if show else None
+        self._ui.custom_port_entry.set_icon_from_icon_name(
+            Gtk.EntryIconPosition.SECONDARY, icon)
+
+    def _validate_host(self):
+        host = self._ui.custom_host_entry.get_text()
+        try:
+            validate_domainpart(host)
+        except Exception:
+            self._show_host_icon(True)
+            self._ui.custom_host_entry.set_icon_tooltip_text(
+                Gtk.EntryIconPosition.SECONDARY, _('Invalid domain name'))
+            return False
+
+        self._show_host_icon(False)
+        return True
+
+    def _validate_port(self):
+        port = self._ui.custom_port_entry.get_text()
+        if not port:
+            self._show_port_icon(False)
+            return False
+
+        try:
+            port = int(port)
+        except Exception:
+            self._show_port_icon(True)
+            self._ui.custom_port_entry.set_icon_tooltip_text(
+                Gtk.EntryIconPosition.SECONDARY, _('Must be a port number'))
+            return False
+
+        if port not in range(0, 65535):
+            self._show_port_icon(True)
+            self._ui.custom_port_entry.set_icon_tooltip_text(
+                Gtk.EntryIconPosition.SECONDARY,
+                _('Port must be a number between 0 and 65535'))
+            return False
+
+        self._show_port_icon(False)
+        return True
+
+    def _set_complete(self, *args):
+        port_valid = self._validate_port()
+        host_valid = self._validate_host()
+        self.complete = port_valid and host_valid
+        self.get_toplevel().update_page_complete()
+
 
 class SecurityWarning(Page):
     def __init__(self):