uses snapshot