almost done, few changes :D