The way these are overloaded seems a bit of hack and it makes it a bit hard to understand what's going on.
As far as I can tell there is no alternative, but maybe let's add a big comment next to these functions?