Rewrite of snapshot logic, still need to integrate into Model, and polish remaining model todos