cleaned new functor