merge from upstream/master - using hub API