Passing client in is preferred to extension way. After too many extensions Client class will get disorganized. Another alternative is to add SteamNews etc. objects to SteamClient, so you can do client.SteamNews.Method -- but the overhead doesn't seem worth the ROI