diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java
index 52f9323e60..3ae2e830d7 100644
--- a/src/main/java/net/minecraft/server/SpawnerCreature.java
+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java
@@ -69,7 +69,7 @@ public final class SpawnerCreature {
                 EnumCreatureType enumcreaturetype = aenumcreaturetype[j1];
 
                 // CraftBukkit start - use per-world spawn limits
-                int limit = 0;
+                int limit = enumcreaturetype.b();
                 switch (enumcreaturetype) {
                     case MONSTER:
                         limit = worldserver.getWorld().getMonsterSpawnLimit();
@@ -80,6 +80,9 @@ public final class SpawnerCreature {
                     case WATER_CREATURE:
                         limit = worldserver.getWorld().getWaterAnimalSpawnLimit();
                         break;
+                    case AMBIENT:
+                        limit = worldserver.getWorld().getAmbientSpawnLimit();
+                        break;
                 }
 
                 if (limit == 0) {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 33bdc1220f..94b2c76086 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -155,6 +155,7 @@ public final class CraftServer implements Server {
     private int monsterSpawn = -1;
     private int animalSpawn = -1;
     private int waterAnimalSpawn = -1;
+    private int ambientSpawn = -1;
     private File container;
     private WarningState warningState = WarningState.DEFAULT;
 
@@ -190,6 +191,7 @@ public final class CraftServer implements Server {
         monsterSpawn = configuration.getInt("spawn-limits.monsters");
         animalSpawn = configuration.getInt("spawn-limits.animals");
         waterAnimalSpawn = configuration.getInt("spawn-limits.water-animals");
+        ambientSpawn = configuration.getInt("spawn-limits.ambient");
         console.autosavePeriod = configuration.getInt("ticks-per.autosave");
         warningState = WarningState.value(configuration.getString("settings.deprecated-verbose"));
 
@@ -526,6 +528,7 @@ public final class CraftServer implements Server {
         monsterSpawn = configuration.getInt("spawn-limits.monsters");
         animalSpawn = configuration.getInt("spawn-limits.animals");
         waterAnimalSpawn = configuration.getInt("spawn-limits.water-animals");
+        ambientSpawn = configuration.getInt("spawn-limits.ambient");
         warningState = WarningState.value(configuration.getString("settings.deprecated-verbose"));
         console.autosavePeriod = configuration.getInt("ticks-per.autosave");
 
@@ -1236,6 +1239,10 @@ public final class CraftServer implements Server {
         return waterAnimalSpawn;
     }
 
+    public int getAmbientSpawnLimit() {
+        return ambientSpawn;
+    }
+
     public boolean isPrimaryThread() {
         return Thread.currentThread().equals(console.primaryThread);
     }
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index 5855b5498c..45091168f4 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -57,6 +57,7 @@ public class CraftWorld implements World {
     private int monsterSpawn = -1;
     private int animalSpawn = -1;
     private int waterAnimalSpawn = -1;
+    private int ambientSpawn = -1;
 
     private static final Random rand = new Random();
 
@@ -1188,6 +1189,19 @@ public class CraftWorld implements World {
         waterAnimalSpawn = limit;
     }
 
+    public int getAmbientSpawnLimit() {
+        if (ambientSpawn < 0) {
+            return server.getAmbientSpawnLimit();
+        }
+
+        return ambientSpawn;
+    }
+
+    public void setAmbientSpawnLimit(int limit) {
+        ambientSpawn = limit;
+    }
+
+
     public void playSound(Location loc, Sound sound, float volume, float pitch) {
         if (loc == null || sound == null) return;
 
diff --git a/src/main/resources/configurations/bukkit.yml b/src/main/resources/configurations/bukkit.yml
index 2f587dd280..5307abe449 100644
--- a/src/main/resources/configurations/bukkit.yml
+++ b/src/main/resources/configurations/bukkit.yml
@@ -28,6 +28,7 @@ spawn-limits:
     monsters: 70
     animals: 15
     water-animals: 5
+    ambient: 15
 ticks-per:
     animal-spawns: 400
     monster-spawns: 1