diff --git a/src/main/java/com/gmail/nossr50/Combat.java b/src/main/java/com/gmail/nossr50/Combat.java
index afc6d1540..369fdd443 100644
--- a/src/main/java/com/gmail/nossr50/Combat.java
+++ b/src/main/java/com/gmail/nossr50/Combat.java
@@ -1,18 +1,18 @@
 /*
 	This file is part of mcMMO.
 
-	mcMMO is free software: you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation, either version 3 of the License, or
-	(at your option) any later version.
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
 
-	mcMMO is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
 
-	You should have received a copy of the GNU General Public License
-	along with mcMMO.  If not, see .
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see .
 */
 package com.gmail.nossr50;
 
@@ -48,7 +48,7 @@ public class Combat
 		Entity damager = event.getDamager();
 		LivingEntity target = (LivingEntity) event.getEntity();
 		int damage = event.getDamage();
-
+		
 		/*
 		 * PLAYER VERSUS ENTITIES
 		 */
@@ -58,18 +58,18 @@ public class Combat
 			ItemStack itemInHand = attacker.getItemInHand();
 			PlayerProfile PPa = Users.getProfile(attacker);
 			
-			//If there are any abilities to activate
-			combatAbilityChecks(attacker, PPa);
-			
 			//Damage modifiers and proc checks
 			if(m.isSwords(itemInHand) && mcPermissions.getInstance().swords(attacker))
 			{
+				if(PPa.getSwordsPreparationMode())
+					Skills.abilityCheck(attacker, PPa, SkillType.SWORDS);
+				
 				if(!pluginx.misc.bleedTracker.contains(target)) //Bleed
-					Swords.bleedCheck(attacker, target, pluginx);
+					Swords.bleedCheck(attacker, PPa.getSkillLevel(SkillType.SWORDS), target, pluginx);
 					
 				if (!(event instanceof FakeEntityDamageByEntityEvent) && PPa.getSerratedStrikesMode())
-					Swords.applySerratedStrikes(attacker, event, pluginx);
-					
+					Swords.applySerratedStrikes(attacker, target, damage, pluginx);
+				
 				if(target instanceof Player)
 					PvPExperienceGain(attacker, PPa, (Player) target, damage, SkillType.SWORDS);
 				else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId()))
@@ -77,35 +77,41 @@ public class Combat
 			}
 			else if(m.isAxes(itemInHand) && mcPermissions.getInstance().axes(attacker))
 			{
-				Axes.axesBonus(attacker, event);
+				if(PPa.getAxePreparationMode())
+					Skills.abilityCheck(attacker, PPa, SkillType.AXES);
 				
-				Axes.axeCriticalCheck(attacker, event, pluginx); //Critical hit
+				damage += Axes.axesBonus(attacker, PPa);
+				
+				damage *= Axes.axeCriticalBonus(attacker, PPa.getSkillLevel(SkillType.AXES), target, pluginx); //Critical hit
 				
 				//Impact
-				if(event.getEntity() instanceof LivingEntity)
-				    Axes.impact(attacker, (LivingEntity)event.getEntity());
+				Axes.impact(attacker, target);
 				
 				if (!(event instanceof FakeEntityDamageByEntityEvent) && PPa.getSkullSplitterMode())
-					Axes.applyAoeDamage(attacker, event, pluginx);
+					Axes.applyAoeDamage(attacker, target, damage, pluginx);
 				
 				if(target instanceof Player)
-					PvPExperienceGain(attacker, PPa, (Player) target, event.getDamage(), SkillType.AXES);
+					PvPExperienceGain(attacker, PPa, (Player) target, damage, SkillType.AXES);
 				else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId()))
-					PvEExperienceGain(attacker, PPa, target, event.getDamage(), SkillType.AXES);
+					PvEExperienceGain(attacker, PPa, target, damage, SkillType.AXES);
 			}
 			else if(itemInHand.getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker)) //Unarmed
 			{
-				Unarmed.unarmedBonus(attacker, event);
+				if(PPa.getFistsPreparationMode())
+					Skills.abilityCheck(attacker, PPa, SkillType.UNARMED);
+				
+				damage += Unarmed.unarmedBonus(PPa.getSkillLevel(SkillType.UNARMED));
+				
 				if(PPa.getBerserkMode())
-					event.setDamage(event.getDamage() + (event.getDamage() / 2));
+					damage *= 1.5;
 				
 				if(target instanceof Player)
-					Unarmed.disarmProcCheck(attacker, (Player) target);	//Disarm
+					Unarmed.disarmProcCheck(attacker, PPa.getSkillLevel(SkillType.UNARMED), (Player) target); //Disarm
 				
 				if(target instanceof Player)
-					PvPExperienceGain(attacker, PPa, (Player) target, event.getDamage(), SkillType.UNARMED);
+					PvPExperienceGain(attacker, PPa, (Player) target, damage, SkillType.UNARMED);
 				else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId()))
