private InitialCondition makeInitialCondition(Parameters p) {
		if (p.getIC().equals("ProducerCheater")) {
			// One cheater in a 5x5 block of cooperators, with the rest
			// of the space empty
			return new ProducerCheater(p);
			
		} else if (p.getIC().equals("ProducerCheaterClump")) {
			// A 3x3 block of cheaters inside of a 9x9 block of cooperators.
			// Hence, a total of 9 cheaters and 72 cooperators. The rest
			// of the space is empty.
			return new ProducerCheaterClump(p);
			
		} else if (p.getIC().equals("TwoCities")) {
			// A single cheater on one side and a cooperator on the other, 
			// placed as far apart as possible on a horizontal line.
			return new TwoCities(p);
			
		} else if (p.getIC().equals("WellMixed")) {
			// A space-filling population consisting of cooperators and
			// cheaters in user-specified proportions.
			return new WellMixed(p);
			
		} else if (p.getIC().equals("SingleInvader")) {
			// Actually just a special case of "WellMixed," except the
			// invader is at the center of the simulation for convenience
			return new SingleProducer(p);
			
		} else if (p.getIC().equals("CheaterDisc")) {
			// A disc of cheaters with specified radius in a field of producers.
			return new CheaterDisc(p);
			
		} else if (p.getIC().equals("ProducerDisc")) {
			// A disc of producers with specified radius in a field of cheaters.
			return new ProducerDisc(p);
			
		} else if (p.getIC().equals("TwoDomains")) {
			// A disc of producers with specified radius in a field of cheaters.
			return new TwoDomains(p);
			
		} else
			throw new IllegalArgumentException("Unrecognized IC " + p.getIC());
	}