public static BufferedImage drawBG(EyeTrack owner) {

		Experiment exp = owner.getGameState().getSettings().getExperiment();
		
		double fullWidth = owner.getSize().getWidth();
		double fullHeight = owner.getSize().getHeight();
		double w = exp.getPixelWidth();
		double h = exp.getPixelHeight();
		double insetX = 0.5*( fullWidth - w );
		double insetY = 0.5*( fullHeight - h );
		double gW = w / exp.getGridXSize();
		double gH = h / exp.getGridYSize();

		// Background image is owner's width x height in total dimension
		BufferedImage bgImage = (BufferedImage) owner.createImage((int) fullWidth, (int) fullHeight);

		Graphics2D g = bgImage.createGraphics();

		// Potentially draw the background images, if they exist
		if(exp.getUsesBGImages()) {
			
			int bgIdx=0;
			List<ImageIcon> bgImages = owner.getGameState().getBackgroundImages();
			for( int xIdx=0; xIdx<exp.getGridXSize(); xIdx++) {
				for( int yIdx=0; yIdx<exp.getGridYSize(); yIdx++) {
					
					// Draw the scaled image at top left point = <xPixel, yPixel>
					int xPixel = Math.round((float) (insetX + xIdx * gW));
					int yPixel = Math.round((float) (insetY + yIdx * gH));
		
					// Grab the next image in our list of loaded images
					Image img = bgImages.get(bgIdx).getImage();
					Image scaledImg = ResourceLoader.getInstance().createScaledImage(img, (int) gW, (int) gH);
					bgIdx = (bgIdx + 1) % bgImages.size();
					
					System.out.println("Drawing image at " + xPixel + ", " + yPixel);
					g.drawImage(scaledImg, xPixel, yPixel, null);
					
					// Draw the image scaled to fit the whole grid block
					//g.drawImage(img,
					//		xPixel, yPixel, (int) (xPixel+gW), (int) (yPixel+gH),
					//		0, 0, img.getScaledInstance(width, height, hints))
				}
			}
		}
		
		
		// Draw the grid itself
		for( int xIdx=0; xIdx<exp.getGridXSize(); xIdx++) {
			double xInterp = xIdx * gW;
			int xPixel = Math.round((float) (insetX + xInterp));
			g.drawLine(xPixel, (int) insetY, xPixel, (int) (fullHeight-insetY));
		}
		// Very right-most line
		g.drawLine((int) (insetX + w - 1), (int) insetY, (int) (insetX + w - 1), (int) (fullHeight-insetY));
		
		for( int yIdx=0; yIdx<exp.getGridYSize(); yIdx++) {
			double yInterp = yIdx * gH;
			int yPixel = Math.round((float) (insetY + yInterp));
			g.drawLine((int) insetX, yPixel, (int) (fullWidth-insetX), yPixel);
		}
		// Very bottom line
		g.drawLine((int) insetX, (int) (insetY + h - 1), (int) (fullWidth-insetX), (int) (insetY + h - 1));
		
		
		// Output the graphics object to an actual image and return
		g.drawImage(bgImage, null, 0, 0);	
		return bgImage;
	}