split into shared and functor-specific files