Refactor and add some targeted unit tests. No behavioral change. Change-Id: I153528b8a1709f3756c261cf3eb2acfd5de10f9c