Index: test/src/net/sf/freecol/common/model/BuildingTest.java
===================================================================
--- test/src/net/sf/freecol/common/model/BuildingTest.java	(revision 10401)
+++ test/src/net/sf/freecol/common/model/BuildingTest.java	(working copy)
@@ -30,6 +30,7 @@
 
 import net.sf.freecol.common.model.Modifier;
 import net.sf.freecol.server.model.ServerBuilding;
+import net.sf.freecol.server.model.ServerUnit;
 import net.sf.freecol.util.test.FreeColTestCase;
 
 
@@ -134,6 +135,47 @@
 
     }
 
+    public void testStockadeRequiresMinimumPopulation() {
+        Game game = getGame();
+        game.setMap(getTestMap(true));
+        Colony colony = getStandardColony(2);
+        assertEquals(Colony.NoBuildReason.POPULATION_TOO_SMALL, colony.getNoBuildReason(stockadeType));
+        
+        Unit colonist = new ServerUnit(game, colony.getTile(), colony.getOwner(), freeColonistType);
+        colonist.setLocation(colony);
+
+        assertEquals(Colony.NoBuildReason.NONE, colony.getNoBuildReason(stockadeType));
+    }
+
+    public void testFortRequiresMinimumPopulation() {
+        Game game = getGame();
+        game.setMap(getTestMap(true));
+        Colony colony = getStandardColony(2);
+        assertEquals(Colony.NoBuildReason.POPULATION_TOO_SMALL, colony.getNoBuildReason(fortType));
+        
+        Unit colonist = new ServerUnit(game, colony.getTile(), colony.getOwner(), freeColonistType);
+        colonist.setLocation(colony);
+
+        colony.addBuilding(new ServerBuilding(game, colony, stockadeType));
+        assertEquals(Colony.NoBuildReason.NONE, colony.getNoBuildReason(fortType));
+    }
+        
+    public void testFortressRequiresMinimumPopulation() {
+        Game game = getGame();
+        game.setMap(getTestMap(true));
+
+        Colony colony = getStandardColony(7);
+        colony.addBuilding(new ServerBuilding(game, colony, stockadeType));
+        colony.addBuilding(new ServerBuilding(game, colony, fortType));
+        assertEquals(Colony.NoBuildReason.POPULATION_TOO_SMALL, colony.getNoBuildReason(fortressType));
+
+        Unit colonist = new ServerUnit(game, colony.getTile(), colony.getOwner(), freeColonistType);
+        colonist.setLocation(colony);
+
+        assertEquals(8, colony.getUnitCount());
+        assertEquals(Colony.NoBuildReason.NONE, colony.getNoBuildReason(fortressType));
+    }
+        
     public void testInitialColony() {
         Game game = getGame();
         game.setMap(getTestMap(true));
Index: data/rules/classic/specification.xml
===================================================================
--- data/rules/classic/specification.xml	(revision 10401)
+++ data/rules/classic/specification.xml	(working copy)
@@ -1355,7 +1355,8 @@
       <ability id="model.ability.bombardShips" value="true"/>
     </building-type>
     <building-type id="model.building.fortress" extends="model.building.fort"
-                   upgradesFrom="model.building.fort" upkeep="15">
+                   upgradesFrom="model.building.fort" upkeep="15"
+                   required-population = "8">
       <required-goods id="model.goods.hammers" value="320"/>
       <required-goods id="model.goods.tools" value="200"/>
       <modifier id="model.modifier.defence" delete="true" />
