This is getting a little ridiculous with all the duplication. Please refactor it.