Feature complete -- Needs cleanup and comments