
21 September 2000 Held at the Palais des Nations , Geneva , on Thursday , 21 September 2000 , at 10.40 a. m. President : Mr. Petko Draganov ( Bulgaria ) The PRESIDENT : I declare open the 861st plenary meeting of the Conference , the last for the 2000 session . I should like at the outset to extend a warm welcome , on behalf of us all , to the three new colleagues who have recently joined us as representatives of their Governments to the Conference , Ambassador Roberto Betancourt Ruales of Ecuador , Ambassador Rakesh Sood of India and Ambassador Mario Maioloini of Italy , and assure them of our full cooperation and support in the discharge of their functions . Allow me also to bid farewell to the representative of Ukraine , Ambassador Mykola Maimeskul , who , I understand , will soon be leaving his post to take up important responsibilities in his Government . Ambassador Maimeskul has represented his country in this Conference since August 1996 and we had the privilege to work under his presidency at a difficult time , when efforts were being made to widen the areas of agreement on the Conference 's programme of work . He discharged his functions with dedication and diplomatic skill . It is an especially moving occasion for me , because he was presiding over this Conference when I first appeared in it and you will also recall that it was under his presidency and skilful leadership of this Conference that the Conference took a decision on the establishment of the Ad Hoc Committee on fissile material . I am sure that you will all join me in extending to him and his family our best wishes for the future . I have on my list of speakers for today the representatives of Costa Rica , the Russian Federation and Algeria , who will be speaking on behalf of the Group of 21. I give the floor to the representative of Costa Rica , Ambassador Nora Ruiz de Angulo . Ms. RUIZ DE ANGULO ( Costa Rica ) ( translated from Spanish ) : Mr. President , allow me to convey greetings to you , both on my own behalf and on that of the Government of Costa Rica , and to congratulate you on the way in which you have been presiding over this Conference . I also thank you for allowing me to speak before the plenary of the Conference on Disarmament , with a view to drawing the attention of distinguished representatives to Costa Rica 's renewed desire to become a permanent member of this Conference . We know of the difficult times through which the Conference is passing and of the various points of view on this subject and it is precisely for that reason that we wish to reiterate our aspiration and to commit ourselves to its attainment . Throughout its history Costa Rica has been distinguished for its pacifist tradition and its rejection of the use of force as a means to resolve conflicts . Since its beginnings as a republic , it has endeavoured to maintain relations of peace and friendship with neighbouring countries and to date it continues to participate in many international activities and agreements aimed at reducing conventional armaments and weapons of mass destruction . Its most relevant decision in this regard was the abolition of the army in 1949. It thereby reaffirmed its commitment to peace and entrusted its safety to international law , rejecting force as a means of solving conflicts . From that time on , Costa Rica has entrusted its security to international rules and agreements and for that reason we wish to play an attentive and active role in addressing the international agenda on disarmament and international security . In 1958 Costa Rica submitted the first specific proposal on the limitation of conventional weapons and the prohibition of nuclear weapons in the Organization of American States ( OAS ) . Subsequently we ratified with great enthusiasm the Treaty for the Prohibition of Nuclear Weapons in Latin America and the Caribbean . Costa Rica firmly supports general and complete disarmament . Ever since the San Francisco Conference , at which Costa Rica was a participant , we have continued to place our firm trust in the United Nations and we are strongly committed to its mandate to safeguard international peace and security . We shall therefore continue to support the work of the First Committee and the Commission on Disarmament by preparing , co-sponsoring and considering proposals conducive to international disarmament . To this end we advocate the creation of nuclear-free zones , complete nuclear disarmament , the holding of the fourth special session of the General Assembly on disarmament and the expansion of the United Nations Register of Conventional Arms . We consider there should be a ban on the transfer of materiel and military personnel and the provision of financial or logistic support to States whose military or paramilitary units , or whose security forces are responsible for violations of human rights or contribute to such violations . At the first preparatory meeting of the 2001 United Nations Conference on the Illicit Trade in Small Arms and Light Weapons , held on 3 March 2000 , the Costa Rican Government officially presented a working document on an international code of conduct on arms transfers . The Preparatory Committee elected our country to the vice-chairmanship of the United Nations Conference , to be held in 2001. During its participation on two occasions as a non-permanent member of the Security Council , most recently in 1998 , Cost Rica focused its efforts on preventive diplomacy , the resolution of conflicts , humanitarian assistance and the protection of human rights in war zones , both during and after hostilities . Within the framework of OAS Costa Rica has proposed a set of practical guidelines for the attainment of disarmament as a dividend for peace . These guidelines are designed to ensure a genuine reduction in conventional weapons , so that more resources can be devoted to development . The agreements ratified by Costa Rica include the Treaty on the Non-Proliferation of Nuclear Weapons ; the Treaty on the Prohibition of the Emplacement of Nuclear Weapons and Other Weapons of Mass Destruction on the Seabed and the Ocean Floor and in the Subsoil Thereof ; the Convention on the Prohibition of the Development , Production and Stockpiling of Bacteriological ( Biological ) and Toxin Weapons and on Their Destruction ; the Convention on the Prohibition of Military or Any Other Hostile Use of Environmental Modification Techniques ; the Convention on Prohibitions or Restrictions on the Use of Certain Conventional Weapons Which May Be Deemed to Be Excessively Injurious or to Have Indiscriminate Effects and its three protocols ; the Convention on the Prohibition of the Development , Production , Stockpiling and Use of Chemical Weapons and on Their Destruction ; the Comprehensive Nuclear Test-Ban Treaty ; the Convention on the Prohibition of the Use , Stockpiling , Production and Transfer of Anti-Personnel Mines and Their Destruction ; and the Inter-American Convention against the Manufacturing of and Trafficking in Firearms , Ammunition , Explosives and Other Related Materials . Costa Rica attaches great importance to multilateral forums and focuses its activities in the area of security on the strengthening of collective security agreements , of both regional and international scope , and on the promotion of the peaceful solution of conflicts and disarmament as a basic principle of its foreign policy . Costa Rica 's achievements in the national and international arena are attributable to our sound decision , made more than 50 years ago , to abolish our army as this has enabled us to devote more resources to social investment , to renounce weapons and to promote democracy and development . Given that Costa Rica 's efforts to promote the security and well-being of the country 's society are largely linked to the development of international law and the effectiveness of the protection which it provides , we deem it essential that we are properly represented in these forums . Where international law prevails , the risk of war are reduced and we therefore consider it necessary to continue preparing effective verification mechanisms that guarantee that there is no use , threat of use or manufacture of weapons of mass destruction . In the light of all that I have said , Costa Rica reiterates once more its request to be admitted to the Conference on Disarmament . Over the last 50 years Costa Rica has not spent any money on an army and has devoted its budget to education , preventive health-care and infrastructure investment . Our national experience has taught us that to decide not to invest in weapons is the best way forward for those countries that are really committed to the well-being of their peoples . We believe that the promotion of peace and security , both internationally and on the domestic front , is contingent upon a determined policy to reduce military expenditure and to strengthen civil power . It stands to reason that disarmament , demilitarization and the reduction of military expenditure are essential for the welfare of mankind and the promotion of a culture of peace . The PRESIDENT : I thank the representative of Costa Rica for her statement and for the kind words addressed to the Chair . I now give the floor to the representative of the Russian Federation , Ambassador Vasily Sidorov . Mr. SIDOROV ( Russian Federation ) ( translated from Russian ) : First , may I thank you for giving me the floor and congratulate you on your assumption of the presidency of the Conference . I wish you every success and assure you of my delegation 's willingness to cooperate in the most constructive manner . I would also like to welcome those new colleagues who have recently joined us in our work in the Conference . At the Millennium Summit , held recently in New York , attention was given to an issue of particular importance to the modern age : what system of international relations will prevail over our lives and activities in the twenty-first century ? We believe that the new age should be one of equal security and a just peace , as stated by President Putin of Russia in his speech at the Summit : “ The new age for the United Nations must continue well into a millennium of global stability . It must go down in history as a period of real disarmament . It has already proved possible to create an efficient disarmament machinery . That machinery comprises the 1972 ABM Treaty , non-proliferation regimes governing weapons of mass destruction and their means of delivery and dozens of highly important agreements on the reduction and limitation of various weapons . ” I have already had ample occasion in this auditorium to state the abiding significance of the ABM Treaty for strategic stability and international security . The issue has recently been raised again , more than once , in plenary meetings of the Conference on Disarmament and points have been made which require clarification on our part . We are firmly convinced that the ABM Treaty remains the cornerstone for strategic stability and that it continues to serve as a basis for ensuring further reductions in strategic offensive arms . We believe that this linkage will be further strengthened in the foreseeable future . Incidentally , it was the United States which was the first to raise the issue of a connection between agreements to reduce and limit strategic offensive arms and the ABM Treaty . On 9 May 1972 , during the final stage of preparations for the ABM Treaty , Ambassador Smith of the United States of America made a statement to the effect that the United States reserved the right to withdraw from the Treaty unless the START agreement was concluded within five years . The significance and historic role of the ABM Treaty are not confined merely to the sphere of Russian-United States relations . It underpins the entire modern system of arms control agreements and the collapse of the ABM Treaty would therefore disrupt the whole range of disarmament agreements created over the last 30 years . There is an increasing threat of the erosion of the regimes of non-proliferation of weapons of mass destruction and their means of delivery . The creation and deployment of the United States national missile defence system would give powerful impetus to the proliferation of missiles and missile technology . The positions of many countries on nuclear disarmament would shift and the Treaty on the Non-Proliferation of Nuclear Weapons would fall victim to these developments . Those who oppose the idea of preserving the ABM Treaty in its present shape often say that nothing would happen if it were to be slightly amended and adjusted to current realities , particularly since corrections have already been made to it before . Let us look more closely at this argument . It is true that the 1972 ABM Treaty does make allowance for the possibility of changing its provisions and the parties to the Treaty have made use of that possibility in the past . The intent of those changes was to strengthen the Treaty 's regime and to enhance its “ restraining ” elements . Today , however , it is suggested that we amend this instrument so as to accommodate the deployment of a “ limited ” anti-missile defence system for a national territory . This is contrary to the core provisions of article 1 , which constitute the very essence of the ABM Treaty . In other words , what is being suggested is that the ABM Treaty be changed from one which prohibits the creation of national missile defence systems to one which actually provides for the creation of such systems , its very opposite . Such a change in the Treaty would set a precedent in disarmament practice whereby the introduction of additions or amendments to an agreement limiting and restraining the development of an advanced weapon could turn it into an agreement which actually permits military build-up . We cannot accept this sort of logic . The announcement by President Clinton of the United States that he would not enter into any commitment to deploy a national missile defence system is seen in Russia as a well-considered and responsible decision . As President Putin stresses , however : “ This does mean that Washington and Moscow now share completely identical approaches to the issue of ABM ” . We cannot turn a blind eye to the fact that programmes are still under way to set up a national missile defence system in the United States of America . No one has repealed the National Missile Defence Act adopted in the United States in 1999. According to our analysis it is difficult to conceive of a United States national missile defence system which would not impair Russia 's deterrent potential and yet would still fall within the limits of the ABM Treaty . Among the implications of creating any United States national missile defence system would be the disruption of the prevailing strategic stability and the devaluation - to some extent or other - of Russia 's strategic capability . It would also ensure the unilateral military superiority of the United States of America . In these circumstances , assurances by the United States that it is committed to the ABM Treaty , that its national missile defence system is supposedly not directed against Russia and that it stands ready to pursue “ trade-off ” cooperation with Russia in the area of ABM cannot allay our fears . We are not shirking dialogue with the United States of America . This does not , however , imply any consent whatsoever on our part to adapting the ABM Treaty to accommodate the United States national missile defence system . Our position is dictated by the best interests of strengthening peace and international stability . We do not intend to change our approach . Our message to our United States partners is clear and plain : we will not participate in the destruction of this fundamental instrument - for this , effectively , is what is at stake . Russia is ready to continue active joint efforts both with the United States of America and with other interested States to ensure international security , including through prompt progress towards agreements on further reducing nuclear arsenals , improving the regimes for nuclear and missile non-proliferation and strengthening strategic stability by political means . We recently ratified the START II Treaty , the 1997 New York package of START and ABM-related agreements and the Comprehensive Nuclear Test-Ban Treaty . We are now awaiting reciprocal steps by the United States of America . We advocate the immediate start of negotiations on START III . During the Okinawa summit , President Putin submitted to President Clinton detailed proposals regarding the main areas of the START III negotiations . These are based on our belief that the conclusion of a START III Treaty is only possible if the ABM Treaty remains inviolate . Let us now try to respond to the arguments of those advocates of amending the ABM Treaty who invoke the changed strategic situation and the increased missile threats . We consider that references to such a threat have no real foundation . The deployment of a United States national missile defence system is motivated by the necessity to counter the strategic ballistic missiles of certain countries . However , the proliferation of such ballistic missiles is not expected to occur either today or in the foreseeable future . The changes in the strategic situation cited by the proponents of amendments to the ABM Treaty are in no way comparable to the changes in the strategic situation that could occur if the Treaty were to be undermined and the disarmament process destroyed . We are convinced that the issue of missile proliferation can and must be dealt with without disrupting the ABM Treaty . Instead of the military solution to the issue , we suggest a constructive approach , through political and diplomatic measures . We are ready to engage in the broadest possible consultations on the whole range of missile non-proliferation issues with all interested countries . Furthermore , as you are aware , initial results are already available from work with those countries mentioned by the United States as posing a missile threat . We are satisfied that the United States has started to give positive consideration to Russia 's ideas concerning the creation of a global missile and missile technology non-proliferation control system . It is significant that the joint Russian-United States statements on the outcome of the recent meetings between the presidents of the two countries in Okinawa and in New York registered their readiness for joint action to resolve the issue of missile proliferation , including the implementation of Russia 's proposals for a global control system . The role of the ABM Treaty goes well beyond arrangements among the narrow circle of States to which it is formally confined . This was clearly demonstrated by the results of the vote at the fifty-fourth session of the General Assembly on the resolution on the preservation of and compliance with the ABM Treaty , which was put forward by Russia jointly with Belarus and China . We see these results as endorsement of our efforts to enhance the effectiveness and authority of that Treaty . Any country 's attempt to strengthen its own security at the expense of that of others is doomed to failure , as history has shown . The collapse of the ABM Treaty and the consequent collapse of all the other nuclear disarmament treaties based on it would undoubtedly cause many States to reconsider their priorities and methods for ensuring security . In this regard , the resolution adopted in 1999 by the General Assembly sends an unmistakably clear message to those seeking to disrupt the ABM Treaty . We plan to submit a draft resolution to the General Assembly at its current session in support for the ABM Treaty . The text of the draft , which is virtually identical to that of last year 's resolution , was circulated a few days ago to all delegations here in Geneva . The draft is not confrontational . It is based on the language of the Treaty itself and on the joint statements on the issue by the Presidents of Russia and the United States of America . It is not directed against any country , nor does it prejudice anyone 's interests . Its purpose is clear and entirely constructive : to ensure that , through rigorous and full compliance with the ABM Treaty , the Treaty is preserved and strengthened . Adoption by the General Assembly at its current session of the draft resolution on the preservation of the ABM Treaty would send a new signal to the international community on the importance of ensuring the viability of this Treaty . We expect our draft to receive broad support from the international community . The task of preserving the ABM Treaty under current conditions is closely related to the prevention of an arms race in outer space , another issue that has been entrusted to our Conference . The ABM Treaty prohibits the development , testing or deployment in outer space of missile defence components . Application of its regime will keep outer space free of an entire class of space weapons - anti-missile weapons . We are firmly convinced that the preservation of this agreement will constitute a major obstacle to any possible escalation of the arms race , both here on Earth and in outer space . We share the view of those delegations who consider that the elaboration at this early stage of specific measures to prevent an arms race in outer space will help obviate the enormous costs involved in disarming space in the future . In this context , I would like to draw the attention of the participants here in the Conference on Disarmament to the proposal made by President Putin at the Millennium Summit , that an international conference on the prevention of demilitarization of outer space should be convened in Moscow in spring 2001 under the auspices of the United Nations . The Russian Federation supports the re-establishment in the Conference on Disarmament of an ad hoc committee on the prevention of an arms race in outer space with the mandate to elaborate specific practical arrangements which will prevent near-Earth space from being transformed into a new arena for confrontation between the great Powers . As we see it , the international community should set as one of its priorities the earliest possible elaboration of an international legal regime prohibiting the introduction in outer space of other weapons besides weapons of mass destruction , primarily strike weapons . At the same time , it is our firm view that the work of the Conference on Disarmament on outer space issues should not obstruct the peaceful exploration of outer space . I should like to reaffirm that we look favourably on the groundwork being carried out by Canada on the non-weaponization of outer space , the French ideas for a notification regime for launches of space objects and ballistic missiles and other proposals by participants in the Conference which could serve as a basis for substantive discussion . In concluding my statement , I would like to cite the words of President Putin at the Millennium Summit , “ I am convinced that by building upon a just world order and strategic stability , we shall ensure sustainable development for civilization . The Russia of today is , as never before , open , responsible and ready for cooperation on the basis of equal partnership . ” The PRESIDENT : I thank the representative of the Russian Federation for his statement and for the kind words addressed to the Chair . I now give the floor to the representative of Algeria . Mr. BENFREHA ( Algeria ) ( translated from French ) : I thank you , Mr. President , for all the efforts you are making and for the way in which you are conducting our work . I also must pay particular tribute to Mr. Abdelkader Bensmail , Deputy Secretary-General of the Conference , for the work he has done in the Conference . I have the honour , on behalf of the Group of 21 , to make the following statement , which I shall deliver in English : ( continued in English ) As the 2000 session of the Conference on Disarmament draws to a close , the Group of 21 regrets that the Conference on Disarmament , as the single multilateral negotiating forum on disarmament , has once again been unable to agree on a programme of work during its current session . This failure is primarily due to the continued inflexibility of some of the nuclear-weapon States regarding negotiations on nuclear disarmament and on measures to prevent an arms race in outer space . The Group of 21 emphasizes that nuclear disarmament remains the highest priority for the Conference on Disarmament and stresses the necessity of establishing in the Conference an ad hoc committee on nuclear disarmament under agenda item 1. In this regard , the Group invites the Conference 's attention to its proposals contained in CD/1570 , CD/1571 and CD/1549 and to the statement made by the coordinator of the Group on 27 January 2000. The Group emphasizes that outer space is the common heritage of humankind . In this regard , the prevention of an arms race in outer space has assumed greater urgency because of legitimate concerns that existing legal instruments are inadequate to deter imminent attempts aimed at the further militarization of outer space and its possible weaponization . In accordance with resolution 54/53 of the United Nations General Assembly , the Group emphasizes the urgent need for commencement of substantive work in the Conference on Disarmament on the prevention of an arms race in outer space . In this connection , the Group calls upon the States parties to the ABM Treaty to comply fully with its provisions . The Group of 21 reaffirms its flexibility and readiness to continue to contribute constructively and extends its full support to the efforts of the President of the Conference . The Group of 21 urges other groups to display matching flexibility so that substantive work can commence early next year within the framework of a programme of work which reflects the priorities and interests of all delegations . The PRESIDENT : I thank the representative of Algeria for his statement and the kind words addressed to the Chair . That concludes my list of speakers for today . Does any other delegation wish to take the floor at this point ? I give the floor to Ambassador Hu of China . Mr. HU XIAODI ( China ) ( translated from Chinese ) : Mr. President , I have listened attentively to the previous speakers . Last week I took the floor to convey , yet again , the views of the Chinese delegation on national missile defence and the work programme of the Conference on Disarmament . I would like to take this opportunity to present further views on these two issues . First , with regard to national missile defence , the reason advanced for developing and employing such systems is defence against the missile threat posed by certain so-called “ countries of concern ” . It is manifest to all , however , that those countries , given their military capacity and technology and their overall national strength , simply are not in a position to pose any military threat in the foreseeable future to the militarily most powerful country in the world . They are even less likely to pose any threat of missile-borne weapons of mass destruction . Still more important is the lack of motive . No small country would ever attack or threaten to attack the militarily most powerful country in the world with missile-borne weapons of mass destruction , unless it had decided to commit suicide . For that reason , attributing the need to develop and deploy a national missile defence system to the missile threat posed by so-called “ countries of concern ” is far from convincing . It is only a clumsy pretext . International arms control , disarmament and security treaties concluded in the past are not necessarily unamendable in the light of new circumstances . Any amendment ought , however , to promote the purpose and objective of the treaty concerned , namely , international peace and security . If the effect of an amendment is to undermine the treaty 's purpose and objective and to jeopardize international peace and security it must be rejected and opposed . The attempt to amend the ABM Treaty to allow the deployment of national missile defence systems is precisely such a case . It is an incontestable fact that the country possessing the world 's most sophisticated space technology is busy pursuing its plan to develop space weapons . The memory of the “ Star Wars ” programme of the 1980s remains fresh in our mind . The long-range plan to develop a space military strategy , drawn up in April 1998 , is also no secret . It explicitly states that military space capabilities will become a major factor in ensuring that country 's national security and implementing its military strategies and that the primary task of its space force in the twenty-first century is to seek superiority in space . For that purpose , the space command of that country has promoted such operational concepts as securing control of space and global engagement . This is the background against which the development of space weapons has been stepped up , with the national missile defence programme as part of the overall effort . Space systems are an important component of the national missile defence programme . Space will also become the battlefield for national missile defence . The national missile defence system currently being developed is only the first stage in the overall national missile defence plan . More advanced national missile defence systems will follow ; even more weapon systems will be deployed in outer space . The danger of the weaponization of outer space and an arms race in outer space is therefore very real . It is essential for the international community to negotiate now an international treaty to prevent the weaponization of outer space and an arms race in outer space . With regard to the work programme of the Conference on Disarmament , to date the Conference has been unable to carry out any substantive work for two consecutive years . This is a matter of profound concern to China and it earnestly hopes that the Conference will be able to break the impasse as soon as possible . As everyone can see , the impasse is caused by the different parties taking different items of the Conference 's agenda as their top priority . Is there any way out of this impasse ? In my opinion , the answer is yes . What we need to do is to take the concerns of all sides into consideration in a comprehensive and balanced way and set up ad hoc committees with negotiating mandates on the priority items of all sides . That is the only approach that will bring a solution that is genuine and fair without favouring any side , and therefore realistic and workable . We will never reach consensus on the work programme and break the impasse if any one delegation insists on negotiating only on its own priority items and will not permit negotiations on the priority items of other parties . Regrettably , some delegations are persisting in this , which has thus far kept the Conference on Disarmament from establishing any working mechanism , including ad hoc committees , on nuclear disarmament and outer space and prevented it from carrying out any substantive work . China advocates the establishment of an ad hoc committee on outer space , to negotiate a legal instrument to prevent the weaponization of outer space and an arms race in outer space . I have already had occasion , last week and many times before , to elaborate on our reasons for this . China 's position on nuclear disarmament is consistent . We support the position of the Group of 21 with regard to the establishment of an ad hoc committee to conduct negotiations on nuclear disarmament . Although negotiations on FMCT are not a priority item for us , China does not oppose such negotiations . However , in view of certain negative developments , including the setback of CTBT and , in particular , the ongoing national missile defence programme , any formula would be unacceptable to us if it led only to negotiations on FMCT , without also leading to negotiations on outer space . It is clear that there are two possible approaches . One is that advocated by China , namely , to launch negotiations on the priority items of all parties . The other approach is to negotiate only on the priority of one country and not to permit negotiations on the priorities of others . China 's approach , if acceptable to all , could certainly lead to consensus on the Conference 's work programme . By contrast , the other approach , if accepted by all , could never lead the Conference out of its impasse . It is the hope of the Chinese delegation that in the future all sides will treat each other equally and deal with issues in a just and fair way , rather than attending only to their own interests at the expense of the interests of the majority of other countries . In conclusion , Mr. President , the Chinese delegation would like to convey its appreciation for your continued efforts to find a good solution to the problem of the work programme and for your guidance in preparing the annual report of the Conference on Disarmament and the draft General Assembly resolution . We are also grateful to the distinguished Secretary-General and Deputy Secretary-General of the Conference and to all the staff of the secretariat and of the Conference Support Branch for the enormous help they have given us in our work . Mr. MAIMESKUL ( Ukraine ) ( translated from French ) : Mr. President , you still have New York and the General Assembly ahead of you , so let me take this opportunity to wish you every success in your mission . I would like in particular to thank you for your kind words to me . You will recall that , at the height of Ukraine 's presidency two years ago , it was my privilege to welcome you to Geneva . Two years ago , we were able to overcome the difficulties , uncertainties and , on occasion , opposition which faced us and we resolved to move forward . Notwithstanding the difficult times which the Conference is currently experiencing , I believe in its potential and its future . As was said one and a half years ago by Ambassador Joëlle Bourgois of France , the very existence of the Conference on Disarmament is a confidence-building measure which nothing can ever replace . All we need now is a result . Before concluding , Sir , I would like to thank all my colleagues for their cooperation and to bid them all farewell for now , but not for ever . I thank the Secretary-General of the Conference , Mr. Petrovsky . I thank you , Mr. Bensmail , for having so generously shared your unique experience with the Ukrainian delegation , particularly during our tenure as President . I thank the whole team of the Conference secretariat for their readiness to help , their kind consideration and their counsel . The PRESIDENT : I thank the representative of Ukraine for the kind words addressed to the Chair and for his statement . I now give the floor to the Ambassador of Ecuador . Mr. BETANCOURT RUALES ( Ecuador ) ( translated from Spanish ) : Thank you , Mr. President . For me it is a great honour to speak to the distinguished members of this important forum , as I begin my term of office in the area of disarmament as head of the delegation of Ecuador . I thank you for your kind words of welcome , which commit me not only to the primary objectives of this Conference but also to continued cooperation in the essential work that all Governments are carrying out to maintain international peace and security . For these reasons , Sir , I must express my gratitude for all the efforts made by your predecessors and , in particular , my full support for your own efforts as President . In my view , the Conference on Disarmament has as its purpose the coordination of all political aspirations on multilateral issues related to peace , with particular emphasis on disarmament , and progress towards a new , positive climate in international security . The uncertainties and the challenges that this Conference has come up against in recent years may eventually be dispelled if all members heed the call of the international community by cooperating more closely and striving , for example , for consensus on a necessary programme of work for the Conference . Ecuador associates itself with those countries which have stated that this Conference must not shirk its responsibility any longer . It must begin the new millennium with an agenda that will safeguard the process of nuclear disarmament and nuclear non-proliferation , an agenda that will be very clear and inspire hope in all humankind . Ecuador believes that nuclear disarmament is a priority of the international community ; at the same time disarmament is one of the greatest challenges of our times , and one that we must overcome as soon as possible . The PRESIDENT : I thank the representative of Ecuador for his statement and the kind words addressed to the Chair . I now give the floor to the representative of India . Mr. SOOD ( India ) : Mr. President , I have sought the floor to thank you for your warm words of welcome to me this morning . I would also like to convey my appreciation for the many friendly faces that I see around this room as I return to this chamber after an absence of almost 11 years . I look forward very much to working with all my colleagues here and I am quite sure that we should be able to move things forward in the months to come , as we have under your presidency this month . I would like to add that we are aware of the fact that , for the last couple of years , we have not seen active negotiations taking place in the Conference on Disarmament , but nonetheless , the fact that my Government has chosen this moment to appoint me here as head of the Indian delegation to the Conference on Disarmament is a reflection of India 's deep commitment to multilateral negotiations and of its awareness of the importance of multilateral negotiations in disarmament and the unique position that this particular institution has in this field . The PRESIDENT : I thank the representative of India for his statement and the kind words addressed to the Chair . I now give the floor to the representative of the United States of America . Ambassador Grey , you have the floor . Mr. GREY ( United States of America ) : I regret that the distinguished representative of China has seen fit again to misrepresent the plans and intentions of the United States . In my view , these misrepresentations become less persuasive with each repetition . When I spoke on 31 August and 14 September , I addressed these questions in considerable depth . It would be a disservice to the Conference and disrespectful to those here present for me to repeat the same comprehensive answers I have already given , so I shall refrain from doing so today . But I will note that the way to get the Conference on Disarmament back to work is to move along the lines suggested by three past presidents , the ambassadors of Algeria , Belgium and Brazil . My delegation is prepared to proceed in this direction and , I would remind you , so too are the vast majority of the Conference 's members . The PRESIDENT : That concludes the list of speakers that I have for today . Does any other delegation wish to take the floor ? That does not seem to be the case . I will then invite you to formalize the provisional agreements reached at the informal plenary meeting on the draft annual report , as contained in document CD/WP.511 , together with the revisions contained in document CD/WP.512 . Since we were able to go through the draft annual report , paragraph by paragraph , at the informal plenary meeting held last Thursday , and since we have gone through the revisions contained in CD/WP.512 earlier this morning , I shall now proceed to the formal adoption of our annual report as a whole as revised . May I take it that the annual report in its entirety , as contained in document CD/WP.511 and as revised in CD/WP.512 , is adopted ? It is so decided . The secretariat will issue the report as an official document of the Conference in all official languages as soon as feasible . Does any delegation wish to take the floor at this stage ? I should like to inform the Conference that , as Cameroon has notified the secretariat that it will not be in a position to preside over the Conference from 1 January 2001 , as provided for in rule 9 of the rules of procedure , the representatives of the following member States will preside over the Conference in 2001 : Canada from 1 January to 18 February ; Chile from 19 February to 18 March ; China from 19 March to 27 May ; Colombia from 28 May to 24 June ; Cuba from 25 June to 19 August ; and the Democratic People 's Republic of Korea from 20 August to 31 December 2001. I would now like to give the floor to the Deputy Secretary-General of the Conference , Mr. Abdelkader Bensmail , who wishes to make a brief statement . Mr. BENSMAIL ( Deputy Secretary-General of the Conference on Disarmament ) ( translated from French ) : Mr. President , dear friends , as you know , I am about to leave my position as Deputy Secretary-General of the Conference on Disarmament and as Director of the Geneva Branch of the Department for Disarmament Affairs . I therefore wish to take advantage of this last plenary of the 2000 session to take my leave of you all and briefly to share a few personal reflections with you . Let me reassure you at the very outset : I do not intend to apply the tacit rule in the Conference that the length of a valedictory statement should be one page per year of service with the Conference . I certainly do not intend to inflict a 20-page statement on you , nor do I intend to abide by the ritual but perilous exercise of drawing definitive conclusions on the future of the Conference . Others have done that before me and with greater authority , so I will merely make a few comments inspired by the long experience I have gathered in this forum . It is my great privilege to have been associated with the Conference on Disarmament since its very beginnings , following the first special session of the General Assembly on disarmament in June 1978. I was a member of the Algerian delegation which had the honour of being the first to preside over the Conference in January 1979 and thus helping to do the groundwork for its future work . My move from the Algerian diplomatic service to the secretariat here in March 1980 was thus a natural progression , because in fact I continued to deal with the same subjects , albeit from a different standpoint , since in that new office I was no longer defending the position of my Government but serving the interests of all delegations and working to seek consensus . The move was not an easy one but the counsel which I received from my superiors was of great assistance to me at the time . When one day I asked the first Secretary-General of the Conference , the late Ricki Jaipal , what the golden rule was for the secretariat , he said : “ The secretariat should be seen and not heard . ” I think I can say that I have scrupulously stuck to that rule throughout my service , except for one particular occasion when there was an attempt to question the secretariat 's integrity . Thus , I was present at the birth of this institution . I witnessed the immense hopes surrounding it , that it would help rid the world of the threat of weapons of mass destruction and help create an international community determined to reduce conventional weapons to levels compatible with the preservation of national security . I observed its hesitant steps as it tried to forge consensus on priorities for negotiation . I also lived through the Conference 's hours of glory , as it conducted the negotiations which led to the conclusion of the Chemical Weapons Convention in 1992 and the Comprehensive Nuclear Test-Ban Treaty in 1996 , to which processes I made my own modest contribution . And , finally , I have shared your frustration at the Conference 's inability to embark on substantive work on its agenda items . ( continued in English ) The ongoing debate on the role of the Conference in the field of multilateral disarmament diplomacy in the current international security environment is legitimate and necessary . In this connection , it should be recalled that periods of inactivity and deadlock have occurred before in the framework of the predecessors of the Conference on Disarmament , namely , the Ten-Nation Committee on Disarmament , the Eighteen-Nation Committee on Disarmament and the Conference of the Committee on Disarmament . I remember the days when questions were raised as to whether there was a life for the Conference on Disarmament after the conclusion of the Chemical Weapons Convention . These questions were , as I recall , answered with the decision of the Conference to negotiate the Comprehensive Nuclear Test-Ban Treaty . Similar questions are being asked now . Can the Conference overcome the impasse it currently faces , following the indefinite extension of the NPT and the conclusion of the CTBT ? Are we witnessing the emergence of a new model for arms control and disarmament with the “ Ottawa process ” , which led to the agreement on a convention to ban landmines ? Can this experience be repeated in other fields of arms control and disarmament ? Are diplomatic conferences convened through a coalition of like-minded Governments and non-governmental organizations , as a substitute for genuine multilateral negotiations , which are the only negotiations that can ensure universal adherence to treaties and their effective implementation ? The debate on all these questions is not over and is unlikely to be conclusive for the simple reason that the nature of the issues to be addressed in the field of arms control and disarmament , their complexity and magnitude , require that all possible avenues , whether bilateral , regional or global , are fully explored and used . The current deadlock in the Conference on Disarmament has been and continues to be the subject of various interpretations . While it is recognized that the Conference , as an institution , has served the international community well in the past , and that its potential for other multilateral negotiations remains intact , the prolongation of this stalemate is a source of concern to all . The Conference 's value cannot , and should not , be reduced to a simple accounting of the number of treaties it produces . The situation it faces can be largely attributed to a fundamental divergence of views on the wider question of what is the international disarmament agenda after the end of the cold war , the conclusion of the Chemical Weapons Convention , the indefinite extension of the Non-Proliferation Treaty and the Comprehensive Nuclear Test-Ban Treaty . In particular , it relates to the requirement to strike the right balance between the preservation and consolidation of the nuclear non-proliferation regime and the need to accelerate and multilateralize the nuclear disarmament process , while at the same time preserving and enhancing strategic stability . Preparing the ground for future negotiations through discussions and technical work is a prerequisite for the start of genuine negotiations . All major negotiations have been preceded by a pre-negotiation stage , in which some shared understanding is reached that a security problem exists and that it must be addressed multilaterally . This process may be arduous and time-consuming , but it provides the guarantee that the end-product , that is to say , treaty-making , is based on solid foundations which take into account the security concerns of all and therefore ensures the universality and effectiveness of the agreements reached . What is required is a common willingness of all the membership of the Conference , making full use of its in-built flexibility and recognized expertise , to develop a workable and balanced programme of work which takes into account the priorities and concerns of all . Multilateral disarmament forums have always evolved over the years in response to changed political realities . The Conference on Disarmament is no exception in this respect , and the difficulties it now faces are not due to what is perceived by some as the rigidity of its rules of procedure , of its working methods and the group system . They are rather a reflection of the complexity and the dynamics of contemporary international relations , and therefore all efforts should focus on the creation of a political climate conducive to the full use of the Conference as a negotiating forum , in particular on the restoration of a minimum harmony among the major players . ( continued in French ) I realize that I have strayed somewhat from my intention not to embark on serious political comment , but I am sure that you will not hold that against me . My long association with the Conference on Disarmament has been a valuable experience for me at all levels , personal , political , intellectual and cultural . The friendship and trust that you and your predecessors have always shown towards me has really made things very much easier for me and I am grateful to you for that . I would not want to conclude these comments without conveying my sincere thanks to the whole team which has given me such valuable assistance in carrying out my duties over all these years : Hannelore Hoppe , Silvana da Silva , Vladimir Bogomolov , Jerzy Zaleski , Sonia Koppe , Alexandre Golay , Yvonne Santa Eugenia , Charlotte Laut Hernández , Cheryl Darby , Annette Ekberg , Lynne Hardewall and Saïd Zoughy were skilful , devoted colleagues , always ready to help and to put up with my Mediterranean character . And , finally , my thanks go to the interpreters , whom we so often put through the mill and who have always responded courteously to the sometimes unreasonable demands placed on them by the Conference . The PRESIDENT : I thank Mr. Bensmail for his profound and enlightening statement . Would any delegation like to take the floor at this point ? I see the representative of France . Ambassador de La Fortelle , you have the floor . Mr. de La FORTELLE ( France ) ( translated from French ) : Mr. President , my dear colleagues , the interpreters , ladies and gentlemen , the Deputy Secretary-General of the Conference on Disarmament , Abdelkader Bensmail , has just given us some sad news today : for him this will be the last plenary meeting of the Conference on Disarmament in Geneva . Fortunately , he will be accompanying many of us to New York to follow the work of the First Committee and will take his retirement thereafter . It is with great sadness that we will see him leave after a long career that has taken place , if I may say so , on both sides of the looking-glass : first , as a diplomat representing Algeria , and then as an international official in the United Nations . At the risk of offending his well-known modesty , I will recall the major stages of his university , professional and family life which have made of him both a great Algerian and a great Frenchman . Abdelkader Bensmail attained outstanding academic success in my country . He has a postgraduate degree in English and degrees from the Toulouse Institute of Political Studies and the Institute for Foreign Affairs in Paris . With such fine qualifications , a career in international affairs was unavoidable and it is indeed that career that he chose . Abdelkader Bensmail began his career in the Algerian diplomatic service and served his country with distinction . As he has recalled to us , he became an international civil servant with the United Nations first in New York , in the International Affairs Department , and then in Geneva in the Conference on Disarmament . In October 1993 , the Secretary-General of the United Nations appointed him to the post of Deputy Secretary-General of the Conference on Disarmament and head of the Geneva Branch of the United Nations Centre for Disarmament Affairs . As you can see , at the end of a career both varied and full , his outstanding merits have always received due appreciation and positions of high responsibility have been conferred upon him , in particular , the post which he has held for the last seven years here in Geneva . Abdelkader Bensmail has always acted in a manner both effective and discreet . He has rarely taken the floor , and he has told us why , but his advice was always valuable , particularly for us . As he departs , he will be taking with him the memory of the Conference . We could always turn to him to learn of those ever useful precedents . My predecessors were able to appreciate his many qualities during both the negotiations of the Convention on Chemical Weapons and those of the CTBT , and I believe I speak for all of us when I say that we will all miss him in the time to come , as he enjoys his well-deserved retirement . It remains only for me to convey my very best wishes to the Deputy Secretary-General and to hope that he enjoys happiness and the best of health in his new life . The PRESIDENT : I thank the representative of France for his statement . Would any other delegation like to take the floor ? I see the representative of Egypt . Ambassador , you have the floor . Ms. ABOUNAGA ( Egypt ) ( translated from Arabic ) : Mr. President , since I come from the same region as Mr. Bensmail , might I be allowed through you to say these few words to him ? On behalf of the Egyptian delegation , I would like to express our gratitude and appreciation to Mr. Abdelkader Bensmail , the Deputy Secretary-General of the Conference on Disarmament , who unfortunately is leaving us today to enjoy what I am sure will be a better life after his official duties and after all the dedicated services that he has rendered , for almost a quarter of a century , to his country , Algeria , and in furtherance of the aims of the Conference on Disarmament and the programmes and agenda for disarmament in general . As we and previous representatives of our countries to this Conference can testify , these services were rendered over the years in a highly competent manner . They were made possible by virtue of his commendable personal qualities , which he described , very modestly , as being possibly attributable to his Mediterranean character . They certainly turned him into a team leader who has worked with a great deal of skill and efficiency . Today we bid him farewell , but only here in the Conference , and may I personally , on behalf of the Egyptian delegation , wish him every success in his future life . I am quite sure that , in mind , thought and spirit , he will not abandon the Conference on Disarmament or the objectives of disarmament and that he will always remain very close to us here in the Conference . I wish him all the best and reiterate my sincere gratitude and appreciation on behalf of the Egyptian delegation . Thank you . The PRESIDENT : I now give the floor to China . You have the floor , Ambassador Hu . Mr. HU XIAODI ( China ) ( translated from Chinese ) : Thank you , Mr. President . Like the two previous speakers , I shall also deeply regret the impending retirement from office of our Deputy Secretary-General , Mr. Bensmail . With his outstanding diplomatic skill and rich work experience , Mr. Bensmail has over the course of many years performed a great deal of valuable work for our Conference on Disarmament , and has rendered enormous assistance to all the delegations , for which he has earned the highest praise . In fact , since the very foundation of the Conference and throughout his work with this forum , he has served as a veritable living encyclopaedia of all the issues relating to the Conference on Disarmament . The statement which he has just delivered is full of wisdom and merits our deep consideration . Without question , his departure will be a loss both to the Conference on Disarmament and to us all . On behalf of the Chinese delegation , I would like to express our wholehearted appreciation for all the help that he has given us over all the years since we first joined the Conference on Disarmament . I also sincerely wish him every success for his future . The PRESIDENT : I now give the floor to the representative of Algeria . Mr. BENFREHA ( Algeria ) ( translated from French ) : As a fellow countryman , it is incumbent on me , on behalf of my country , to pay special tribute to Mr. Abdelkader Bensmail , Deputy Secretary-General of the Conference on Disarmament , for the quality of the work he has performed here in the Conference on Disarmament and , at the same time , to extol the efforts he has made since the establishment of this multilateral forum to instil in it a spirit of consensus . We see in Mr. Bensmail a consummate product of the Algerian diplomatic service , the service in which he embarked on his professional career . His exemplary approach to his work was forged in this school of diplomacy , which has always advocated the attainment of consensus in dealing with key issues of disarmament , in the interest of peace and international security . I would also like to associate myself with the eloquent praise expressed by those speaking before me for Mr. Bensmail 's outstanding qualities and to give him my best wishes for his retirement . The PRESIDENT : I thank the representative of Algeria for his comments . Does any other delegation wish to take the floor ? I see the representative of India . Mr. SOOD ( India ) : It is perhaps somewhat presumptuous for a person who has just joined the Conference on Disarmament to seek the floor twice on his very first day in this forum , but this is a rather special day , and I exercise this privilege as one of the people who have known Kader since 1986. It is both strange and somehow special that , as I attend my first plenary in this new appointment , it also happens to be Kader 's last plenary in his present appointment . Many people around this table have spoken about his professional skills , but what I would like first to single out in this enormously rewarding relationship , my personal relationship with Kader , are his generosity with his time , which he so willingly shared with me when I came here for the first time in 1986 , knowing very little about multilateral work and even less about disarmament , and the ease with which we could rely on him to give us the history and the background of issues and to educate us in the niceties of multilateral work . And second I recall his warm hospitality , which I have enjoyed on more than one occasion . The last memorable such occasion was the farewell dinner given in my own honour at his house in 1989. When I was appointed here , one of the things I looked forward to was the chance to resume this close contact , which we had kept up over the years , but within obvious limits , given that we were in different cities . All the same , I am glad that I have been present today at your last plenary meeting in this appointment . I would like to wish you the best of luck and good health , happiness and contentment . The PRESIDENT : I thank the representative of India for his statement . I now give the floor to the representative of the Republic of Korea . Mr. SUL ( Republic of Korea ) : Since this is the first time that I am taking the floor under your presidency , I should like to congratulate you on your assumption of the presidency . Please be assured of my delegation 's full support in carrying out your noble endeavours . I would also like to express my appreciation to Mr. Petrovsky , Secretary-General of the Conference , and to the staff of the secretariat for their excellent job in providing conference services . I have asked for the floor today on behalf of the members of the Western Group to express our regret and deep sadness over Mr. Bensmail 's departure . It is very difficult for me to add anything to the eloquent tributes already paid to Mr. Bensmail this morning . I would like to say , however , how much we have benefited from his vast knowledge and experience in disarmament negotiations , his diplomatic skills and the managerial proficiency which he brought to the Conference . Mr. Bensmail assumed many roles , sometimes as an untiring negotiator , sometimes as a diligent provider of a good and constructive atmosphere for the work of the Conference . His charming personality and engaging character have constantly stimulated the work of the Conference . He was a good friend of the Western Group and , I am sure , of all the delegations to the Conference on Disarmament . We all agree that , with his years of experience and dedication , Mr. Bensmail has become a “ walking library ” of the Conference , given his extensive knowledge not only of all those complicated procedural issues but also of many aspects never recorded in any document . How reassuring it was to know that we could always count on Mr. Bensmail effortlessly to solve what seemed to us unfathomable mysteries . The Western Group expresses its most sincere gratitude to Mr. Bensmail for his dedication and outstanding professionalism . We will miss him very much , but I find consolation in a Korean proverb which wisely says that , while those who meet are destined to part , those who part are destined to meet again . We wish him all the best , continued good health and happiness . The PRESIDENT : I thank the representative of the Republic of Korea for his statement and for the kind words addressed to the Chair . I now give the floor to the representative of Romania . Mr. HORUMBA ( Romania ) : Mr. President , speaking on behalf of the Eastern European Group , I would like wholeheartedly to endorse the kind words of appreciation addressed by previous speakers to Mr. Abdelkader Bensmail . The Eastern European Group would also like to thank Mr. Bensmail for his efforts in the important office of Deputy Secretary-General of the Conference on Disarmament and to commend him on his long-standing experience and expertise in the field of multilateral disarmament , his diplomatic skills and the managerial competence he has displayed in the activities of our unique international body . As we bid farewell to Mr. Abdelkader Bensmail , we wish him every success in the years ahead , long health and prosperity , as well as personal happiness . The PRESIDENT : As I see no other speakers , I shall proceed with some short closing remarks . In my opening remarks I identified two principal objectives in my work as the last presiding officer of the 2000 session of the Conference on Disarmament : to continue the efforts towards finding a compromise on the programme or work and to facilitate the adoption of the Conference 's report to the General Assembly of the United Nations . The second task has just been accomplished , and I am grateful to all delegations for the assistance and the collaboration that have made this possible . I believe that the report which we have adopted is factual and accurate in accounting for the Conference 's activities in the year 2000. With regard to the first task , I am compelled to conclude today , on behalf of this Conference , that we have spent yet another session mostly on trying to pre-negotiate the conditions for our possible future negotiations on the different topics of our agenda , upon which we happen to agree . My consultations to date have confirmed that we are still short of a compromise on a programme of work for the Conference . While there is a broad measure of agreement on most of the elements for such a programme , there are two issues , nuclear disarmament and the prevention of an arms race in outer space , that have still to be tackled further . In addition , to be able to agree about anything in the programe of work , it seems that first we have to agree about everything . There were times when the situation seemed so serious that , as the saying goes , we could only joke about it . It is clear that we have before us a tall order and there should be nothing exceptional about the fact that it is taking us so long to perform . That having been said , these past four weeks I have also become aware of a number of promising signs in the Conference on Disarmament . Of the two outstanding issues on our draft programme of work , our positions on nuclear disarmament seem to be a little closer to convergence today than they were about a year ago . In addition , most of the delegations with which I have had meetings share the same concern and similar perceptions with regard to the delicate stage at which we find ourselves in the Conference on Disarmament . The positive attitude of all members in preparing our annual report to the General Assembly , as well as the contents of that report , are also testimony to the good will prevailing in the Conference for our endeavour to surmount the hurdles that face us . Our joint efforts brought about an encouraging development in our report CD/1624 , as the accumulation of new constructive ideas expressed in the Conference during the current and previous years . The report that we adopted delivers a forward-looking recommendation to me and to my successor to conduct intensive consultations during the inter-sessional period on the basis of the progress that has already been achieved . I intend those consultations to be open , pragmatic and cooperative , with the sole objective of preparing a good beginning for the 2001 session . All in all , provided we are able to demonstrate the necessary political will , we may well be just a couple of critical steps away from the desired compromise and the start of substantive work in the Conference on Disarmament . As in a long-distance race , the last few steps often prove to be the most difficult . But I believe that these steps will not be impossible to make ; we are , after all , carrying the baton forward into the next millennium ( please forgive the cliché , but desperate times call for desperate metaphors ) . At this threshold in time , we the peoples are striving for a safer world , based on development and disarmament . We the peoples prefer to compete in sporting competition , rather than arms races . Our heads of State and Government exercised their political will in resolving , earlier this month , to share the responsibility for international peace and security , assigning special significance to disarmament , amongst other areas . The Conference on Disarmament , as the sole multilateral negotiating forum in its field , has a unique role to play in delivering on this commitment . In conclusion , I would like to express my gratitude to the Secretary-General of the Conference , Mr. Vladimir Petrovsky , who today had to attend a memorial service and unfortunately could not be with us ; to all the members of the secretariat for their efficiency and valuable advice ; to the interpreters , for their patience and dedication ; and to all delegations for their cooperation and understanding . Today is also a special occasion for us . It is my honour and my privilege to pay tribute , on behalf of all the members of this Conference , to the Deputy Secretary-General , Mr. Abdelkader Bensmail , who will be retiring later this year . Mr. Bensmail has had an illustrious diplomatic career , the last 20 and more years of which have been devoted to the Conference on Disarmament and to disarmament in general . His expert guidance and professional competence have been emblematic of the work of the secretariat and will remain as an example to follow . He is what I would call the “ living history ” of this Conference , and I can only hope that some day he will put it all down on paper . Mr. Bensmail , your experience and outstanding contribution will be greatly missed by us all . We wish you and your family good health , good luck and continued success . The next plenary meeting of the Conference will be held on Tuesday , 23 January 2001 , at 10 a. m. The meeting rose at 12.15 p. m. 