I think this would be the only thing I would request be done before this is merged -- it all looks pretty dandy! Don't need to do any lookup optimization for now, just abstracting this and the exercise log lookup into a static get_or_initialize method.