public void repaint(Graphics g, int x, int y) {
		painted.set(true);
		Graphics2D g2d = (Graphics2D) g;
		Composite previousComposite = g2d.getComposite();

		int i = 0;
		long timeBetween = System.currentTimeMillis() - lastLoop;

		final Iterator<LogEntry> iterator = logEntries.iterator();
		while (iterator.hasNext()) {
			final LogEntry logEntry = iterator.next();
			if (logEntry.alpha <= 0.0f) {
				iterator.remove();
				continue;
			}

			y += 15;

			g.setColor(Color.BLACK);
			g2d.setComposite(AlphaComposite.SrcOver.derive(logEntry.alpha));
			String message = df.format(logEntry.timeSent) + " | " + logEntry.text;
			g.drawString(message, x + 1, y + 1);
			g.setColor(logEntry.color);
			g.drawString(message, x, y);

			if (i > capacity - 1 || System.currentTimeMillis() - logEntry.timeSent > MAX_LIFETIME) {
				logEntry.alpha -= timeBetween * 0.0005;
			}
			i++;
		}

		g2d.setComposite(previousComposite);

		lastLoop = System.currentTimeMillis();
	}