
28 May 2002 Original : SPANISH THE STATEMENT BY MR . FIDEL CASTRO RUZ , FIRST SECRETARY OF THE REPUBLIC OF CUBA , IN RESPONSE TO STATEMENTS MADE I have the honour to forward herewith the text of the statement made on 10 May 2002 by Fidel Castro Ruz , First Secretary of the Central Committee of the Communist Party of Cuba and President of the Councils of State and of Ministers of the Republic of Cuba , in response to statements made on 6 May 2002 by John Bolton , Under-Secretary of State of the United States of America . I should be grateful if you could arrange to have the enclosed text circulated as an official document of the Conference on Disarmament . ( Signed ) : Iván Mora Godoy Ambassador Permanent Representative “ There will always be weapons more powerful than those obtained through technology : the weapons of morality , reason and ideas ” Response by Commander-in-Chief Fidel Castro Ruz , First-Secretary of the Central Committee of the Communist Party of Cuba and President of the Councils of State and of Ministers , to statements made by the United States Government concerning biological weapons on 10 May 2002 , “ Year of the Heroic Prisoners of the Imperialists ” A mere three days ago , Otto Reich , Assistant Secretary of State , a person only too well known to us , was unmasked in an embarrassing lie when he said that four Cuban planes had landed in the Venezuelan capital on 12 April and : “ What they were doing there , what they were carrying , we do n't know . ” This was , it transpires , the beginning of an anti-Cuban campaign or an act of vengeance for the extraordinary debacle of the fascist coup which he had orchestrated , or both . When challenged publicly by the Cuban Ministry of Foreign Affairs on Tuesday , 7 May , the State Department said that it had no firm information , and did not wish to discuss the matter any further . The idea of destroying Cuba , an obsession which has lasted more than 43 years , has led and continues to lead United States policy down a tortuous path of lies , fiascos and blunders . The discrepancy between what the United States Government is telling the world today and what it is actually doing with Cuba represents the most egregious and demoralizing contradiction of its foreign policy . Never before has this super-Power found itself in such a compromising situation , which has left it no choice but to lie , lie and lie again . There is no shortage of unscrupulous characters in high public office prepared to do this , or of press spokesmen painfully contorting themselves to disavow the wrongdoings of their superiors and to explain the inexplicable in their statements . Even a man like Colin Powell , the son of Jamaican immigrants , who , notwithstanding his military training - or perhaps because of it - is not considered to be a warmonger since he knows war and has seen men die , a man whom many Americans have come to look on as a potential presidential candidate , has found himself embroiled by these characters in squalid machinations that do him little credit . He better than anyone else knows how inexperienced they are and can see what little political and intellectual worth they have . As for this new character who has entered the scene with his sinister manoeuvres against Cuba , whom is he hoping to deceive ? We refer to John Bolton , Under-Secretary of State , responsible for nothing less than arms control . What exactly is this official hoping to achieve with his inflammatory and aggressive speech against Cuba given at the Heritage Foundation , well known for its ultra-right stance ? These statements , purportedly an analysis of the dangers of terrorism threatening the United States , began by saying : “ In addition to Libya and Syria , there is a threat coming from another signatory to the Biological Weapons Convention , and one that lies just 90 miles from the United States mainland - namely , Cuba . ” Then , after the usual name-calling and absurd allegations filled with loathing that are so typical of arrogant and uninformed people , Mr Bolton added , this time off his own bat : “ We know that Cuba is collaborating with other State sponsors of terror . “ Castro has repeatedly denounced the United States ' war on terrorism . He continues to view terror as a legitimate tactic to further revolutionary objectives . Last year , Castro visited Iran , Syria and Libya - all designees on the same list of terrorist-sponsoring States . At Tehran University , these were his words : ` Iran and Cuba , in cooperation with each other , can bring America to its knees . The United States regime is very weak , and we are witnessing this weakness from close up . ' “ But Cuba 's threat to our security often has been underplayed . An official United States Government report in 1999 concluded that Cuba did not represent a significant military threat to the United States or the region . It went only so far as to say that ` Cuba has a limited capacity to engage in some military and intelligence activities which could pose a danger to United States citizens under some circumstances . ' ” Mr. Bolton then immediately started casting about for some explanation for the suspicious fact that no United States Government official had ever before thought to level such a deplorable accusation against Cuba . Bolton blames this weakness on William Cohen , who was United States Defence Secretary four years earlier when the much criticized report was issued . Bolton omitted to mention the fact that , a mere five months and two weeks before , on 19 November 2001 , he himself had not made the slightest reference to Cuba in his address to the Fifth Review Conference of the Parties to the Biological Weapons Convention in Geneva , when he cited many countries that were of concern to him as potential producers of biological weapons . So why this sudden and unexpected change ? Mr. Bolton 's scurrilous remarks of 6 May conclude with the allegation : “ For four decades Cuba has maintained a well developed and sophisticated biomedical industry , supported until 1990 by the Soviet Union . This industry is one of the most advanced in Latin America and leads in the production of pharmaceuticals and vaccines that are sold worldwide . Analysts and Cuban defectors have long cast suspicion on the activities conducted in these biomedical facilities . “ Here is what we now know : The United States believes that Cuba has at least a limited offensive biological warfare research-and-development effort . Cuba has provided dual-use biotechnology to other rogue States . We are concerned that such technology could support biological weapons programmes in those States . We call on Cuba to cease all biological weapons-applicable cooperation with rogue States and to comply fully with all of its obligations under the Biological Weapons Convention . ” Just as he had hoped , Mr. Bolton 's string of barefaced lies was immediately picked up by the international press . “ Washington , 6 May ( ANSA ) . Under-Secretary of State John Bolton today accused Cuba of helping ` enemy Governments ' with biological weapons programmes . “ ` Cuba has at least an offensive biological weapons programme and could be transferring its results to other States hostile to the United States ' , said Bolton . “ Under-Secretary Bolton was speaking to the Heritage Foundation , one of the ultra-conservative groups in Washington . ” “ Washington , 6 May ( DPA ) . The United States today accused Cuba of developing offensive biological weapons and of providing information about these weapons to States hostile to the United States , and urged President Fidel Castro 's Government to cease this cooperation . ” “ Washington , 6 May ( Reuters ) . On Monday , the United States accused three countries - Cuba , Libya and Syria - of trying to develop weapons of mass destruction and warned that it would take steps to prevent them from providing these arms to terrorist groups . “ ` States that sponsor terrorism and seek to obtain weapons of mass destruction must cease these activities ' , he said . ` States that renounce terror and abandon weapons of mass destruction can become part of our effort . But those which do not can expect to become our targets . ' ” “ Washington , 6 May ( EFE ) . The United States today added Cuba , Libya and Syria to the list of countries which form the ` axis of evil ' intent on manufacturing weapons of mass destruction , and warned that it would take steps to prevent them from supplying such weapons to terrorist organizations . ” “ Washington , 6 May ( Notimex ) . The United States today included Cuba on the so-called ` axis of evil ' , because it believed that it has the capacity to develop biological weapons which would pose a threat to its security , greater than that posed by Iraq , Iran and North Korea . ” “ Washington , 6 May ( AFP ) . On Monday , the United States warned Cuba against any proliferation of biological weapons , urging the island 's Government to cease any supplies of biotechnological equipment to countries that Washington considers potentially dangerous , such as Iraq and Libya . ” The list of such articles and reports on this issue could be continued indefinitely . So , the deed has already been done ! The whole world , and in particular the American public , which is constantly bombarded with shameless lies , has been fed the necessary information and is now ready to believe that Cuba is a biological power , that it has a programme for the production of such weapons and that it poses a danger to the United States . And , as this has been stated by Mr. John Bolton , the very distinguished Under-Secretary of State for Arms Control and International Security , we have to believe it . Tired old tricks and stupid arguments As the old saying goes , it is easier to catch a liar than a lame man . Some people in the United States itself find all this simply too hard to believe and are beginning to read between the lines . “ Washington , 7 May ( Notimex ) . The United States today refused to produce the evidence it claimed to have to back up accusations it had made against Cuba to the effect that the island had a limited capacity to develop chemical and biological weapons . “ The spokesmen of both the White House and the State Department maintained that the accusation against Cuba was not based on assumptions but on confidential information about the biological and chemical potential of the Cuban pharmaceutical industry . “ This accusation came as a surprise not only to the international community , but even to members of the United States Congress . According to the same dispatch , “ Political analysts pointed out that the accusation against Cuba by the Bush administration could form part of a White House strategy to justify moves to tighten its isolationist policy on Cuba . “ The statement that Cuba could pose a terrorist threat to United States security was made at a time when several proposals to relax Washington 's Cuba policy were being studied on Capitol Hill . “ Political analysts believe , however , that , given this possibility , and bearing in mind that his brother Jeb will be seeking re-election as Governor of Florida this year , President Bush is hoping to ingratiate himself with the Cuban exile community . “ Given that more than four decades of economic blockade against Cuba have not succeeded in removing Fidel Castro from power in Havana , the only people who want this isolationist policy to remain in effect and to be tightened are the great majority of the Cuban exile community in the United States . “ The possibility of including Cuba as a member of the so-called ` axis of evil ' , with Iraq , Iran and North Korea at its head , would make it easier for Bush to obtain Congress backing for moves to increase - rather than decrease - the economic stranglehold which it has on the island . ” “ Washington , 7 May ( AP ) . ` I think that it will hold up the adoption of any new steps towards an opening up of trade , ' said Bob Graham , chairman of the Senate Select Committee on Intelligence . ` Unilateral steps will be most affected . ' “ Graham did not hide his amazement at Bolton 's accusation , however . He said that , in March , the Committee he chairs had held a secret hearing on security-related issues and that the administration had made no mention of biological weapons . ” On 7 May , when a journalist asked White House spokesman Ari Fleischer : “ Is there any proof of this or is this an assumption by the United States ? ” Fleischer replied : “ No , it 's not an assumption . I assure you that Secretary Bolton would not have said it if he did not have good cause , reasons and facts to base it on . It was based on sound analysis and on information available to the United States Government , which it has studied . ” This is a typical reply by someone who has no grounds or substance for what he says . The only things being carefully studied are falsehoods and deceitful ploys . One pities this spokesman for the job he has to do . Besides , why should we believe Mr. Bolton anyway ? Anyone who remembers the 15 incredible pretexts , which have come to light today in declassified official documents , that were devised at the end of 1961 by the powers that be in the United States with the aim of launching a direct military attack against Cuba in 1962 , would find nothing surprising in this sinister fabrication . But we demand proof . Let them produce even the smallest shred of evidence ! They do not have any and they cannot have any since there is not and cannot be any such evidence . As there is not so much as an atom of truth in what they say , they should not now try and hide behind the alleged sensitivity of their sources . This is a worn out old trick and an extremely stupid argument , which only serves to show in what very low esteem they hold the American public , whose intelligence deserves greater respect . I will also say this : If Cuban scientists from any of our biotechnology institutes had been cooperating with any country in the development of biological weapons , or had tried to create such weapons on their own initiative they would immediately be hauled before a court of justice on a charge of treason . The Acts of Terrorism Act passed by the National Assembly of Cuba stipulates , in its article 10 : “ Anyone who manufactures , facilitates , sells , transports , transfers , introduces into the country or keeps in his or her possession , under any form or in any place [ … ] chemical or biological agents , or any other substance from which any product that fits this description can be derived through research , design or a combination thereof ” shall be liable to penalties of between 10 and 30 years privation of liberty , life imprisonment or death . This is , without question , a total fabrication , a treacherous blow against the sale of food to Cuba authorized by a law passed in 2000 , which has subsequently undergone countless modifications and amendments , introduced by those bitterly opposed to any lifting of the blockade , rendering it virtually unworkable , even when - despite everything - it was finally passed . Efforts are also being made to mislead and discourage the growing number of Americans who are increasingly repelled by the cruel and inhuman measures taken against the Cuban people , which fly in the face of the idealism and ethics of a nation which , for years and years , has been fed nothing but lies about Cuba . The only truth in Bolton 's falsehoods was the geographical fact that Cuba lies 90 miles from the continental territory of the United States . Slanderous invention , born of falsehood and deception It is false and a total distortion to assert that our country has repeatedly denounced the United States ' war against terrorism . I have said , and I stand by it , that the solution to this scourge will not be attained through war , which will serve only to breed hatred and fanaticism , but through sincere and determined cooperation among all countries in the world and by building a truly universal culture and mindset against terrorism . We were the first to suggest this form of cooperation , the very day of the tragedy in New York . It was a slanderous invention , born of falsehood and deception , to assert that Castro considers terrorism a legitimate tactic for furthering revolutionary objectives , since , as everyone knows , our revolutionary movement never practised any methods which were not consistent with our doctrine , our principles and our perception of armed struggle . You should get your facts straight , Mr. Bolton , and you should not be misled by the fictions narrated by your good friends in the Foundation . The civilian population and innocent people have never been the victims of our actions . Our tactic was always to fight against fully equipped enemy units . These days you seem to want to label as terrorism any armed resistance , regardless of the legitimate causes that may justify it . Applying this logic , you would be quite capable of describing as terrorism the struggle of the American colonists who rebelled and fought against English domination . George Washington and those who , after long years of war and enormous sacrifices , finally secured the independence of the United States were not terrorists . Your people led you astray , Mr. Bolton , when they told you about my address at the University of Tehran . It was not one address , but two , in two universities , and a few remarks which I made at the end of my visit to the mausoleum in which the body of the late Imam Khomeini lies . I have gone over them all in detail . In my address to the students in Tehran , there does not seem to be a single paragraph resembling that mendaciously cited in your statement on 6 May to the Heritage Foundation . At no point did I say that “ Iran and Cuba , in cooperation with each other , can bring America to its knees ” . I did say , in one of the three statements I made during the visit , that imperialism was bereft of ideas , that ideas were more powerful than weapons and that one day imperialism would collapse . I also said that the Shah “ was overthrown by the Iranian people through their heroism , and without weapons , which demonstrated the power of ideas and showed that there could never be any person in the world so powerful that he could not be brought down by ideas . This is our hope ” . And , at the end , I added : “ there is one super-Power which has thousands of nuclear weapons , aircraft , battleships , aircraft carriers , smart missiles [ … ] . However many weapons it may possess and however great its wealth , it will never be able to defeat the human spirit ” . I did not make the slightest allusion to the use of weapons in this struggle . Indeed , I said just the opposite . That is what I think , that is how I saw it then and that is what I said . I am not in the habit of hiding my thoughts or twisting my words . My three statements in the Iranian capital were broadcast on Cuban radio and television . Thus , Mr. Bolton did not uncover anything , nor do I renounce any of my ideas . I said some other things about political beliefs and principles . I have all the tapes and the transcripts of those statements and I can prove what I said . I should also point out that , when I visited Iran , I had the honour of discovering a country with a culture thousands of years old , with deep religious convictions and great spiritual strength ; a country anxious to eradicate poverty , to fight against drug trafficking and other such plagues , a country determined to bring education , health , employment and well-being to more than 65 million people . Not one of the many leaders with whom I talked said anything to me about biological weapons or weapons of any other kind . I was able to see what an immense difference there is between the culture and customs of that country and those of the West . Iran was not the only country I visited : I went also to Algeria , Malaysia , Qatar , Syria and , finally , Libya , where I was shown how Qadaffi 's family home had been destroyed and I heard about the loss of human life - including that of a little girl - inflicted by the brutal F-16 air raid . Those parts of the world which I visited possess a wealth of history thousands of years old , which must not be destroyed and neither must their populations be annihilated . Thousands of millions of people throughout the world have watched with profound indignation the televised images of the horrendous events in Palestine . When he referred to my statement in Iran , Mr. Bolton irresponsibly and dishonestly mixed up excerpts of what I had said with bits and pieces of statements made by other people and reported by foreign press agencies and information from other sources picked up from wire-service cables or material simply concocted by himself . He made such a dog 's breakfast of all this material that he himself can no longer make head or tail of it . My clear , precise and transparent statements can be found in the speeches I have mentioned and in the press communiqué of 10 May 2001 issued by both delegations , which , in paragraph 6 of the agreed document , sets out the Cuban position against terrorism , which states , and I quote : “ While condemning the phenomenon of terrorism in all its forms , especially State terrorism , the two parties agreed to cooperate closely at bilateral and international levels to fight against and eliminate this terrible phenomenon , to cooperate in efforts to combat international organized crime and drug trafficking , being always mindful of the cardinal principles of international law , and in particular those of sovereignty and non-interference in the internal affairs of States . ” This statement was issued 127 days before 11 September . I must thank Mr. Bolton for the praise which he heaps on our pharmaceutical industry : “ one of the most advanced in Latin America [ , which ] leads in the production of pharmaceuticals and vaccines that are sold worldwide , ” as he said in his own words . If only it were more advanced . Even his country could benefit from some of its attainments , but they would not permit it . He lies shamelessly , however , when he tells the American public and the world at large that the United States believes that Cuba is engaged in at least a limited offensive biological warfare research-and-development effort . This statement is as false as it is serious . Our researchers and doctors are educated in such a way as to instil in them a strong sense of solidarity and ethics . Millions of people in the world can testify to this . They work for the well-being and health of humankind . Over the last 40 years , 34,307 Cuban doctors and health workers have provided their services , free of charge , in a large number of poor countries , saving lives and safeguarding the health of millions of people . No one in the world could surpass them in their dedication and willingness to make sacrifices . At this very time , 2,671 of them are working in isolated and inhospitable areas of Latin America , the Caribbean and Africa . It would be very difficult to persuade these men and women to manufacture viruses and bacteria to kill children , women , old people or the citizens of any country . The pride and high moral standards of our people , which have enabled them to withstand 43 years of attacks and blockade , rest on the sound basis of a policy which is entirely consistent with all their ethics and principles . In all , some 39,800 young people from more than 120 Third-World countries have graduated in Cuba in 33 specialized academic and technical fields . Even under the prevailing conditions during this special period , induced by the cruel economic blockade , there are 8,053 young people from Latin America , the Caribbean and Africa following medical degree courses in our country - receiving training which , in the United States , costs more than $200,000 , without paying a single cent . Despite the lying allegations of Bolton and many others of his ilk , Cuba enjoys great recognition for the health services which it has rendered to humankind . These constitute a true fight against another form of terror , which many choose to ignore : the diseases which every year kill more than 11 million children , whose lives could be saved were it not for the selfish attitude of the industrialized world . An incalculable number of people survive or recover their health thanks to the selfless efforts of doctors from a small and poor country , who treat them with vaccines and preventive methods or therapies developed by Cuba . We would like to know if the United States Government is doing something similar or if it would be prepared to cooperate in such programmes for the benefit of what it euphemistically terms the “ emerging countries ” , since we have not excluded any economically developed country from participating in these programmes . We have offered hundreds of scholarships at the Latin American School of Medical Sciences to American youngsters who lack the funds to study medicine in their own country . Cuban children are vaccinated against 13 diseases and enjoy splendid health . The infant mortality rate per 1,000 live births is lower than that of the United States . Medical care is guaranteed to 100 per cent of the population and is provided absolutely free of charge . The sorry situation in the United States , with its more than 280 million inhabitants , where 16 per cent of the population , including more than 10 million children , have no medical insurance , is quite unknown in Cuba . In such an immensely rich and scientifically advanced country , where hundreds of thousands of citizens die every year for these reasons , who is held to blame ? Who kills these people and who denounces these deplorable facts ? How can they concoct such lies ? With what moral right dare they affirm from over there that we , in Cuba , are developing biological warfare ? Who is going to believe their monstrous slanders ? On the other hand , never over the 43 years of its history since the revolution has anyone in our country launched or taken part in any terrorist act mounted from our territory against the United States . Not a single drop of United States blood has been shed , nor has any company lost so much as a simple screw as a result of any terrorist act hatched in Cuba . This cannot be said about Cuba by those in the United States who accuse our country of terrorism , or of supporting or sponsoring terrorism . Thousands of our compatriots have died and tens of thousands of acts of sabotage have been recorded as part of terrorist activities and aggression mounted from the United States against Cuba . How can their spokesmen deny these glaring facts ? I am not referring here to the American public : I am referring to their Governments . Not the slightest attempt has been made to clarify the overriding question of the powers granted to United States Government officials to conduct extrajudicial executions and to kill people anywhere in the world . I myself have often been the target of their sinister plans . That was how they operated in the past . Have they or have they not now reverted to those repugnant methods ? Why does Mr. Bolton not tell us something about that instead ? Cuba 's irreproachable policy on weapons of mass destruction Where weapons of mass destruction are concerned , Cuba 's policies have been irreproachable . No one has ever produced a single shred of evidence that our country has embarked on a programme to develop nuclear , chemical or biological weapons . Even people who have no comprehension of the ethics , the attachment to the truth and the transparency which informs the conduct of a Government like that of Cuba will be able to understand at least that for Cuba to have acted in any other way would have been an act of immense stupidity . Any such programme would ruin the economy of a small country : Cuba would never have been able to transport such weapons and it would have been a further mistake to have used them in combat against an enemy which had thousands more such weapons and would have been only too delighted for an excuse to use them . From the political standpoint , we are living in an age that will bring weapons far more powerful than any that technology can produce : namely , the weapons of morality , reason and ideas . Without these , no country is powerful ; with them , no country is weak . To adhere to this maxim , any country needs to be extremely motivated , clear-headed and perspicacious . Let it be known that the Cuban people revere above all other things on earth the ideals that inspire freedom , dignity , love of their country , their identity and their culture , and the strictest possible adherence to justice . These are not weapons of mass destruction : they are weapons of mass moral defence and we are willing to fight and die for them . I understand that , for a man like Bolton , intoxicated with the military , economic and technological might of the super-Power on whose behalf he speaks , it might be difficult to understand these things . It would , however , be a good thing for him to try . Cuba has absolutely nothing to hide . On the contrary , it is proud of its progress in the field of biomedical research . Let us briefly review its history : 1979 : The Genetic Engineering Group was set up in the National Centre for Scientific Research ; 1981 : The first biotechnological scientific production institution designed for the manufacture of the Leukocyte Interferon was set up ; The pharmaceutical and biotechnological industry programme came into being as a result of the country 's scientific , economic and social development ; The necessary standards were set in place for inspection and certification by international agencies and the regulatory bodies of those countries with which Cuba was to have trade relations ; The period between 1990 and 1997 saw the development of the bulk of the investment programme , comprising 40 separate facilities ; An exclusively humanitarian industry is being developed , dedicated to the development and manufacture of medicines designed to prevent illnesses and to save lives , as well as to food production ; Technology and equipment used everywhere in the world is being purchased from commercial companies with international standing ; Under agreements entered into by Cuba with the Biological Weapons Convention , Cuba 's biotechnology , health system and civil defence sectors submit annual reports to the United Nations on confidence-building measures ; Regulatory bodies from many different countries have visited Cuban biotechnology production facilities as a prerequisite for the marketing of our products in their countries ; Over the next few years , more than 50 new products , including biopharmaceuticals , vaccines and diagnostic kits , will come onto the market ; Cuba already possesses a wealth of intellectual property , comprising more than 150 inventions and over 500 patents registered abroad . The results of Cuban scientific research are published in leading international journals ; 1990 : First exports of Cuban products , which have increased every year since ; 1992 : Cuba signed the Convention on Biological Diversity and ratified it in 1994 ; 1995 : Landmark forms of marketing are introduced : technology transfers , risk contracts for development projects with foreign companies , manufacturing and trading partnerships ; Today , products and technology of the Cuban biotechnology industry are to be found in more than 40 countries . Technology transfer agreements or negotiations have been concluded or are under way with 14 countries : India : 4 transfers , 4 products ; China : 2 transfers , 4 products ; Brazil : 2 transfers , 2 products ; Egypt : 4 transfers , 1 product under negotiation ; Malaysia : 6 transfers ; Iran : 4 transfers , 4 products ; Russia : 1 transfer , 1 product ; South Africa : 1 transfer , 1 product ; Tunisia : 1 transfer , 1 product ; Algeria : 1 transfer , 3 products ; United Kingdom - Belgium : 1 transfer , 1 product ; Venezuela : 1 transfer , 2 products under negotiation ; Mexico : 1 transfer , 1 product . New trade and production negotiations are under way with 10 countries : Malaysia , Netherlands , Spain , Brazil , Venezuela , Viet Nam , Mexico , Ukraine , Germany and the United States ( negotiations are under way with the United States on the use of the Cuban anti-meningitis vaccine and the first steps have been made towards possible clinical trials with the EGF vaccine for lung cancer ) . Cuba 's biotechnology centres have already registered : 24 products , including both biopharmaceuticals and vaccines ; 49 state-of-the-art generic medicines ; 5 products for treating AIDS ; 15 new types of medical equipment ; 24 diagnostic systems . In addition to these achievements , scientists and researchers are continuing work on 60 more projects , prominent among which are the following : 29 new vaccines , including 8 cancer vaccines , 4 of which are already undergoing clinical trials , not only in Cuba but also in Canada , Argentina and the United Kingdom ; 21 innovative products for treating cancer , which supplement the 28 cytostatic drugs that have already been identified and which a new plant will soon begin manufacturing . Cuba 's biotechnology centres have applied for patents for 150 inventions , which will bring the total of such patents to 505. Four of these have been awarded medals by the World Intellectual Property Organization ( WIPO ) . Countless prominent politicians , scientists and industrialists have visited Cuba 's biotechnology institutions . One of its main centres alone played host in 2000 to 1,520 visitors , 484 of whom came from the United States . The doors of our research centres are open to any international institution . In an official , public letter , Cuba has written to the Government of the United States to propose three major draft agreements , which are of greater benefit to the United States than to Cuba itself , given the very different magnitude of the problems in each of the two countries . The first is a draft agreement on immigration issues ; the second , a draft agreement on cooperation in controlling the illicit traffic in narcotic drugs and psychotropic substances ; and the third , a draft bilateral cooperation programme to combat terrorism . We have not received any reply . Does this mean that we are being accused of manufacturing biological weapons ? Whom do they hope to intimidate in this way ? We are urged to cease any biological weapons-related cooperation with “ rogue ” States and to comply with all our obligations under the Biological Weapons Convention . Which is the international organization that decides whether or not a country is a “ rogue ” State ? Precisely which rule of the Biological Weapons Convention has Cuba violated ? Is it that , on top of the criminal blockade , they would now ban us from marketing our medicines and using the most beneficial , the most noble products of the talents and hard work of our scientists , they would prevent us from placing these at the service of the health of people anywhere in the world ? Or could it be that the United States Government is seeking another bilateral agreement , in addition to those proposed by Cuba , namely , on cooperation in efforts to combat the production of biological weapons ? Please propose it . We would be happy to include it in our list of projects under consideration . We are sorry , Mr. Bolton . After the lies , slander , fabrications and insults promulgated in your statement on 6 May , we regret to have to tell you that you have no moral ground to harangue Cuba on this subject , still less to do so in a threatening tone and language . Nor can you presume to give Cuba any lessons in politics and ethics . In any event , you and your Government should draw inspiration from Cuba 's decent and honourable behaviour . I can assure you that , for this technology transfer , we shall be making no charge . 