most functionality is finished