1. Dropped the use of std::function in order to minimize heap allocs