              }
          }
          if(getSavedLightValue(enumskyblock, i, j, k) != l)
-@@ -1408,7 +1413,10 @@
+@@ -1169,7 +1174,7 @@
+                 Chunk chunk = getChunkFromChunkCoords(tileentity.xCoord >> 4, tileentity.zCoord >> 4);
+                 if(chunk != null)
+                 {
+-                    chunk.removeChunkBlockTileEntity(tileentity.xCoord & 0xf, tileentity.yCoord, tileentity.zCoord & 0xf);
++                    chunk.cleanChunkBlockTileEntity(tileentity.xCoord & 0xf, tileentity.yCoord, tileentity.zCoord & 0xf);
+                 }
+             }
+         } while(true);
+@@ -1190,12 +1195,13 @@
+                     {
+                         loadedTileEntityList.add(tileentity1);
+                     }
++                    markBlockNeedsUpdate(tileentity1.xCoord, tileentity1.yCoord, tileentity1.zCoord);
++		} else {
+                     Chunk chunk1 = getChunkFromChunkCoords(tileentity1.xCoord >> 4, tileentity1.zCoord >> 4);
+                     if(chunk1 != null)
+                     {
+-                        chunk1.setChunkBlockTileEntity(tileentity1.xCoord & 0xf, tileentity1.yCoord, tileentity1.zCoord & 0xf, tileentity1);
++                        chunk1.cleanChunkBlockTileEntity(tileentity1.xCoord & 0xf, tileentity1.yCoord, tileentity1.zCoord & 0xf);
+                     }
+-                    markBlockNeedsUpdate(tileentity1.xCoord, tileentity1.yCoord, tileentity1.zCoord);
+                 }
+             } while(true);
+             field_20912_E.clear();
+@@ -1204,13 +1210,19 @@
+ 
+     public void addTileEntity(Collection collection)
+     {
+-        if(scanningTileEntities)
+-        {
+-            field_20912_E.addAll(collection);
+-        } else
+-        {
+-            loadedTileEntityList.addAll(collection);
+-        }
++	List dest=scanningTileEntities ? field_20912_E :
++		loadedTileEntityList;
++	for(Object ob : collection) {
++		TileEntity te=(TileEntity)ob;
++		if(te.canUpdate()) dest.add(te);
++	}
++    }
++
++    /* FORGE: Used as a bugfix */
++    public void addTileEntity(TileEntity te) {
++	List dest=scanningTileEntities ? field_20912_E :
++		loadedTileEntityList;
++	if(te.canUpdate()) dest.add(te);
+     }
+ 
+     public void updateEntity(Entity entity)
+@@ -1408,7 +1420,10 @@
                          if(j2 == Block.fire.blockID || j2 == Block.lavaMoving.blockID || j2 == Block.lavaStill.blockID)
                          {
                              return true;

                 {
                     world.setBlockWithNotify(i, j, k, 0);
diff -u -r --strip-trailing-cr ../src_base/minecraft_server/net/minecraft/src/ItemInWorldManager.java ../src_work/minecraft_server/net/minecraft/src/ItemInWorldManager.java
--- ../src_base/minecraft_server/net/minecraft/src/ItemInWorldManager.java	2011-09-07 21:52:25.706672000 +0200
+++ ../src_work/minecraft_server/net/minecraft/src/ItemInWorldManager.java	2011-09-07 21:53:05.827967500 +0200
@@ -3,6 +3,7 @@
 // Decompiler options: packimports(3) braces deadcode 
 

             {
                 mc.sndManager.playSound(block.stepSound.func_1145_d(), (float)i + 0.5F, (float)j + 0.5F, (float)k + 0.5F, (block.stepSound.getVolume() + 1.0F) / 8F, block.stepSound.getPitch() * 0.5F);
diff -u -r --strip-trailing-cr ../src_base/minecraft/net/minecraft/src/RenderBlocks.java ../src_work/minecraft/net/minecraft/src/RenderBlocks.java
--- ../src_base/minecraft/net/minecraft/src/RenderBlocks.java	2011-09-08 13:52:46.000000000 -0400
+++ ../src_work/minecraft/net/minecraft/src/RenderBlocks.java	2011-09-08 13:52:48.000000000 -0400
@@ -2171,7 +2171,7 @@
             colorBlueTopRight *= f27;
             int i1 = block.getBlockTexture(blockAccess, i, j, k, 2);
