diff --git a/filcnaplo/lib/api/login.dart b/filcnaplo/lib/api/login.dart
index 9b8abb1..140b045 100644
--- a/filcnaplo/lib/api/login.dart
+++ b/filcnaplo/lib/api/login.dart
@@ -1,3 +1,5 @@
+import 'dart:developer';
+
 import 'package:filcnaplo/utils/jwt.dart';
 import 'package:filcnaplo_kreta_api/providers/absence_provider.dart';
 import 'package:filcnaplo_kreta_api/providers/event_provider.dart';
diff --git a/filcnaplo/lib/database/init.dart b/filcnaplo/lib/database/init.dart
index ea6a653..3d27729 100644
--- a/filcnaplo/lib/database/init.dart
+++ b/filcnaplo/lib/database/init.dart
@@ -9,7 +9,7 @@ Future<Database> initDB() async {
   var settingsDB = await createSettingsTable(db);
 
   // Create table Users
-  await db.execute("CREATE TABLE IF NOT EXISTS users (id TEXT NOT NULL, name TEXT, username TEXT, password TEXT, institute_code TEXT, student TEXT)");
+  var usersDB = await createUsersTable(db);
   await db.execute("CREATE TABLE IF NOT EXISTS user_data ("
       "id TEXT NOT NULL, grades TEXT, timetable TEXT, exams TEXT, homework TEXT, messages TEXT, notes TEXT, events TEXT, absences TEXT)");
 
@@ -18,7 +18,9 @@ Future<Database> initDB() async {
     await db.insert("settings", SettingsProvider.defaultSettings().toMap());
   }
 
-  await migrateDB(db, settingsDB.struct.keys);
+  // Migrate Databases
+  await migrateDB(db, "settings", settingsDB.struct.keys, SettingsProvider.defaultSettings().toMap(), createSettingsTable);
+  await migrateDB(db, "users", usersDB.struct.keys, {"role": 0}, createUsersTable);
 
   return db;
 }
@@ -38,35 +40,59 @@ Future<DatabaseStruct> createSettingsTable(Database db) async {
   return settingsDB;
 }
 
-Future<void> migrateDB(Database db, Iterable<String> keys) async {
-  var settings = (await db.query("settings"))[0];
+Future<DatabaseStruct> createUsersTable(Database db) async {
+  var usersDB = DatabaseStruct(
+      {"id": String, "name": String, "username": String, "password": String, "institute_code": String, "student": String, "role": String});
 
-  bool migrationRequired = keys.any((key) => !settings.containsKey(key) || settings[key] == null);
+  // Create table Users
+  await db.execute("CREATE TABLE IF NOT EXISTS users ($usersDB)");
 
-  if (migrationRequired) {
-    var defaultSettings = SettingsProvider.defaultSettings();
-    var settingsCopy = Map<String, dynamic>.from(settings);
-
-    // Delete settings
-    await db.execute("drop table settings");
-
-    // Fill missing columns
-    keys.forEach((key) {
-      if (!keys.contains(key)) {
-        print("debug: dropping $key");
-        settingsCopy.remove(key);
-      }
-
-      if (!settings.containsKey(key) || settings[key] == null) {
-        print("DEBUG: migrating $key");
-        settingsCopy[key] = defaultSettings.toMap()[key];
-      }
-    });
-
-    // Recreate settings
-    await createSettingsTable(db);
-    await db.insert("settings", settingsCopy);
-
-    print("INFO: Database migrated");
-  }
+  return usersDB;
+}
+
+Future<void> migrateDB(
+  Database db,
+  String table,
+  Iterable<String> keys,
+  Map<String, Object?> defaultValues,
+  Future<DatabaseStruct> Function(Database) create,
+) async {
+  var originalRows = (await db.query(table));
+
+  if (originalRows.length == 0) {
+    await db.execute("drop table $table");
+    await create(db);
+    return;
+  }
+
+  await Future.forEach<Map<String, Object?>>(originalRows, (original) async {
+    bool migrationRequired = keys.any((key) => !original.containsKey(key) || original[key] == null);
+
+    if (migrationRequired) {
+      print("INFO: Migrating $table");
+      var copy = Map<String, dynamic>.from(original);
+
+      // Delete table
+      await db.execute("drop table $table");
+
+      // Fill missing columns
+      keys.forEach((key) {
+        if (!keys.contains(key)) {
+          print("DEBUG: dropping $key");
+          copy.remove(key);
+        }
+
+        if (!original.containsKey(key) || original[key] == null) {
+          print("DEBUG: migrating $key");
+          copy[key] = defaultValues[key];
+        }
+      });
+
+      // Recreate table
+      await create(db);
+      await db.insert(table, copy);
+
+      print("INFO: Database migrated");
+    }
+  });
 }
diff --git a/filcnaplo/lib/database/struct.dart b/filcnaplo/lib/database/struct.dart
index 50b3355..cec8e48 100644
--- a/filcnaplo/lib/database/struct.dart
+++ b/filcnaplo/lib/database/struct.dart
@@ -15,7 +15,7 @@ class DatabaseStruct {
         break;
     }
 
-    return "${name} ${typeName.toUpperCase()}";
+    return "${name} ${typeName.toUpperCase()} ${name == 'id' ? 'NOT NULL' : ''}";
   }
 
   @override