More refactoring. Only read from NSUserDefaults once, and when there is something to read