diff --git a/package.json b/package.json
index 4440b79d1212cb86219befca037cafa5f933c933..c2c3521960940c6339a54cc6b620476214a1edbc 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@arise/aidc-sveltekit",
-  "version": "0.2.3",
+  "version": "0.3.0",
   "type": "module",
   "scripts": {
     "dev": "vite dev",
diff --git a/src/lib/default.ts b/src/lib/default.ts
index 3386c2d091e265b174d94a2770238e477d7cf5fe..b23e776d06800a612fb3e59209566a8f44e33fe7 100644
--- a/src/lib/default.ts
+++ b/src/lib/default.ts
@@ -1,10 +1,16 @@
 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 {
+  LuciaWrapper,
+  type DefaultSessionAttributes,
+  type DefaultUserAttributes,
+} from "./lucia.js";
 import type { IdTokenClaims, UserinfoResponse } from "openid-client";
 
-class DefaultLucia extends LuciaWrapper<DatabaseUser> {
+class DefaultLucia<
+  UserInfo extends {} = Record<string, unknown>,
+> extends LuciaWrapper<Omit<DatabaseUser<UserInfo>, "id">> {
   db: SqLiteConnection;
 
   constructor() {
@@ -14,6 +20,14 @@ class DefaultLucia extends LuciaWrapper<DatabaseUser> {
         user: "user",
         session: "session",
       }),
+      {
+        getUserAttributes(attributes) {
+          return {
+            subject: attributes.subject,
+            claims: JSON.parse(attributes.claims),
+          };
+        },
+      },
     );
     this.db = db;
   }
@@ -34,7 +48,7 @@ class DefaultLucia extends LuciaWrapper<DatabaseUser> {
     )`);
   }
 
-  getUser(subject: string): DatabaseUser | undefined {
+  getUser(subject: string): DatabaseUser<UserInfo> | undefined {
     const user = this.db
       .prepare("SELECT * FROM user WHERE subject = ?")
       .get(subject) as InternalUser | undefined;
@@ -58,7 +72,7 @@ export const defaultLucia = new DefaultLucia();
 declare module "lucia" {
   interface Register {
     Lucia: typeof defaultLucia.lucia;
-    DatabaseUserAttributes: Omit<DatabaseUser, "id">;
+    DatabaseUserAttributes: Omit<InternalUser, "id">;
     DatabaseSessionAttributes: Omit<DatabaseSession, "id">;
   }
 }
@@ -68,12 +82,12 @@ interface InternalUser {
   subject: string;
   claims: string;
 }
-export interface DatabaseUser {
+export interface DatabaseUser<T extends {}> extends DefaultUserAttributes {
   id: string;
   subject: string;
-  claims: UserinfoResponse;
+  claims: UserinfoResponse<T>;
 }
-export interface DatabaseSession {
+export interface DatabaseSession extends DefaultSessionAttributes {
   id: string;
   id_token: string;
 }
diff --git a/src/lib/index.ts b/src/lib/index.ts
index 83b3088ceef9c4014c3792cd368efe0586a53b95..8530c8b8d220d17feea02acf3cb2aab8b08ab689 100644
--- a/src/lib/index.ts
+++ b/src/lib/index.ts
@@ -20,7 +20,7 @@ export class AriseIdConnect<DbUser extends DatabaseUser> {
   protected cookieNames: CookieNames;
 
   constructor(
-    readonly config: Config<DbUser>,
+    readonly config: Config,
     issuer: Issuer,
   ) {
     this.client = new issuer.Client({
@@ -45,7 +45,7 @@ export class AriseIdConnect<DbUser extends DatabaseUser> {
   }
 
   static async init<DbUser extends DatabaseUser>(
-    config: Config<DbUser>,
+    config: Config,
   ): Promise<AriseIdConnect<DbUser>> {
     const issuer = await Issuer.discover(
       config.issuer ||
diff --git a/src/lib/lucia.ts b/src/lib/lucia.ts
index 44b85ca9f9234fabf6250154e388c9d8a1fc9762..e4c54d92feb703bf13d0fed0a1c4e4759b4548eb 100644
--- a/src/lib/lucia.ts
+++ b/src/lib/lucia.ts
@@ -19,10 +19,17 @@ export interface DatabaseSession {
   id_token: string;
 }
 
+export interface DefaultUserAttributes {
+  subject: string;
+}
+export interface DefaultSessionAttributes {
+  id_token: string;
+}
+
 export abstract class LuciaWrapper<
-  DbUser extends DatabaseUser,
-  _SessionAttributes extends { id_token: string } = { id_token: string },
-  _UserAttributes extends { subject: string } = { subject: string },
+  _UserAttributes extends DefaultUserAttributes = DefaultUserAttributes,
+  _SessionAttributes extends
+    DefaultSessionAttributes = DefaultSessionAttributes,
 > {
   lucia: Lucia<_SessionAttributes, _UserAttributes>;
 
@@ -61,7 +68,9 @@ export abstract class LuciaWrapper<
   }
 
   abstract initDatabase(): MaybePromise<void>;
-  abstract getUser(subject: string): MaybePromise<DbUser | undefined>;
+  abstract getUser(
+    subject: string,
+  ): MaybePromise<(_UserAttributes & { id: string }) | undefined>;
   abstract createUser(
     subject: string,
     userId: string,
diff --git a/src/lib/types.ts b/src/lib/types.ts
index 21958949ea942020dac623218fa124380876fa06..d664534c3311f6bcfc8b0d098e975acc66d310a0 100644
--- a/src/lib/types.ts
+++ b/src/lib/types.ts
@@ -1,8 +1,8 @@
 import type { MaybePromise, RequestEvent } from "@sveltejs/kit";
 import type { ClientMetadata, UserinfoResponse, errors } from "openid-client";
-import type { DatabaseUser, LuciaWrapper } from "./lucia.js";
+import type { LuciaWrapper } from "./lucia.js";
 
-export interface Config<DbUser extends DatabaseUser> extends ClientMetadata {
+export interface Config extends ClientMetadata {
   client_secret: string;
   scope: string;
   issuer?: string;
@@ -11,7 +11,7 @@ export interface Config<DbUser extends DatabaseUser> extends ClientMetadata {
     login?: (event: RequestEvent, userInfo: UserinfoResponse) => never;
     logout?: (event: RequestEvent) => MaybePromise<void>;
   };
-  wrapper: LuciaWrapper<DbUser>;
+  wrapper: LuciaWrapper;
   cookieNames?: Partial<CookieNames>;
   paths?: Partial<Paths>;
 }