almost finished
keep updating