Looking at the simpleplayer code in kittyhawk, it appears that the following occurs: Create a player call OpenURL() which calls DoURLOpen() which calls SetSingleURLPresentation(pCHXURL) SetSingleURLPresentation() creates a group if defined(HELIX_FEATURE_GROUPMGR), which creates a CHXHeader containing 'url'=>the actual url we want to open, and then adds the header to the group via AddTrack() and then adds the group to the HXPlayer::m_pGroupManager via AddGroup(). and then sets the current group of the m_pGroupManager to be 0 (since we've only added a single track). if HELIX_FEATURE_GROUPMGR isnt defined, a SourceInfo object is created, the url to be opened is stored into m_pURL and HXPlayer::AddURL(source_object,true) gets called. AddURL calls CreateSourceInfo() and passes the SourceInfo object, which determines if the url is a network url and calls InitializeNetworkDrivers(); followed by DoNetworkOpen() passing the SourceInfo object. DoNetworkOpen() creates a new HXNetSource, sets the new sources SourceInfo to the source info we were passed, if it supports prefetching begins that after doing some funkey stuff with the url string, and finally calls Setup()on the HXNetSource object passing the port, url, host etc... Initially i thought a HXPlayer was used to manage the streaming of a single URL (which might contain multiple streams), as indicated through the association of a single url with the player object, and a map of streams (each with an associated stream number) but from the above use of groups and tracks it appears that a 'track' in a 'group' has this function. Is there documentation/definitions available for what a 'group' 'presentation' and 'player' are, as i dont quite follow their relationships? How is it that the HELIX_FEATURE_GROUPMGR definition modifies the behaviour of the client? AAArgh. Finally discovered that groups only seem to be releveant for SMIL streams.