merge with recent upstream changes