finish abstract and impl