Author: * Selwin Ong Contributors: * Gilang Chandrasa * Grigoriy Beziuk * cltrudeau (https://github.com/cltrudeau)