
Letter dated 7 October 2001 from the Chargé d'affaires a. i. of the Permanent Mission of the United Kingdom of Great Britain and Northern Ireland to the United Nations addressed to the President of the Security Council In accordance with Article 51 of the Charter of the United Nations , I wish on behalf of my Government to report that the United Kingdom of Great Britain and Northern Ireland has military assets engaged in operations against targets that we know to be involved in the operation of terror against the United States of America , the United Kingdom and other countries around the world , as part of a wider international effort . These forces have now been employed in exercise of the inherent right of individual and collective self-defence , recognized in Article 51 , following the terrorist outrage of 11 September , to avert the continuing threat of attacks from the same source . My Government presented information to the United Kingdom Parliament on 4 October which showed that Usama Bin Laden and his Al-Qaeda terrorist organization have the capability to execute major terrorist attacks , claimed credit for past attacks on United States targets , and have been engaged in a concerted campaign against the United States and its allies . One of their stated aims is the murder of United States citizens and attacks on the allies of the United States . This military action has been carefully planned , and is directed against Usama Bin Laden 's Al-Qaeda terrorist organization and the Taliban regime that is supporting it . Targets have been selected with extreme care to minimize the risk to civilians . It is important to underline that these operations are not directed against the Afghan population , or against Islam . The United Kingdom is proud to be a multicultural , multiracial country , and Prime Minister Blair has made clear the anger of the United Kingdom , and the anger of the vast majority of Muslims , to hear Usama Bin Laden and his associates described as “ Islamic ” terrorists . They are not : they are just ordinary terrorists . I ask that you circulate the text of the present letter as a document of the Security Council . ( Signed ) Stewart Eldon Chargé d'affaires a. i. 