refactor to allow more code sharing between live and offline models
unify more behavior between live/delayed models