     // pull the next dialog
     return dialogQueue.dequeue();
   }else{
-    // queue is empty so reset it and pull the first
-    // random dialog
-    int numDialog = sizeof(dialogArray) / sizeof(int);
-    shuffleTrackArray( dialogArray, numDialog );
-    
-    for (int i = 0; i < numDialog; i++){
+    randomSeed(micros() +  ss.read());
+  
+    for (int i=0; i<numDialog; i++){
+      int pos = random(numDialog);
+      int t = dialogArray[i];   
+      dialogArray[i] = dialogArray[pos];
+      dialogArray[pos] = t;
+    }
+
+    for (int i=0; i<numDialog; i++){
       dialogQueue.enqueue(dialogArray[i]);
     }
 

const String listenTrack =    "T12     WAV";
const String goodTrack =      "T13     WAV";
const String thatTrack =      "T14     WAV";
const String neverTrack =     "T15     WAV";
const String hardTrack =      "T16     WAV";
const String neutronizedTrack="T17     WAV";
const String boxTrack =       "T18     WAV";
const String themeTrack =     "T19     OGG";

            if (playing == 1 || shouldWarn == false ) {
              shouldWarn = true;
              playTrack(warnTrack); // play the firing track with the warning
            }
            setWandLightState(0, 8, currentMillis);    // set top light red flashing
          } else if ( diff > dialogWaitTime) { // if we are in the dialog playing interval
            pwr_interval = 30;    // speed up the powercell animation
            firing_interval = 30; // speed up the bar graph animation
