diff --git a/src/main/java/net/minecraft/server/TileEntityCommand.java b/src/main/java/net/minecraft/server/TileEntityCommand.java
index 9967524d56..43e03e5e50 100644
--- a/src/main/java/net/minecraft/server/TileEntityCommand.java
+++ b/src/main/java/net/minecraft/server/TileEntityCommand.java
@@ -9,7 +9,7 @@ import com.google.common.base.Joiner;
 public class TileEntityCommand extends TileEntity implements ICommandListener {
 
     private int a = 0;
-    private String b = "";
+    public String b = ""; // CraftBukkit - private -> public
     private String c = "@";
     // CraftBukkit start
     private final org.bukkit.command.BlockCommandSender sender;
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
index 90dae627d7..ecd08eb6f8 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
@@ -261,6 +261,8 @@ public class CraftBlock implements Block {
             return new CraftBrewingStand(this);
         case SKULL:
             return new CraftSkull(this);
+        case COMMAND:
+            return new CraftCommandBlock(this);
         default:
             return new CraftBlockState(this);
         }
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java
new file mode 100644
index 0000000000..4572438d69
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java
@@ -0,0 +1,48 @@
+package org.bukkit.craftbukkit.block;
+
+import net.minecraft.server.TileEntityCommand;
+import org.bukkit.block.Block;
+import org.bukkit.block.CommandBlock;
+import org.bukkit.craftbukkit.CraftWorld;
+
+public class CraftCommandBlock extends CraftBlockState implements CommandBlock {
+    private final TileEntityCommand commandBlock;
+    private String command;
+    private String name;
+
+    public CraftCommandBlock(Block block) {
+        super(block);
+
+        CraftWorld world = (CraftWorld) block.getWorld();
+        commandBlock = (TileEntityCommand) world.getTileEntityAt(getX(), getY(), getZ());
+        command = commandBlock.b;
+        name = commandBlock.getName();
+    }
+
+    public String getCommand() {
+        return command;
+    }
+
+    public void setCommand(String command) {
+        this.command = command != null ? command : "";
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name != null ? name : "@";
+    }
+
+    public boolean update(boolean forced) {
+        boolean result = super.update(forced);
+
+        if (result) {
+            commandBlock.b(command);
+            commandBlock.c(name);
+        }
+
+        return result;
+    }
+}