Mostly Done minus a few TODOs