Support writing needed extension types

Are these intentionally left package-private? Can't remember if I already asked this...