Initial stab
Improve this a lot more
Fix some stuffs