This addresses the #295 user story and many of its tasks.