diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index 9731634609..faed7ca779 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -34,33 +34,35 @@ public class WorldServer extends World {
     private final CraftWorld world;
     private final CraftServer server;
 
+    /**
+     * setData
+     * 
+     * @param x
+     * @param y
+     * @param z
+     * @param data (actually a byte!)
+     */
     @Override
-    public boolean d(int i1, int j1, int k1, int l1) {
-        boolean result = super.d(i1, j1, k1, l1);
-        if ((result) && (world != null)) world.updateBlock(i1, j1, k1);
+    public boolean d(int x, int y, int z, int data) {
+        boolean result = super.d(x, y, z, data);
+        if ((result) && (world != null)) world.updateBlock(x, y, z, null, data);
         return result;
     }
 
     @Override
-    public boolean setTypeId(int i, int j, int k, int l) {
-        boolean result = super.setTypeId(i, j, k, l);
-        if ((result) && (world != null)) world.updateBlock(i, j, k);
+    public boolean setTypeId(int x, int y, int z, int type) {
+        boolean result = super.setTypeId(x, y, z, type);
+        if ((result) && (world != null)) world.updateBlock(x, y, z, type, null);
         return result;
     }
 
     @Override
-    public boolean setTypeIdAndData(int i, int j, int k, int l, int i1) {
-        boolean result = super.setTypeIdAndData(i, j, k, l, i1);
-        if ((result) && (world != null)) world.updateBlock(i, j, k);
+    public boolean setTypeIdAndData(int x, int y, int z, int type, int data) {
+        boolean result = super.setTypeIdAndData(x, y, z, type, data);
+        if ((result) && (world != null)) world.updateBlock(x, y, z, type, data);
         return result;
     }
 
-    @Override
-    public void setTileEntity(int i, int j, int k, TileEntity tileentity) {
-        super.setTileEntity(i, j, k, tileentity);
-        if (world != null) world.updateBlock(i, j, k);
-    }
-
     public CraftWorld getWorld() {
         return world;
     }
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index d7d2093cb3..30e91359ca 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -83,20 +83,22 @@ public class CraftWorld implements World {
     }
 
 
-    public Block updateBlock(int x, int y, int z) {
+    public void updateBlock(int x, int y, int z, Integer type, Integer data) {
         BlockCoordinate loc = new BlockCoordinate(x, y, z);
-        CraftBlock block = (CraftBlock)blockCache.get(loc);
-        final int type = world.getTypeId(x, y, z);
-        final byte data = (byte)world.getData(x, y, z);
+        CraftBlock block = (CraftBlock) blockCache.get(loc);
 
         if (block == null) {
-            block = new CraftBlock(this, x, y, z, type, data);
-            blockCache.put(loc, block);
-        } else {
-            block.update();
+            return;
         }
 
-        return block;
+        if (type == null) {
+            type = world.getTypeId(x, y, z);
+        }
+        if (data == null) {
+            data = world.getData(x, y, z);
+        }
+
+        block.update(type, data.byteValue());
     }
 
     public CraftChunk updateChunk(int x, int z) {
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
index efe07ef013..16718f8653 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
@@ -346,9 +346,13 @@ public class CraftBlock implements Block {
         return world.getHandle().p(x, y, z);
     }
 
-    public void update() {
-        type = world.getHandle().getTypeId(x, y, z);
-        data = (byte)world.getHandle().getData(x, y, z);
+    public void update(int type, byte data) {
+        this.type = type;
+        this.data = data;
         light = (byte)world.getHandle().j(x, y, z);
     }
+
+    public void update() {
+        this.update( world.getHandle().getTypeId(x, y, z), (byte)world.getHandle().getData(x, y, z));
+    }
 }