merge recent changes from upstream