almost finished
bugs, not fix it yet