Implementatation following the sequence diagram... sort of