a long time didnt commit, already finished basic functions