move around some function calls
track profile
don't cache