A method of clustering nodes in a telecommunications system, comprising a plurality of nodes, each of the nodes being configured to communicate with a user equipment, the method comprising: determining a cooperation utility function for each of the plurality of nodes, the cooperation utility function comprising a measure indicative of a capability of the respective node to cooperate with another node in providing communications with the user equipment; forming a cooperation graph of the plurality of nodes comprising information of the cooperating utility function of each of the nodes; calculating a Fiedler vector and a measure of the algebraic connectivity of the cooperation graph by applying a power iteration technique; and forming the nodes into a plurality of clusters on the basis of the calculated Fiedler vector and algebraic connectivity, wherein the power iteration technique comprises the steps of: calculating a consensus matrix derived from the cooperation graph; initialising two variables, x and y, for each node to initial values, wherein x represents the Fiedler vector element for the node and y represents the algebraic connectivity for the node; performing a consensus averaging on the values of x using an average squared disagreement for the values of x among the nodes; and deriving updated values for x and y at each node using the results of the consensus averaging; wherein the step of performing the consensus averaging comprises each node determining its average squared disagreement between its state and the states of its neighbours, e i 2 k, of the form: e i 2 k = ∑ j ∈ N i x i k − x j k 2 where k denotes the index of a current iteration of the consensus averaging, i is the index of the considered node and j is the index of the neighbouring node of the node i in the cooperation graph; and N (i) is the set of neighbours of node i in the cooperation graph. determining a cooperation utility function for each of the plurality of nodes, the cooperation utility function comprising a measure indicative of a capability of the respective node to cooperate with another node in providing communications with the user equipment; forming a cooperation graph of the plurality of nodes comprising information of the cooperating utility function of each of the nodes; calculating a Fiedler vector and a measure of the algebraic connectivity of the cooperation graph by applying a power iteration technique; and forming the nodes into a plurality of clusters on the basis of the calculated Fiedler vector and algebraic connectivity, wherein calculating a consensus matrix derived from the cooperation graph; initialising two variables, x and y, for each node to initial values, wherein x represents the Fiedler vector element for the node and y represents the algebraic connectivity for the node; performing a consensus averaging on the values of x using an average squared disagreement for the values of x among the nodes; and deriving updated values for x and y at each node using the results of the consensus averaging; wherein the step of performing the consensus averaging comprises each node determining its average squared disagreement between its state and the states of its neighbours, e i 2 k, of the form: e i 2 k = ∑ j ∈ N i x i k − x j k 2 where k denotes the index of a current iteration of the consensus averaging, i is the index of the considered node and j is the index of the neighbouring node of the node i in the cooperation graph; and N (i) is the set of neighbours of node i in the cooperation graph. where k denotes the index of a current iteration of the consensus averaging, i is the index of the considered node and j is the index of the neighbouring node of the node i in the cooperation graph; and N (i) is the set of neighbours of node i in the cooperation graph.