diff --git a/areas/users/user_service.py b/areas/users/user_service.py
index 772af991477343741089752279c78dce76f7161f..ec94c44ce44bee2e33013e3e7b1ee4d55b31cb21 100644
--- a/areas/users/user_service.py
+++ b/areas/users/user_service.py
@@ -1,3 +1,9 @@
+import ory_kratos_client
+from ory_kratos_client.model.submit_self_service_recovery_flow_body \
+    import SubmitSelfServiceRecoveryFlowBody
+from ory_kratos_client.api import v0alpha2_api as kratos_api
+from config import KRATOS_ADMIN_URL
+
 from database import db
 from areas.apps import App, AppRole, AppsService
 from areas.roles import Role, RoleService
@@ -7,6 +13,10 @@ from flask import current_app
 
 from helpers.error_handler import KratosError
 
+kratos_admin_api_configuration = \
+    ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True)
+KRATOS_ADMIN = \
+    kratos_api.V0alpha2Api(ory_kratos_client.ApiClient(kratos_admin_api_configuration))
 
 class UserService:
     @staticmethod
@@ -27,7 +37,10 @@ class UserService:
     def post_user(data):
         kratos_data = {
             "schema_id": "default",
-            "traits": {"email": data["email"], "name": data["name"]},
+            "traits": {
+                "name": data["name"],
+                "email": data["email"],
+            },
         }
         res = KratosApi.post("/admin/identities", kratos_data).json()
 
@@ -55,8 +68,32 @@ class UserService:
                 db.session.add(app_role)
             db.session.commit()
 
+        UserService.__start_recovery_flow(data["email"])
+
         return UserService.get_user(res["id"])
 
+
+    @staticmethod
+    def __start_recovery_flow(email):
+        """
+        Start a Kratos recovery flow for the user's email address.
+
+        This sends out an email to the user that explains to them how they can
+        set their password. Make sure the user exists inside Kratos before you
+        use this function.
+
+        :param email: Email to send recovery link to
+        :type email: str
+        """
+        api_response = KRATOS_ADMIN.initialize_self_service_recovery_flow_without_browser()
+        flow = api_response['id']
+        # Submit the recovery flow to send an email to the new user.
+        submit_self_service_recovery_flow_body = \
+            SubmitSelfServiceRecoveryFlowBody(method="link", email=email)
+        api_response = KRATOS_ADMIN.submit_self_service_recovery_flow(flow,
+                submit_self_service_recovery_flow_body=
+                    submit_self_service_recovery_flow_body)
+
     @staticmethod
     def put_user(id, user_editing_id, data):
         kratos_data = {
diff --git a/cliapp/cliapp/cli.py b/cliapp/cliapp/cli.py
index 06e6fb05d0e7b9309853da1875cb6b5dcc3e1097..6735cb2030ec4b81ebd5fc0179c1626446bfd23e 100644
--- a/cliapp/cliapp/cli.py
+++ b/cliapp/cliapp/cli.py
@@ -27,11 +27,15 @@ HYDRA = hydra_client.HydraAdmin(HYDRA_ADMIN_URL)
 # Kratos has an admin and public end-point. We create an API for them
 # both. The kratos implementation has bugs, which forces us to set
 # the discard_unknown_keys to True.
-tmp = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True)
-KRATOS_ADMIN = kratos_api.V0alpha2Api(ory_kratos_client.ApiClient(tmp))
-
-tmp = ory_kratos_client.Configuration(host=KRATOS_PUBLIC_URL, discard_unknown_keys=True)
-KRATOS_PUBLIC = kratos_api.V0alpha2Api(ory_kratos_client.ApiClient(tmp))
+kratos_admin_api_configuration = \
+    ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True)
+KRATOS_ADMIN = \
+    kratos_api.V0alpha2Api(ory_kratos_client.ApiClient(kratos_admin_api_configuration))
+
+kratos_public_api_configuration = \
+    ory_kratos_client.Configuration(host=KRATOS_PUBLIC_URL, discard_unknown_keys=True)
+KRATOS_PUBLIC = \
+    kratos_api.V0alpha2Api(ory_kratos_client.ApiClient(kratos_public_api_configuration))
 
 ##############################################################################
 # CLI INTERFACE                                                              #
diff --git a/web/login/login.py b/web/login/login.py
index 00cf3af5b946c2562e07c37d154395fd474e6ba3..591acc2a60235fbfc5864fbae684c105aa8dc0b3 100644
--- a/web/login/login.py
+++ b/web/login/login.py
@@ -31,11 +31,15 @@ HYDRA = hydra_client.HydraAdmin(HYDRA_ADMIN_URL)
 # Kratos has an admin and public end-point. We create an API for them
 # both. The kratos implementation has bugs, which forces us to set
 # the discard_unknown_keys to True.
-tmp = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True)
-KRATOS_ADMIN = kratos_api.V0alpha2Api(ory_kratos_client.ApiClient(tmp))
-
-tmp = ory_kratos_client.Configuration(host=KRATOS_PUBLIC_URL, discard_unknown_keys=True)
-KRATOS_PUBLIC = kratos_api.V0alpha2Api(ory_kratos_client.ApiClient(tmp))
+kratos_admin_api_configuration = \
+    ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True)
+KRATOS_ADMIN = \
+    kratos_api.V0alpha2Api(ory_kratos_client.ApiClient(kratos_admin_api_configuration))
+
+kratos_public_api_configuration = \
+    ory_kratos_client.Configuration(host=KRATOS_PUBLIC_URL, discard_unknown_keys=True)
+KRATOS_PUBLIC = \
+    kratos_api.V0alpha2Api(ory_kratos_client.ApiClient(kratos_public_api_configuration))
 ADMIN_ROLE_ID = 1
 NO_ACCESS_ROLE_ID = 3
 
diff --git a/web/static/base.js b/web/static/base.js
index 6d94cea0094dd8894a5cedfb416d876527e6aace..44247607f2dbd6bb6733df7f0a42c5cbe328f753 100644
--- a/web/static/base.js
+++ b/web/static/base.js
@@ -1,5 +1,3 @@
-
-
 /* base.js
    This is the base JS file to render the user interfaces of kratos and provide
    the end user with flows for login, recovery etc. 
@@ -433,8 +431,3 @@ $.urlParam = function(name) {
     }
     return decodeURI(results[1]) || 0;
 };
-
-
-
-
-