-					PvEExperienceGain(attacker, PPa, target, event.getDamage(), SkillType.UNARMED);
+					PvEExperienceGain(attacker, PPa, target, damage, SkillType.UNARMED);
 			}
 			
 			//Player use bone on wolf.
@@ -116,6 +122,7 @@ public class Combat
 				if(itemInHand.getTypeId() == 352 && mcPermissions.getInstance().taming(attacker))
 				{
 					event.setCancelled(true);
+					
 					if(wolf.isTamed())
 						attacker.sendMessage(mcLocale.getString("Combat.BeastLore")+" "+
 							mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(wolf)})+" "+
@@ -125,6 +132,8 @@ public class Combat
 							mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {wolf.getHealth()}));
 				}
 			}
+			
+			event.setDamage(damage);
 		}
 			
 		/*
@@ -170,7 +179,7 @@ public class Combat
 			Swords.counterAttackChecks(event);
 			Acrobatics.dodgeChecks(event);
 		}
-	
+		
 		/*			 
 		 * DEFENSIVE CHECKS FOR WOLVES
 		 */
@@ -182,17 +191,6 @@ public class Combat
 		}
 	}
 	
-	public static void combatAbilityChecks(Player attacker, PlayerProfile PPa)
-	{
-		//Check to see if any abilities need to be activated
-		if(PPa.getAxePreparationMode())
-			Skills.abilityCheck(attacker, SkillType.AXES);
-		if(PPa.getSwordsPreparationMode())
-			Skills.abilityCheck(attacker, SkillType.SWORDS);
-		if(PPa.getFistsPreparationMode())
-			Skills.abilityCheck(attacker, SkillType.UNARMED);
-	}
-	
 	public static void archeryCheck(EntityDamageByEntityEvent event, mcMMO pluginx)
 	{
 		Arrow arrow = (Arrow)event.getDamager();
@@ -322,7 +320,6 @@ public class Combat
 			EntityDamageEvent ede = (EntityDamageByEntityEvent) new FakeEntityDamageByEntityEvent(attacker, target, EntityDamageEvent.DamageCause.ENTITY_ATTACK, dmg);
 			Bukkit.getPluginManager().callEvent(ede);
 			if(ede.isCancelled()) return;
-
 			target.damage(ede.getDamage());
 		} else {
 			target.damage(dmg);
diff --git a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
index da870510b..9e83de767 100644
--- a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
+++ b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
@@ -144,7 +144,7 @@ public class mcBlockListener implements Listener
     	
     	//Green Terra
    		if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && ((id == 59 && block.getData() == (byte) 0x07) || Herbalism.canBeGreenTerra(block)))
-   			Skills.abilityCheck(player, SkillType.HERBALISM);
+   			Skills.abilityCheck(player, PP, SkillType.HERBALISM);
    		
    		//Wheat && Triple drops
    		if(PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(block))
@@ -220,17 +220,17 @@ public class mcBlockListener implements Listener
     	if(m.abilityBlockCheck(block))
     	{
 	   		if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block))
-	   			Skills.abilityCheck(player, SkillType.HERBALISM);
+	   			Skills.abilityCheck(player, PP, SkillType.HERBALISM);
 	    	if(PP.getAxePreparationMode() && id == 17 && mcPermissions.getInstance().woodCuttingAbility(player))
-	    		Skills.abilityCheck(player, SkillType.WOODCUTTING);
+	    		Skills.abilityCheck(player, PP, SkillType.WOODCUTTING);
 	    	if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block))
-	    		Skills.abilityCheck(player, SkillType.MINING);
+	    		Skills.abilityCheck(player, PP, SkillType.MINING);
 	    	if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block))
-	    		Skills.abilityCheck(player, SkillType.EXCAVATION);
+	    		Skills.abilityCheck(player, PP, SkillType.EXCAVATION);
     	}
     	
     	if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || id == 78))
