It's enough, complex stuff to warrant its own source file. No other changes, just splitting out. (cherry picked from commit 269e4d2d) (cherry picked from commit 0a19ff70)
mentioned in commit a4722a8d