This is a revert of a revert; i.e. a reapply just to fix commit message. This reverts commit fbbae8774ca3162245c0d883c9f477f7d92bc8a5.