Bug 2820 - squashed changes from master.