finshed abstraction