almost every functionality added now, now it just needs fine tuning