merged latest from upstream