Port updates to 2.x to 3.0

There's been several PRs to `master` since the last PR to `3.0-development`. I think it's a good idea to bring the branches back in sync before they diverge further.