add snapshot support