diff --git a/src/auth.ts b/src/auth.ts
index 9f5dfcb85ee75fd96e2ac9b21126eb4890192b13..39f9c12be65d88a5c5ccc5d30e68df1a7c673651 100644
--- a/src/auth.ts
+++ b/src/auth.ts
@@ -6,5 +6,5 @@ export const aidc = await AriseIdConnect.init({
   client_id: env.AIDC_CLIENT_ID,
   client_secret: env.AIDC_CLIENT_SECRET,
   scope: "openid offline profile",
-  luciaWrapper: defaultLucia,
+  wrapper: defaultLucia,
 });
diff --git a/src/lib/default.ts b/src/lib/default.ts
index 3be7992f5304194ca5b6744579422218b457738e..f5894422af1f1b07807f534e8b47dab47d3007ea 100644
--- a/src/lib/default.ts
+++ b/src/lib/default.ts
@@ -2,6 +2,7 @@ import { BetterSqlite3Adapter } from "@lucia-auth/adapter-sqlite";
 import sqlite from "better-sqlite3";
 import type { Database as SqLiteConnection } from "better-sqlite3";
 import { LuciaWrapper } from "./lucia.js";
+import type { IdTokenClaims, UserinfoResponse } from "openid-client";
 
 class DefaultLucia extends LuciaWrapper<DatabaseUser> {
   db: SqLiteConnection;
@@ -20,7 +21,8 @@ class DefaultLucia extends LuciaWrapper<DatabaseUser> {
   initDatabase() {
     this.db.exec(`CREATE TABLE IF NOT EXISTS user (
       id TEXT NOT NULL PRIMARY KEY,
-      subject TEXT NOT NULL UNIQUE
+      subject TEXT NOT NULL UNIQUE,
+      claims JSON NOT NULL
     )`);
 
     this.db.exec(`CREATE TABLE IF NOT EXISTS session (
@@ -38,10 +40,10 @@ class DefaultLucia extends LuciaWrapper<DatabaseUser> {
       .get(subject) as DatabaseUser | undefined;
   }
 
-  createUser(subject: string, userId: string) {
+  createUser(subject: string, userId: string, claims: IdTokenClaims) {
     this.db
-      .prepare("INSERT INTO user (id, subject) VALUES (?, ?)")
-      .run(userId, subject);
+      .prepare("INSERT INTO user (id, subject, claims) VALUES (?, ?, ?)")
+      .run(userId, subject, claims);
   }
 }
 
@@ -58,6 +60,7 @@ declare module "lucia" {
 export interface DatabaseUser {
   id: string;
   subject: string;
+  claims: UserinfoResponse;
 }
 export interface DatabaseSession {
   id: string;
diff --git a/src/lib/index.ts b/src/lib/index.ts
index 4c30722fdef1c8cc951364028749acd0654e429a..83b3088ceef9c4014c3792cd368efe0586a53b95 100644
--- a/src/lib/index.ts
+++ b/src/lib/index.ts
@@ -53,7 +53,7 @@ export class AriseIdConnect<DbUser extends DatabaseUser> {
     );
     const aidc = new AriseIdConnect(config, issuer);
 
-    await aidc.config.luciaWrapper.initDatabase();
+    await aidc.config.wrapper.initDatabase();
     return aidc;
   }
 
@@ -121,7 +121,7 @@ export class AriseIdConnect<DbUser extends DatabaseUser> {
       redirect(SEE_OTHER, this.paths.home);
     }
 
-    const { lucia } = this.config.luciaWrapper;
+    const { lucia } = this.config.wrapper;
 
     const { session } = await lucia.validateSession(event.locals.session.id);
 
@@ -149,23 +149,21 @@ export class AriseIdConnect<DbUser extends DatabaseUser> {
       throw new Error("No id_token in tokenSet");
     }
 
-    const subject = tokenSet.claims().sub;
-
-    const { luciaWrapper } = this.config;
-    const { lucia } = luciaWrapper;
-
-    const existingUser = await luciaWrapper.getUser(subject);
+    const claims = tokenSet.claims();
+    const { sub } = claims;
+    const { wrapper } = this.config;
+    const existingUser = await wrapper.getUser(sub);
 
     const userId = existingUser ? existingUser.id : generateId(15);
 
     if (!existingUser) {
-      await luciaWrapper.createUser(subject, userId);
+      await wrapper.createUser(sub, userId, claims);
     }
 
-    const session = await lucia.createSession(userId, {
+    const session = await wrapper.lucia.createSession(userId, {
       id_token: tokenSet.id_token,
     });
-    setLuciaCookie(event, lucia.createSessionCookie(session.id));
+    setLuciaCookie(event, wrapper.lucia.createSessionCookie(session.id));
 
     if (this.config.on?.login) {
       return this.config.on.login(event, tokenSet.claims());
@@ -175,7 +173,7 @@ export class AriseIdConnect<DbUser extends DatabaseUser> {
   };
 
   protected sessionHandler: Handle = async ({ event, resolve }) => {
-    const { lucia } = this.config.luciaWrapper;
+    const { lucia } = this.config.wrapper;
 
     const sessionId = event.cookies.get(lucia.sessionCookieName);
     if (!sessionId) {
diff --git a/src/lib/lucia.ts b/src/lib/lucia.ts
index a52426c5ae377c621b0e15b8c7b20125e20176a3..44b85ca9f9234fabf6250154e388c9d8a1fc9762 100644
--- a/src/lib/lucia.ts
+++ b/src/lib/lucia.ts
@@ -8,6 +8,7 @@ import type {
   TimeSpan,
 } from "lucia";
 import { Lucia } from "lucia";
+import type { UserinfoResponse } from "openid-client";
 
 export interface DatabaseUser {
   id: string;
@@ -61,5 +62,9 @@ export abstract class LuciaWrapper<
 
   abstract initDatabase(): MaybePromise<void>;
   abstract getUser(subject: string): MaybePromise<DbUser | undefined>;
-  abstract createUser(subject: string, userId: string): MaybePromise<void>;
+  abstract createUser(
+    subject: string,
+    userId: string,
+    claims: UserinfoResponse,
+  ): MaybePromise<void>;
 }
diff --git a/src/lib/types.ts b/src/lib/types.ts
index 73ffbb898ecb74dc3d9d60dc2b64e9b8aaad4180..21958949ea942020dac623218fa124380876fa06 100644
--- a/src/lib/types.ts
+++ b/src/lib/types.ts
@@ -11,7 +11,7 @@ export interface Config<DbUser extends DatabaseUser> extends ClientMetadata {
     login?: (event: RequestEvent, userInfo: UserinfoResponse) => never;
     logout?: (event: RequestEvent) => MaybePromise<void>;
   };
-  luciaWrapper: LuciaWrapper<DbUser>;
+  wrapper: LuciaWrapper<DbUser>;
   cookieNames?: Partial<CookieNames>;
   paths?: Partial<Paths>;
 }