A method for providing data to a plurality of clients , the method comprising: each of the plurality of clients registers with a video conference server and establishes at least one capability associated with the at least one of the plurality of clients , the capability comprising at least the available data encoding and decoding algorithms of the client, wherein the video conference server and the clients are connected via an internet connection and/or via an intranet connection; receiving , at the video conference server , a plurality of data streams from at least one of the plurality of clients ; analyzing , at the video conference server , at least one capability associated with at least one of the plurality of clients ; choosing , at the video conference server , at least one of the plurality of data streams to send to the at least one of the plurality of clients based on the analyzed at least one capability comprising choosing at least one received stream to be send to each client based on the determined encoding algorithms each client is capable of decoding; and sending , from the video conference server , the chosen at least one of the plurality of data streams to the at least one of the plurality of clients ; the method further comprising periodically re-evaluating each client's encoding and decoding capabilities and dynamically altering what encoding algorithms are requested for video streams for each client, wherein the video conference server maintains a list of which clients are connected and what each client's capabilities are, wherein any changes in the client's capabilities are periodically updated. each of the plurality of clients registers with a video conference server and establishes at least one capability associated with the at least one of the plurality of clients , the capability comprising at least the available data encoding and decoding algorithms of the client, wherein the video conference server and the clients are connected via an internet connection and/or via an intranet connection; receiving , at the video conference server , a plurality of data streams from at least one of the plurality of clients ; analyzing , at the video conference server , at least one capability associated with at least one of the plurality of clients ; choosing , at the video conference server , at least one of the plurality of data streams to send to the at least one of the plurality of clients based on the analyzed at least one capability comprising choosing at least one received stream to be send to each client based on the determined encoding algorithms each client is capable of decoding; and sending , from the video conference server , the chosen at least one of the plurality of data streams to the at least one of the plurality of clients ; the method further comprising periodically re-evaluating each client's encoding and decoding capabilities and dynamically altering what encoding algorithms are requested for video streams for each client, wherein the video conference server maintains a list of which clients are connected and what each client's capabilities are, wherein any changes in the client's capabilities are periodically updated. <EOS>