diff --git a/MrBigsock/Assets/Code/Character.cs b/MrBigsock/Assets/Code/Character.cs
index 0c23a48295cd9848e173f80034aa17d3d84451d6..654604a12a3e6df918661b1408e90e2585c88c8f 100644
--- a/MrBigsock/Assets/Code/Character.cs
+++ b/MrBigsock/Assets/Code/Character.cs
@@ -85,7 +85,7 @@ namespace BigSock {
 		/*
 			The inventory of the character.
 		*/
-		public Inventory Inventory { get; protected set; } = new Inventory();
+		public Inventory Inventory { get; protected set; } = new Inventory(this);
 
 		/*
 			The base stats of the character.
@@ -123,18 +123,7 @@ namespace BigSock {
 			Stats = BaseStats.Modify(modifiers);
 		}
 
-		/*
-			Try to pick up an item.
-		*/
-		public bool TryPickUpItem(IItem item) {
-			if(Inventory.AddItem(item)) {
-				UpdateModifiers();
-				print($"[Character.TryPickUpItem()] {item.Name} picked up. ({Inventory.Items.Count}/{Inventory.Cap})");
-				return true;
-			}
-			print($"[Character.TryPickUpItem()] {item.Name} NOT picked up. ({Inventory.Items.Count}/{Inventory.Cap})");
-			return false;
-		}
+
 
 		/*
 			Add Kcockback. 
@@ -174,7 +163,7 @@ namespace BigSock {
 
 			// Add damage
 			HP -= attack.Damage;
-			OnDamage(attack);
+			AfterDamage(attack);
 
 			TryKill();
 
@@ -189,7 +178,7 @@ namespace BigSock {
 			if(Alive && HP <= 0) {
 				Alive = false;
 
-				OnDeath();
+				AfterDeath();
 
 				return true;
 			}
@@ -200,22 +189,72 @@ namespace BigSock {
 		/*
 			Method for what to do when the character takes damage.
 		*/
-		protected virtual void OnDamage(IAttackStats attack) {
-			print($"[Character.TakeDamage()] {HP} - {attack.Damage}");
+		protected virtual void AfterDamage(IAttackStats attack) {
+			print($"[Character.AfterDamage()] {HP} - {attack.Damage}");
 			KnockBack(attack);
 		}
 
 		/*
 			Method for what to do when the character dies.
 		*/
-		protected virtual void OnDeath() {
-			print($"[Character.TryKill()] start. | {HP}, {Alive}");
+		protected virtual void AfterDeath() {
+			print($"[Character.AfterDeath()] start. | {HP}, {Alive}");
 			Destroy(gameObject);
 		}
 
 	}
 
 
+
+	/*
+		Items
+	*/
+	public partial class Character {
+		
+		/*
+			Adds a listener for a conditional item to this character's event.
+		*/
+		public void AddItemListener(ConditionalItemBase item) {
+			switch(item.Trigger) {
+				case TriggerType.Fire: OnFire             += ((OnFireItemBase) item).Handler; break;
+				case TriggerType.Hit: OnHit               += ((OnHitItemBase) item).Handler; break;
+				case TriggerType.Kill: OnKill             += ((OnKillItemBase) item).Handler; break;
+
+				case TriggerType.TakeDamage: OnTakeDamage += ((OnTakeDamageItemBase) item).Handler; break;
+				case TriggerType.Heal: OnHeal             += ((OnHealItemBase) item).Handler; break;
+				case TriggerType.Death: OnDeath           += ((OnDeathItemBase) item).Handler; break;
+			}
+		}
+
+		/*
+			Remove a listener for a conditional item from this character's event.
+		*/
+		public void RemoveItemListener(ConditionalItemBase item) {
+			switch(item.Trigger) {
+				case TriggerType.Fire: OnFire             -= ((OnFireItemBase) item).Handler; break;
+				case TriggerType.Hit: OnHit               -= ((OnHitItemBase) item).Handler; break;
+				case TriggerType.Kill: OnKill             -= ((OnKillItemBase) item).Handler; break;
+
+				case TriggerType.TakeDamage: OnTakeDamage -= ((OnTakeDamageItemBase) item).Handler; break;
+				case TriggerType.Heal: OnHeal             -= ((OnHealItemBase) item).Handler; break;
+				case TriggerType.Death: OnDeath           -= ((OnDeathItemBase) item).Handler; break;
+			}
+		}
+
+		/*
+			Try to pick up an item.
+		*/
+		public bool TryPickUpItem(IItem item) {
+			if(Inventory.AddItem(item)) {
+				UpdateModifiers();
+				print($"[Character.TryPickUpItem()] {item.Name} picked up. ({Inventory.Items.Count}/{Inventory.Cap})");
+				return true;
+			}
+			print($"[Character.TryPickUpItem()] {item.Name} NOT picked up. ({Inventory.Items.Count}/{Inventory.Cap})");
+			return false;
+		}
+	}
+
 	/*
 		Events
 	*/
diff --git a/MrBigsock/Assets/Code/Item/Inventory.cs b/MrBigsock/Assets/Code/Item/Inventory.cs
index 26c4656832fcf521ae5c2ccb164171312edf8f28..2b8a75e1daaae76246547a8a8d34b6eb9fb6bb1a 100644
--- a/MrBigsock/Assets/Code/Item/Inventory.cs
+++ b/MrBigsock/Assets/Code/Item/Inventory.cs
@@ -28,6 +28,18 @@ namespace BigSock.Item {
 		public int Cap { get; set; } = 3;
 
 
+		/*
+			The max number of items the inventory can hold.
+		*/
+		public Character Owner { get; }
+
+
+		public Inventory(Character owner) {
+			if(owner == null) throw new ArgumentNullException(paramName: nameof(owner));
+			Owner = owner;
+		}
+
+
 		/*
 			Adds an item to the inventory and manages changes.
 		*/
@@ -40,6 +52,9 @@ namespace BigSock.Item {
 			if(item is PassiveItemBase passive) {
 				Modifier = Modifier.Add(passive.Modifier);
 			}
+			else if(item is ConditionalItemBase conditional) {
+				Owner.AddItemListener(conditional);
+			}
 			//! Add ifs to handle the other 2 types of items.
 
 			return true;
diff --git a/MrBigsock/Assets/Code/PlayerController.cs b/MrBigsock/Assets/Code/PlayerController.cs
index dea96a53c392c6ca7d24236fa97ad348aa716053..3fbe2ec8df0b725ba7d7c9bafceaff99a19dcd1e 100644
--- a/MrBigsock/Assets/Code/PlayerController.cs
+++ b/MrBigsock/Assets/Code/PlayerController.cs
@@ -152,8 +152,8 @@ namespace BigSock {
 			/*
 			Method for what to do when the character takes damage.
 			*/
-			protected override void OnDamage(IAttackStats attack)  {
-				base.OnDamage(attack);
+			protected override void AfterDamage(IAttackStats attack)  {
+				base.AfterDamage(attack);
 				hpBar.SetHealth(Convert.ToInt32(HP));
 			}
 	}