removed more imperative implementations