Why all these different variants if we're only exposing two to the main API?