Thank you Jamie - I'll have a look soon.
Meanwhile, having thought about the issue a little more...
The subreport - is using a hack to always display GH1 based on variable containing.
WhileReadingRecords;
" "
This is how I can always display TYPE (and headings) on every page even though it's a GH.
GH2 is a "true" Group Header in the sense, it triggers every time TYPE changes.
Assuming I have hundreds of SALES transactions, on page one, TYPE displays twice.
But all other pages render correctly since TYPE never changed.
(Simple hack here is to suppress GH2 when RowNumber = 1 !!!)
If PURCHASE kicks in mid-page, again it renders correctly. But if say, page 7, the 1st record is PURCHASE, the "fake" header kicks in (as always) and the GH2 also kicks in since a legitimate TYPE change occurred.
Anyway... I'll have a look at the file!