abstraction - not finish