Assignment 3A

But no comments in the code yet.
Just realized that implementing an interface with callbacks probably
would have made more sense..
Revert "Assignment 3A"

This reverts commit 472b7a576b0c5a979aca3157b2faf59c06fc5487.
Revert "Revert "Assignment 3A""

This reverts commit 51f6ee26cf3898d849d55701ab1e59ce5294945c.