version final sans abstraction