diff --git a/src/memberdb/management/commands/lockaccounts.py b/src/memberdb/management/commands/lockaccounts.py
new file mode 100644
index 0000000000000000000000000000000000000000..d6dcdbe54bd38d3f920d99f9e7be472793d11a5a
--- /dev/null
+++ b/src/memberdb/management/commands/lockaccounts.py
@@ -0,0 +1,11 @@
+from django.core.management.base import BaseCommand, CommandError
+from datetime import datetime
+
+class Command(BaseCommand):
+    help = 'Locks unpaid accounts for the current year'
+
+    def add_arguments(self, parser):
+        parser.add_argument('year', nargs='?', type=int, default=datetime.now().year)
+
+    def handle(self, *args, **options):
+        self.stdout.write(self.style.SUCCESS('Not implemented: locking accounts for year %d' % options['year']))
\ No newline at end of file
diff --git a/src/memberdb/management/commands/ucc-adduser-hook.py b/src/memberdb/management/commands/ucc-adduser-hook.py
new file mode 100644
index 0000000000000000000000000000000000000000..1ec22ef82835cc7f457155df7275552143c19d2c
--- /dev/null
+++ b/src/memberdb/management/commands/ucc-adduser-hook.py
@@ -0,0 +1,35 @@
+from django.core.management.base import BaseCommand, CommandError
+from memberdb.models import Member, Membership
+import sys
+
+class Command(BaseCommand):
+    help = 'Hook to be called by `ucc-adduser-ad` to make sure usernames are properly matched with new accounts'
+
+    def add_arguments(self, parser):
+        # usage: manage.py ucc-adduser-hook <member-id> <username>
+        parser.add_argument('memberid', nargs=1, type=int)
+        parser.add_argument('username', nargs=1)
+
+    def handle(self, *args, **options):
+        mid = options['memberid'][0]
+        username = options['username'][0]
+        self.stdout.write('Updating Member record id %d for new user %s' % (mid, username))
+
+        try:
+            m = Member.objects.get(id=mid)
+            self.stdout.write('Found Member record: %s' % str(m))
+
+            if m.memberships.count() > 1:
+                self.stdout.write('Suspicious: given member id has multiple renewal records')
+
+            if m.username is not None and m.username == username:
+                self.stdout.write('Congrats! Username was already correct!')
+                return
+            else:
+                # update username
+                m.username = username
+                m.save()
+
+        except Member.DoesNotExist:
+            # exit with error code
+            sys.exit(1)
diff --git a/src/memberdb/management/commands/update-users-ldap.py b/src/memberdb/management/commands/update-users-ldap.py
new file mode 100644
index 0000000000000000000000000000000000000000..46adb417e3dc0f9a6082b2e80001ee4df52774fa
--- /dev/null
+++ b/src/memberdb/management/commands/update-users-ldap.py
@@ -0,0 +1,36 @@
+from django.core.management.base import BaseCommand, CommandError
+from memberdb.models import Member, Membership
+from memberdb.account_backend import enumerate_users
+import sys
+
+class Command(BaseCommand):
+    """
+    try to keep the database in sync with AD, make sure Member records are more or less correct
+    when it comes to the existence of a user account in AD
+    """
+    
+    help = 'Search for users in LDAP and mark Member records as having accounts if usernames match'
+
+    def add_arguments(self, parser):
+        pass
+
+    def handle(self, *args, **options):
+        self.stderr.write("Enumerating users...")
+        users = enumerate_users()
+
+        num_updated = 0
+        for u in users:
+            try:
+                m = Member.objects.get(username=u)
+                # clean the member tokens and mark as having an account
+                m.login_token = None
+                m.has_account = True
+                num_updated += 1
+                self.stdout.write("updated user %s: has Member record" % u)
+                m.save()
+            except Member.MultipleObjectsReturned:
+                pass
+            except Member.DoesNotExist:
+                pass
+
+        self.stderr.write("Done, got %d users total, %d updated" % (len(users), num_updated))