generalize snapshot