Finish all requirements. Need to refine!