If I need to use more than one session, I usually create a small pool of say 5 or so sessions. I add them to a TList descendent stored in a private variable within the main module of the application. You can either use them at random, or, more efficiently, prioritize them. Allocate the first two to GUI queries, and the rest to queries. You can even do a neat trick like pull them from the "available pool" into an "in use pool", then put them back as they are not used anymore. I would definitely connect them all up front, and leave them connected for the duration of the application.