better type safety
snapshot support