diff --git a/beat/web/accounts/management/__init__.py b/beat/web/accounts/management/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/beat/web/accounts/management/commands/__init__.py b/beat/web/accounts/management/commands/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/beat/web/accounts/management/commands/clean_invalid_users.py b/beat/web/accounts/management/commands/clean_invalid_users.py
new file mode 100644
index 0000000000000000000000000000000000000000..eef2dcffbde011552ac29fc6a7c850efaeaff025
--- /dev/null
+++ b/beat/web/accounts/management/commands/clean_invalid_users.py
@@ -0,0 +1,111 @@
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8 :
+# encoding: utf-8
+
+###############################################################################
+#                                                                             #
+# Copyright (c) 2016 Idiap Research Institute, http://www.idiap.ch/           #
+# Contact: beat.support@idiap.ch                                              #
+#                                                                             #
+# This file is part of the beat.web module of the BEAT platform.              #
+#                                                                             #
+# Commercial License Usage                                                    #
+# Licensees holding valid commercial BEAT licenses may use this file in       #
+# accordance with the terms contained in a written agreement between you      #
+# and Idiap. For further information contact tto@idiap.ch                     #
+#                                                                             #
+# Alternatively, this file may be used under the terms of the GNU Affero      #
+# Public License version 3 as published by the Free Software and appearing    #
+# in the file LICENSE.AGPL included in the packaging of this file.            #
+# The BEAT platform is distributed in the hope that it will be useful, but    #
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY  #
+# or FITNESS FOR A PARTICULAR PURPOSE.                                        #
+#                                                                             #
+# You should have received a copy of the GNU Affero Public License along      #
+# with the BEAT platform. If not, see http://www.gnu.org/licenses/.           #
+#                                                                             #
+###############################################################################
+
+
+from django.core.management.base import BaseCommand, CommandError
+
+from datetime import date
+import datetime
+
+from django.contrib.auth.models import User
+from django.conf import settings
+
+from ...models import SupervisionTrack
+from ...models import Profile
+from ....ui.registration.models import RegistrationProfile
+
+import sys
+import random
+
+class Command(BaseCommand):
+
+    help = 'Cleanup outdated invalid users'
+
+    def add_arguments(self, parser):
+        parser.add_argument('--noinput', action='store_false', dest='interactive', default=True,
+            help=('Tells Django to NOT prompt the user for input of any kind.'))
+
+
+    def handle(self, *args, **options):
+        clean = True
+
+        if options['interactive']:
+            try:
+                answer = self.get_input_data('Delete user(s) that have not been validated by a supervisor?  (y/n)? ', 'y').lower()
+            except KeyboardInterrupt:
+                self.stderr.write("\nOperation canceled.")
+                sys.exit(1)
+
+            if answer != 'y':
+                self.stdout.write('Cleanup canceled')
+                sys.exit(1)
+
+        if clean:
+            invalid_userprofiles_new_users = Profile.objects.filter(status=Profile.NEWUSER)
+            invalid_userprofiles_waiting_validation = Profile.objects.filter(status=Profile.WAITINGVALIDATION)
+            count = 0
+            for invalid_profile in invalid_userprofiles_new_users:
+                user = invalid_profile.user
+                supervisiontrack = SupervisionTrack.objects.get(supervision_key=invalid_profile.supervision_key)
+                registration_profile = RegistrationProfile.objects.get(user=invalid_profile.user)
+
+                expiration_date = datetime.timedelta(days=settings.ACCOUNT_ACTIVATION_DAYS)
+                if user.profile.registration_date + expiration_date <= datetime.datetime.now():
+                    count += 1
+                    user.delete()
+                    invalid_profile.delete()
+                    supervisiontrack.delete()
+                    registration_profile.delete()
+
+            for invalid_profile in invalid_userprofiles_waiting_validation:
+                user = invalid_profile.user
+                supervisiontrack = SupervisionTrack.objects.get(supervision_key=invalid_profile.supervision_key)
+                registration_profile = RegistrationProfile.objects.get(user=invalid_profile.user)
+
+                expiration_date = datetime.timedelta(days=settings.ACCOUNT_ACTIVATION_DAYS_FROM_GODFATHER)
+                if user.profile.registration_date + expiration_date <= datetime.datetime.now():
+                    count += 1
+                    user.delete()
+                    invalid_profile.delete()
+                    supervisiontrack.delete()
+                    registration_profile.delete()
+
+            self.stdout.write('{} Invalid user(s) successfully cleaned/'.format(count) + '{} Total user(s) checked:'.format(invalid_userprofiles_new_users.count()+invalid_userprofiles_waiting_validation.count()))
+
+
+    def get_input_data(self, message, default=None):
+        """
+        Override this method if you want to customize data inputs or
+        validation exceptions.
+        """
+        raw_value = raw_input(message)
+
+        if default and raw_value == '':
+            raw_value = default
+
+        return raw_value