rest of 3.x -> 2.x changes, seems to work