bringing in changes from upstream