Unlike the IATA codes, the ICAO codes have a regional structure, are not duplicated and are comprehensive. In general, the first letter is allocated by continent and represents a country or group of countries within that continent. The second letter generally represents a country within that region, and the remaining two are used to identify each airport. Using the earlier example as Heathrow airport, if one knows that the ICAO code for Heathrow is EGLL, then one can deduce that the airport EGNH is somewhere in the UK (it is Blackpool International Airport). On the other hand, knowing that the IATA code for Heathrow is LHR does not enable one to deduce the location of the airport LHQ with any greater certainty (it is Fairfield County Airport in Ohio in the United States). The exception to this rule is larger countries that have single-letter country codes, where the remaining three letters identify the airport.
In the contiguous United States and Canada, most, but not all, airports have been assigned three-letter IATA codes which are the same as their ICAO code without the leading K or C. e.g., YYC and CYYC (Calgary International Airport, Calgary, Alberta), IAD and KIAD (Dulles International Airport, Chantilly, Virginia). These codes are not to be confused with radio or television call signs, even though both countries use four-letter call signs starting with those letters. However, because Alaska, Hawaiʻi and other United States territories have their own 2-letter ICAO prefix, the situation there is similar to other smaller countries and the ICAO code of their airports is typically different from its corresponding 3-letter FAA/IATA identifier. For example, Hilo International Airport (PHTO vs ITO) and Juneau International Airport (PAJN vs JNU).
In region L (Southern Europe), all available 2-letter prefixes have been exhausted and thus no additional countries can be added.