+ update (sync with upstream)