-    		Skills.abilityCheck(player, SkillType.UNARMED);
+    		Skills.abilityCheck(player, PP, SkillType.UNARMED);
     	
     	/*
     	 * TREE FELLER STUFF
diff --git a/src/main/java/com/gmail/nossr50/skills/Axes.java b/src/main/java/com/gmail/nossr50/skills/Axes.java
index c06f3763d..ce8d2b2ab 100644
--- a/src/main/java/com/gmail/nossr50/skills/Axes.java
+++ b/src/main/java/com/gmail/nossr50/skills/Axes.java
@@ -22,76 +22,67 @@ import org.bukkit.entity.Entity;
 import org.bukkit.entity.LivingEntity;
 import org.bukkit.entity.Player;
 import org.bukkit.entity.Wolf;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
 import org.bukkit.inventory.ItemStack;
-import org.bukkit.plugin.Plugin;
 import com.gmail.nossr50.Combat;
 import com.gmail.nossr50.Users;
 import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.datatypes.PlayerProfile;
 import com.gmail.nossr50.datatypes.SkillType;
 import com.gmail.nossr50.locale.mcLocale;
 import com.gmail.nossr50.party.Party;
 
-public class Axes {
-    public static void axesBonus(Player attacker, EntityDamageByEntityEvent event)
-    {
-        int bonus = 0;
-        
-        //Add 1 DMG for every 50 skill levels
-        bonus += Users.getProfile(attacker).getSkillLevel(SkillType.AXES)/50;
-        
-        if(bonus > 4)
-            bonus = 4;
-        
-        event.setDamage(event.getDamage() + bonus);
-    }
-	public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx)
+public class Axes
+{
+	public static int axesBonus(Player attacker, PlayerProfile PP)
 	{
-    	Entity x = event.getEntity();
-    	
-    	if(x instanceof Wolf){
-    		Wolf wolf = (Wolf)x;
-    		if(Taming.getOwner(wolf, pluginx) != null)
-    		{
-	    		if(Taming.getOwner(wolf, pluginx) == attacker)
-	    			return;
-	    		if(Party.getInstance().inSameParty(attacker, Taming.getOwner(wolf, pluginx)))
-	    			return;
-    		}
-    	}
-    	PlayerProfile PPa = Users.getProfile(attacker);
-    	if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
-    		if(PPa.getSkillLevel(SkillType.AXES) >= 750){
-    			if(Math.random() * 1000 <= 750 && !x.isDead()){
-    				if(x instanceof Player){
-    					int damage = (event.getDamage() * 2) - (event.getDamage() / 2);
-    					event.setDamage(damage);
-    					Player player = (Player)x;
-    					player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
-    				}
-    				else {
-    					int damage = event.getDamage() * 2;
-        				event.setDamage(damage);
-        			}
-    				attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
-    			}
-    		} else if(Math.random() * 1000 <= PPa.getSkillLevel(SkillType.AXES) && !x.isDead()){
-    			if(x instanceof Player){
-    				int damage = (event.getDamage() * 2) - (event.getDamage() / 2);
-					event.setDamage(damage);
-    				Player player = (Player)x;
-    				player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
-    			}
-    			else {
-    				int damage = event.getDamage() * 2;
-    				event.setDamage(damage);
-    			}
+		//Add 1 DMG for every 50 skill levels
+		int bonus = PP.getSkillLevel(SkillType.AXES) / 50;
+		
+		if(bonus > 4)
+			bonus = 4;
+		
+		return bonus;
+	}
+	
+	public static double axeCriticalBonus(Player attacker, int skillLevel, LivingEntity target, mcMMO pluginx)
+	{
+		if(target instanceof Wolf)
+		{
+			if(Taming.isFriendlyWolf(attacker, (Wolf) target, pluginx))
+				return 1.0;
+		}
+		
+		double criticalBonus = 0.0;
+		
+		if(skillLevel >= 750)
+		{
+			if(Math.random() * 1000 <= 750)
+			{
+				if(target instanceof Player)
+				{
+					criticalBonus = 1.5;
+					((Player) target).sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
+				}
+				else
+					criticalBonus = 2.0;
 				attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
-    		}
-    	}
-    }
+			}
+		}
+		else if(Math.random() * 1000 <= skillLevel)
+		{
+			if(target instanceof Player)
+			{
+				criticalBonus = 1.5;
+				((Player) target).sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
+			}
+			else
+				criticalBonus = 2.0;
+			attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
+		}
+		
+		return criticalBonus;
+	}
 	
 	public static void impact(Player attacker, LivingEntity target)
 	{
@@ -146,68 +137,60 @@ public class Axes {
 	    return false;
 	}
 	
-	public static void applyAoeDamage(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx)
+	public static void applyAoeDamage(Player attacker, LivingEntity target, int damage, mcMMO pluginx)
 	{
 		int targets = 0;
 		
-		int dmgAmount = (event.getDamage()/2);
-        
-        //Setup minimum damage
-        if(dmgAmount < 1)
-            dmgAmount = 1;
-    	
-    	if(event.getEntity() instanceof LivingEntity)
-    	{
-    		LivingEntity x = (LivingEntity) event.getEntity();
-	    	targets = m.getTier(attacker);
-	    	
-    	for(Entity derp : x.getNearbyEntities(2.5, 2.5, 2.5))
-    	{
-    			//Make sure the Wolf is not friendly
-    			if(derp instanceof Wolf)
-    			{
-					Wolf hurrDurr = (Wolf)derp;
-					if(Taming.getOwner(hurrDurr, pluginx) == attacker)
+		int dmgAmount = damage / 2;
+		
+		//Setup minimum damage
+		if(dmgAmount < 1)
+			dmgAmount = 1;
+		
+		targets = m.getTier(attacker);
+			
+		for(Entity derp : target.getNearbyEntities(2.5, 2.5, 2.5))
+		{
+			//Make sure the Wolf is not friendly
+			if(derp instanceof Wolf)
+			{
+				if (Taming.isFriendlyWolf(attacker, (Wolf) derp, pluginx))
+					continue;
+			}
+				
+			//Damage nearby LivingEntities
+			else if(derp instanceof LivingEntity && targets >= 1)
+			{
+				if(derp instanceof Player)
+				{
+					Player nearbyPlayer = (Player) derp;
+						
+					if(Users.getProfile(nearbyPlayer).getGodMode())
 						continue;
-					if(Party.getInstance().inSameParty(attacker, Taming.getOwner(hurrDurr, pluginx)))
+					
+					if(nearbyPlayer.getName().equals(attacker.getName()))
 						continue;
+						
+					if(Party.getInstance().inSameParty(attacker, nearbyPlayer))
+						continue;
+						
+					if(target.isDead())
+						continue;
+						
+					if(targets >= 1 && nearbyPlayer.getWorld().getPVP())
+					{
+						Combat.dealDamage(nearbyPlayer, dmgAmount, attacker);
+						nearbyPlayer.sendMessage(ChatColor.DARK_RED+"Struck by CLEAVE!");
+						targets--;
+					}
 				}
-    			
-    			//Damage nearby LivingEntities
-    			if(derp instanceof LivingEntity && targets >= 1)
-    			{
-    				if(derp instanceof Player)
-	    			{
-	    				Player target = (Player)derp;
-	    				
-	    				if(Users.getProfile(target).getGodMode())
-	    					continue;
-
-	    				if(target.getName().equals(attacker.getName()))
-	    					continue;
-	    				
-	    				if(Party.getInstance().inSameParty(attacker, target))
-	    					continue;
-	    				
-	    				if(target.isDead())
-	    					continue;
-	    				
-	    				if(targets >= 1 && derp.getWorld().getPVP())
-	    				{
-	    				    Combat.dealDamage(target, dmgAmount, attacker);
-	    					target.sendMessage(ChatColor.DARK_RED+"Struck by CLEAVE!");
-	    					targets--;
-	    					continue;
-	    				}
-	    			}
-    				else
-	    			{			
-	    				LivingEntity target = (LivingEntity)derp;
-    					Combat.dealDamage(target, dmgAmount, attacker);
-	    				targets--;
-	    			}
-    			}
-    		}
-    	}
+				else
+				{
+					LivingEntity nearbyLivingEntity = (LivingEntity) derp;
+					Combat.dealDamage(nearbyLivingEntity, dmgAmount, attacker);
+					targets--;
+				}
+			}
+		}
 	}
 }
diff --git a/src/main/java/com/gmail/nossr50/skills/Skills.java b/src/main/java/com/gmail/nossr50/skills/Skills.java
index f9bdde49c..67e54ced4 100644
--- a/src/main/java/com/gmail/nossr50/skills/Skills.java
+++ b/src/main/java/com/gmail/nossr50/skills/Skills.java
@@ -275,15 +275,14 @@ public class Skills
      * @param player The player activating the ability
      * @param type The skill the ability is based on
      */
