* @param fontWidth
	 *            the width of the font (size) to print with
	 * @param fontName
	 *            the name of the font you are using
	 */
	public static void print(int xPos, int yPos, String message, int fontWidth,
			String fontName) {

		// If font was not loaded, load the new font
		if (fontListBase == -1 || fontTextureHandle == -1
				|| currentFontName != fontName) {
			if (!buildFont(fontName, 16)) {
				System.out
						.println("KouchKarting.print(): character set has not been created -- see buildFont()");
				return;
			}
		}

		// Calculate the offset created by the list
		int offset = fontListBase;

		// Preserve current GL settings
		GL11.glPushAttrib(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_TEXTURE_BIT
				| GL11.GL_LIGHTING_BIT | GL11.GL_DEPTH_BUFFER_BIT);

		// Turn off lighting
		GL11.glDisable(GL11.GL_LIGHTING);

		// Enable alpha testing, so character background is transparent
		GL11.glEnable(GL11.GL_BLEND);
		GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

		// Select the texture
		GL11.glBindTexture(GL11.GL_TEXTURE_2D, fontTextureHandle);

		// Turn ortho mode (2D) on
		turnOrthoOn();

		// Move the position of drawing to the given coordinates
		GL11.glTranslatef(xPos, yPos, 0);

		// Calculate the scale which ensures the proper character size
		float scale = fontWidth / 16f;

		// Scale the openGL billboard to print the text in the right size
		GL11.glScalef(scale, scale, 0);

		// For each character in the message, draw it
		for (int chr = 0; chr < message.length(); chr++) {
			GL11.glCallList(offset + message.charAt(chr));
			GL11.glTranslatef(fontWidth / scale * 0.8f, 0, 0);
		}

		// Turn ortho mode (2D) back off
		turnOrthoOff();

		// Restore previous settings
		GL11.glPopAttrib();
	}