diff --git a/CraftBukkit-Patches/0070-Nerf-Zombie-Lag-Issues.patch b/CraftBukkit-Patches/0070-Nerf-Zombie-Lag-Issues.patch
new file mode 100644
index 0000000000..b9ff9599b3
--- /dev/null
+++ b/CraftBukkit-Patches/0070-Nerf-Zombie-Lag-Issues.patch
@@ -0,0 +1,106 @@
+From 1d2d7a8171ed042710cb3fa421cb38d85b1b02f7 Mon Sep 17 00:00:00 2001
+From: Dylan Xaldin <Puremin0rez515@gmail.com>
+Date: Sat, 14 Sep 2013 11:02:34 +1000
+Subject: [PATCH] Nerf Zombie Lag Issues
+
+Nerf the Zombie Lag issues in MC 1.6 - "Fixes" MC-17630
+
+diff --git a/src/main/java/net/minecraft/server/PathfinderGoalMeleeAttack.java b/src/main/java/net/minecraft/server/PathfinderGoalMeleeAttack.java
+index afd726f..faa46e0 100644
+--- a/src/main/java/net/minecraft/server/PathfinderGoalMeleeAttack.java
++++ b/src/main/java/net/minecraft/server/PathfinderGoalMeleeAttack.java
+@@ -63,19 +63,88 @@ public class PathfinderGoalMeleeAttack extends PathfinderGoal {
+         this.b.getNavigation().h();
+     }
+ 
++    // Spigot start
++    private double pathX;
++    private double pathY;
++    private double pathZ;
++    private boolean prevPathOK;
++    private int fullRangeSearchDelay;
++    // Spigot end
+     public void e() {
+         EntityLiving entityliving = this.b.getGoalTarget();
+ 
+         this.b.getControllerLook().a(entityliving, 30.0F, 30.0F);
++        double goalDistanceSq = this.b.e( entityliving.locX, entityliving.boundingBox.b, entityliving.locZ ); // Spigot
+         if ((this.e || this.b.getEntitySenses().canSee(entityliving)) && --this.h <= 0) {
+-            this.h = 4 + this.b.aC().nextInt(7);
+-            this.b.getNavigation().a((Entity) entityliving, this.d);
++            // Spigot start
++            double targetMovement = entityliving.e( pathX, pathY, pathZ );
++            // If this is true, then we are re-pathing
++            if ( ( this.h <= 0 && targetMovement >= 1.0D ) || ( this.h <= 0 && this.b.aC().nextInt( 200 ) == 0 ) ) /* EntityCreature random instance */
++
++            {
++                AttributeInstance rangeAttr = this.b.getAttributeInstance( GenericAttributes.b );
++                double origRange = rangeAttr.getValue();
++                if ( fullRangeSearchDelay > 0 )
++                {
++
++                    double dist = Math.sqrt( goalDistanceSq );
++                    if ( dist <= 8.0D )
++                    {
++                        dist = 8.0D;
++                    }
++                    if ( dist > origRange )
++                    {
++                        dist = origRange;
++                    }
++                    rangeAttr.setValue( dist );
++                }
++
++                prevPathOK = this.b.getNavigation().a( (Entity) entityliving, this.d );
++
++                if ( fullRangeSearchDelay > 0 )
++                {
++                    fullRangeSearchDelay--;
++                    if ( origRange > 40.0D )
++                    {
++                        origRange = 40.0D;
++                    }
++                    rangeAttr.setValue( origRange );
++                }
++
++                pathX = entityliving.locX;
++                pathY = entityliving.boundingBox.b;
++                pathZ = entityliving.locZ;
++                this.h = 4 + this.b.aC().nextInt( 7 ); /* EntityCreature random instance */
++
++                if ( goalDistanceSq > 256.0D )
++                {
++                    if ( goalDistanceSq > 1024.0D )
++                    {
++                        this.h += 8;
++                    } else
++                    {
++                        this.h += 16;
++                    }
++                } else if ( !prevPathOK )
++                {
++                    this.h += 24;
++                }
++
++                if ( !prevPathOK || goalDistanceSq <= 256.0D )
++                {
++                    if ( fullRangeSearchDelay <= 0 )
++                    {
++                        fullRangeSearchDelay = 4 + this.b.aC().nextInt( 4 ); /* EntityCreature random instance */
++                    }
++                }
++            }
+         }
++        // Spigot end
+ 
+         this.c = Math.max(this.c - 1, 0);
+         double d0 = (double) (this.b.width * 2.0F * this.b.width * 2.0F + entityliving.width);
+ 
+-        if (this.b.e(entityliving.locX, entityliving.boundingBox.b, entityliving.locZ) <= d0) {
++        if (goalDistanceSq <= d0) { // Spigot
+             if (this.c <= 0) {
+                 this.c = 20;
+                 if (this.b.aY() != null) {
+-- 
+1.8.1.2
+