public void step() {
		Color [][] nextCellGrid = new Color[rows][rows];   // stores grid of next generation of cells
		
		for(int row = 0; row < rows; row++) {
			for(int column = 0; column < rows; column++) {
				int neighbors = getNeighbors(row,column);
				
				if((neighbors <= 1 || neighbors >= 4) && isAlive(row,column) == 1) {
					nextCellGrid[row][column] = Color.GRAY;	
				} 
				else if(neighbors == 3 && isAlive(row,column) == 0) {
					nextCellGrid[row][column] = getMajorityColor(row,column);
				} 
				else {
					nextCellGrid[row][column] = cellGrid[row][column];
				}				
			}
		}
				
		// Only notify observers if the new cell grid isn't the same as the previous one
		if(!gridsEqual(cellGrid, nextCellGrid)) {
			cellGrid = nextCellGrid;
			notifyObservers();
		}
	}