private String produceBorders() {
		BufferedImage bordersImage = null;
		if (ioflags.SAVE)
			bordersImage = new BufferedImage(chunksX * MyzoGEN.DIMENSION_X, chunksY * MyzoGEN.DIMENSION_Y, BufferedImage.TYPE_INT_ARGB);
		
		for (Tile tile : MyzoGEN.getOutput().getTilesArray().values()) {
			Point[] surrPoints = Utils.getSurroundingPoints(tile.origin);
			//if (!tile.wall) {
				if (isBorderHeight(tile, surrPoints)) {
					/**byte be = Borders.calcBorderTypeByTileTypeEdges(tile, surrPoints, false);
					byte bc = Borders.calcBorderTypeByTileTypeCorners(tile, surrPoints, false);
					tile.borderHeightEdges = be;
					tile.borderHeightCorners = bc;
					tile.borderHeightType = Tiles.STONE_WALL;**/
					
					Borders.calculateHeightData(tile, surrPoints);
					
					produceWall(tile, surrPoints, bordersImage);
					
					if (ioflags.SAVE) {
						bordersImage.setRGB(tile.origin.x, tile.origin.y, new Color(0, Math.abs(tile.borderFlagTwo), 0, 255).getRGB());
					}
				} 
				
				if (isBorderBiomes(tile, surrPoints)) {
					/**byte be = Borders.calcBorderTypeByTileTypeEdges(tile, surrPoints, true);
					byte bc = Borders.calcBorderTypeByTileTypeCorners(tile, surrPoints, true);
					tile.borderBiomesEdges = be;
					tile.borderBiomesCorners = bc;
					tile.borderBiomesType = getBorderTypeBiomes(tile, surrPoints);**/
					
					Borders.calculateBiomeData(tile, surrPoints);
					
					if (ioflags.SAVE) {
						//System.out.println(tile.borderFlagOne);
						bordersImage.setRGB(tile.origin.x, tile.origin.y, new Color(Math.abs(tile.borderFlagOne), 0, 0, 255).getRGB());
					}
				}
			//}
		}
		
		if (ioflags.SAVE && bordersImage != null) {
			Utils.saveImage(bordersImage, "output/"+name+"/overviews/borders_overview.png");
			if (details) System.out.println("Borders overview produced. It can be found in: output/"+name+"/overviews/");
		}
		
		return "No errors.";
	}