implementation to spec