## 1 Introduction  
In a Wireless Sensor Network (WSN), sensors cooperate to sense, collect, and report information about the environment to sinks. With the help of multihop wireless communication, a WSN can cover a large area without the infrastructure or a backbone wired network. However, congestion can exist inside a WSN due to the following inherent characteristics. First, in a multihop WSN, resources are limited. Typical sensors have limited battery power, memory, and computing capability. In addition, sensors also need to compete for shared resources inside the WSN, such as the shared wireless channel with neighboring nodes and common paths to sinks. Second, majority of the time, the topology of a WSN is not completely under control. As a result, a lot of traffic might contend for the same links or nodes that can become the bottlenecks of the whole network. This imbalance of network traffic due to the network topology can cause severe congestion in bottleneck nodes and/or links. Third, sensors that detect an important event usually increase the data generation rate to accurately alarm the sinks in time. For example, sensors used for monitoring temperature in a forest will generate a large number of alert packets in a short period of time when they detect fires. Fourth, some new applications, such as patient health monitoring [1] and image sensing [2], require high throughput and low delay, which can further aggravate the congestion inside a WSN. Therefore, congestion control is necessary and inevitable in the WSN. In the absence of congestion control, WSNs can suffer from packet loss due to buffer overflows and inefficient utilization of critical resources such as shared wireless channel capacity and sensor battery power. Existing proposals to address congestion control in WSNs are either hop-by-hop data rate control or source rate limiting mechanisms. In this paper, we propose a Priority-based Coverage-aware Congestion Control (_PCC_) mechanism in Section 2.. _PCC_ operates at the network and MAC layers. It is a distributed method that avoids aggregating network information in the sink and therefore does not require complicated and expensive communication among nodes [3]. For advanced WSN applications, we expect to collect multiple categories of information from sensor nodes. For example, from an under-water sensor network, we may collect data about the temperature, the degree of ambient light, the pollution level, and other relevant parameters. The sink can request and store different monitored information from the sensors for each data collection cycle. It is much more efficient and economical than using separate overlapping sensor networks to gather different information. Currently, sensor nodes such as the Mote [4] has the capability to gather all the information. The Mote can be equipped with different kinds of sensor interfaces in the circuit board; Arch Rock's EPIC Mote has integrated temperature, light and humidity sensors [5]. However, multiple categories of information contend for the limited network resource to send data from sensors to the sink. Managing the sensors to cooperate and send multiple classes of data fairly and efficiently is a challenging problem, especially when the network is congested. The sensors could ignore the difference between data in the application-layer and send them to the sink with the same weight. However, different data have different value to the sink. For example, in the military application as in Figure 1, the sensor network can collect real-time battlefield information to identify an infantry, a tank, or a helicopter. However, different enemy units pose different level of hazard. The information about hostile helicopters and tanks are important and urgent since they may be more dangerous than infantries. On the other hand, it is also not advisable to assign very high priority to only one type of data. For example, although the data pertaining to hostile tanks are important, it is also important to collect some information regarding infantries.