diff --git a/src/main/java/net/minecraft/server/BlockDaylightDetector.java b/src/main/java/net/minecraft/server/BlockDaylightDetector.java
index 84e93f4153..fc31262eba 100644
--- a/src/main/java/net/minecraft/server/BlockDaylightDetector.java
+++ b/src/main/java/net/minecraft/server/BlockDaylightDetector.java
@@ -48,6 +48,7 @@ public class BlockDaylightDetector extends BlockContainer {
             }
 
             if (l != i1) {
+                i1 = org.bukkit.craftbukkit.event.CraftEventFactory.callRedstoneChange(world, i, j, k, l, i1).getNewCurrent(); // CraftBukkit - Call BlockRedstoneEvent
                 world.setData(i, j, k, i1, 3);
             }
         }
diff --git a/src/main/java/net/minecraft/server/TileEntityChest.java b/src/main/java/net/minecraft/server/TileEntityChest.java
index b179ddf2af..e529bf47f4 100644
--- a/src/main/java/net/minecraft/server/TileEntityChest.java
+++ b/src/main/java/net/minecraft/server/TileEntityChest.java
@@ -339,18 +339,44 @@ public class TileEntityChest extends TileEntity implements IInventory {
             this.h = 0;
         }
 
+        int oldPower = Math.max(0, Math.min(15, this.h)); // CraftBukkit - Get power before new viewer is added
+
         ++this.h;
         if (this.world == null) return; // CraftBukkit
         this.world.playNote(this.x, this.y, this.z, this.q().id, 1, this.h);
+
+        // CraftBukkit start - Call redstone event
+        if (this.q().id == Block.TRAPPED_CHEST.id) {
+            int newPower = Math.max(0, Math.min(15, this.h));
+
+            if (oldPower != newPower) {
+                org.bukkit.craftbukkit.event.CraftEventFactory.callRedstoneChange(world, this.x, this.y, this.z, oldPower, newPower);
+            }
+        }
+        // CraftBukkit end
+
         this.world.applyPhysics(this.x, this.y, this.z, this.q().id);
         this.world.applyPhysics(this.x, this.y - 1, this.z, this.q().id);
     }
 
     public void g() {
         if (this.q() != null && this.q() instanceof BlockChest) {
+            int oldPower = Math.max(0, Math.min(15, this.h)); // CraftBukkit - Get power before new viewer is added
+
             --this.h;
             if (this.world == null) return; // CraftBukkit
             this.world.playNote(this.x, this.y, this.z, this.q().id, 1, this.h);
+
+            // CraftBukkit start - Call redstone event
+            if (this.q().id == Block.TRAPPED_CHEST.id) {
+                int newPower = Math.max(0, Math.min(15, this.h));
+
+                if (oldPower != newPower) {
+                    org.bukkit.craftbukkit.event.CraftEventFactory.callRedstoneChange(world, this.x, this.y, this.z, oldPower, newPower);
+                }
+            }
+            // CraftBukkit end
+
             this.world.applyPhysics(this.x, this.y, this.z, this.q().id);
             this.world.applyPhysics(this.x, this.y - 1, this.z, this.q().id);
         }