diff --git a/nms-patches/EntityFireball.patch b/nms-patches/EntityFireball.patch
index 2c6103fb82..baa9bf9ca9 100644
--- a/nms-patches/EntityFireball.patch
+++ b/nms-patches/EntityFireball.patch
@@ -1,5 +1,5 @@
---- ../work/decompile-8eb82bde//net/minecraft/server/EntityFireball.java	2014-11-28 17:43:43.093707435 +0000
-+++ src/main/java/net/minecraft/server/EntityFireball.java	2014-11-28 17:38:24.000000000 +0000
+--- ../work/decompile-8eb82bde/net/minecraft/server/EntityFireball.java	2014-12-13 12:33:58.972937612 +0000
++++ src/main/java/net/minecraft/server/EntityFireball.java	2014-12-13 12:33:51.392937694 +0000
 @@ -2,6 +2,8 @@
  
  import java.util.List;
@@ -58,26 +58,20 @@
              }
  
              this.locX += this.motX;
-@@ -181,7 +198,8 @@
+@@ -181,6 +198,8 @@
  
          nbttagcompound.setString("inTile", minecraftkey == null ? "" : minecraftkey.toString());
          nbttagcompound.setByte("inGround", (byte) (this.i ? 1 : 0));
--        nbttagcompound.set("direction", this.a(new double[] { this.motX, this.motY, this.motZ}));
 +        // CraftBukkit - Fix direction being mismapped to invalid variables
 +        nbttagcompound.set("power", this.a(new double[] { this.dirX, this.dirY, this.dirZ}));
+         nbttagcompound.set("direction", this.a(new double[] { this.motX, this.motY, this.motZ}));
      }
  
-     public void a(NBTTagCompound nbttagcompound) {
-@@ -195,12 +213,14 @@
+@@ -195,12 +214,20 @@
          }
  
          this.i = nbttagcompound.getByte("inGround") == 1;
 -        if (nbttagcompound.hasKeyOfType("direction", 9)) {
--            NBTTagList nbttaglist = nbttagcompound.getList("direction", 6);
--
--            this.motX = nbttaglist.d(0);
--            this.motY = nbttaglist.d(1);
--            this.motZ = nbttaglist.d(2);
 +        // CraftBukkit start - direction -> power
 +        if (nbttagcompound.hasKeyOfType("power", 9)) {
 +            NBTTagList nbttaglist = nbttagcompound.getList("power", 6);
@@ -85,11 +79,17 @@
 +            this.dirX = nbttaglist.d(0);
 +            this.dirY = nbttaglist.d(1);
 +            this.dirZ = nbttaglist.d(2);
-+            // CraftBukkit end
++        } else if (nbttagcompound.hasKeyOfType("direction", 9)) { 
+             NBTTagList nbttaglist = nbttagcompound.getList("direction", 6);
+ 
+             this.motX = nbttaglist.d(0);
+             this.motY = nbttaglist.d(1);
+             this.motZ = nbttaglist.d(2);
++        // CraftBukkit end
          } else {
              this.die();
          }
-@@ -221,6 +241,11 @@
+@@ -221,6 +248,11 @@
          } else {
              this.ac();
              if (damagesource.getEntity() != null) {
@@ -101,7 +101,7 @@
                  Vec3D vec3d = damagesource.getEntity().ap();
  
                  if (vec3d != null) {
-@@ -234,6 +259,7 @@
+@@ -234,6 +266,7 @@
  
                  if (damagesource.getEntity() instanceof EntityLiving) {
                      this.shooter = (EntityLiving) damagesource.getEntity();