Support snapshot windows

Well no reason you didn't look at it Mark - I never created the PR. Apologies.

(when I say, a series of functions, I mean a series of calls where the data dependencies are passed as arguments so it is clear what is dependent on what)