     {
       for(uint8_t row=0, mask=1; row<8; row++, mask <<= 1) 
       {
-        if((grid[col][layer_index][playing_grid_set] & mask) && (!(grid[(col + 1) % grid_width[playing_grid_set]][layer_index][playing_grid_set] & mask) || ((col == (grid_width[playing_grid_set] - 1)) && (playing_grid_set != visible_grid_set))))
+        uint8_t this_grid_width = grid_width[playing_grid_set];
+        uint8_t this_note = grid[col                        ][layer_index][playing_grid_set] & mask;
+        uint8_t next_note = grid[(col + 1) % this_grid_width][layer_index][playing_grid_set] & mask;
+        uint8_t about_to_switch_grids = ((col == (grid_width[playing_grid_set] - 1)) && (playing_grid_set != visible_grid_set));
+        if(this_note && (!long_notes[layer_index] || (!next_note || about_to_switch_grids)))
         {
           uint8_t temp = channels[layer_index];
           uint8_t note = row + noteOffset[layer_index][playing_grid_set];

                temp = GRID_WIDTH;
              }
              grid_width[visible_grid_set] = temp;

              // adjust encoder ranges to match
              if (layer != LAYERS -1 )
              {


  if((t - prevBeatTime) >= beatInterval) // Next beat?
  {
    // don't draw the progress bar on the performance layer
    if (layer != LAYERS - 1)
    {
      // Turn off old column
