finalized most of interface