
Eleventh session New York , 24-28 June 2002 Statement by the Chairman of the Commission on the Limits of the Continental Shelf on the progress of work in the Commission The eleventh session of the Commission on the Limits of the Continental Shelf was held at United Nations Headquarters , New York , from 24 to 28 June 2002 , pursuant to its decision taken at the ninth session ( CLCS/29 , para . 24 ) and paragraph 20 of General Assembly resolution 56/12 of 28 November 2001. The following 18 members of the Commission attended the session : Hilal Mohamed Sultan Al-Azri , Alexandre Tagore Medeiros de Albuquerque , Lawrence Folajimi Awosika , Harald Brekke , Galo Carrera Hurtado , Noel Newton St. Claver Francis , Peter F. Croker , Indurlall Fagoonee , Mihai Silviu German , Abu Bakar Jaafar , Mladen Juračić , Yuri Borisovitch Kazmin , Wenzheng Lu , Yong-Ahn Park , Fernando Manuel Maia Pimentel , Philip Alexander Symonds , Kensaku Tamaki and Naresh Kumar Thakur . Osvaldo Pedro Astiz , Samuel Sona Betah and Yao Ubuènalè Woeledji did not attend the session . Upon the recommendation of the Subcommission established to consider the submission by the Russian Federation ( CLCS/32 , para . 16 ) , the Commission also invited two former members of the Commission and the Subcommission , Karl H. F. Hinz and Iain C. Lamont , as experts , to attend those parts of the proceedings of the eleventh session of the Commission pertinent to the work of the Subcommission . The Subcommission recommended their participation so that they might answer questions and provide explanations , as necessary , during the consideration by the Commission of the recommendations prepared by the Subcommission in regard to the submission of the Russian Federation . The Commission had before it the following documents : - Provisional agenda ( CLCS/L.14 ) , which , was adopted with amendments ( CLCS/33 ) ; - Original submission of the Russian Federation presented to the Commission on 20 December 2001 , including the executive summary , proposals on lists of geographical coordinates of the points defining the lines of the outer limit of the continental shelf of the Russian Federation in the Arctic and Pacific oceans , and illustrative maps used in substantiating the outer limit of the continental shelf of the Russian Federation in the Atlantic and Pacific oceans ; - Additional materials submitted to the Subcommission on 3 April 2002 , including additional data and information to support the submission of the Russian Federation for the establishment of its continental shelf in accordance with the 1982 United Nations Convention on the Law of the Sea ; - Additional materials for the submission by the Russian Federation on establishing the outer limits of the continental shelf , received by the Secretariat on 15 May 2002 ; - Recommendations of the Commission in regard to the submission made by the Russian Federation on 20 December 2001 of information on the proposed outer limits of its continental shelf beyond 200 nautical miles ( prepared by the Subcommission established for the consideration of the submission made by the Russian Federation . Adopted by the Subcommission on 14 June 2002 , and transmitted for approval to the Commission on the Limits of the Continental Shelf . The meeting was opened by the Representative of the Secretary-General of the United Nations , Ralph Zacklin , Assistant-Secretary-General in charge of the Office of Legal Affairs . In his opening statement , Mr. Zacklin congratulated the members on behalf of the Secretary-General on their election to the Commission . He noted that the Commission was of paramount importance to the United Nations and to the international community and that it was envisaged to serve the cause of maintaining stability in international relations . He pointed out that the Secretariat of the United Nations had stood and continued to stand ready to assist the Commission in carrying out its functions . The Division for Ocean Affairs and the Law of the Sea of the United Nations Office of Legal Affairs had been entrusted with the primary responsibility of that important task . He further pointed out that , at the previous session of the Commission , an important step had been taken with the beginning of the examination of the submission of the Russian Federation . That task illustrated in a striking manner the fact that , in the course of examining each submission of a coastal State regarding the outer limits of its continental shelf beyond 200 nautical miles from its coast , the Commission would have to analyse a large volume of complex geodetic , bathymetric , seismic and geophysical data in order to verify that the geological and geomorphologic conditions supported the submission . He assured the Commission of the cooperation of the Secretariat and emphasized that the expectations of the international community were high with regard to the skilful and independent discharge of members ' functions . The results of that examination would prove that the members of the Commission had applied their expertise with complete independence and integrity , allowing no political considerations whatsoever to enter into their deliberations during the examination of submissions . The members would deliberate with regard only to the requirements of the Convention and the completeness and accuracy of the data and material submitted . Mr. Zacklin then presided over the election of the new Chairman of the Commission . Following consultations , the Commission elected Peter Croker by acclamation as its Chairman . The Commission also elected three Vice-Chairmen , Osvaldo Pedro Astiz , Lawrence Folajimi Awosika and Mladen Juračić , and the Rapporteur , Yong-Ahn Park . All officers were elected to a term of two and a half years . In accordance with rule 10 of the Rules of Procedure of the Commission ( CLCS/3/Rev.3 ) , each member of the Commission , before assuming his functions , is required to make a solemn declaration in regard to the performance of his duties in the Commission . All members of the Commission present at the eleventh session made the solemn declaration at a ceremony convened for the occasion . Following the ceremony , the Chairman proposed the draft agenda ( CLCS/L.14 ) for consideration by the Commission . One member of the Commission suggested that the agenda should be amended to include training issues . In the absence of objections , the agenda was adopted as amended ( CLCS/33 ) . Subsequently , the Chairman outlined the programme of work . He stated that , in addition to the election of its officers , the Commission was to renew the composition of two of its standing subsidiary bodies , the Standing Committee on provision of scientific and technical advice to coastal States and the Committee on Confidentiality , as well as to re-elect the chairmen of the two open-ended bodies , the Editorial Committee and the Training Committee . He further outlined the schedule for the Commission 's deliberations on the recommendations prepared by the Subcommission established to consider the submission of the Russian Federation . Regarding subsidiary bodies , the Commission , upon nominations from the regional groups , appointed the following members to the Committee on Confidentiality : Osvaldo Pedro Astiz , Samuel Sona Betah , Harald Brekke , Abu Bakar Jaafar and Yuri Borisovitch Kazmin . The Committee met and elected Mr. Jaafar as Chairman , Mr. Brekke as Vice-Chairman and Mr. Astiz as Rapporteur . Upon nominations from the regional groups , the Commission also appointed the following as members of the Standing Committee on provision of scientific and technical advice to coastal States : Lawrence Folajimi Awosika , Noel Newton St. Claver Francis , Mihai Silviu German , Philip Alexander Symonds and Kensaku Tamaki . The Committee met and elected Mr. Symonds as Chairman , Mr. Tamaki as Vice-Chairman and Mr. Awosika as Rapporteur . The Editorial Committee met and elected Harald Brekke as Chairman . At the meeting of the Training Committee , Indurlall Fagoonee was elected Chairman . The Commission then began its deliberations of the recommendations prepared by the Subcommission . In that connection , one member of the Commission , Mr. Kazmin , expressed his view that pursuant to article 5 of Annex II to the Convention and paragraph 16 in section VII of the Modus Operandi of the Commission ( CLCS/L.3 ) , the representatives of the coastal State were entitled to participate in the proceedings , without the right to vote . He emphasized that , in his opinion , the discussion of the recommendations was part of the relevant proceedings referred to in article 5 and that the provision of the Convention should in this case prevail over rule 51 of the Rules of Procedure of the Commission and that the delegation of the Russian Federation should be present at the meetings of the Commission when the recommendations regarding its submission were considered and adopted . ( Rule 51 stipulates , inter alia , that “ the coastal State shall , in accordance with article 5 of Annex II to the Convention , be invited to send its representatives to participate , without the right to vote , in the proceedings deemed relevant by the Commission . ” ) The Chairman pointed out that no official communication from the coastal State expressing the wish for its representatives to be present during the proceedings had been received by the Chair or the Secretariat , and that the Commission would only address the issue if and when such a communication was actually received . Subsequently , on 26 June , the Chairman received through the Secretariat a letter from the Permanent Representative of the Russian Federation to the United Nations informing him that a delegation of the Russian Federation was present at Headquarters in order to make a presentation on the submission for the benefit of new members of the Commission or to answer any additional questions regarding the submission that the Commission might have . In the renewed discussion regarding the participation of representatives of the coastal State in the proceedings , Mr. Kazmin restated his arguments concerning the right of the representatives of the coastal State pursuant to article 5 of Annex II to the Convention to participate in the proceedings . However , a differing opinion was expressed by the Chairman , namely , that the Rules of Procedure developed the provision of article 5 of Annex II , and that the Rules had been adopted a long time ago , and had been widely distributed and made available to all States . It was emphasized that the Commission should continue to be guided in its work by those Rules . It was further pointed out that at the tenth session , the representatives of the coastal State had already been invited by the Commission on two separate occasions to present the submission and that , furthermore , the Subcommission had held six meetings of consultations in the form of questions and answers between the members of the Subcommission and the representatives of the coastal State . In addition , it was emphasized that , in accordance with rule 4 of annex II to the Rules of Procedure , which had been amended by the Commission at its ninth session in May 2001 , “ the deliberations of the Commission and Subcommission on all submissions made in accordance with article 76 , paragraph 8 , of the Convention shall take place in private and remain confidential ” . Therefore , at the current , final stage , the Commission should consider and adopt the recommendations at a private meeting . Owing to the impossibility of reconciling the differing views and of achieving a consensus on the issue , the Chairman suggested that the matter should be put to a vote in which the members would respond to the following question : “ Do you agree that the Commission may discuss the recommendations of the Subcommission and the Commission in a closed meeting , and consider those proceedings as ` not relevant ' for the purposes of inviting the coastal State pursuant to article 5 of Annex II to the Convention and rule 51 of the Rules of Procedure of the Commission ? ” In that context , a number of members pointed out the sensitive nature of the matter and requested that the vote should be conducted by secret ballot , in the light of the provision of rule 38 of the Rules of Procedure of the Commission , which stipulated that the Commission should normally vote by show of hands ( emphasis added ) . The motion to proceed with a secret ballot was approved . In the secret ballot , the question was answered positively by 15 votes against 3 negative votes , out of 18 members present and voting , with no invalid ballots and 12 votes required for a two-thirds majority ( the Chairman having ruled that what was under consideration was a matter of substance ) . After the vote was taken , Mr. Kazmin stated that although he accepted the results of the vote he continued to maintain , and wished to put on record , that the decision was contrary to the provision of article 5 of Annex II to the Convention . The Commission then continued in a closed meeting its deliberations on the recommendations prepared by the Subcommission . The Chairman of the Subcommission , Mr. Carrera , made a presentation on the work of the Subcommission and on the recommendations . He stated , inter alia , that following its establishment during the tenth session of the Commission on 28 March 2002 , the Subcommission had undertaken a brief review of the submission and had come to the conclusion that the consideration of the submission would take more than two weeks . That had been reported to the Commission on the same day . He further stated that the Subcommission had reconvened on 1 April and had held a total of 20 meetings between 1 and 12 April 2002. Six afternoon meetings had been devoted to consultations in the form of questions and answers between members of the Subcommission and the group of experts of the delegation of the Russian Federation . Thirty-six questions had been posed by the Subcommission and written answers had been provided by the team of experts of the Russian Federation during the consideration of the Russian submission . He further noted that a number of points of clarification had been sought from members of the delegation of the Russian Federation , and additional data and information had also been requested . Some of the requested material had been submitted during the consultations . Other additional materials had been provided to the Subcommission through the Secretariat on 15 May 2002. Following those consultations , Mr. Carrera stated , the members of the Subcommission had agreed on the format , contents and main conclusions of a document bearing the working title “ Outline recommendations of the Subcommission ” . Different members of the Subcommission were given the task of drafting the various parts of the document during the inter-sessional period . The Subcommission decided to reconvene in New York from 10 to 14 June 2002 , before the expiration of the term of office of the first membership of the Commission on 15 June 2002. The Subcommission met throughout the week of 10 June 2002 to consider the new material which had been submitted and to finalize its recommendations . Upon the completion of its work , the Subcommission submitted its final recommendations dated 14 June 2002 through the Secretariat to the Commission at the present session . In the second part of his presentation Mr. Carrera elaborated on substantive elements of the recommendations . After a series of deliberations and informal consultations , the Commission concluded its examination of the recommendations prepared by the Subcommission , made several amendments to it and adopted the recommendations of the Commission by consensus . In conformity with the provisions of the Convention , the recommendations of the Commission will be submitted in writing to the coastal State that made the submission , via the Secretariat , and to the Secretary-General of the United Nations . The Commission wished to put on record its special thanks to Karl H. F. Hinz and Iain C. Lamont , who had participated as invited experts in part of the proceedings . The Commission also decided to address a letter of appreciation to all former members of the Commission , namely to Ali Ibrahim Beltagy , Andre Chan Chim Yuk , Kazuchika Hamuro , Karl H. F. Hinz , Iain C. Lamont , Chisengu Leo Mdala , Daniel Rio and Krishna-Swami Ramachandran Srinivasan . The Editorial Committee met during the eleventh session under the chairmanship of Mr. Brekke . In its report to the Commission , Mr. Brekke stated that the Committee had decided , in view of certain discrepancies between basic documents of the Commission ( Rules of Procedure ( CLCS/3/Rev.3 and Corr.1 ) , Modus Operandi ( CLCS/L.3 ) and Internal procedure of the Subcommission of the Commission on the Limits of the Continental Shelf ( CLCS/L.12 ) ) , to undertake a review of those documents and , if necessary , propose editorial amendments to make them consistent . The Scientific and Technical Guidelines should not be subject to such review . Furthermore , it was agreed that the review of the procedural documents should be limited to editorial issues , with a view to eliminating the inconsistencies or making certain provisions more practical and that those efforts should not lead to their revision . The Chairman of the Editorial Committee would consult with members of the Commission and report to it at its next session . The Training Committee met under the chairmanship of Mr. Fagoonee . The Chairman of the Working Group on Training reported that , among other things , the Secretary of the Commission had presented to the Group the information concerning the issues with regard to the preparation of the training manual . The Secretary had also informed the Group that , after consultation , it had been decided that the manual should appear in the form of a kit , consisting of printed material and compact discs with maps , figures and interactive material . The Secretariat further reported that two members of the Commission , namely Mr. Brekke and Mr. Carrera , had agreed to assist the Secretariat as coordinators and that some funds had already been earmarked for the production of the manual . The Secretary also provided information with respect to the status and operation of the Trust Fund for the purpose of facilitating the preparation of submissions to the Commission on the Limits of the Continental Shelf by developing States , in particular the least developed countries and small island developing States , and compliance with article 76 of the United Nations Convention on the Law of the Sea . The Working Group also discussed other training issues and activities , in particular the need for a medium- to long-term training strategy plan , especially bearing in mind the needs of developing coastal States . Under the agenda item entitled “ Other matters ” , the Chairman of the Commission informed the Commission about the proceedings of the twelfth Meeting of States Parties to the United Nations Convention on the Law of the Sea with regard to the Commission and its status at the Meeting . He noted that the Commission had been granted observer status by the Meeting . One member of the Commission referred to the 2000 open meeting of the Commission and informed the Commission about a series of briefings organized by the Permanent Mission of Mexico to the United Nations concerning the implementation of the Convention , in particular its article 76. In that context , he proposed that the Commission should consider holding another open meeting in the future . The members of the Commission endorsed the proposal and agreed , especially in view of the need for planning , that the modalities for the open meeting would be discussed at the next session . The Commission further discussed the time and venue of its next sessions . In view of the fact that the Commission had completed its work on the recommendations , on the submission of the Russian Federation , it was decided not to hold the session originally scheduled to take place from 26 to 30 August 2002. It was further decided that two sessions should be held in 2003. The twelfth session would be held from 28 April to 2 May , followed by two weeks of meetings of a subcommission in the event a submission was made to the Commission . The thirteenth session was scheduled to be held from 25 to 29 August 2003. The Under-Secretary-General for Legal Affairs , the Legal Counsel , Mr. Hans Corell , addressed the Commission at the final meeting of its eleventh session . He welcomed the newly elected members and expressed his support of the important work of the Commission . He pledged that the Secretariat would continue to do its best to provide the required services and technical support to the Commission despite budgetary constraints . Finally , the Commission renewed its expressions of appreciation to the staff of the Division for Ocean Affairs and the Law of the Sea , as well as to the interpreters , translators and other staff for the assistance and services provided during the current session . 