template-ish for the functor?
Resolved all merge conflict