public void draw(Graphics g, Component comp, int offsetX, int offsetY) {

        if (stale) {
            updateComp();
            updateImage();
        }
        
        
        Rectangle bounds = world.getBounds();
        
        if (screen == null 
                || screen.getWidth() != comp.getWidth() 
                || screen.getHeight() != comp.getHeight()) {
            screen = new BufferedImage(
                    comp.getWidth(), 
                    comp.getHeight(), 
                    BufferedImage.TYPE_4BYTE_ABGR);
            gScreen = screen.createGraphics();
        }

        
        //black out the background
        gScreen.setPaint(Color.black);
        gScreen.fillRect(0, 0, screen.getWidth(), screen.getHeight());
        //draw bg that covers screen
        gScreen.drawImage(finComp, 
                bounds.x - offsetX, 
                bounds.y - bounds.height + offsetY + comp.getHeight(),
                null);

        
        mergeDynProps(offsetX, offsetY);

        
        g.drawImage(screen, 
                0, 
                0,
                null);

        
    }