merge upstream from LeMaker