private void renderScene(Scene scene)
    {
        long t = System.currentTimeMillis();
        
        // HINT - always the getGraphics()-Method is called,
        // the background buffer will be cleared automatically
        Graphics2D g = canvas.getGraphics();
        
        // enable anti aliasing
        g.addRenderingHints( ANTIALIAS );
        
        // define the origin
        g.translate(canvas.getWidth() / 2, canvas.getHeight() / 2);
        // translate the scene to the point you have navigated to before
        g.translate(pModel.getViewOffsetX(), pModel.getViewOffsetY());
        // zoom into the scene + invert y-axis
        g.scale(pModel.getZoom(), -pModel.getZoom());
        
        // scale the stroke to ensure its contour has a one pixel width
        g.setStroke(new BasicStroke(1 / (float) pModel.getZoom()));
        
        
        if (grid != null)
        {
            grid.render(g);
        }
        
        
        if (scene.getGround() != null)
        {
            if (scene.getGround() instanceof IDrawable)
            {
                ((IDrawable) scene.getGround()).render(g);
            }
            else
            {
                System.err.println("cannot render " + scene.getGround());
            }
        }
        
        orderedObjects.clear();
        
        for (IDrawable decor : canvas.getDecorSet())
        {
            orderedObjects.add(decor);
        }
        
        for (ObjectProperties obj : scene.getObjects())
        {
            if (obj instanceof IDrawable)
            {
                ((IDrawable) obj).render(g);
            }
            else
            {
                System.err.println("Cannot render object: " + obj);
            }
            
            if (obj instanceof IDecorable)
            {
                orderedObjects.addAll(((IDecorable) obj).getDecorSet());
            }
        }
        
        IDrawable decor;
        
        while (!orderedObjects.isEmpty())
        {
            decor = orderedObjects.poll();
            decor.render(g);
        }
        
        canvas.switchBuffers();
        canvas.repaint();
        
        
        DebugMonitor.getInstance().updateMessage("repaint", "" + (System.currentTimeMillis() - t));
    }