diff --git a/prisma/migrations/20240509002250_init/migration.sql b/prisma/migrations/20240509002250_init/migration.sql
deleted file mode 100644
index b828a76..0000000
--- a/prisma/migrations/20240509002250_init/migration.sql
+++ /dev/null
@@ -1,9 +0,0 @@
--- CreateTable
-CREATE TABLE `User` (
-    `id` INTEGER NOT NULL AUTO_INCREMENT,
-    `email` VARCHAR(191) NOT NULL,
-    `name` VARCHAR(191) NULL,
-
-    UNIQUE INDEX `User_email_key`(`email`),
-    PRIMARY KEY (`id`)
-) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
diff --git a/prisma/migrations/20240509011349_init/migration.sql b/prisma/migrations/20240509011349_init/migration.sql
deleted file mode 100644
index bb2ff49..0000000
--- a/prisma/migrations/20240509011349_init/migration.sql
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-  Warnings:
-
-  - You are about to drop the column `email` on the `User` table. All the data in the column will be lost.
-  - You are about to drop the column `name` on the `User` table. All the data in the column will be lost.
-  - A unique constraint covering the columns `[username]` on the table `User` will be added. If there are existing duplicate values, this will fail.
-  - A unique constraint covering the columns `[mapId]` on the table `User` will be added. If there are existing duplicate values, this will fail.
-  - Added the required column `password` to the `User` table without a default value. This is not possible if the table is not empty.
-  - Added the required column `username` to the `User` table without a default value. This is not possible if the table is not empty.
-
-*/
--- DropIndex
-DROP INDEX `User_email_key` ON `User`;
-
--- AlterTable
-ALTER TABLE `User` DROP COLUMN `email`,
-    DROP COLUMN `name`,
-    ADD COLUMN `mapId` INTEGER NULL,
-    ADD COLUMN `password` VARCHAR(191) NOT NULL,
-    ADD COLUMN `position_x` INTEGER NULL,
-    ADD COLUMN `position_y` INTEGER NULL,
-    ADD COLUMN `rotation` INTEGER NULL,
-    ADD COLUMN `username` VARCHAR(191) NOT NULL;
-
--- CreateTable
-CREATE TABLE `Map` (
-    `id` INTEGER NOT NULL AUTO_INCREMENT,
-    `name` VARCHAR(191) NOT NULL,
-    `width` INTEGER NOT NULL,
-    `height` INTEGER NOT NULL,
-    `tiles` JSON NOT NULL,
-
-    PRIMARY KEY (`id`)
-) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
--- CreateTable
-CREATE TABLE `Chatlogs` (
-    `id` INTEGER NOT NULL AUTO_INCREMENT,
-    `userId` INTEGER NOT NULL,
-    `message` VARCHAR(191) NOT NULL,
-    `mapId` INTEGER NOT NULL,
-
-    PRIMARY KEY (`id`)
-) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
--- CreateIndex
-CREATE UNIQUE INDEX `User_username_key` ON `User`(`username`);
-
--- CreateIndex
-CREATE UNIQUE INDEX `User_mapId_key` ON `User`(`mapId`);
-
--- AddForeignKey
-ALTER TABLE `User` ADD CONSTRAINT `User_mapId_fkey` FOREIGN KEY (`mapId`) REFERENCES `Map`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE `Chatlogs` ADD CONSTRAINT `Chatlogs_mapId_fkey` FOREIGN KEY (`mapId`) REFERENCES `Map`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE `Chatlogs` ADD CONSTRAINT `Chatlogs_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20240509150033_init/migration.sql b/prisma/migrations/20240509150033_init/migration.sql
deleted file mode 100644
index 7afb735..0000000
--- a/prisma/migrations/20240509150033_init/migration.sql
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-  Warnings:
-
-  - You are about to drop the column `mapId` on the `Chatlogs` table. All the data in the column will be lost.
-  - You are about to drop the column `mapId` on the `User` table. All the data in the column will be lost.
-  - You are about to drop the `Map` table. If the table is not empty, all the data it contains will be lost.
-  - A unique constraint covering the columns `[zoneId]` on the table `User` will be added. If there are existing duplicate values, this will fail.
-  - Added the required column `zoneId` to the `Chatlogs` table without a default value. This is not possible if the table is not empty.
-
-*/
--- DropForeignKey
-ALTER TABLE `Chatlogs` DROP FOREIGN KEY `Chatlogs_mapId_fkey`;
-
--- DropForeignKey
-ALTER TABLE `User` DROP FOREIGN KEY `User_mapId_fkey`;
-
--- AlterTable
-ALTER TABLE `Chatlogs` DROP COLUMN `mapId`,
-    ADD COLUMN `zoneId` INTEGER NOT NULL;
-
--- AlterTable
-ALTER TABLE `User` DROP COLUMN `mapId`,
-    ADD COLUMN `zoneId` INTEGER NULL;
-
--- DropTable
-DROP TABLE `Map`;
-
--- CreateTable
-CREATE TABLE `Zone` (
-    `id` INTEGER NOT NULL AUTO_INCREMENT,
-    `name` VARCHAR(191) NOT NULL,
-    `width` INTEGER NOT NULL,
-    `height` INTEGER NOT NULL,
-    `tiles` JSON NOT NULL,
-
-    PRIMARY KEY (`id`)
-) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
--- CreateIndex
-CREATE UNIQUE INDEX `User_zoneId_key` ON `User`(`zoneId`);
-
--- AddForeignKey
-ALTER TABLE `User` ADD CONSTRAINT `User_zoneId_fkey` FOREIGN KEY (`zoneId`) REFERENCES `Zone`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
-
--- AddForeignKey
-ALTER TABLE `Chatlogs` ADD CONSTRAINT `Chatlogs_zoneId_fkey` FOREIGN KEY (`zoneId`) REFERENCES `Zone`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/migrations/20240511164426_init/migration.sql b/prisma/migrations/20240511164426_init/migration.sql
new file mode 100644
index 0000000..f5b3316
--- /dev/null
+++ b/prisma/migrations/20240511164426_init/migration.sql
@@ -0,0 +1,39 @@
+-- CreateTable
+CREATE TABLE `User` (
+    `id` INTEGER NOT NULL AUTO_INCREMENT,
+    `username` VARCHAR(191) NOT NULL,
+    `password` VARCHAR(191) NOT NULL,
+
+    UNIQUE INDEX `User_username_key`(`username`),
+    PRIMARY KEY (`id`)
+) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+-- CreateTable
+CREATE TABLE `Character` (
+    `id` INTEGER NOT NULL AUTO_INCREMENT,
+    `name` VARCHAR(191) NOT NULL,
+    `position_x` INTEGER NOT NULL,
+    `position_y` INTEGER NOT NULL,
+    `rotation` INTEGER NOT NULL,
+    `userId` INTEGER NOT NULL,
+    `zoneId` INTEGER NOT NULL,
+
+    PRIMARY KEY (`id`)
+) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+-- CreateTable
+CREATE TABLE `Zone` (
+    `id` INTEGER NOT NULL AUTO_INCREMENT,
+    `name` VARCHAR(191) NOT NULL,
+    `width` INTEGER NOT NULL,
+    `height` INTEGER NOT NULL,
+    `tiles` JSON NOT NULL,
+
+    PRIMARY KEY (`id`)
+) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+-- AddForeignKey
+ALTER TABLE `Character` ADD CONSTRAINT `Character_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE `Character` ADD CONSTRAINT `Character_zoneId_fkey` FOREIGN KEY (`zoneId`) REFERENCES `Zone`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 90d6f46..9d34cf6 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -23,12 +23,19 @@ model User {
   id       Int     @id @default(autoincrement())
   username String  @unique
   password String
-  position_x Int?
-  position_y Int?
-  rotation Int?
-  zoneId    Int?    @unique
-  zone      Zone?    @relation(fields: [zoneId], references: [id])
-  chatlogs Chatlogs[]
+  characters Character[]
+}
+
+model Character {
+  id       Int     @id @default(autoincrement())
+  name     String
+  position_x Int
+  position_y Int
+  rotation Int
+  userId    Int
+  user     User    @relation(fields: [userId], references: [id])
+  zoneId    Int
+  zone      Zone    @relation(fields: [zoneId], references: [id])
 }
 
 model Zone {
@@ -37,15 +44,5 @@ model Zone {
   width       Int
   height      Int
   tiles       Json
-  users       User[]  // One-to-many relation: A map can have multiple users
-  chatlogs    Chatlogs[]
-}
-
-model Chatlogs {
-  id       Int     @id @default(autoincrement())
-  userId Int
-  message  String
-  zoneId    Int
-  zone      Zone     @relation(fields: [zoneId], references: [id])
-  user     User    @relation(fields: [userId], references: [id])
+  characters  Character[]
 }
\ No newline at end of file
diff --git a/src/app/ZoneManager.ts b/src/app/ZoneManager.ts
index fc28793..2a3e304 100644
--- a/src/app/ZoneManager.ts
+++ b/src/app/ZoneManager.ts
@@ -1,19 +1,23 @@
-import { Zone } from "@prisma/client";
-import { LoadedZoneEntity } from "./entities/LoadedZoneEntity";
+import {Character, Zone} from "@prisma/client";
 import ZoneRepository from "./repositories/zone";
 
+interface ILoadedZone {
+    zone: Zone;
+    characters: Character[];
+}
+
 class ZoneManager {
-    private static _instance: ZoneManager;
-    private _loadedZones: LoadedZoneEntity[] = [];
+    private static instance: ZoneManager;
+    private loadedZones: ILoadedZone[] = [];
 
     private constructor() {}
 
     // Singleton instance getter
     public static getInstance(): ZoneManager {
-        if (!ZoneManager._instance) {
-            ZoneManager._instance = new ZoneManager();
+        if (!ZoneManager.instance) {
+            ZoneManager.instance = new ZoneManager();
         }
-        return ZoneManager._instance;
+        return ZoneManager.instance;
     }
 
     // Method to initialize zone loading
@@ -25,28 +29,31 @@ class ZoneManager {
             this.loadZone(zone);
         }
 
-        console.log('[✅] ZoneManager loaded');
+        console.log('[✅] Zone manager loaded');
     }
 
     // Method to handle individual zone loading
     public loadZone(zone: Zone) {
-        const loadedZone = new LoadedZoneEntity(zone);
-        this._loadedZones.push(loadedZone);
+        this.loadedZones.push({
+            zone,
+            characters: []
+        });
         console.log(`[✅] Zone ID ${zone.id} loaded`);
     }
 
     // Method to handle individual zone unloading
     public unloadZone(zoneId: number) {
-        const index = this._loadedZones.findIndex(loadedZone => loadedZone.getZone().id === zoneId);
-        if (index > -1) {
-            this._loadedZones.splice(index, 1);
-            console.log(`[❌] Zone ID ${zoneId} unloaded`);
-        }
+        this.loadedZones = this.loadedZones.filter((loadedZone) => {
+            return loadedZone.zone.id !== zoneId;
+        });
+        console.log(`[❌] Zone ID ${zoneId} unloaded`);
     }
 
     // Getter for loaded zones
-    public getLoadedZones(): LoadedZoneEntity[] {
-        return this._loadedZones;
+    public getLoadedZones(): Zone[] {
+        return this.loadedZones.map((loadedZone) => {
+            return loadedZone.zone;
+        });
     }
 }
 
diff --git a/src/app/entities/LoadedZoneEntity.ts b/src/app/entities/LoadedZoneEntity.ts
deleted file mode 100644
index f598582..0000000
--- a/src/app/entities/LoadedZoneEntity.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { PlayerEntity } from "./PlayerEntity";
-import {Zone} from "@prisma/client";
-
-export class LoadedZoneEntity
-{
-    zone: Zone;
-    players: Map<string, PlayerEntity>;
-
-    constructor(zone: Zone) {
-        this.zone = zone;
-        this.players = new Map();
-    }
-
-    getZone() {
-        return this.zone;
-    }
-
-    addPlayer(player: PlayerEntity) {
-        this.players.set(player.id, player);
-    }
-
-    removePlayer(player: PlayerEntity) {
-        this.players.delete(player.id);
-    }
-
-    getPlayer(playerId: string) {
-        return this.players.get(playerId);
-    }
-
-    getPlayers() {
-        return Array.from(this.players.values());
-    }
-
-    getPlayersCount() {
-        return this.players.size;
-    }
-}
\ No newline at end of file
diff --git a/src/app/entities/PlayerEntity.ts b/src/app/entities/PlayerEntity.ts
deleted file mode 100644
index d6d0a1a..0000000
--- a/src/app/entities/PlayerEntity.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export class PlayerEntity
-{
-    id: string;
-    name: string;
-    position: { x: number, y: number };
-
-    constructor(id: string, name: string, position: { x: number, y: number }) {
-        this.id = id;
-        this.name = name;
-        this.position = position;
-    }
-
-    move(x: number, y: number) {
-        this.position.x = x;
-        this.position.y = y;
-    }
-}
\ No newline at end of file