Author: John Patrick Boutilier MSC.