implemented snapshot