-    public static void abilityCheck(Player player, SkillType type)
-    {    	
-    	PlayerProfile PP = Users.getProfile(player);
-    	AbilityType ability = type.getAbility();
-    	if(type.getTool().inHand(player.getItemInHand()))
-    	{
-    		if(type.getTool().getToolMode(PP))
-    			type.getTool().setToolMode(PP, false);
-    		
+	public static void abilityCheck(Player player, PlayerProfile PP, SkillType type)
+	{
+		AbilityType ability = type.getAbility();
+		if(type.getTool().inHand(player.getItemInHand()))
+		{
+			if(type.getTool().getToolMode(PP))
+				type.getTool().setToolMode(PP, false);
+			
     		//Axes and Woodcutting are odd because they share the same tool so we show them the too tired message when they take action
     		if(type == SkillType.WOODCUTTING || type == SkillType.AXES)
     		{
@@ -293,19 +292,19 @@ public class Skills
                     return;
                 }
     		}
-    		
-    		int ticks = 2 + (PP.getSkillLevel(type) / 50);
-    		if(!ability.getMode(PP) && cooldownOver(player, PP.getSkillDATS(ability), ability.getCooldown()))
-    		{
-    			player.sendMessage(ability.getAbilityOn());
-    			for(Player y : player.getWorld().getPlayers())
-	    		{
-    				if(y != player && m.isNear(player.getLocation(), y.getLocation(), 10))
-	    				y.sendMessage(ability.getAbilityPlayer(player));
-	    		}
-    			PP.setSkillDATS(ability, System.currentTimeMillis()+(ticks*1000));
-    			ability.setMode(PP, true);
-    		}
-    	}
-    }
+			
+			int ticks = 2 + (PP.getSkillLevel(type) / 50);
+			if(!ability.getMode(PP) && cooldownOver(player, PP.getSkillDATS(ability), ability.getCooldown()))
+			{
+				player.sendMessage(ability.getAbilityOn());
+				for(Player y : player.getWorld().getPlayers())
+				{
+					if(y != player && m.isNear(player.getLocation(), y.getLocation(), 10))
+						y.sendMessage(ability.getAbilityPlayer(player));
+				}
+				PP.setSkillDATS(ability, System.currentTimeMillis()+(ticks*1000));
+				ability.setMode(PP, true);
+			}
+		}
+	}
 }
