Patches have been contributed by (ordered by the time of the first merged patch): Jingwen Peng Osier Yang