public Colony build(){

            // player not set, get default
            if(player == null){
                player = game.getPlayer(defaultPlayer);
                if(player == null){
                    throw new IllegalArgumentException("Default Player " + defaultPlayer + " not in game");
                }
            }

            // settlement tile no set, get default
            if(colonyTile == null){
                colonyTile = game.getMap().getTile(5, 8);
                if(colonyTile == null){
                    throw new IllegalArgumentException("Default tile not in game");
                }
            }

            /*
            if(this.name != null){
                for(Colony colony : player.getColonies()){
                    if(colony.getName().equals(this.name)){
                        throw new IllegalArgumentException("Another colony already has the given name");
                    }
                }
            }
            */

            Colony colony = new ServerColony(game, player, name, colonyTile);
            player.addSettlement(colony);
            colony.placeSettlement(true);


            // Add colonists
            int nCol = 0;
            Iterator<UnitType> iter = colonists.keySet().iterator();
            while (iter.hasNext()) {
                UnitType type = iter.next();
                Integer n = colonists.get(type);
                for (int i = 0; i < n; i++) {
                    Unit colonist = new ServerUnit(game, colonyTile, player, type);
                    colonist.setLocation(colony);
                    nCol++;
                }
            }
            // add rest of colonists as simple free colonists
            for (int i = nCol; i < initialColonists; i++) {
                Unit colonist = new ServerUnit(game, colonyTile, player, colonistType);
                colonist.setLocation(colony);
            }

            return colony;
        }