diff --git a/src/main/java/com/gmail/nossr50/skills/Swords.java b/src/main/java/com/gmail/nossr50/skills/Swords.java
index 61bf1ca12..da7904ae6 100644
--- a/src/main/java/com/gmail/nossr50/skills/Swords.java
+++ b/src/main/java/com/gmail/nossr50/skills/Swords.java
@@ -33,186 +33,165 @@ import com.gmail.nossr50.party.Party;
 
 public class Swords 
 {
-	public static void bleedCheck(Player attacker, LivingEntity x, mcMMO pluginx)
+	public static void bleedCheck(Player attacker, int skillLevel, LivingEntity target, mcMMO pluginx)
 	{
-    	PlayerProfile PPa = Users.getProfile(attacker);
-    	
-    	if(x instanceof Wolf)
-    	{
-    		Wolf wolf = (Wolf)x;
-    		if(Taming.getOwner(wolf, pluginx) != null)
-    		{
-	    		if(Taming.getOwner(wolf, pluginx) == attacker)
-	    			return;
-	    		if(Party.getInstance().inSameParty(attacker, Taming.getOwner(wolf, pluginx)))
-	    			return;
-    		}
-    	}
-    	if(mcPermissions.getInstance().swords(attacker) && m.isSwords(attacker.getItemInHand())){
-			if(PPa.getSkillLevel(SkillType.SWORDS) >= 750)
+		if(target instanceof Wolf)
+		{
+			if(Taming.isFriendlyWolf(attacker, (Wolf) target, pluginx))
+				return;
+		}
+		
+		if(skillLevel >= 750)
+		{
+			if(Math.random() * 1000 <= 750)
 			{
-				if(Math.random() * 1000 <= 750)
-				{
-					if(!(x instanceof Player))
-						pluginx.misc.addToBleedQue(x);
-					if(x instanceof Player)
-					{
-						Player target = (Player)x;
-						Users.getProfile(target).addBleedTicks(3);
-					}
-					attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
-				}
-			} 
-			else if (Math.random() * 1000 <= PPa.getSkillLevel(SkillType.SWORDS))
-			{
-				if(!(x instanceof Player))
-					pluginx.misc.addToBleedQue(x);
-				if(x instanceof Player)
-				{
-					Player target = (Player)x;
-					Users.getProfile(target).addBleedTicks(2);
-				}
+				if(!(target instanceof Player))
+					pluginx.misc.addToBleedQue(target);
+				else if(target instanceof Player)
+					Users.getProfile((Player) target).addBleedTicks(3);
 				attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
 			}
+		} 
+		else if(Math.random() * 1000 <= skillLevel)
+		{
+			if(!(target instanceof Player))
+				pluginx.misc.addToBleedQue(target);
+			else if(target instanceof Player)
+				Users.getProfile((Player) target).addBleedTicks(2);
+			attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
 		}
-    }
-    public static void applySerratedStrikes(Player attacker, EntityDamageByEntityEvent event, mcMMO pluginx)
-    {
-    	int targets = 0;
-    	
-    	int dmgAmount = (event.getDamage()/4);
-        
-        //Setup minimum damage
-        if(dmgAmount < 1)
-            dmgAmount = 1;
-    	
-    	if(event.getEntity() instanceof LivingEntity)
-    	{
-    		LivingEntity x = (LivingEntity) event.getEntity();
-	    	targets = m.getTier(attacker);
-	    	
-	    	for(Entity derp : x.getNearbyEntities(2.5, 2.5, 2.5))
-	    	{
-    			//Make sure the Wolf is not friendly
-    			if(derp instanceof Wolf)
-    			{
-					Wolf hurrDurr = (Wolf)derp;
-					if(Taming.getOwner(hurrDurr, pluginx) == attacker)
-						continue;
-					if(Party.getInstance().inSameParty(attacker, Taming.getOwner(hurrDurr, pluginx)))
-						continue;
-				}
-    			//Damage nearby LivingEntities
-    			if(derp instanceof LivingEntity && targets >= 1)
-    			{
-    				if(derp instanceof Player)
-	    			{
-	    				Player target = (Player)derp;
-	    				
-	    				if(target.getName().equals(attacker.getName()))
-	    					continue;
-	    				
-	    				if(Users.getProfile(target).getGodMode())
-	    					continue;
-	    				
-	    				if(Party.getInstance().inSameParty(attacker, target))
-	    					continue;
-	    				if(targets >= 1 && derp.getWorld().getPVP())
-	    				{
-	    					Combat.dealDamage(target, dmgAmount, attacker);
-	    					target.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!");
-	        				Users.getProfile(target).addBleedTicks(5);
-	    					targets--;
-	    					continue;
-	    				}
-	    			} 
-    				else
-	    			{
-	    				if(!pluginx.misc.bleedTracker.contains(derp))
-	    					pluginx.misc.addToBleedQue((LivingEntity)derp);
-	    				
-	    				LivingEntity target = (LivingEntity)derp;
-    					Combat.dealDamage(target, dmgAmount, attacker);
-	    				targets--;
-	    			}
-    			}
-    		}
-    	}
 	}
-    
-    public static void counterAttackChecks(EntityDamageByEntityEvent event)
-    {
-    	//Don't want to counter attack stuff not alive
-    	
-    	if(!(event.getDamager() instanceof LivingEntity))
-    		return;
-
-	    if(event instanceof EntityDamageByEntityEvent)
-	    {
-	    	Entity f = ((EntityDamageByEntityEvent) event).getDamager();
-		   	if(event.getEntity() instanceof Player)
-		   	{
-		   		Player defender = (Player)event.getEntity();
-		   		PlayerProfile PPd = Users.getProfile(defender);
-		   		if(m.isSwords(defender.getItemInHand()) && mcPermissions.getInstance().swords(defender))
-		   		{
-		    		if(PPd.getSkillLevel(SkillType.SWORDS) >= 600)
-		    		{
-		    			if(Math.random() * 2000 <= 600)
-		    			{
-			    			Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
-		    				defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
-			    			if(f instanceof Player)
-		    				((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
-		    			}
-		    		}
-		    		else if (Math.random() * 2000 <= PPd.getSkillLevel(SkillType.SWORDS))
-		    		{
-			    		Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
-			    		defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
-		    			if(f instanceof Player)
-		    				((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
-		    		}
-		   		}
-		    }
-    	}
-    }
-    
-    public static void bleedSimulate(mcMMO plugin)
-    {
-    	//Add items from Que list to BleedTrack list
-    	
-    	for(LivingEntity x : plugin.misc.bleedQue)
-    	{
-    		plugin.misc.bleedTracker.add(x);
-    	}
-    	
-    	//Clear list
-    	plugin.misc.bleedQue = new LivingEntity[plugin.misc.bleedQue.length];
-    	plugin.misc.bleedQuePos = 0;
-    	
-    	//Cleanup any dead entities from the list
-    	for(LivingEntity x : plugin.misc.bleedRemovalQue)
-    	{
-    		plugin.misc.bleedTracker.remove(x);
-    	}
-    	
-    	//Clear bleed removal list
-    	plugin.misc.bleedRemovalQue = new LivingEntity[plugin.misc.bleedRemovalQue.length];
-    	plugin.misc.bleedRemovalQuePos = 0;
-    	
-    	//Bleed monsters/animals
-        for(LivingEntity x : plugin.misc.bleedTracker)
-        {
-        	if(x == null || x.isDead())
-        	{
-        		plugin.misc.addToBleedRemovalQue(x);
-        		continue;
-        	}
-        	else
-        	{
+	
+	public static void applySerratedStrikes(Player attacker, LivingEntity target, int damage, mcMMO pluginx)
+	{
+		int targets = 0;
+		
+		int dmgAmount = damage / 4;
+		
+		//Setup minimum damage
+		if(dmgAmount < 1)
+			dmgAmount = 1;
+		
+		targets = m.getTier(attacker);
+		
+		for(Entity derp : target.getNearbyEntities(2.5, 2.5, 2.5))
+		{
+			//Make sure the Wolf is not friendly
+			if(derp instanceof Wolf)
+			{
+				if (Taming.isFriendlyWolf(attacker, (Wolf) target, pluginx))
+					continue;
+			}
+			
+			//Damage nearby LivingEntities
+			if(derp instanceof LivingEntity && targets >= 1)
+			{
+				if(derp instanceof Player)
+				{
+					Player nearbyPlayer = (Player) derp;
+						
+					if(nearbyPlayer.getName().equals(attacker.getName()))
+						continue;
+					
+					if(Users.getProfile(nearbyPlayer).getGodMode())
+						continue;
+					
+					if(Party.getInstance().inSameParty(attacker, nearbyPlayer))
+						continue;
+					
+					if(targets >= 1 && nearbyPlayer.getWorld().getPVP())
+					{
+						Combat.dealDamage(nearbyPlayer, dmgAmount, attacker);
+						nearbyPlayer.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!");
+						Users.getProfile(nearbyPlayer).addBleedTicks(5);
+						targets--;
+					}
+				}
+				else
+				{
+					LivingEntity neabyLivingEntity = (LivingEntity) derp;
+					
+					if(!pluginx.misc.bleedTracker.contains(neabyLivingEntity))
+						pluginx.misc.addToBleedQue(neabyLivingEntity);
+					
+					Combat.dealDamage(neabyLivingEntity, dmgAmount, attacker);
+					targets--;
+				}
+			}
+		}
+	}
+	
+	public static void counterAttackChecks(EntityDamageByEntityEvent event)
+	{
+		//Don't want to counter attack stuff not alive
+		
+		if(!(event.getDamager() instanceof LivingEntity))
+			return;
+		
+		if(event instanceof EntityDamageByEntityEvent)
+		{
+			Entity f = ((EntityDamageByEntityEvent) event).getDamager();
+			if(event.getEntity() instanceof Player)
+			{
+				Player defender = (Player)event.getEntity();
+				PlayerProfile PPd = Users.getProfile(defender);
+				if(m.isSwords(defender.getItemInHand()) && mcPermissions.getInstance().swords(defender))
+				{
+					if(PPd.getSkillLevel(SkillType.SWORDS) >= 600)
+					{
+						if(Math.random() * 2000 <= 600)
+						{
+							Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
+							defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
+							if(f instanceof Player)
+							((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
+						}
+					}
+					else if (Math.random() * 2000 <= PPd.getSkillLevel(SkillType.SWORDS))
+					{
+						Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
+						defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
+						if(f instanceof Player)
+							((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
+					}
+				}
+			}
+		}
+	}
+	
+	public static void bleedSimulate(mcMMO plugin)
+	{
+		//Add items from Que list to BleedTrack list
+		
+		for(LivingEntity x : plugin.misc.bleedQue)
+		{
+			plugin.misc.bleedTracker.add(x);
+		}
+		
+		//Clear list
+		plugin.misc.bleedQue = new LivingEntity[plugin.misc.bleedQue.length];
+		plugin.misc.bleedQuePos = 0;
+		
+		//Cleanup any dead entities from the list
+		for(LivingEntity x : plugin.misc.bleedRemovalQue)
+		{
+			plugin.misc.bleedTracker.remove(x);
+		}
+		
+		//Clear bleed removal list
+		plugin.misc.bleedRemovalQue = new LivingEntity[plugin.misc.bleedRemovalQue.length];
+		plugin.misc.bleedRemovalQuePos = 0;
+		
+		//Bleed monsters/animals
+		for(LivingEntity x : plugin.misc.bleedTracker)
+		{
+			if(x == null || x.isDead())
+			{
+				plugin.misc.addToBleedRemovalQue(x);
+				continue;
+			}
+			else
 				Combat.dealDamage(x, 2);
-        	}
-        }
-    }
+		}
+	}
 }
diff --git a/src/main/java/com/gmail/nossr50/skills/Taming.java b/src/main/java/com/gmail/nossr50/skills/Taming.java
index b7c7c6f4b..098ade452 100644
--- a/src/main/java/com/gmail/nossr50/skills/Taming.java
+++ b/src/main/java/com/gmail/nossr50/skills/Taming.java
@@ -1,18 +1,18 @@
 /*
 	This file is part of mcMMO.
 
-	mcMMO is free software: you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation, either version 3 of the License, or
-	(at your option) any later version.
+    mcMMO is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
 
-	mcMMO is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
+    mcMMO is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
 
-	You should have received a copy of the GNU General Public License
-	along with mcMMO.  If not, see .
+    You should have received a copy of the GNU General Public License
+    along with mcMMO.  If not, see .
 */
 package com.gmail.nossr50.skills;
 
@@ -31,6 +31,7 @@ import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.datatypes.PlayerProfile;
 import com.gmail.nossr50.datatypes.SkillType;
 import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
 
 public class Taming 
 {
@@ -169,4 +170,11 @@ public class Taming
 		if(cause == DamageCause.FIRE_TICK)
 			event.getEntity().setFireTicks(0);
 	}
+	
+	public static boolean isFriendlyWolf(Player player, Wolf wolf, mcMMO pluginx)
+	{
+		if(getOwner(wolf, pluginx) == player || Party.getInstance().inSameParty(player, getOwner(wolf, pluginx)))
+			return true;
+		return false;
+	}
 }
diff --git a/src/main/java/com/gmail/nossr50/skills/Unarmed.java b/src/main/java/com/gmail/nossr50/skills/Unarmed.java
index 9fccdccfe..632a3c2b5 100644
--- a/src/main/java/com/gmail/nossr50/skills/Unarmed.java
+++ b/src/main/java/com/gmail/nossr50/skills/Unarmed.java
@@ -18,53 +18,47 @@ package com.gmail.nossr50.skills;
 
 import org.bukkit.Material;
 import org.bukkit.entity.Player;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
 import org.bukkit.inventory.ItemStack;
-import com.gmail.nossr50.Users;
 import com.gmail.nossr50.m;
-import com.gmail.nossr50.datatypes.SkillType;
 import com.gmail.nossr50.locale.mcLocale;
 
-public class Unarmed {
-	
-	public static void unarmedBonus(Player attacker, EntityDamageByEntityEvent event)
+public class Unarmed
+{
+	public static int unarmedBonus(int skillLevel)
 	{
-		int bonus = 3;
-		
 		//Add 1 DMG for every 50 skill levels
-		bonus += Users.getProfile(attacker).getSkillLevel(SkillType.UNARMED)/50;
+		int bonus = skillLevel / 50;
 		
 		if(bonus > 8)
-		    bonus = 8;
-        
-		event.setDamage(event.getDamage() + bonus);
+			bonus = 8;
+		
+		return bonus;
 	}
 	
-	public static void disarmProcCheck(Player attacker, Player defender)
+	public static void disarmProcCheck(Player attacker, int skillLevel, Player defender)
 	{
-		int skillLevel = Users.getProfile(attacker).getSkillLevel(SkillType.UNARMED);
 		if(defender.getItemInHand() != null && defender.getItemInHand().getType() != Material.AIR)
 		{
 			if(skillLevel >= 1000)
 			{
 				if(Math.random() * 3000 <= 1000)
 				{
-	    			ItemStack item = defender.getItemInHand();
-	    			defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
-		    		m.mcDropItem(defender.getLocation(), item);
-		    		defender.setItemInHand(null);
+					ItemStack item = defender.getItemInHand();
+					defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
+					m.mcDropItem(defender.getLocation(), item);
+					defender.setItemInHand(null);
 				}
-	    	} 
+			}
 			else
-    		{
+			{
 				if(Math.random() * 3000 <= skillLevel)
 				{
-	    			ItemStack item = defender.getItemInHand();
-	    			defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
-		    		m.mcDropItem(defender.getLocation(), item);
-		    		defender.setItemInHand(null);
+					ItemStack item = defender.getItemInHand();
+					defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
+					m.mcDropItem(defender.getLocation(), item);
+					defender.setItemInHand(null);
 				}
-    		}
+			}
 		}
 	}
-}
\ No newline at end of file
+}