TODO: Reorganize and add detail.