You shouldn't shuffle here.  It actually defeats the point of the circular list, which is that you never get repeats until you cycle back to the beginning.  Shuffling and then choosing is the same as choosing randomly, in which case we might as well just pick a random index in an array.  It's important not to get duplicates though, so we need something to prevent this.  I think the right answer is to only shuffle during initialize(), i.e. set a random ordering for the duration of that application and then stick to it.