 
           case WAIT_FOR_PROGRAM_CHANGE:
             {
-              uint8_t temp = instrument[layer][visible_grid_set];
+              uint8_t temp = instrument[layer];
 
               if (temp >= 64)
               {


              // adjust encoder ranges to match current layer
              eScaleOffset.setValue(noteOffset[layer][visible_grid_set] * 4);              // *4's for encoder detents
              eVolume.setValue(volume[layer][visible_grid_set] * 4);              // *4's for encoder detents

              //save(); // save on layer change, todo too slow, need to do it a byte at a time or at some point that won't hurt performance

              refresh = true;
              break;

      {
        if((grid[col][layer_index][playing_grid_set] & mask) && ((!(grid[(col + grid_width[playing_grid_set] - 1) % grid_width[playing_grid_set]][layer_index][playing_grid_set] & mask)) || (force_first_note == true)))
        {
          uint8_t temp = channels[layer_index];
          usbMIDI.sendNoteOn(pgm_read_byte(&scales[scale_notes[layer_index]][row + noteOffset[layer_index][playing_grid_set]]), 127, temp);
          force_first_note = false; // clear trigger if it was set
        }
      }
