almost completely decouple fetch and repaint loops