Make tests more readable
Cleaner way of supporting optional function args
Imporved testing
Ups, the protocol was required