Basically #168. Need to think about this and how to do it DRY and extensible.
Basically #168.
Need to think about this and how to do it DRY and extensible.