This reader model is pretty much along these lines. The PressForward implementation is really interesting too.