The following is a flow-chart of pplayer, where any piece may be substituted (and can be fairly easily) for another of similar functionality, especially the client.