finished all functionality requirements