Draft for now since this is based on top of !21588 (merged) so some of its commits are showing up in here.