synced to mercurial changeset 48