Current progress (still awful code, dont read it)