Packet p = new Packet(); switch (data[0]) { case OpCode.SMSG_Damage: p = new _0x0BDamage(Data); if (EventDamage != null) EventDamage((_0x0BDamage)p); break; case OpCode.SMSG_StatusBarInfo: p = new _0x11StatusBarInfo(Data); if (EventStatusBarInfo != null) EventStatusBarInfo((_0x11StatusBarInfo)p); break; case OpCode.SMSG_ObjectInfo: p = new _0x1AObjectInfo(Data); if (EventObjectInfo != null) EventObjectInfo((_0x1AObjectInfo)p); break; case OpCode.SMSG_SendSpeach: p = new _0x1CSendSpeech(Data); if (EventSendSpeech != null) EventSendSpeech((_0x1CSendSpeech)p); break; case OpCode.SMSG_MobAttribute: p = new _0x2DMobAttributes(Data); if (EventMobAttribute != null) EventMobAttribute((_0x2DMobAttributes)p); break; case OpCode.SMSG_UpdatePlayer: p = new _0x77UpdatePlayer(Data); if (EventUpdatePlayer != null) EventUpdatePlayer((_0x77UpdatePlayer)p); break; case OpCode.SMSG_ConnectToGameServer: p = new _0x8CConnectToGameServer(Data); //if (EventConnectToGameServer != null) // EventConnectToGameServer((_0x8CConnectToGameServer)p); UOProxy.UseHuffman = true; break; default: Data.Position = Data.Length; break; } Replaced with Packet packet = new Packet(); if (Handlers.ContainsKey(data[0])) { packet = (Packet)Activator.CreateInstance(Handlers[data[0]], new object[] { Data }); var eventinfo = this.GetType().GetField(packet.GetType().Name, BindingFlags.Instance | BindingFlags.NonPublic); if (eventinfo != null) { var member = eventinfo.GetValue(this); if (member != null) member.GetType().GetMethod("Invoke").Invoke(member, new object[] { packet }); } }