needs testing but done for part 4, time this.