Done! Memory management needs work but everything else should work.