More on public, :internal, and ::private functions

Messy, needs to be cleaned up.