Refactored controller reader to not mutate in place, use saner interface