fully working, but I want to fix some things