Any reason why branch is the middle parameter and not the last parameter so we can make it `nil` by default? I'm not a huge fan of passing nil around as an explicit value.