revamped Functor hierarchy