IEEE 802.11 (WiFi) networks are used to provide Internet access anywhere anytime. However, their performance is far below the achievable limits when multiple participants share the same frequency spectrum in an uncoordinated manner. The major reason behind such inefficiency is the lack of practical resource allocation algorithms that adapt well to the current conditions in a wireless network dynamically and select the appropriate transmission parameters such as transmission rates and power levels. Most current practical schemes are rather simplistic and only change a single transmission parameter. For instance, Transmit Power Control (TPC) works at the WiFi PHY layer and commonly assigns a static and rather high power level to all packets. A per-link or packet scheme is expected to provide better performance, but typically increases complexity and requires higher-layer information, such as medium access state from the Medium Access Control (MAC) layer. Therefore, although performance improvements have been shown in theory, these ideas are largely uninvestigated in practice. In this thesis, our main goal is to understand the feasibility and performance impact of a joint and per-link rate and power controller in a real WiFi system. To this end, we first enabled cross-layer communication of transmission power between the WiFi PHY and MAC layers in the Linux mac80211 subsystem. Based on our Atheros WiFi hardware, we also developed the in-kernel monitoring tool ‘RegMon’ that enables understanding and troubleshooting MAC and PHY-layer operations with a finegrained time resolution across different Linux drivers. We designed and implemented a distributed rate and power control algorithm, Minstrel-Blues, which does not rely on signal strength or channel state information, but uses local statistics from periodic sampling of different rate and power combinations. Essentially, Minstrel-Blues can run on any WiFi hardware that supports packet-level power and rate control capabilities. Minstrel Blues decides the datarate, and consequently, the minimum power-level to support the chosen rate using a two-attribute utility function based on the throughput and power consumption of all rates. To expose the trade-off between throughput and network interference, we also introduced a weight parameter for the utility function, which tunes the importance of throughput in utility decisions. Our results show that if the goal is on maximizing the per-link throughput, Minstrel-Blues can significantly reduce transmission power necessary to communicate per link, while maintaining the same throughput achieved with maximum transmit power. We call this mode of operation - Minstrel-Piano. Based on experiments in BOWL, at 5Ghz, Minstrel-Piano shows significant overall throughput enhancements due to increasing spatial reuse. Our performance analysis concludes with experiments with different weight factors in a home network scenario, with 2-laptops and one access point. These experiments were run in the 2.4 GHz ISM band, and hence, they also show that our controller works well in an typical scenarios. As more and more WiFi Access Points are deployed and with upcoming IEEE 802.11 n and ac devices using wider channel widths, resource allocation is expected to become even more important to manage interference efficiently. To this end, our work significantly contributes to the understanding of rate, power and carrier-sense control in practice.