further abstraction, pre-factoring