See separate for more details.