diff --git a/MrBigsock/Assets/Code/Character.cs b/MrBigsock/Assets/Code/Character.cs
index 50524d5e2a4be94e819abcb169ec63f0ff58857d..2e5eed3e662d8a331fe913cca0f954074f71cef3 100644
--- a/MrBigsock/Assets/Code/Character.cs
+++ b/MrBigsock/Assets/Code/Character.cs
@@ -56,6 +56,13 @@ namespace BigSock {
 		public float MaxHP => Stats.MaxHP;
 		public float baseMaxHP = 10;
 
+		/*
+			Xp....
+		*/
+		public float dropXP;
+		public float xp;
+		public float maxXp;
+		public int level; 
 
 
 		/*
@@ -194,7 +201,11 @@ namespace BigSock {
 				Alive = false;
 
 				// Inform the attacker killed us.
-				if(attack.Actor != null) attack.Actor.TargetKilled(this, attack);
+				if(attack.Actor != null) {
+					attack.Actor.TargetKilled(this, attack);
+					if(attack.Actor is PlayerController player)
+						player.GainXp(dropXP);
+				}
 
 				AfterDeath();
 
@@ -239,7 +250,6 @@ namespace BigSock {
 			print($"[Character.AfterDeath()] start. | {HP}, {Alive}");
 			Destroy(gameObject);
 		}
-
 	}
 
 
@@ -328,6 +338,12 @@ namespace BigSock {
 		public void TargetKilled(Character target, AttackStats attack) {
 			OnKill?.Invoke(this, target, attack);
 		}
+		
+
+		public void GiveXp(float xp) {
+			this.xp += xp; 
+			OnGainedXP?.Invoke(this, xp);
+		}
 
 		/*
 			Triggers when character uses an attack.
@@ -381,9 +397,9 @@ namespace BigSock {
 
 		/*
 			Triggers when character gains xp.
-			Params: actor, amount.
+			Params: sorce, amount.
 		*/
-		public event Action<Character, int> OnGainedXP;
+		public event Action<Character, float> OnGainedXP;
 
 		/*
 			Triggers when character levels up.
diff --git a/MrBigsock/Assets/Code/PlayerController.cs b/MrBigsock/Assets/Code/PlayerController.cs
index 300cedfbac1d53a86394b866607ddc3655d53b33..86ef3041cfb09e5c096e329ae3fd17d9cc75729f 100644
--- a/MrBigsock/Assets/Code/PlayerController.cs
+++ b/MrBigsock/Assets/Code/PlayerController.cs
@@ -17,6 +17,9 @@ namespace BigSock {
 	{
 
 			public HPBar hpBar;
+			public XpBar xpBar;
+			
+
 			public float collisionOffset = 0.05f;
 			public ContactFilter2D movementFilter;
 			
@@ -43,6 +46,10 @@ namespace BigSock {
 			protected override void Start()
 			{
 				base.Start();
+
+				xpBar.SetMaxXp(maxXp);
+				xpBar.SetXp(xp);
+
 				animator = GetComponent<Animator>();
 				spriteRenderer = GetComponent<SpriteRenderer>();
 				hpBar.SetMaxHealth(Convert.ToInt32(MaxHP));
@@ -163,5 +170,21 @@ namespace BigSock {
 				base.AfterDamage(attack);
 				hpBar.SetHealth(Convert.ToInt32(HP));
 			}
+
+			public void GainXp(float xp){
+				GiveXp(xp);
+				CheckXp();
+				xpBar.SetXp(this.xp);
+			}
+
+			private void CheckXp(){
+				if(xp > maxXp){
+					level += 1; 
+					xp -= maxXp;
+					maxXp = (level + 1) * 100;
+					xpBar.SetMaxXp(maxXp);
+					
+				}
+			}
 	}
 }
diff --git a/MrBigsock/Assets/Code/orc/EnemyController.cs b/MrBigsock/Assets/Code/orc/EnemyController.cs
index 5e286172793b1282a79e2395d207afc5c7f592cc..b965d45ba19973c1db7d14eaa8f0faffc9400a87 100644
--- a/MrBigsock/Assets/Code/orc/EnemyController.cs
+++ b/MrBigsock/Assets/Code/orc/EnemyController.cs
@@ -9,6 +9,7 @@ namespace BigSock {
 
 	public partial class EnemyController : Character {
 		public float collisionOffset = 0.05f;
+
 		public ContactFilter2D movementFilter;
 		protected List<RaycastHit2D> castCollisions = new List<RaycastHit2D>();
 
diff --git a/MrBigsock/Assets/XpBar.cs b/MrBigsock/Assets/XpBar.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d22ce773e18dd1179b2c3b47314a01c381ea2a09
--- /dev/null
+++ b/MrBigsock/Assets/XpBar.cs
@@ -0,0 +1,29 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using TMPro;
+
+namespace BigSock.UI{
+
+    public class XpBar : MonoBehaviour
+{
+
+    public Slider slider;
+    public TextMeshPro xpText;
+
+    protected void Start(){
+        slider = GetComponent<Slider>();
+       // xpText = GetComponent<TextMeshPro>();
+    }
+    
+    public void SetXp(float xp){
+        slider.value = xp;
+        xpText.SetText($"{xp}/{slider.maxValue}");
+    }
+
+    public void SetMaxXp(float xp){
+        slider.maxValue = xp;
+    }
+}
+}
diff --git a/MrBigsock/Assets/XpBar.cs.meta b/MrBigsock/Assets/XpBar.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7cf8ca1be06f648a36a336b5e2cbad38ec08b9bc
--- /dev/null
+++ b/MrBigsock/Assets/XpBar.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a2ed0e7debd7bc7468e3a430508a7e71
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: