diff --git a/gajim/common/helpers.py b/gajim/common/helpers.py
index ad56c40cb9a040d8001a1e66a81e798eed49171f..35ea382352e08b7030af97b0e884168da6f00ac1 100644
--- a/gajim/common/helpers.py
+++ b/gajim/common/helpers.py
@@ -59,7 +59,6 @@
 from functools import wraps
 
 import nbxmpp
-from nbxmpp.stringprepare import nameprep
 from nbxmpp.const import Role
 from nbxmpp.const import ConnectionProtocol
 from nbxmpp.const import ConnectionType
@@ -101,48 +100,11 @@ class InvalidFormat(Exception):
     pass
 
 
-def decompose_jid(jidstring):
-    user = None
-    server = None
-    resource = None
-
-    # Search for delimiters
-    user_sep = jidstring.find('@')
-    res_sep = jidstring.find('/')
-
-    if user_sep == -1:
-        if res_sep == -1:
-            # host
-            server = jidstring
-        else:
-            # host/resource
-            server = jidstring[0:res_sep]
-            resource = jidstring[res_sep + 1:]
-    else:
-        if res_sep == -1:
-            # user@host
-            user = jidstring[0:user_sep]
-            server = jidstring[user_sep + 1:]
-        else:
-            if user_sep < res_sep:
-                # user@host/resource
-                user = jidstring[0:user_sep]
-                server = jidstring[user_sep + 1:user_sep + (res_sep - user_sep)]
-                resource = jidstring[res_sep + 1:]
-            else:
-                # server/resource (with an @ in resource)
-                server = jidstring[0:res_sep]
-                resource = jidstring[res_sep + 1:]
-    return user, server, resource
-
 def parse_jid(jidstring):
-    """
-    Perform stringprep on all JID fragments from a string and return the full
-    jid
-    """
-    # This function comes from http://svn.twistedmatrix.com/cvs/trunk/twisted/words/protocols/jabber/jid.py
-
-    return prep(*decompose_jid(jidstring))
+    try:
+        return validate_jid(jidstring)
+    except Exception as error:
+        raise InvalidFormat(error)
 
 def idn_to_ascii(host):
     """
@@ -193,71 +155,6 @@ def parse_resource(resource):
         except UnicodeError:
             raise InvalidFormat('Invalid character in resource.')
 
-def prep(user, server, resource):
-    """
-    Perform stringprep on all JID fragments and return the full jid
-    """
-    # This function comes from
-    #http://svn.twistedmatrix.com/cvs/trunk/twisted/words/protocols/jabber/jid.py
-
-    ip_address = False
-
-    try:
-        socket.inet_aton(server)
-        ip_address = True
-    except socket.error:
-        pass
-
-    if not ip_address and hasattr(socket, 'inet_pton'):
-        try:
-            socket.inet_pton(socket.AF_INET6, server.strip('[]'))
-            server = '[%s]' % server.strip('[]')
-            ip_address = True
-        except (socket.error, ValueError):
-            pass
-
-    if not ip_address:
-        if server is not None:
-            if server.endswith('.'):  # RFC7622, 3.2
-                server = server[:-1]
-            if not server or len(server.encode('utf-8')) > 1023:
-                raise InvalidFormat(_('Server must be between 1 and 1023 bytes'))
-            try:
-                server = nameprep.prepare(server)
-            except UnicodeError:
-                raise InvalidFormat(_('Invalid character in hostname.'))
-        else:
-            raise InvalidFormat(_('Server address required.'))
-
-    if user is not None:
-        if not user or len(user.encode('utf-8')) > 1023:
-            raise InvalidFormat(_('Username must be between 1 and 1023 bytes'))
-        try:
-            user = user.encode('UsernameCaseMapped').decode('utf-8')
-        except UnicodeError:
-            raise InvalidFormat(_('Invalid character in username.'))
-    else:
-        user = None
-
-    if resource is not None:
-        if not resource or len(resource.encode('utf-8')) > 1023:
-            raise InvalidFormat(_('Resource must be between 1 and 1023 bytes'))
-        try:
-            resource = resource.encode('OpaqueString').decode('utf-8')
-        except UnicodeError:
-            raise InvalidFormat(_('Invalid character in resource.'))
-    else:
-        resource = None
-
-    if user:
-        if resource:
-            return '%s@%s/%s' % (user, server, resource)
-        return '%s@%s' % (user, server)
-
-    if resource:
-        return '%s/%s' % (server, resource)
-    return server
-
 def windowsify(s):
     if os.name == 'nt':
         return s.capitalize()