merge from master upstream.