The performance of cooperative communications is highly dependent on careful resource allocation such as relay selection. Considering individual QoS requirements in a multi user system, traditional cross-layer relay selection schemes, failed to achieve an acceptable level of fairness considering limited buffer capacity of relays. To address this problem, in this paper, we propose a buffer management-based best relay selection algorithm considering both physical and MAC layer parameters. Our simulation results show that the proposed algorithm outperforms traditional ones significantly in terms of fairness, system spectrum efficiency, and average transmission time delay. Moreover, the proposed algorithm can be implemented in a distributed fashion with no need to a central processor and with minimum required signaling among the nodes.