diff --git a/prisma/migrations/20240715213654_add_tags_field_to_objects/migration.sql b/prisma/migrations/20240715213654_add_tags_field_to_objects/migration.sql
new file mode 100644
index 0000000..055c287
--- /dev/null
+++ b/prisma/migrations/20240715213654_add_tags_field_to_objects/migration.sql
@@ -0,0 +1,5 @@
+-- AlterTable
+ALTER TABLE `Object` ADD COLUMN `tags` JSON NULL;
+
+-- AlterTable
+ALTER TABLE `Tile` MODIFY `tags` JSON NULL;
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index b4fb851..69dae57 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -22,7 +22,7 @@ datasource db {
 model Tile {
   id        String   @id @default(uuid())
   name      String
-  tags      Json
+  tags      Json?
   createdAt DateTime @default(now())
   updatedAt DateTime @updatedAt
 }
@@ -30,6 +30,7 @@ model Tile {
 model Object {
   id         String       @id @default(uuid())
   name       String
+  tags       Json?
   origin_x   Decimal      @default(0)
   origin_y   Decimal      @default(0)
   createdAt  DateTime     @default(now())
diff --git a/src/app/events/character/CharacterDelete.ts b/src/app/events/character/CharacterDelete.ts
index 91c7566..a453003 100644
--- a/src/app/events/character/CharacterDelete.ts
+++ b/src/app/events/character/CharacterDelete.ts
@@ -1,23 +1,30 @@
 import {Server} from "socket.io";
 import {TSocket} from "../../utilities/Types";
-import {Character} from "@prisma/client";
+import { Character, Zone } from '@prisma/client'
 import CharacterRepository from "../../repositories/CharacterRepository";
-import {ZCharacterDelete} from "../../utilities/ZodTypes";
+
+type TypePayload = {
+    character_id: number;
+}
+
+type TypeResponse = {
+    zone: Zone;
+    characters: Character[];
+}
 
 export default function (socket: TSocket, io: Server) {
-    socket.on('character:delete', async (data: any) => {
+    socket.on('character:delete', async (data: TypePayload, callback: (response: TypeResponse) => void) => {
         // zod validate
         try {
-            data = ZCharacterDelete.parse(data);
-
-            await CharacterRepository.deleteByUserIdAndId(socket.user?.id as number, data.id as number);
+            await CharacterRepository.deleteByUserIdAndId(socket.user?.id as number, data.character_id as number);
 
             const user_id = socket.user?.id as number;
             const characters: Character[] = await CharacterRepository.getByUserId(user_id) as Character[];
 
             socket.emit('character:list', characters);
         } catch (error: any) {
-            return socket.emit('notification', {error: error.errors[0].message});
+            console.log(error);
+            return socket.emit('notification', {message: 'Character delete failed. Please try again.'});
         }
     });
 }
\ No newline at end of file
diff --git a/src/app/events/gm/object/GmObjectUpdate.ts b/src/app/events/gm/object/GmObjectUpdate.ts
index 4f3ded6..3d9da15 100644
--- a/src/app/events/gm/object/GmObjectUpdate.ts
+++ b/src/app/events/gm/object/GmObjectUpdate.ts
@@ -6,6 +6,7 @@ import { Object } from '@prisma/client'
 interface IPayload {
   id: string;
   name: string;
+  tags: string[];
   origin_x: number;
   origin_y: number;
 }
@@ -23,7 +24,7 @@ export default function (socket: TSocket, io: Server) {
     }
 
     try {
-      const object = await ObjectRepository.update(data.id, data.name, data.origin_x, data.origin_y);
+      const object = await ObjectRepository.update(data.id, data.name, data.tags, data.origin_x, data.origin_y);
 
       callback(true);
     } catch (error) {
diff --git a/src/app/repositories/ObjectRepository.ts b/src/app/repositories/ObjectRepository.ts
index c534277..ff065b9 100644
--- a/src/app/repositories/ObjectRepository.ts
+++ b/src/app/repositories/ObjectRepository.ts
@@ -22,11 +22,12 @@ class ObjectRepository {
         });
     }
 
-    async update(id: string, name: string, origin_x: number, origin_y: number): Promise<Object> {
+    async update(id: string, name: string, tags: string[], origin_x: number, origin_y: number): Promise<Object> {
         return prisma.object.update({
             where: { id },
             data: {
                 name,
+                tags,
                 origin_x,
                 origin_y
             },
diff --git a/src/app/utilities/ZodTypes.ts b/src/app/utilities/ZodTypes.ts
index 0fa15d3..f9a8909 100644
--- a/src/app/utilities/ZodTypes.ts
+++ b/src/app/utilities/ZodTypes.ts
@@ -1,29 +1,28 @@
 import { z } from 'zod';
 
 export const loginAccountSchema = z.object({
-    username: z.string().min(3, {
-        message: 'Username must be at least 3 characters long'
-    }).max(255),
+    username:z.string()
+      .min(3, { message: 'Name must be at least 3 characters long' })
+      .max(255, { message: 'Name must be at most 255 characters long' })
+      .regex(/^[A-Za-z][A-Za-z0-9_-]*$/, { message: 'Name must start with a letter and can only contain letters, numbers, underscores, or dashes' }),
     password: z.string().min(8, {
         message: 'Password must be at least 8 characters long'
     }).max(255)
 });
 
 export const registerAccountSchema = z.object({
-    username: z.string().min(3, {
-        message: 'Username must be at least 3 characters long'
-    }).max(255),
+    username: z.string()
+      .min(3, { message: 'Name must be at least 3 characters long' })
+      .max(255, { message: 'Name must be at most 255 characters long' })
+      .regex(/^[A-Za-z][A-Za-z0-9_-]*$/, { message: 'Name must start with a letter and can only contain letters, numbers, underscores, or dashes' }),
     password: z.string().min(8, {
         message: 'Password must be at least 8 characters long'
     }).max(255)
 });
 
 export const ZCharacterCreate = z.object({
-    name: z.string().min(3, {
-        message: 'Name must be at least 3 characters long'
-    }).max(255)
-});
-
-export const ZCharacterDelete = z.object({
-    character_id: z.number()
+    name: z.string()
+      .min(3, { message: 'Name must be at least 3 characters long' })
+      .max(255, { message: 'Name must be at most 255 characters long' })
+      .regex(/^[A-Za-z][A-Za-z0-9_-]*$/, { message: 'Name must start with a letter and can only contain letters, numbers, underscores, or dashes' })
 });
\ No newline at end of file