Thank you for your indulgence =) I should have also apologized in advance for posting to this mailing list in stead of Mulberry as I suspected that streaming may come up. I did not know about XSLT 3.0 but very glad to hear of it and to know the situation with streaming and grouping. Also grateful to learn of the enahcned efficiency of group-adjacent over group-by.

Try instead:

<xsl:for-each-group select="tokenize($input, '\n')" 
group-adjacent="(position() -1) mod 2000">
I did try "group-adjacent="position() mod 3" but that seems to create a staggered pattern based on when there is a remainder and when there is not as follows:

   <set>
      <row>"Pages","Internal Search Terms (prop2)","Page Views"</row>
      <row>"... give_me_your_intelligender_results_and_if_it_was_right","",1</row>
   </set>
   <set>
      <row>"... predictor_kit-_no_positive_result_this_month%20-","",1</row>
   </set>
   <set>
      <row>"booksearch results.asp","under",2</row>
      <row>"Google Search Results","overly",1422</row>
   </set>
   <set>
      <row>"Google Search Results"," LIVE FISH",3</row>
   </set>

Most grateful for feedback,

Christopher