     {
       for (uint8_t row=0, mask=1; row<8; row++, mask <<= 1) 
       {
-        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 this_grid_width = grid_width[playing_grid_set];
+        uint8_t this_note = grid[col                                                       ][layer_index][playing_grid_set] & mask;
+        uint8_t last_note = grid[(col + grid_width[playing_grid_set] - 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] || (!last_note || force_first_note)))
         {
           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 )
              {

    {
      for(uint8_t row=0, mask=1; row<8; row++, mask <<= 1) 
      {
        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];
