diff --git a/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs b/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs
index c7afea538003af5394e2d907c0299dfd810f4b2b..ff78922d6c34590ab574eaedb5b229a9e5b60f27 100644
--- a/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs
+++ b/MrBigsock/Assets/Code/Core/Abilities/AbilityDodge.cs
@@ -28,19 +28,14 @@ namespace BigSock {
 		/*
 			Activates the ability.
 		*/
-		protected override bool Activate(Character actor, Vector3? target) {
-			if(target == null) return false;
-
-			// Get direction.
-			var temp = (target.Value - actor.transform.position);
-			temp.z = 0;
-			var direction = (Vector2) temp.normalized;
-
-			// Get the force.
-			var force = BASE_FORCE * actor.Stats.MoveSpeed;
+		protected override bool Activate(IAbilityParam par) {
+			var actor = par.Actor; 
+			var direction = par.MovementDir;
 
+			if(direction == null) return false;
+			
 			// Apply the push and iframes.
-			actor.KnockBack(force, direction);
+			actor.KnockBack(BASE_FORCE * actor.Stats.MoveSpeed, direction.Value);
 			actor.AddStatusEffect(StatusEffectType.Invincible, IFRAME_DURATION);
 
 			return true;
diff --git a/MrBigsock/Assets/Code/Core/Abilities/BasicArrow.cs b/MrBigsock/Assets/Code/Core/Abilities/BasicArrow.cs
index 9520f11020b5f67f80ac312d3c27b232652d48fd..f5a4686db6ffd33bf4a19492b8414934a9b5c348 100644
--- a/MrBigsock/Assets/Code/Core/Abilities/BasicArrow.cs
+++ b/MrBigsock/Assets/Code/Core/Abilities/BasicArrow.cs
@@ -41,31 +41,24 @@ namespace BigSock {
 				- Even if nothing was hit, used to indicate that cooldowns should be updated.
 			This should be overridden in sub-classes for the actual abilities.
 		*/
-		protected override bool Activate(Character actor, Vector3? target) {
+		protected override bool Activate(IAbilityParam par) {
+			var actor = par.Actor; 
+			var target = par.TargetPos;
+
 			if(target == null)
-			 return false;
+				return false;
 
 			var attack = (AttackStats) AttackStats.Calculate(actor.Stats);
-			//var attack = (AttackStats) AttackStats.Apply(actor.Stats);
 			attack.Actor = actor;
 
-
-			var temp = (target.Value - actor.transform.position);
-			var temp1 = temp;
-
-
-			temp.z = 0;
-			temp1.z = 90;
-			
 			var bullet = PrefabService.SINGLETON.Instance(PROJECTILE_NAME, actor.transform.position);
 
 			//bullet.transform.rotation = Quaternion.LookRotation(temp.normalized);
 			//bullet.transform.rotation = Quaternion.LookRotation(temp1 ,Vector3.up);
 
 			var bulletScript = bullet.GetComponent<AttackMovement>();
-			//bulletScript.Actor = actor;
 			bulletScript.Stats = attack;
-			bulletScript.Direction = temp.normalized;
+			bulletScript.Direction = (target.Value - (Vector2) actor.transform.position).normalized;
 
 
 			//MonoBehaviour.Instantiate(PROJECTILE_BASE, (Vector3) actor.transform.position, PROJECTILE_BASE.transform.rotation);
diff --git a/MrBigsock/Assets/Code/Core/Abilities/BasicProjectile1.cs b/MrBigsock/Assets/Code/Core/Abilities/BasicProjectile1.cs
index c8e0f73b6b65ee02839044964c9115ea70fd4942..60a935cce60c039ea89e06f2ebf7fbdef32bf157 100644
--- a/MrBigsock/Assets/Code/Core/Abilities/BasicProjectile1.cs
+++ b/MrBigsock/Assets/Code/Core/Abilities/BasicProjectile1.cs
@@ -42,25 +42,20 @@ namespace BigSock {
 				- Even if nothing was hit, used to indicate that cooldowns should be updated.
 			This should be overridden in sub-classes for the actual abilities.
 		*/
-		protected override bool Activate(Character actor, Vector3? target) {
+		protected override bool Activate(IAbilityParam par) {
+			var actor = par.Actor; 
+			var target = par.TargetPos;
+
 			if(target == null) return false;
 
 			var attack = (AttackStats) AttackStats.Calculate(actor.Stats);
-			//var attack = (AttackStats) AttackStats.Apply(actor.Stats);
 			attack.Actor = actor;
 
-
-			var temp = (target.Value - actor.transform.position);
-			temp.z = 0;
-
 			var bullet = PrefabService.SINGLETON.Instance(PROJECTILE_NAME, actor.transform.position);
 			var bulletScript = bullet.GetComponent<AttackMovement>();
-			//bulletScript.Actor = actor;
 			bulletScript.Stats = attack;
-			bulletScript.Direction = temp.normalized;
-
+			bulletScript.Direction = (target.Value - (Vector2) actor.transform.position).normalized;
 
-			//MonoBehaviour.Instantiate(PROJECTILE_BASE, (Vector3) actor.transform.position, PROJECTILE_BASE.transform.rotation);
 			return true;
 		}
 
diff --git a/MrBigsock/Assets/Code/Core/Abilities/BiggerSlowerProjectile.cs b/MrBigsock/Assets/Code/Core/Abilities/BiggerSlowerProjectile.cs
index ffd0050cc6c93c01a070c1bc12bdd2040b40c578..ce60bcde11b763ed7dc900d3a5abcb2f6ade2ec2 100644
--- a/MrBigsock/Assets/Code/Core/Abilities/BiggerSlowerProjectile.cs
+++ b/MrBigsock/Assets/Code/Core/Abilities/BiggerSlowerProjectile.cs
@@ -45,25 +45,20 @@ namespace BigSock {
 				- Even if nothing was hit, used to indicate that cooldowns should be updated.
 			This should be overridden in sub-classes for the actual abilities.
 		*/
-		protected override bool Activate(Character actor, Vector3? target) {
+		protected override bool Activate(IAbilityParam par) {
+			var actor = par.Actor; 
+			var target = par.TargetPos;
+
 			if(target == null) return false;
 
 			var attack = (AttackStats) AttackStats.Calculate(actor.Stats);
-			//var attack = (AttackStats) AttackStats.Apply(actor.Stats);
 			attack.Actor = actor;
 
-
-			var temp = (target.Value - actor.transform.position);
-			temp.z = 0;
-
 			var bullet = PrefabService.SINGLETON.Instance(PROJECTILE_NAME, actor.transform.position);
 			var bulletScript = bullet.GetComponent<AttackMovement>();
-			//bulletScript.Actor = actor;
 			bulletScript.Stats = attack;
-			bulletScript.Direction = temp.normalized;
-
+			bulletScript.Direction = (target.Value - (Vector2) actor.transform.position).normalized;
 
-			//MonoBehaviour.Instantiate(PROJECTILE_BASE, (Vector3) actor.transform.position, PROJECTILE_BASE.transform.rotation);
 			return true;
 		}