@mmn Don't retrieve the entire conversation tree unless the user chooses to. And rather than retrieving parent messages back to the original and then retrieving the entire tree below, retrieve only the first [three|four|five|x] parent levels, and then [x] levels of children below. In most cases the context of a conversation needs only one or two levels. The UI could implement this as collapsible list items, click on the twirly <li> icon to retrieve the previous/next level. Of course, that makes it client dependent rather than baking it into the protocol, and so there's no protection from malclients retrieving everything, all the time.