Couldn't many of these properties be `readonly`?