private void draw() {
		try {
			// Get the graphics of either the bufferedImage for non-FSEM or the
			// buffer strategy for FSEM
			drawScreen = (Graphics2D) (runningNonFsem ? nonFSEMBufferedImage.getGraphics() : bufferStrategy.getDrawGraphics());
			// Hand over drawing to our renderUpdateDelator, which will take
			// care of whatever it needs to draw
			renderUpdateDelegator.draw(drawScreen);

			if (runningNonFsem) {
				this.getGraphics().drawImage(nonFSEMBufferedImage, 0, 0, null);
			} else if (!bufferStrategy.contentsLost()) {
				// If the drawing buffer hasn't been lost since the last call
				bufferStrategy.show();
			}

			// fixes AWT event queue problems with linux, which causes speed
			// issues
			Toolkit.getDefaultToolkit().sync();

			// Dispose of screen graphic to clear resources
			drawScreen.dispose();
		} catch (Exception e) {
			logger.error(e, "Crashed within drawing");
			Runtime.getRuntime().exit(0xDEADBEEF);
		}
	}