cleaned functor 2