use Future.unit
better names for individual loop methods
allow the decoder to be extended