Ported to 3.3.x.