Implement what was diagrammed in #16
Implement what was diagrammed in #16