Cleaned up the code a bit, added some TODOs