
THE USE , STOCKPILING , PRODUCTION AND 19 September 2000 AND ON THEIR DESTRUCTION Original : ENGLISH Second Meeting Geneva , 11-15 September 2000 ON THE PROHIBITION OF THE USE , STOCKPILING , PRODUCTION The Final Report of the Second Meeting of the States Parties to the Convention on the Prohibition of the Use , Stockpiling , Production and Transfer of Anti-Personnel Mines and on Their Destruction consists of two parts and five annexes as follows : Part I Organization and Work of the Second Meeting Part II Declaration of the Second Meeting of the States Parties Introduction The Convention on the Prohibition of the Use , Stockpiling , Production and Transfer of Anti-Personnel Mines and on Their Destruction provides in Article 11 , paragraphs 1 and 2 , that : AThe States Parties shall meet regularly in order to consider any matter with regard to the application or implementation of this Convention , including : ( a ) The operation and status of this Convention ; ( b ) Matters arising from the reports submitted under the provisions of this Convention ; ( c ) International cooperation and assistance in accordance with Article 6 ; ( d ) The development of technologies to clear anti-personnel mines ; ( e ) Submissions of States Parties under Article 8 ; and ( f ) Decisions relating to submissions of States Parties as provided for in Article 5@ ; and , Meetings subsequent to the First Meeting of the States Parties Ashall be convened by the Secretary-General of the United Nations annually until the first Review Conference@ . At its fifty-fourth session , the General Assembly of the United Nations in resolution 54/54 B requested the Secretary-General , Ain accordance with Article 11 , paragraph 2 , of the Convention , to undertake the preparations necessary to convene the Second Meeting of the States Parties to the Convention at Geneva , from 11 to 15 September 2000 , and , on behalf of States Parties and according to Article 11 , paragraph 4 , of the Convention , to invite States not parties to the Convention , as well as the United Nations , other relevant international organizations or institutions , regional organizations , the International Committee of the Red Cross and relevant non-governmental organizations to attend the Meeting as observers@ . To prepare for the Second Meeting , the Standing Committee of Experts ( SCE ) on the General Status and Operation of the Convention , established by the First Meeting of the States Parties , held two meetings , to which all interested States Parties , States not parties to the Convention , as well as the United Nations , other relevant international organizations or institutions , regional organizations , the International Committee of the Red Cross and relevant non-governmental organizations were encouraged to attend . The first meeting of the SCE was held 10-11 January 2000. During the meeting , participants considered a number of issues relating to the organization of the Second Meeting , including a draft provisional agenda , a draft programme of work , draft rules of procedure and provisional estimated costs for convening the Second Meeting . No objections were raised in connection with the proposals made with respect to the draft rules of procedure , provisional estimated costs and the venue for the Second Meeting , and it was agreed that they , along with all other conference documents with the exception of reports submitted under Article 7 of the Convention , would be finalized in all six languages of the Convention to be put before the Second Meeting . It was also agreed that the record of work of the five Standing Committees of Experts would be communicated to the Second Meeting in the form of a five-page report prepared by each Committee . The second meeting of the SCE was held 29-30 May 2000. During the meeting , no objections were made with respect to the draft provisional agenda and draft programme of work , and it was agreed that they would be put before the Second Meeting . In addition , no objections were made with respect to five-page SCE reports serving as the basis for discussion during the informal consultations to be held at the Second Meeting under agenda item 15 ( with the exception of the report of the SCE on the General Status and Operation of the Convention , which would serve as the basis for discussion under agenda item 11 ) . Between the First and Second Meetings of the States Parties , the Standing Committees of Experts received considerable support from the Geneva International Centre for Humanitarian Demining ( GICHD ) . States Parties expressed their appreciation for this assistance and the GICHD=s contribution to the successful operation of the intersessional work programme . In addition , States Parties recognized that the work of the Standing Committees of Experts benefited greatly from the active participation of relevant non-governmental , regional and international organizations . States Parties expressed their gratitude to these organizations for their substantive involvement in the intersessional work programme . The opening of the Second Meeting was preceded by a ceremony at which statements were delivered by the following : Vladimir Petrovsky , Director-General of the United Nations Office at Geneva ; Adolf Ogi , President of Switzerland ; Martine Brunschwig Graf , State Councillor of the Republic and Canton of Geneva ; Alain Vaissade , Mayor of the City of Geneva ; Her Royal Highness , Princess Astrid of Belgium ; Elisabeth Reusse-Decrey , President of the Swiss Campaign against Landmines ; Sir Paul McCartney and Heather Mills . In addition , a presentation was made by 18 landmine survivors from 14 countries . Organization of the Second Meeting The Second Meeting was opened on 11 September 2000 by the President of the First Meeting of the States Parties , the Minister of Foreign Affairs and Cooperation of the Republic of Mozambique , Dr. Leonardo Santos Simão . The Second Meeting elected by acclamation Ambassador Steffen Kongstad of Norway as its President in accordance with rule 7 of the draft rules of procedure . At the opening session , a message addressed to the Second Meeting by the Secretary-General of the United Nations was read by the Director-General of the United Nations Office at Geneva , and statements were made by Jakob Kellenberger , President of the International Committee of the Red Cross , and Jody Williams , Ambassador for the International Campaign to Ban Landmines . At its first plenary meeting on 11 September 2000 , the Second Meeting adopted its agenda as contained in document APLC/MSP.2/2000/L.1 . On the same occasion , the Second Meeting adopted its rules of procedure as contained in document APLC/MSP.2/2000/L.3 , the estimated costs for convening the Second Meeting as contained in document APLC/MSP.2/2000/L.4 , and its programme of work as contained in document APLC/MSP.2/2000/L.2 . Also at its first plenary meeting , representatives from Cambodia , Canada , France , Hungary , Mali , Mexico , Mozambique , South Africa , Switzerland and the United Kingdom were elected by acclamation as Vice-Presidents of the Second Meeting . The Meeting unanimously confirmed the nomination of Ambassador Christian Faessler of Switzerland as the Secretary-General of the Meeting . C. Participation and credentials in the Second Meeting Sixty-two States Parties participated in the Meeting : Albania , Argentina , Australia , Austria , Belgium , Benin , Bolivia , Bosnia and Herzegovina , Brazil , Bulgaria , Burkina Faso , Cambodia , Canada , Costa Rica , Croatia , Czech Republic , Denmark , Ecuador , El Salvador , France , Germany , Guatemala , Guinea , Holy See , Honduras , Hungary , Ireland , Italy , Jamaica , Japan , Jordan , Liberia , Liechtenstein , Luxembourg , Madagascar , Malaysia , Mali , Mexico , Monaco , Mozambique , the Netherlands , New Zealand , Nicaragua , Norway , Panama , Peru , Philippines , Portugal , Qatar , Senegal , Slovakia , Slovenia , South Africa , Spain , Sweden , Switzerland , Thailand , Tunisia , the United Kingdom of Great Britain and Northern Ireland , Venezuela , Yemen and Zimbabwe . Seven States that ratified the Convention , but for which the Convention had not yet entered into force , participated in the Meeting as observers , in accordance with Article 11 , paragraph 4 , of the Convention and rule 1 , paragraph 1 , second sentence , of the rules of procedure of the Meeting : Bangladesh , Colombia , Côte d=Ivoire , Dominican Republic , Gabon , Ghana and Mauritania . A further forty-one States not parties to the Convention participated in the Meeting as observers , in accordance with Article 11 , paragraph 4 , of the Convention and rule 1 , paragraph 1 , second sentence , of the rules of procedure of the Meeting : Afghanistan , Algeria , Angola , Azerbaijan , Belarus , Brunei Darussalam , Burundi , Bhutan , Cameroon , Cape Verde , Chile , China , Cuba , Cyprus , Estonia , Finland , Georgia , Greece , Indonesia , Iraq , Israel , Kenya , Libyan Arab Jamahiriya , Lithuania , Malta , Morocco , Nepal , Oman , Poland , Romania , Saudi Arabia , Singapore , Somalia , Sri Lanka , Sudan , Turkey , Ukraine , United Arab Emirates , Uruguay , Viet Nam and Zambia . Credentials issued by the Head of State or Government or by the Minister for Foreign Affairs or by a person authorized by one of the above , as required by rule 4 of the rules of procedure of the Meeting , or credentials in the form of photocopies or facsimiles of such a document , or credentials in the form of information concerning the appointment of representatives to the Meeting received in the form of letters or notes verbales or facsimiles thereof from embassies , permanent missions to the United Nations or other intergovernmental organizations or other government offices or authorities , were received from all 110 States mentioned in paragraphs 13 to 15 above . The Meeting accepted the credentials of the representatives of all of the States mentioned in paragraphs 13 to 15 above . In accordance with Article 11 , paragraph 4 , of the Convention and rule 1 , paragraphs 2 and 3 of the rules of procedure , the following international organizations and institutions , regional organizations , entities and non-governmental organizations attended the Meeting as observers : European Union ; International Atomic Energy Agency ( IAEA ) ; International Campaign to Ban Landmines ( ICBL ) ; International Committee of the Red Cross ( ICRC ) ; Organization of American States ( OAS ) ; Sovereign Military Order of Malta ; United Nations Organization : United Nations Secretariat ( Department of Peace-Keeping Operations/United Nations Mine Action Service ( UNMAS ) and Office for the Coordination of Humanitarian Affairs ) , United Nations Children=s Fund ( UNICEF ) , United Nations Development Programme ( UNDP ) , United Nations High Commissioner for Refugees ( UNHCR ) , United Nations Office for Project Services ( UNOPS ) , United Nations Institute for Disarmament Research ( UNIDIR ) , World Health Organization ( WHO ) ; World Bank . In accordance with rule 1.4 , the following organizations attended the Meeting as observers on the invitation of the Meeting : Geneva Foundation , Geneva International Centre for Humanitarian Demining ( GICHD ) , Green Earth Organization , International Development Research Centre ( IDRC ) , League of Arab States , Organisation Internationale de la Francophonie , Organization of the Islamic Conference , PRIO ( International Peace Research Institute , Oslo ) and SOLIDEST . A list of all delegations to the Second Meeting is contained in document APLC/MSP.2/2000/INF.3 . Work of the Second Meeting The Second Meeting held eight plenary meetings from 11 to 15 September 2000. The first three and a half plenary meetings were devoted to the general exchange of views under agenda item 10. Delegations of 34 States Parties , 15 observer States and 7 observer organizations made statements in the general exchange of views , including rights of reply . At the fourth plenary meeting , on 13 September 2000 , the Meeting reviewed the general status and operation of the Convention , expressing satisfaction that 107 States have formally accepted the obligations of the Convention , that 22 States Parties have completed destruction of stockpiled anti-personnel mines and a further 23 States Parties are in the process of stockpile destruction , that the new international norm established by the Convention is taking hold as demonstrated by the behaviour of many States not parties to the Convention , and that approximately US$250 million has been allocated by donors over the past year to address the global landmine problem . The Meeting also expressed satisfaction that efforts to implement the Convention are making a difference , with considerable areas of mined land having been cleared over the past year , with casualty rates having been reduced in several of the world=s most mine-affected States , and with more and better efforts being undertaken to assist landmine victims . As part of the above-mentioned review , the Meeting reviewed the work of the Standing Committee of Experts on the General Status and Operation of the Convention , as recorded in its report contained in annex IV , and focused its attention on actions recommended by the Committee . At the fifth plenary meeting , on 13 September 2000 , the Meeting considered the submission of requests under Article 5 of the Convention . The President notified the Meeting that he had not been informed that any State wished to make such a request at the Second Meeting . The Meeting took note of this . At the same plenary , the Meeting considered the submission of requests under Article 8 of the Convention . The President notified the Meeting that he had not been informed that any State wished to make such a request at the Second Meeting . The Meeting took note of this . In addition , within the framework of the fifth to the seventh plenary meetings , the Meeting held informal consultations on international cooperation and assistance in accordance with Article 6 on the following topics : mine clearance ; victim assistance , socio-economic reintegration and mine awareness ; the destruction of stockpiled anti-personnel mines ; and the development of technologies for mine action . These consultations involved a review of the work of the relevant Standing Committees of Experts , as recorded in their reports contained in annex IV , with a focus on the actions recommended by the Committees . E. Decisions and recommendations At its fifth plenary meeting , on 13 September 2000 , the Meeting considered matters arising from and in the context of reports to be submitted under Article 7 , including consideration of an amendment to the reporting format . The amendment to the format was adopted and is contained in annex III to this report . In addition , the Meeting reviewed the technical ways and means of circulating reports as adopted at the First Meeting , without making any changes to these , with the exception of encouraging States Parties to submit reports electronically and , when submitting an annual update , to highlight changes in relation to earlier reports . Further to the recommendations made by the Standing Committee of Experts on the General Status and Operation of the Convention , the Meeting recognized the continuing importance of the intersessional work programme and , at its fifth plenary meeting , on 13 September 2000 , agreed that the second intersessional work programme would be adjusted according to the President=s paper , which is contained in annex II . Further consultations identified the following States Parties as the Committee Co-Chairs and Rapporteurs until the end of the Third Meeting of the States Parties : - Mine Clearance and Related Technologies : Netherlands and Peru ( Co-Chairs ) ; Germany and Yemen ( Rapporteurs ) ; - Victim Assistance , Socio-Economic Reintegration and Mine Awareness : Japan and Nicaragua ( Co-Chairs ) ; Canada and Honduras ( Rapporteurs ) ; - Stockpile Destruction : Malaysia and Slovakia ( Co-Chairs ) ; Australia and Croatia ( Rapporteurs ) ; - General Status and Operation of the Convention : Belgium and Zimbabwe ( Co-Chairs ) ; Norway and Thailand ( Rapporteurs ) . States Parties recognized that the work of the Standing Committees would require a high degree of coordination between the Co-Chairs to ensure that their work would facilitate the successful implementation of the Convention . In this context the States Parties established a Coordinating Committee of Co-Chairs , which will meet on an ad hoc basis under the chairmanship of the current President of the Meeting of the States Parties . This Committee will serve to coordinate matters relating to and flowing from the work of the Standing Committees with the work of the Meetings of the States Parties . As appropriate , the Committee can call upon any relevant party to assist in its work , including past Presidents , past Co-Chairs , and representatives of other States Parties and organizations . The Meeting also noted the work undertaken by interested States Parties to establish a sponsorship programme to ensure more widespread representation at meetings of the Convention . States Parties endorsed , and expressed satisfaction with , the work of the Standing Committees of Experts , warmly welcoming the reports of the Standing Committees of Experts , as contained in annex IV . The Meeting was in general agreement with the recommendations made by the Standing Committees of Experts and urged States Parties and all other relevant parties , where appropriate , to act with urgency on these recommendations . At its eighth plenary meeting , on 15 September 2000 , the Meeting agreed that the Third Meeting of the States Parties would be held on 18 to 21 September 2001 in Managua , Nicaragua . At the same plenary , the Meeting adopted the Declaration of the Second Meeting of the States Parties , which is contained in Part II of this report . In addition , the Meeting warmly welcomed the President=s Action Programme , contained in annex V , as a practical means of facilitating implementation of the Convention in accordance with the recommendations made by the Standing Committees of Experts . Documentation A list of documents of the Second Meeting is contained in annex I to this report . Adoption of the Final Report and conclusion of the Second Meeting At its eighth and final plenary meeting , on 15 September 2000 , the Meeting adopted its draft Final Report , contained in document APLC/MSP.2/2000/L.8 . We , the States Parties to the Convention on the Prohibition of the Use , Stockpiling , Production and Transfer of Anti-Personnel Mines and on Their Destruction , along with other States , international organizations and institutions and non-governmental organizations , are gathered in Geneva , Switzerland to reaffirm our unwavering commitment both to the total eradication of anti-personnel mines and to addressing the insidious and inhumane effects of these weapons . We celebrate the ongoing growth in support for the Convention and our satisfaction with the general status and operation of it : over 100 States have formally accepted the obligations of the Convention ; over 20 States Parties have completed destruction of stockpiled anti-personnel mines and a further 23 States Parties are in the process of destroying stockpiles ; the new international norm established by the Convention is taking hold as demonstrated by the behaviour of many States not parties to the Convention ; and approximately US$250 million has been allocated by donors over the past year to address the global landmine problem . We recognize that much work remains . However , we are pleased that our efforts are making a difference : considerable areas of mined land have been cleared over the past year ; casualty rates have been reduced in several of the world=s most mine-affected States ; and more and better efforts are being undertaken to assist landmine victims . While we celebrate the success of the Convention , we remain deeply concerned that anti-personnel mines continue to kill , maim and threaten the lives of countless innocent people each day ; that the terror of mines prevents individuals from reclaiming their lives ; and that the lasting impact of these weapons denies communities the opportunity to rebuild long after conflicts have ended . We deplore the continued use of anti-personnel mines . Such acts are contrary to the aims of the Convention and exacerbate the humanitarian problems already caused by the use of these weapons . We call upon all those who continue to use anti-personnel mines , as well as those who develop , produce , otherwise acquire , stockpile , retain and transfer these weapons , to cease now and to join us in the task of eradicating these weapons . We implore those States that have declared their commitment to the object and purpose of the Convention and that continue to use anti-personnel mines to recognize that this is a clear violation of their solemn commitment . We call upon all States concerned to respect their commitments . We celebrate this Second Meeting of the States Parties . But we recognize that achieving the promise of this unique and important humanitarian instrument rests in continuing to be tireless in our efforts to end the use of anti-personnel mines , to eradicate stockpiles , to cease development , production and transfers of these weapons , to clear mined areas in order to free land from its deadly bondage , to assist victims to reclaim their lives and to prevent new victims . We also recognize that these are common tasks for humanity and therefore call upon all governments and people everywhere to join us in this effort . We call upon those in a position to do so to provide technical and financial assistance to meet the enormous challenges of mine action , and , whenever relevant , to integrate these efforts into development planning and programming . We call upon those States that have not formally accepted the obligations of the Convention to ratify or accede to it promptly . We call upon all States that are in the process of formally accepting the obligations of the Convention to apply provisionally the terms of the Convention . And we call upon one another as States Parties to effectively implement the Convention and to comply fully with its provisions . We reiterate that , as a community dedicated to seeing an end to the use of anti-personnel mines , our assistance and cooperation will flow primarily to those who have foresworn the use of these weapons forever through adherence to and implementation of the Convention . While we realize that our task is huge , we warmly welcome the substantial progress that has been made during the intersessional work programme and the accomplishments of this programme=s Standing Committees of Experts . We recall that the intersessional work programme was established at the First Meeting of the States Parties to focus and advance the international community=s mine action efforts and to measure progress made in achieving its objectives . We express our satisfaction that the intersessional work programme has lived up to this promise , has assisted in developing a global picture of priorities consistent with the obligations and time-frames contained within the Convention , and has been undertaken in a manner consistent with the Convention=s tradition of inclusivity , partnership , dialogue , openness and practical cooperation . We acknowledge that the progress made during the intersessional work programme was significantly enhanced by the substantive participation of the International Campaign to Ban Landmines and other relevant non-governmental organizations , and by regional and international organizations , including the International Committee of the Red Cross . We express our gratitude to these organizations for their important contributions and we thank the Geneva International Centre for Humanitarian Demining for its support of the first intersessional work programme and its commitment to continuing to support future intersessional work . Building upon the accomplishments of the intersessional work programme , including increased participation in the work of the Convention by mine-affected States , we call upon all interested parties to continue to participate in the work of the Standing Committees between now and the next Meeting of the States Parties , which will take place on 18 to 21 September 2001 in Managua , Nicaragua . In reflecting upon our progress and accomplishments , and in considering the work that lies ahead , we reconfirm our conviction to make anti-personnel mines objects of the past , our obligation to assist those who have fallen victim to this terror , and our shared responsibility to the memories of those whose lives have been lost as a result of the use of these weapons , including those killed as a result of their dedication to helping others by clearing mined areas or providing humanitarian assistance . Symbol Title APLC/MSP.2/2000/L.1 Draft provisional agenda APLC/MSP.2/2000/L.2 Draft programme of work APLC/MSP.2/2000/L.3 Draft rules of procedure APLC/MSP.2/2000/L.4 Estimated costs for convening the Second Meeting of the States Parties to the Convention on the Prohibition of the Use , Stockpiling , Production and Transfer of Anti-Personnel Mines and on Their Destruction APLC/MSP.2/2000/L.5 President=s paper on revisions to the intersessional work programme APLC/MSP.2/2000/L.6 President=s paper on amending the Article 7 reporting format APLC/MSP.2/2000/L.7 President=s Action Programme APLC/MSP.2/2000/L.8 Draft final report of the Second Meeting of the States Parties to the Convention on the Prohibition of the Use , Stockpiling , Production and Transfer of Anti-Personnel Mines and on Their Destruction APLC/MSP.2/2000/SCE1/1 Report of the Standing Committee of Experts on Mine Clearance APLC/MSP.2/2000/SCE2/1 Report of the Standing Committee of Experts on Victim Assistance , Socio-Economic Reintegration and Mine Awareness ( SCE-VA ) APLC/MSP.2/2000/SCE3/1 Report of the Standing Committee of Experts on Stockpile Destruction APLC/MSP.2/2000/SCE4/1 Report of the Standing Committee of Experts on Technologies for Mine Action APLC/MSP.2/2000/SCE5/1 Report of the Standing Committee of Experts on the General Status and Operation of the Convention APLC/MSP.2/2000/1 Final report of the Second Meeting of the States Parties to the Convention on the Prohibition of the Use , Stockpiling , Production and Transfer of Anti-Personnel Mines and on Their Destruction APLC/MSP.2/2000/INF.1 Summary of Article 7 Reports APLC/MSP.2/2000/INF.2 New Zealand - Ottawa Convention Second Meeting of Parties - Anti-personnel mines retained for training APLC/MSP.2/2000/INF.3 List of participants APLC/MSP.2/2000/MISC.1 Provisional list of participants PRESIDENT=S PAPER ON REVISIONS TO THE Background At the First Meeting of the States Parties ( FMSP ) , it was decided that the President=s Paper on Intersessional Work ( annex IV of the Final Report ( APLC/MSP.1/1999/1 ) of 20 May 1999 ) would guide the intersessional work . In terms of this decision , informal open-ended Standing Committees of Experts ( SCEs ) were established to focus on the following themes : - Mine clearance ; - Victim assistance , socio-economic reintegration and mine awareness ; - Stockpile destruction ; - Technologies for mine action ; - General status and operation of the Convention . It was further decided that the SCEs could meet on , at least , an annual basis . The SCEs= work programmes for 1999 and 2000 were organized in five periods of meetings in September and December 1999 , January , March and May 2000. This work programme , together with the annual Meeting of the States Parties , meant that six periods of meetings were held to promote and facilitate the implementation of mine action in the context of the obligations of the Convention . Although the work programme of the SCEs succeeded in facilitating and supporting the effective functioning of the Convention , the extensive work programme , to a certain degree , constrained participation in , and the efficient organization of , the work of the SCEs . At the 10-11 January 2000 meeting of the SCE on the General Status and Operation of the Convention , the experience with the first meetings of the SCEs was discussed . The need for streamlining the work of the SCEs was identified as well as the importance of broadening the participation in the work of the Committees . At this meeting , it was recommended that the Co-Chairs of this SCE carry out consultations with the objective of formulating concrete suggestions on how the intersessional work programme could be adjusted . In this regard and in addition to various consultations , an informal open-ended consultation session was held at the Geneva International Centre for Humanitarian Demining ( GICHD ) in Geneva on 10 April 2000 , to which States Parties , other States , the International Campaign to Ban Landmines ( ICBL ) and the International Committee of the Red Cross ( ICRC ) were invited . As a result of these consultations , the Co-Chairs of the SCE understood that there was a strong consensus in favour of streamlining the post-Second Meeting of the States Parties ( SMSP ) intersessional work programme . To this end , a series of recommendations were drafted and accepted at the 29-30 May 2000 meeting of the SCE . These recommendations are as follows : Duration of meetings As opposed to the current six periods of meetings , totalling six weeks in duration , it was recommended that only three periods of meetings be held annually , including the Meeting of the States Parties . That is , each SCE shall meet twice between Meetings of the States Parties , once during an initial week-long session of meetings in November or December 2000 and once during a week-long session of meetings in May 2001. Number of SCEs In the interest of promoting efficiency , directly related themes should be merged into one SCE . It was , therefore , recommended that the SCEs for mine clearance and technologies for mine action be combined into one SCE . Therefore , there would be four SCEs as follows : - Mine clearance and related technologies ( meeting for 1.5 days during each of the two week-long sessions of meetings ) ; - Victim assistance , socio-economic reintegration and mine awareness ( meeting for 1.5 days during each of the two week-long sessions of meetings ) ; - Stockpile destruction ( meeting for 1 day during each of the two week-long sessions of meetings ) ; - General status and operation of the Convention ( meeting for 1 day during each of the two week-long sessions of meetings ) . Language of proceedings To further enhance active participation in the work of the SCEs , it was recommended that those States in a position to do so consider making voluntary contributions to have additional languages made available for the intersessional meetings . Dates of meetings It was recommended that the first of the two week-long sessions of meetings take place 4-8 December 2000. It was further recommended that the second of the two week-long sessions of meetings take place 7-11 May 2001. For example : Role of Co-Chairs It was recommended that Co-Chairs seek , as appropriate , the ongoing support and advice of past Co-Chairs . Name Change It was recommended that what has been to date known as Standing Committees of Experts now be referred to as Standing Committees . Co-Chairs and Rapporteurs As a result of consultations , it was recommended that the following States Parties serve as Co-Chairs and Rapporteurs between the SMSP and the end of the Third Meeting of the States Parties : PRESIDENT=S PAPER ON AMENDING THE Background At the January meeting of the Standing Committee of Experts on the General Status and Operation of the Convention , the Article 7 reporting process was discussed . While lessons were learned about difficulties encountered by States Parties in implementing this provision of the Convention , it was the sense of the Co-Chairs that there was general satisfaction with the reporting format accepted at the First Meeting of the States Parties in Maputo . As well , ideas were put forward with respect to possibilities for States Parties to update reports via the Internet . The United Nations should be recognized for the work it has undertaken to develop these ideas . However , concerns were expressed that several States Parties have not submitted reports on time and that of those that have , few have done so electronically . Therefore , it was the sense of the Co-Chairs that while working toward more efficient Internet-based reporting would be a worthwhile medium-term goal , current efforts with respect to Article 7 reporting should focus on increasing the rate of compliance and ensuring that States in a position to do so submit reports electronically . In addition , as part of the work programme of the Standing Committee of Experts on Victim Assistance , Socio-Economic Reintegration and Mine Awareness , the Victim Assistance Reporting Network Group ( VARNG ) developed a draft reporting form and recommended its acceptance at the 29-31 March 2000 meeting of the SCE on Victim Assistance . The recommendation was not accepted , as States Parties expressed concerns , which included concern that the process may duplicate existing reporting efforts , Areporting fatigue@ , the fact that victim assistance is just one of several Article 6 obligations for which reporting is not an obligation for States Parties , and the difficulties that would be faced by mine-affected States in responding to the proposed form . The Co-Chairs of the SCE on the General Status and Operation of the Convention recognized the important role that the SCE on Victim Assistance played in highlighting the need for instruments to indicate the extent to which States Ain a position to do so@ have met their obligations under Article 6 of the Convention , particularly the obligation to Aprovide assistance for the care and rehabilitation , and social and economic reintegration , of mine victims@ . As a possible means of meeting the need highlighted by the SCE on Victim Assistance in a manner that is sensitive to the concerns expressed by States Parties at the March meeting of that Standing Committee , the Co-Chairs of the SCE on the General Status and Operation of the Convention proposed amending the Article 7 reporting format to include an additional form for voluntary reporting on these matters . The proposal put forward by the Co-Chairs was designed to provide an opportunity for States Parties to submit voluntary reports on matters considered important in complying with obligations under Article 6 , paragraph 3. However , this proposal was also designed to provide States Parties with maximum flexibility in making voluntary reports and to capture , at the discretion of each individual State Party , additional matters pertaining to the implementation of the Convention not covered by formal Article 7 reporting requirements . At the 29-30 May 2000 meeting of the SCE on the General Status and Operation of the Convention , this proposal , in the form of the following recommendations , was accepted : - In order to provide States Parties with the opportunity to report voluntarily on matters pertaining to compliance and implementation not covered by the formal reporting requirements contained in Article 7 , it was recommended that the Article 7 reporting format be amended to include an additional form . ( See attached AForm J : Other relevant matters@ . - It was further recommended that States Parties consider using this form to report on activities undertaken with respect to Article 6 , in particular to report on assistance provided for the care and rehabilitation , and social and economic reintegration , of mine victims . Form J : Other relevant matters Remark : States Parties may use this form to report voluntarily on other relevant matters , including matters pertaining to compliance and implementation not covered by the formal reporting requirements contained in Article 7. States Parties are encouraged to use this form to report on activities undertaken with respect to Article 6 , and in particular to report on assistance provided for the care and rehabilitation , and social and economic reintegration , of mine victims . State [ Party ] : _______________________________ reporting for time period from _______to________ [ Narrative / reference to other reports ] Report of the Standing Committee of Experts on Mine Clearance to the Second Meeting of the States Parties to the Convention Introduction The Standing Committee of Experts ( SCE ) on Mine Clearance , established in accordance with the decisions and recommendations of the 3-7 May 1999 First Meeting of the States Parties ( FMSP ) , met in Geneva from 13-15 September 1999 and from 27-29 March 2000. At the FMSP , it was agreed in accordance with paragraph 25 of the final report of the FMSP and its annex IV that Mozambique and the United Kingdom would serve as Co-Chairs of the SCE , with the Netherlands and Peru serving as Co-Rapporteurs . Representatives of 69 States , 8 United Nations bodies , the European Commission , the Organization of American States ( OAS ) , the North Atlantic Treaty Organization ( NATO ) , the International Committee of the Red Cross ( ICRC ) , the International Campaign to Ban Landmines ( ICBL ) and of numerous other relevant organizations were registered as participants in either or both of the two meetings . The meetings of the SCE received administrative support from the Geneva International Centre for Humanitarian Demining ( GICHD ) . Matters reviewed by the SCE The SCE considered progress in reviewing and revising international standards for humanitarian mine clearance . The importance of involving all stakeholders and the need for the effective dissemination and implementation of the standards were discussed . The SCE also considered the conditions necessary for establishing a conducive operating environment for mine clearance , and the desirability of agreeing to guidelines for this . The SCE received progress reports on the Study on the Use of Socio-Economic Analysis in Planning and Evaluating Mine Action , which is being undertaken by the GICHD on behalf of the United Nations Development Programme ( UNDP ) , on the Level 1 Survey activities of the Survey Action Center ( SAC ) , and on the impact of mine clearance on peacebuilding and reconstruction . The SCE explored how better planning and the setting of priorities could be assisted by the availability of better quality information , both written portfolios of potential mine action projects and electronic information available on web sites . The United Nations Mine Action Service ( UNMAS ) database , Mine Action Investments , was presented . Ways of improving coordination among stakeholders were examined . Options for improving internal coordination within mine-affected countries were discussed , and ways of better disseminating information internationally were proposed . Recognizing the importance in most cases of developing a sustainable national capacity and the valuable role that the national military could play in certain circumstances , the SCE considered issues related to the use of the military and the improvement of training for enhanced management within national mine action centres . Actions taken or in process on the development of specific tools and instruments in order to assist the implementation of the Convention With the active endorsement of the SCE , and on behalf of UNMAS , the GICHD is revising international standards for mine clearance , which will be known as the International Standards for Humanitarian Mine Action and contain a glossary of terms and terminology . It was noted that members of the ICBL are reviewing and expanding existing guidelines and principles for good practice in mine clearance . In response to a matter proposed by the first meeting of the SCE , Canada completed the task of developing the UNMAS database , Mine Action Investments , in such a way that donors are able to communicate information on their funding and policies underlying the provision of support for mine action . The database is functioning , though further data would be welcomed . The SCE commended the Portfolio of Mine Action Projects issued by UNMAS and the Compendium Document produced by Handicap International ( HI)/Mine Advisory Group ( MAG)/Norwegian People 's Aid ( NPA ) as useful foundations for identifying worthwhile mine clearance projects to support . UNMAS reported on the Information Management System for Mine Action ( IMSMA ) , a planning tool for action in mine-affected countries which received widespread interest and support within the SCE . With the encouragement of the SCE , the United Nations has developed guidelines for the use of local militaries in United Nations-supported mine action programmes . The SCE noted the ICBL web site ( www . icbl . org ) and the suggestion that all stakeholders consider contributing to it , including through participation in AE-groups@ . The SCE noted that Landmine Monitor would issue its second report in time for the Second Meeting of the States Parties ( SMSP ) , and that further funding had been requested to complete the report . The SCE commended the GICHD for providing a web site for information related to the work of the SCEs , undertook to provide relevant information and urged all stakeholders to visit and use the SCE portion of the GICHD site . Actions taken or in process to assist in the implementation of the Convention Based upon a statement made by Canada with respect to the compatibility between international standards for mine clearance and obligations under Article 5 of the Convention , the SCE agreed that Convention obligations and international mine clearance standards are not incompatible . With the active encouragement of the SCE , the GICHD is undertaking on behalf of UNDP a Study on the Use of Socio-Economic Analysis in Planning and Evaluating Mine Action . The Survey Action Center has embarked on a programme of Level 1 Survey work in seven countries and has plans for undertaking more . At the suggestion of the SCE , the United Nations agreed to consider making fuller use of the Steering Committee on Mine Action . The SCE called for improved availability of news about mine action , in addition to Landmines magazine and the UNMAS web site . The second Landmine Monitor report would be available for the SMSP and consideration would be given to making available documentation from stakeholders ( e. g. national plans and donor criteria ) on web sites . With the active encouragement of the SCE and at the request of UNDP , Cranfield Mine Action is developing , with the support of the United Kingdom , curricula and training materials to improve the skills of mine action managers , and the first course for senior managers is being held from July-September 2000. The SCE noted that subsequent courses would be run at the regional or national level , and would require donor support to assist participation . The SCE commended Nicaragua=s initiative in compiling information about national ( internal ) coordination mechanisms and related best practice , encouraged the continuation of this initiative and suggested that all stakeholders actively consider contributing to it . UNMAS was asked to consider the possibility of more closely involving donors in the annual International Meeting of Mine Action Program Directors and Advisers . Recommendations made by the SCE The SCE recommended that all stakeholders contribute to the UNMAS/GICHD process of revising international standards for mine action and encouraged broad participation of mine-affected countries . It was further recommended that UNMAS formally advise countries , through their missions in New York , of the opportunity to comment , with a view to UNMAS submitting these revised standards to the United Nations General Assembly at its fifty-fifth session . In addition , it was recommended that national authorities of mine-affected countries , donors and mine action agencies ensure that the new standards are applied . The SCE recommended that consideration be given to the effective dissemination of revised international standards for mine action ( including the translation of the standards ) and to the Mine Action Support Group ( MASG ) playing an active role in disseminating these standards along with other good practice guidelines , like the Bad Honnef Guidelines . The SCE recommended continued discussions by the Committee on the process of reviewing and revising international standards for mine action , including the implications of applying the standards to the requirements of emergency demining . The SCE recommended that the GICHD , when preparing guidelines for establishing a conducive operating environment for mine clearance , take into account comments and views made by Committee participants , including by the ICBL Mine Action Working Group . In commending the relevance of the Bad Honnef Guidelines , the SCE recommended that HI , MAG and NPA review and expand existing guidance and principles for good practice in humanitarian mine action . The SCE recommended that the UNDP/GICHD present preliminary findings of its Study on the Use of Socio-Economic Analysis in Planning and Evaluating Mine Action to the SMSP and that linkages be further explored between the framework for monitoring and evaluating mine action , as outlined by the International Development Research Centre ( IDRC ) , and the UNDP/GICHD study . In endorsing the work of the Survey Action Center in its continuing programme of Level 1 Surveys , the SCE recommended that UNMAS/SAC disseminate survey findings and underlined the need for funding to enable additional surveys to take place . The SCE recommended that donors indicate clearly their criteria and requirements for funding in order to help governments and mine action organizations seeking funding to provide proposals which are better tailored to meet donors= funding criteria . The SCE recommended that UNMAS and HI/MAG/NPA consult when updating their respective project portfolios in order to make any appropriate linkages and avoid unnecessary duplication of effort ; that each should identify points of contact ; and that other NGOs should consider contributing to these documents . Recognizing that the UNMAS database Mine Action Investments will be effective only if accurate and substantially complete , the SCE recommended that donors contribute full information and provide regular updates . In addition , the SCE recommended that mine-affected countries check the database and notify UNMAS of any inconsistencies or gaps and that UNMAS consider the possibility of including information on private sector resources in the database . The SCE recommended that UNMAS explore linking relevant countries= and organizations= web sites and , if possible , consider incorporating information about mine affected States= national demining programmes . In addition , it was recommended that mine-affected countries provide texts for inclusion in the United Nations database or details of relevant web sites for linkage to the UNMAS web site . The SCE recommended that UNMAS make more use of the Inter-Agency Steering Committee on Mine Action ( which consists of the relevant United Nations organizations involved in mine action , the ICRC and the ICBL ) and noted the suggestion that the Steering Committee consider possible participation by regional agencies . The SCE recommended that the OAS and Southern Africa Development Community ( SADC ) share regional experiences in mine action with a view to enhancing coordination and mutual understanding . The SCE recommended that UNMAS identify further ways of disseminating news on mine action , in addition to the regular publication of the Landmines magazine and regular updates of its web site . The SCE recommended further consideration of the prospects for compiling guidelines based on lessons learned in emergency mine action in the event of natural disasters . In addition , the SCE recommended that UNMAS , in the event of a crisis or emergency mine action response , provide to interested parties regular updates on the affected countries= mine situation . The SCE recommended that the IDRC consider extending to other countries the Internet database which has been created for Mozambique . In the light of its discussion on UNMAS guidelines on the use of the military in mine action , the SCE recommended ( a ) that the United Nations Inter-Agency Coordination Group on Mine Action review the way these guidelines are applied on a case-by-case basis ; ( b ) that States Parties and donors consider the possibility of training military trainers of mine-affected countries ; and ( c ) that non-United Nations mine action stakeholders apply the United Nations guidelines in all circumstances where the use of the military is an option . The SCE recommended that donors and implementing agencies consider a multidisciplinary approach to mine action including , where appropriate , other mine action elements in addition to mine clearance , such as victim assistance and mine awareness education . The SCE recommended that the phasing out of direct assistance to national capacities should begin at the appropriate time so as to reduce reliance on foreign assistance ( e. g. the use of expatriate technical assistants ) when adequate local capacities have been developed . The SCE recommended that all relevant actors retain a flexible approach in following mine action guidelines and Committee recommendations . Reference to supporting documents The reports and other documents relating to the two meetings of the SCE in September 1999 and March 2000 may be found on the web site of the GICHD at www . gichd . ch . The UNMAS database Mine Action Investments can be accessed at www . un . org/Depts/dpko/landmines/ . Report of the Standing Committee of Experts on Victim Assistance , Socio-Economic Reintegration and Mine Awareness ( SCE-VA ) to the Second Meeting of the States Parties Introduction The Standing Committee of Experts on Victim Assistance , Socio-Economic Reintegration and Mine Awareness ( SCE-VA ) , established in accordance with the decisions and recommendations of the 3-7 May 1999 First Meeting of the States Parties ( FMSP ) , met in Geneva from 15-17 September 1999 and from 29-31 March 2000. At the First Meeting of States Parties , it was agreed in accordance with paragraph 25 of the final report of the FMSP and its annex IV that Mexico and Switzerland would serve as Co-Chairs of the SCE-VA , with Japan and Nicaragua serving as Co-Rapporteurs . Representatives of 43 States Parties , 9 States that signed but have not ratified the Convention , 9 other States , UNMAS , UNDP , the United Nations Children 's Fund ( UNICEF ) , the United Nations High Commissioner for Refugees ( UNHCR ) , the United Nations Department for Disarmament Affairs ( UNDDA ) , the United Nations Institute for Disarmament Research ( UNIDIR ) , the World Health Organization ( WHO ) , OAS , ICRC , ICBL , GICHD and of numerous other relevant organizations were registered as participants in the SCE-VA meetings . The meetings of the SCE-VA received administrative support from the GICHD . The final report of the second meeting of the SCE-VA containing background information , views , opinions , analysis and recommendations can be found at www . gichd . ch . Its reading is highly recommended . Matters reviewed by the SCE-VA At the first SCE-VA meeting , six ANetwork Groups@ were established to facilitate work in the following thematic areas : collection and dissemination of guidelines ; information and data collection ; victim assistance reporting ; mine/unexploded ordnance ( UXO ) awareness ; portfolio of victim assistance programmes ; and donor coordination . The deliberations and outcomes of the Network Groups were discussed at the second meeting of the SCE-VA . Based on a spirit of partnership , shared commitment , and responsibility between civil society and governments , the SCE-VA discussed a comprehensive and integrated approach to victim assistance . The SCE-VA discussed a definition of Alandmine victim@ which includes directly affected individuals , their families , and mine-affected communities . In addition , the SCE-VA discussed Avictim assistance@ as multi-faceted , and requiring a broad range of activities including prevention , emergency medical care , physical and psychological rehabilitation and socio-economic integration . Also considered was victim assistance being defined as an integrated part of assistance to all victims of violence and trauma and persons with disabilities . The SCE-VA discussed , with a view to guaranteeing a long-term sustainable solution , victim assistance being integrated in a broader context of post-conflict reconstruction and development strategies , without losing sight of the directly affected individuals , families and communities which are specifically targeted by the Convention . In particular , the SCE-VA considered the need to have victim assistance integrated into public health , community development , conflict and violence prevention . In addition , the SCE-VA considered the need to include measures relevant to meeting the needs of victims in the principles of humanitarian and development cooperation . During the first meeting of the SCE-VA , Nicaragua and Mexico agreed to facilitate the Network Group on the Collection and Dissemination of Guidelines . The main objective of the Network Group was to try to make existing victim assistance guidelines , including guidelines on socio-economic reintegration and mine awareness , available to all relevant actors . To achieve this objective , the Network Group : called upon all interested actors to contribute in the collection of existing guidelines ; collected all existing victim assistance guidelines received ; discussed how to disseminate the received existing guidelines ; and discussed the need to disseminate a list with the collected guidelines and relevant information to interested parties . During the first meeting of the SCE-VA , Switzerland agreed to facilitate the Network Group on Information and Data Collection . The Network Group discussed a more systematic and reliable data collection and dissemination . Efforts were focused on base line data and quantifying the impact on public health and reintegration systems , on human and socio-economic development and on the daily life of people and communities . The Network Group emphasized that acquiring victim data should not be an objective in itself but integrated into broader efforts to prevent injuries , assist victims and facilitate better allocation of resources . The Network Group raised issues like national ownership , capacity-building , institutional development and adapting methodologies to reality in the mine-affected countries . The Network Group discussed providing mine-affected countries with methodological support rather than solutions , data collection being handled sensitively , and taking into consideration the impact of data collection on victims . During the first meeting of the SCE-VA , the ICBL and Handicap International agreed to facilitate the Network Group on Victim Assistance Reporting , the purpose of which was to propose a voluntary reporting mechanism . The Network Group raised the issue that , while there is no explicit requirement in the Convention for countries to report on contributions to victim assistance and mine awareness , the Convention requires , in Article 6 , paragraph 3 : AEach State Party in a position to do so shall provide assistance for the care and the rehabilitation , and social and economic reintegration , of mine victims and for mine awareness programmes . @ During the first meeting of the SCE-VA , the ICBL and ICRC agreed to facilitate the Network Group on Mine/UXO Awareness . The Network Group confirmed that appropriate mine/UXO awareness can save lives , that problems faced differ in each situation , but some common elements can be found . During the first meeting of the SCE-VA , the ICBL Working Group on Victim Assistance agreed to facilitate the Network Group on Portfolio of Victim Assistance Programs . The Network Group noted that mention of victim assistance in the Convention has led to a global upsurge of interest in these programmes and that to date there is no global compilation of information on programming . During the first meeting of the SCE-VA , Sweden agreed to facilitate the Network Group on Donor Coordination . The Network Group covered numerous issues of importance ( e. g. recognizing that different States have different needs and understanding the need for both a comprehensive development approach to victim assistance and remembering that victims should not have to wait until macro-level problems are solved before they begin to enjoy a better quality of life ) and identified several ideas for further consideration . Actions taken or in process on the development of specific tools and instruments in order to assist the implementation of the Convention The SCE-VA identified that a strategic , comprehensive and integrated approach to victim assistance is needed and made specific progress in the following areas : ( a ) towards efficient and effective means to monitor Article 6 obligations ; ( b ) in the development , refinement and implementation of various programming and coordination tools ; ( c ) in promoting an information exchange and discussion of various tools for data collection and mine awareness ; ( d ) in promoting various sets of victim assistance and mine awareness guidelines ; and ( e ) in better understanding matters pertaining to victim assistance data collection . The SCE-VA developed a Portfolio of Victim Assistance Programs , the purposes of which are : to raise awareness among governments , donors , and programme implementers on the range of activities that constitute victim assistance ; to promote transparency among all actors in victim assistance ; to highlight needs which have not been addressed because of lack of resources ; and to facilitate contact and information-sharing among actors in victim assistance . Actions taken or in process to assist in the implementation of the Convention Based upon the work of the Network Group on Victim Assistance Reporting , the SCE-VA recognized the importance of reporting by all States Parties on support provided for victim assistance and agreed to continue work on effective and efficient means through which States Parties could report on this matter . Recommendations made by the SCE-VA It was recommended that governments establish a mechanism or designate a focal point through which information on victim assistance guidelines could be channelled to appropriate actors in the field and to those elaborating victim assistance , socio-economic reintegration , mine awareness policies or programmes . It was recommended that governments , international and regional organizations , and NGOs interested or involved in victim assistance , socio-economic reintegration and mine awareness , take into account existing guidelines when developing victims assistance programmes and promote a common culture , based on the partnership of governments , international organizations and civil society , about their usefulness in the formulation of said programmes . It was further recommended that ways and means should be found to translate these guidelines into the languages of mine-affected countries . It was recommended that WHO give due attention to enhancing and assessing the quality and performance of surveillance systems for victim assistance in affected countries . It was recommended that governments , international organizations and NGOs share their information at country level with the local bodies ( e. g. inter-sectoral committees , mine action centres , health authorities ) and make the information public . Governments of affected countries should be encouraged to establish victim assistance web sites . It was recommended that new incidents be covered by an adapted health information system producing simple and rapid information as well as by the Information Management System for Mine Action ( IMSMA ) and that further development of the IMSMA incident module be considered . It was recommended that the WHO integrated surveillance system on victim and trauma be further developed and implemented in a gender-disaggregated form . It was recommended that a platform/clearinghouse for exchange , dissemination and information be established in order to promote transparency , in particular through : the collection and dissemination of standards , methodologies and questionnaires ; the establishment of national platforms and linking them to the international level ; the exchange of research ; and linking existing information about victims . It was further recommended that the GICHD assume this task and develop a test module accessible on its web site . In addition , it was recommended that WHO explore the possibility of engagement in this area . It was recommended that the testing of various tools for victim assistance and mine awareness data collection be promoted . It was recommended that all interested parties continue to work towards efficient and effective means to monitor the implementation of Article 6 , paragraph 3 of the Convention , taking into account the significant work of the Victim Assistance Reporting Network Group . It was recommended that funding be timely , particularly with regards to displaced and returning populations , responsive , appropriate to specific country needs and circumstances , flexible , allowing for the changing reality at the field level , as well as geographically appropriate and coordinated at the donor level . It was recommended that the UNICEF International Guidelines for Mine Awareness be taken into consideration at the outset of programming . It was further recommended that stakeholders should define , together with the mine action coordination body in the mine-affected country , the national standards and methodology for mine action . It was recommended that guidelines be developed for monitoring and evaluating mine/UXO awareness programming and training programmes for mine awareness . It was further recommended that mine/UXO awareness training be integrated into national mine action frameworks . It was recommended that UNICEF continue to provide an open and transparent process ensuring wide participation among mine/UXO awareness actors . It was recommended that UNMAS ensure the integration of the various mine action guidelines into the framework for the development of international standards for mine action . It was recommended that mine/UXO awareness coordination occur whenever possible under a government umbrella , on various levels , including between : ( a ) different implementing agencies involved in mine/UXO awareness programming ; ( b ) the wider mine action community including victim assistance organizations ; and ( c ) the Anon mine action@ humanitarian and development sector , which can bring alternative solutions to mine problems encountered by the communities . It was recommended that mine awareness programmes be implemented in partnership with national mine awareness institutions and actors at the community , regional and national level , from programme identification and assessment , to implementation , monitoring and evaluation . It was further recommended that UNMAS be encouraged to develop a mine/UXO awareness function within the IMSMA to ensure the development of an integrated effective mine action plan and that mine/UXO awareness programming be responsive to both emergency and long-term needs . It was recommended that for the successful implementation of mine action programming , donors/NGOs and all relevant stakeholders ensure that monitoring and evaluation are integral and meaningful parts of all programming . It was recommended that key stakeholders ensure that agencies undertaking mine/UXO awareness activities have a knowledge of and commitment to the existing UNICEF International Guidelines and have ideally a proven capacity and track record of successful programming . It was further recommended that existing mine/UXO awareness agencies should ensure that key documentation is widely available and accessible as learning tools for other agencies . It was recommended that government officials involved in victim assistance receive a copy of the Portfolio as a tool to facilitate contact with other victim assistance actors . It was recommended that States Parties provide resources for the creation and maintenance of a national coordination body , under whose aegis would fall the development of a national Portfolio of Victim Programs . It was recommended that interested parties continue to work together to develop suggestions and recommendations on methods pertaining to more effective donor coordination and long-term resource mobilization with the aim of effectively meeting the immediate and ongoing needs of victims . The focus of this process should be to identify gaps and available resources . It was recommended that , in its future work , the SCE-VA pay due attention to the issues of : ( a ) coordination , with a focus on the clear and precise rationalization of the roles of the major actors in victim assistance ; ( b ) identifying gaps in terms of financial , technical and other resources needed for victim assistance ; and ( c ) measuring progress towards implementation of the Convention , particularly with a focus on examining victim assistance reporting mechanisms . It was recommended that the future work of the SCE-VA should be divided into two types of activities : ( a ) operationalization of work already begun ( e. g. following through on the most salient recommendations of the Network Groups ; setting precise goals ; and collecting and disseminating documents from the SCE-VA ) ; and ( b ) analysis of new themes ( e. g. creating an inventory of existing policies , studies , surveys and lessons learned ; considering links between victim assistance and mine awareness and long-term strategies for sustainable development ; and increasing the participation in mine-affected countries of civil society and , particularly , associations of mine victims and/or persons with disabilities ) . Reference to supporting documents As a result of the work of the SCE-VA=s Network Groups , six papers were produced containing the views of these groups and the proposals put forward by them to the SCE-VA=s March 2000 meeting . These papers can be found at : www . gichd . ch . Report of the Standing Committee of Experts on Stockpile Destruction to the Second Meeting of the States Parties to the Convention Introduction The Standing Committee of Experts ( SCE ) on Stockpile Destruction , established in accordance with the decisions and recommendations of the 3-7 May 1999 First Meeting of the States Parties ( FMSP ) , met in Geneva from 9-10 December 1999 and from 22-23 May 2000. At the FMSP , it was agreed , in accordance with paragraph 25 of the final report of the FMSP and its annex IV , that Hungary and Mali would serve as Co-Chairs of the SCE , with Malaysia and Slovakia serving as Co-Rapporteurs . Representatives of 47 States , United Nations bodies , the ICRC , ICBL and numerous other relevant organizations were registered as participants in either or both of the two meetings . The meetings of the SCE received administrative support from the GICHD . Matters reviewed by the SCE The SCE solicited the views of delegations with respect to the following thematic areas : stockpile destruction as an integral part of mine action ; allocation of resources - technologies and constraints ; case studies ; stockpile destruction as preventive mine action ; cooperative structures for stockpile destruction ; and the way ahead . The SCE noted its appreciation of the work of the following moderators : Ret . Gen. Gordon M. Reay , Department of Foreign Affairs and International Trade , Canada ; Patrick Blagden , GICHD ; Col. Paul Power , Australian Defense Forces ; Steve Goose , Human Rights Watch ; and Adrian Wilkinson , Mine Action Consultant , UNDP . The SCE considered a number of practical issues with a view to highlighting the importance of the core objective of the SCE , namely to facilitate a swift and dramatic reduction in the number of stockpiled anti-personnel mines globally , including the following : ensuring political priority for stockpile destruction ; obligations and rights of countries under Article 4 of the Convention ; merits and constraints of various methods and technologies for destruction as experienced by individual countries ; the role of the military and private sector in stockpile destruction ; logistical , technical and financial considerations ; possible alternatives to the current methods of stockpile destruction ; planning and implementation of the process leading up to the actual destruction of stockpiles ; financial and technical assistanceBbilateral , multilateral and regional approaches to stockpile destruction ; compilation of a database of industrial/research capacities and capabilities ; possible mechanisms for monitoring and evaluating Article 7 reports ; assessing overall progress with regard to stockpile destruction ; progress report on global stockpiles and their destruction ; flow of information on available technologies , costs and environmental impact ; modalities of transfer and storage of foreign stockpiles ; avoiding competition among the various branches and actors of mine action ; engaging the media and the public at large in the process of stockpile destruction ; need for accounting and certification procedures ; compilation of databases on donors , recipients , needs , methods , options , companies , experts ; and possible mechanisms for engaging non-States parties in reducing their stockpiles . It was expected that discussion on all the above matters would continue in the intersessional work programme . As a result of the SCE=s deliberations , it was accepted that stockpile destruction is an integral part , in effect the Afifth pillar@ , of mine action and that , accordingly , compliance with Article 4 obligations should receive high political priority . It was also stressed , however , that this does not suggest unwarranted competition among the different branches of mine action . At the FMSP , participants emphasized the need for the rapid universalization of , adherence to and compliance with the Convention and , in parallel , the importance of prompt and strict compliance with the obligations as stipulated in Article 4. Accordingly , States were urged to comply with their reporting obligations under Article 7 as a way to facilitate future cooperation between prospective donor States and those requesting assistance in carrying out this important task . In the course of its intersessional work , the Committee sought ways to ensure that the capabilities and capacities of prospective donor States become fully compatible with the needs of States requesting assistance . In addition , the SCE reviewed a wide range of technical options for stockpile destruction , which were introduced in the course of the sessions for consideration . Actions taken or in process on the development of specific tools and instruments in order to assist the implementation of the Convention A web site related to stockpile destruction is expected to be introduced by UNMAS and Canada by September 2000 and States were encouraged to contribute to this effort . Proposed UNDP guidelines on stockpile destruction will be made available on the web as well . A list of companies , experts and technologies related to stockpile destruction is also expected to be introduced in the near future . A cumulative list of companies , experts and technologies could provide a necessary link between the Adonor@ and Arecipient@ countries when designing future cooperative structures . Regarding monitoring and verification requirements , a number of presentations have already been prepared , which serve as good examples . It was acknowledged that case study presentations are a useful tool for maintaining political enthusiasm and that a standardized format for the case study presentations could be identified vis-à-vis the ones that have been presented up to date . The submission of ( annual ) national progress reports on stockpile destruction was not a matter of consensus at this point of time . It was observed that there are a number of relevant questions not included in the Article 7 reporting format ; therefore , a proposal for a separate questionnaire on stockpile destruction was entertained . The important role the ICBL Landmine Monitor plays in reporting on the global stockpile destruction process and contributing to greater transparency on this issue was highly appreciated . Actions taken or in process to assist in the implementation of the Convention The need for additional resources to be secured for stockpile destruction projects was stressed . To this end , the sessions considered various bilateral , multilateral and regional approaches as possible components for establishing cooperative structures for stockpile destruction projects . The initiative launched by Canada and Ukraine was cited in this regard as a useful example for bilateral cooperation , while the establishment of a Partnership for Peace ( PfP ) Trust Fund for stockpile destruction within the framework of the North Atlantic Treaty Organization 's Euro-Atlantic Partnership Council ( NATO/EAPC ) was singled out as a promising multilateral/regional project with a view to facilitating broad compliance with Article 4 obligations . More than a dozen countries provided insights into their experience with stockpile destruction and representatives offered their respective views with regard to the merits and constraints of various methods of destruction as experienced by individual countries . Financial , technical , social and environmental considerations were also discussed at length , and emphasis was placed on the need for careful planning and implementation of the process leading up to the actual destruction of stockpiles . The importance of engaging the media and the public at large in the process of stockpile destruction was also highlighted by various delegations . The SCE compared the converging or diverging approaches taken by the military and civil sectors in the actions needed for eliminating stockpiled anti-personnel mines . In most cases , it was argued , stockpile destruction in military facilities leads to a substantial reduction of incurred expenses and entails the more efficient utilization of already existing resources . Transparency in this process is also of critical importance , a fact about which the armed forces should be educated . An important role should be assigned to players outside the military to ensure maximum transparency in the process of stockpile destruction ( governmental agencies , mass media , diplomatic corps , etc. ) . The possible roles of UNMAS and UNDP in stockpile destruction projects were also discussed . With its 137 regional centres worldwide , UNDP could facilitate various bilateral or multilateral arrangements with a view to promoting information exchange and technical/financial cooperation in this field . Although the United Nations agencies are traditionally involved in humanitarian demining activities , the possibility of expanding their activities to facilitate stockpile destruction should not be excluded . The possible modalities of such United Nations involvement , e. g. transparency and lessons learned and shared , and financial assistance , were also discussed . Retention of stockpiled anti-personnel mines for training and development purposes under Article 3 was also discussed at length , although the Co-Chairs made the determination that the issue should be referred to the SCE on the General Status and Operation of the Convention for further deliberation . Generally , it was agreed that examination of all options and factors should lead to the destruction of global stocks in the fastest , most cost-effective way and with the least harmful effects to the environment . It was also emphasized that the possibility of adverse environmental impacts brought about by the destruction process should not be used as an excuse for inaction in meeting Article 4 obligations . The Committee agreed that , at the SMSP , the urgency and importance of stockpile destruction should be affirmed . Recommendations made by the SCE It was recommended that those countries that have completed the destruction of their stockpiles should make their expertise available to those in need , because in many instances countries lack the technical experience , industrial capacities or know-how to carry out obligations stipulated in Article 4 of the Convention . It was recommended that States be encouraged to contribute to the questionnaire presented by Canada in support of the development of an UNMAS web site on stockpile destruction . With regard to a complementary database to the Article 7 reports , it was recommended that the SCE Co-Chairs , in cooperation with interested parties , work to develop a questionnaire that would help collect information on needs and assistance offers expressed by non-States Parties . It was recommended that the SCE Co-Chairs develop specific language on recommendations concerning bilateral and multilateral/regional cooperative structures for stockpile destruction . It was recommended that an examination of all options and factors should lead to the destruction of global stocks in the fastest , most cost-effective way and with the least harmful effects to the environment . Report of the Standing Committee of Experts on Technologies for Mine Action to the Second Meeting of the States Parties Introduction The Standing Committee of Experts on Technologies for Mine Action ( SCETMA ) , established in accordance with the decisions and recommendations of the First Meeting of the States Parties ( FMSP ) , which was held from 3-7 May 1999 in Maputo , Mozambique , met in Geneva on 13-14 December 1999 and on 24-25 May 2000. In accordance with paragraph 25 of the final report of the FMSP , it was agreed that Cambodia and France would serve as Co-Chairs of the SCE , with Germany and Yemen serving as Co-Rapporteurs . Representatives of 34 States that have ratified the Convention , 7 States that signed but have not ratified the Convention , 9 other States , the ICRC , the ICBL and 8 regional and international organizations , including the United Nations , and numerous other relevant organizations , including national mine action centres , universities , research centres and companies , were registered as participants in the SCE meetings . The meetings of the SCE received administrative support from the GICHD . Matters reviewed by the SCE The SCETMA benefited from a pragmatic and clear mandate as well as a lively and dedicated participation by experts whose diversity and complementarity found full expression in the course of the debates . The SCETMA had been mandated to conduct a comparative survey of the needs of the end-users and of the technologies available to them or in development . The Committee fulfilled its mandate by taking into account the constraints which stand in the way of providing end-users with appropriate technologies , as well as the new standards required by the technological progress of mine action . This framework provided ample opportunity to field practitioners , programme managers , specialists from academia and research establishments as well as military and industrial decision-makers , to interact and to exchange information . This provided a better understanding of the adequacy of technologies currently or soon to be available for mine action , of the new international standards that ought to be implemented , and of the most promising progress in technology research . The Committee=s work was enhanced by useful contributions by individuals responsible for mine action field work , including individuals from Mine Action Centres ( e. g. C-MAC ( Cambodia ) , CROMAC , IND-Mozambique , NCHD-Chad , Monitoring , Evaluation and Training Agency ( META ) and MAP-Afghanistan , CND-Nicaragua ) , international organizations ( e. g. UNMAS and UNDP ) and non-governmental organizations ( e. g. ICBL , Handicap International , Mines Advisory Group , Norwegian People 's Aid ) and GICHD . The military establishments of donor countries and affected States also participated . The scientific sector ( e. g. RMA-Belgium , ERA-United Kingdom , JRC-European Commission ) and the industrial sector ( e. g. Mechem-South Africa ) provided an overview of the ways used to attempt to adapt existing technologies . End-users and the research and development actors , academics ( e. g. University of Western Australia , Cranfield University , James Madison University , the European Commission Joint Research Centre ( JRC ) ) discussed their own efforts at rationalizing mine action in the face of the diversity of hurdles it has to overcome . Actions taken or in process on the development of specific tools and instruments in order to assist the implementation of the Convention The SCETMA confirmed that taken separately neither manual demining , nor mine detecting dogs , nor mechanical equipment , holds the key to the landmine problem . The key lies in the so called Atool box@ approach , wherein these techniques and technologies are complementary , and need to be used in different combinations after a careful review of the conditions and environment of each minefield or mine action programme . The SCETMA emphasized different elements of the tool box used by different mine action centres , from Cambodia to Afghanistan , Mozambique , Chad , Nicaragua or Croatia . The diverse elements presented reflect varying sets of constraints , ranging from human , geographical and climatic conditions , to financial , organizational or political limitations . Mine action centres are well placed to give proper consideration , for instance , to the variety of mines in place in the same area , or to the demands made on the mobility and modularity of teams and equipment , in consideration of different conditions in the field , from waterlogged to arid soils , from sandy to rocky terrains , etc. The SCETMA noted that while the tool box approach is widely accepted , there is room for a variety of opinions on other aspects of mine action in the field . With respect to mine detection dogs ( MDD ) for example , the experience of deminers in Afghanistan shows that MDDs are fast and effective , provided they are assigned appropriate tasks in area reduction or clearance in low-density mined areas . However , deminers in Kosovo pointed out that it is indispensable to adopt an accredition procedure in order to guarantee , before and during clearance operations , the quality of dogs supplied . The University of Western Australia suggested Adouble blind tests@ for dogs and supervisors . Universal interest in the MDD tool , and lingering doubts on its proper use , have led UNMAS and the GICHD to launch no less than eight studies to cover every aspect of the MDD technique in the course of the next few years . The SCETMA noted different , but not irreconcilable , approaches to the use of mechanical equipment . Suppliers of heavy equipment stressed its effectiveness if assigned appropriate tasks , from road clearance to vegetation-cutting and other preparations of the field . Practitioners in the field underlined the need for multi-purpose platforms and increased sustainability of the equipment purchased or leased , and for improved procedures for testing in the field . All were in agreement on the necessity to integrate the selection of appropriate mechanical equipment in the early stages of planning for demining . The SCETMA exposed concern at the multiplication of databases and information technologies available , and the need to promote compatibility and interconnectednesss . Field workers insisted on the need to preserve an end-user friendly approach . Progress made by the GICHD Information Management System for Mine Action ( IMSMA ) was applauded - a system which between the two meetings of the SCETMA was developed and tested in a growing list of mine-affected countries . The SCETMA acknowledged the importance of the current exhaustive review of United Nations norms and standards . End-users will systematically be associated with this process . The new United Nations standards will also be compatible with those of the International Organization for Standardization ( ISO ) . However , concern was raised regarding the need to identify who will assume the responsibility for implementing these standards and verifying their correct implementation . The SCETMA noted that stakeholders in mine action now realize that the time-lines of scientific innovation and progress and those of demining requirements are not necessarily the same . It was undersand that States most active in research and development of new demining technologies do so primarily for military reasons , with less attention to the particular needs of humanitarian demining . This bias , however , was not universal : international ( International Atomic Energy Agency ( IAEA ) ) , regional ( European Commission-JRC ) , and national institutions do have specific programmes or projects aimed at humanitarian demining . All stakeholders agreed to stress the importance of a cooperative approach among researchers , developers and deminers . Actions taken or in process to assist in the implementation of the Convention To faciliate the implementation of the Convention , the SCETMA concluded that there is an overall need to nurture a dual approach in the field of mine action technology , namely : the development of simple , end-user friendly technologies based on improving existing material , as being essential to ease the burden of deminers and to speed up ongoing programmes ; and the search for high-tech innovations , as being critical to save lives , time and money in the longer term . Recommendations made by the SCE With the view that cooperation between mine action stakeholders must be strengthened in several ways and at several levels , the SCETMA recommended : The exchange of relevant information between end-users , in particular between mine action centres ; The systematic field testing of new technologies in order ( a ) to provide researchers with a better appreciation of the improvements needed and a better access to data acquired by deminers and ( b ) to increase deminers ' awareness and acceptance of new technologies ; The facilitation of the transfer of equipment through the adoption and implementation of Ademining friendly regulations@ ; The development of integrated databases such as IMSMA and fostering of the compatibility and interconnection of existing databases ; Facilitating access to national resources in terms of conventional and digitalized maps , surveys and other relevant documentation concerning mined areas , subject to national regulations and considerations of national security ; The development of software , using information available in databases , with a view to assist those responsible for mine action in their choice of adapted technologies ; Setting up of a network of probing facilities and international testing centres ; Defining common standards for field testing ; and Defining mechanisms and procedures to allocate new technologies to mine action teams ( e. g. with respect to its discussion on UNMAS policy on the use of militaries in mine action , the SCETMA recommended ( a ) that the United Nations Inter-Agency Coordination Group on Mine Action review the way these guidelines are applied on a case-by-case basis , ( b ) that States Parties and donors consider the possibility of training military trainers of mine-affected countries , and ( c ) that non-United Nations mine action stakeholders be urged to apply United Nations guidelines in all circumstances where the use of the military is an option ) . Report of the Standing Committee of Experts on the General Status and Operation of the Convention to the Second Meeting of the States Parties Introduction The Standing Committee of Experts ( SCE ) on the General Status and Operation of the Convention , established in accordance with the decisions and recommendations of the First Meeting of the States Parties ( FMSP ) , held from 3-7 May 1999 in Maputo , Mozambique , met in Geneva at the International Conference Centre on 10-11 January 2000 , and at the Geneva International Centre for Humanitarian Demining ( GICHD ) on 29-30 May 2000. In accordance with paragraph 25 of the final report of the FMSP and the report=s annex IV , it was agreed that Canada and South Africa would serve as Co-Chairs of the SCE , with Belgium and Zimbabwe serving as Co-Rapporteurs . Representatives of 43 States that have ratified the Convention , 9 States that signed but have not ratified the Convention , 10 other States , the ICRC , ICBL , 7 regional and international organizations , including the United Nations , and 13 non-governmental organizations were registered as participants in the meetings . The Meeting received administrative support from the GICHD . Matters reviewed by the SCE The Committee discussed the need to continue efforts in support of the universalization of the Convention and noted the continued growth in the number of States that have formally accepted the obligations of the Convention . The ongoing work of a number of States to encourage universalization was noted , as were the efforts of various international organizations , the ICBL and the ICRC . The Committee discussed progress made in implementation of and compliance with Article 7 of the Convention . While the rate of compliance with the Convention=s transparency provisions , contained in Article 7 , is not dramatically different relative to other Conventions , concern was raised that several States have not yet provided required reports . The importance of timely , consistent and detailed reporting was highlighted and recommendations were made with respect to the reporting process . The Committee discussed measures taken to implement Article 9 of the Convention , particularly the need to promote greater understanding of the different approaches taken with respect to national implementation measures . In addition , the Committee heard concerns about only a limited number of States Parties having established legislation as part of the Aappropriate legal , administrative and other measures , including the imposition of penal sanctions@ , as required in terms of Article 9 of the Convention . The Committee discussed matters pertaining to Article 2 , particularly matters related to anti-handling devices and the sensitivity of anti-vehicle mines= fusing devices . Ideas , like examining these issues through informal expert work and working towards the agreement by States Parties on an understanding on the matter were put forward . There was no agreement on proceeding with either idea at this time , although an ICRC initiative to discuss these matters was welcomed . Several States Parties affirmed their view ( a ) that mines equipped with anti-handling devices that activate when no attempt has been made to tamper with or otherwise intentionally disturb these mines are in fact anti-personnel mines as defined by the Convention and ( b ) that fusing mechanisms that cause anti-vehicle mines to function as anti-personnel mines are also anti-personnel mines as defined by the Convention . The Committee received the views of the ICBL with respect to States Parties working towards a common understanding of which acts are and are not permitted under paragraph ( c ) of Article 1 of the Convention . In particular the ICBL called for a common interpretation of the term Aassist@ , especially relating to the use of anti-personnel mines by non-States Parties in joint operations with States Parties and the stockpiling and transit of foreign-owned anti-personnel mines . The Committee highlighted the need for greater understanding of matters pertaining to anti-personnel mines retained for training and development under Article 3 of the Convention . To this end , the Committee received numerous reports from States Parties clarifying the reasons why mines are retained , how mines have been used to date and how they will be used in a manner consistent with Article 3 in the future . The Committee heard the view that mines retained under Article 3 should be kept to a minimum . The Committee received the views of the ICBL with respect to States Parties meeting their obligations under Article 6 of the Convention and , in particular , reviewed the need to provide support for victim assistance programmes . The Committee also reviewed the development and implementation of the UNMAS database of donor activity , Mine Action Investments . The Committee discussed the relationship between United Nations standards for mine clearance and Article 5 of the Convention , concluding that there is no contradiction between the two . The Committee discussed the need to examine matters pertaining to the operationalization of Article 8 in order that all structures and methodologies are in place for smooth execution whenever needed . To this end , the Committee agreed to an ongoing action to further discuss these matters . The Committee evaluated the first intersessional work programme and highlighted the need to make improvements , principally to streamline the process and address participation issues . To this end , the Committee made numerous recommendations . The Committee discussed a number of matters pertaining to preparations for the SMSP and recommended a draft agenda , a draft programme of work , draft amendments to the FMSP rules of procedure , and draft provisional cost estimates . The Committee also made a number of administrative decisions , including agreeing to the venue for the Meeting and to a plan for documentation . Tools and instruments developed or being developed to assist in the implementation of the Convention With respect to Article 7 , the Committee received an overview of the UNDDA Internet database of reports submitted under the Article . While ideas to enhance the reporting process were heard , like moving to direct Internet-based reporting , the Committee recognized that immediate efforts with respect to Article 7 reporting should be focused on encouraging a higher rate of compliance and taking small measures to facilitate the process . These small measures include States Parties , when possible , submitting reports electronically and , when submitting an annual update , to highlight the changes in relation to earlier reports . Also with respect to Article 7 , States Parties were invited to work with the ICBL on developing a reporting guide as a means of increasing the quantity and quality of the Article 7 reports . The ICBL was invited to make a progress report to the next meeting of the SCE . With respect to Article 6 , the Committee welcomed the UNMAS database Mine Action Investments , developed with the assistance of Canada , as a practical means for donors to share information on their activities for the purpose of enhanced coordination and greater transparency . Donors were encouraged to enter data into the database before the SMSP in order to increase the usefulness of this tool and to allow for more substantial analysis of donor activity . Monitoring participation in the database was considered a useful ongoing task for the Committee . With respect to Article 9 , States Parties were invited to work with the ICBL and other interested parties on developing a sample package of existing implementation legislation to assist other States Parties in establishing legislation . A progress report should be made on this issue at the next SCE . Actions taken or in process to assist in the implementation of the Convention With respect to Article 5 , based upon a statement made by Canada with respect to the compatibility between international standards for mine clearance and Convention obligations under Article 5 , the SCE agreed that Convention obligations and international mine clearance standards are not incompatible . With respect to Article 7 , the Co-Chairs of the Committee agreed to continue to coordinate joint actions to encourage compliance with Article 7. With respect to Article 2 , the Committee welcomed as a useful step forward the offer of the ICRC to host technical discussions on how to minimize the risk of detonation of anti-handling devices through accidental or inadvertent contact and on sensitive fusing mechanisms for anti-vehicle mines . The ICRC indicated that these discussions may be held in early 2001 and encouraged States Parties to prepare technical studies on these issues for discussion at that time . Details on the proposed seminar will be provided at the next meeting of the Committee . With respect to Article 8 , based upon a paper developed by Canada and discussed at the Committee=s second meeting , the Committee agreed that expert work should proceed in the lead-up to the first post-SMSP meeting of the Committee on elaborating upon Astandards of evidence@ which may be used as a basis for initiating a ARequest for Clarification@ , the maintenance of a list of experts , fact-finding missions and financial issues . Recommendations made by the SCE With respect to the post-SMSP intersessional work programme , the Committee made the following recommendations for consideration by States Parties at the SMSP : ( a ) Duration of Meetings : It was recommended that only three periods of meetings be held annually , including the Meeting of States Parties . That is , each SCE shall meet twice between Meetings of States Parties , once during an initial week-long session of meetings in November or December 2000 and once during a week-long session of meetings in May 2001. ( b ) Number of Committees : In the interest of efficiency , it was recommended that directly related themes be merged into one SCE , particularly that the Committees for Mine Clearance and Technologies for Mine Action be combined into one Committee without excluding discussions on technology , when necessary , on the part of the Committees on Victim Assistance , Socio-Economic Reintegration and Mine Awareness , and on Stockpile Destruction . Thus there would be four Committees as follows : Mine Clearance and Related Technologies ( meeting for 1.5 days during each of the two week-long sessions of meetings ) Victim Assistance , Socio-Economic Reintegration and Mine Awareness ( meeting for 1.5 days during each of the two week-long sessions of meetings ) Stockpile Destruction ( meeting for 1 day during each of the two week-long sessions of meetings ) General Status and Operation of the Convention ( meeting for 1 day during each of the two week-long sessions of meetings ) . Example : ( c ) Language of Proceedings : To further enhance active participation in the work of the Committees , it was recommended that States in a position to do so consider making voluntary contributions to have additional languages made available for the intersessional meetings . ( d ) Date of Meetings : It was recommended that the first of the two week-long sessions of meetings take place in November/December 2000. It is further recommended that the second of the two week-long sessions of meetings take place in May 2001. ( e ) Supporting Participation : It was recommended that consideration be given to developing a mechanism to provide for assistance to support participation in meetings of the Convention . ( f ) Role of Co-Chairs : It was recommended that Committee Co-Chairs may , as appropriate , seek ongoing support and advice of past Co-Chairs . ( g ) Name Change : It was recommended that the Standing Committees of Experts ( SCEs ) be referred to as Standing Committees ( SCs ) . ( h ) Post-SMSP Rapporteurs : It was recommended that the following States be nominated to serve as Committee Rapporteurs following the SMSP : Mine Clearance and Related Technologies : Germany and Yemen Victim Assistance , Socio-Economic Reintegration and Mine Awareness : Canada and another State to be determined Stockpile Destruction : Australia and Croatia General Status and Operation of the Convention : Norway and Thailand With respect to the Article 7 reporting process , the Committee made the following recommendations for consideration by States Parties at the SMSP : ( a ) In order to provide States Parties with the opportunity to report voluntarily on matters pertaining to compliance and implementation not covered by the formal reporting requirements contained in Article 7 , it was recommended that States Parties amend the Article 7 reporting format to include an additional form : AForm J : Other relevant matters@ . ( b ) It was further recommended that States Parties consider using this form to report on activities undertaken with respect to Article 6 , in particular to report on assistance provided for the care and rehabilitation , and social and economic reintegration , of mine victims . Reference to supporting documents The UNDDA database of reports submitted under Article 7 can be found at : http://domino.un.org/Ottawa.nsf. The UNMAS database of donor activity , Mine Action Investments , can be found at : http://www.un.org/Depts/dpko/mine/. The statement made by Canada with respect to Article 5 ( see paragraph 20 above ) can be found appended to the report of the first meeting of the Committee at : www . gichd . ch . The paper circulated by Canada with respect to Article 8 ( see paragraph 23 above ) can be found appended to the report of the second meeting of the Committee at : www . gichd . ch . The draft amendment to the Article 7 reporting format ( see paragraph 25 above ) can be found appended to the report of the second meeting of the Committee at : www . gichd . ch . PRESIDENT=S ACTION PROGRAMME Background At the First Meeting of the States Parties , the intersessional programme was established to focus and advance the international community=s mine action efforts and to measure progress made in achieving our objectives . This programme , which involved the work of five Standing Committees of Experts ( SCEs ) , was designed to serve as a practical means to assist in the implementation of the Convention . The President=s Action Programme has been developed to help in this process of implementation by identifying practical steps that can be taken in accordance with the recommendations of the SCEs . It provides a summary of concrete initiatives and activities that flow from the work of the SCEs as well as other specific initiatives that have been announced since the conclusion of the work of the SCEs or during the Second Meeting of the States Parties ( SMSP ) itself . In doing so , it is a mechanism that both builds upon past work and is forward looking in ensuring that the aims of the SCEs are realized . In addition , to assist in the coordination of our collective efforts , the President=s Action Programme includes a rolling calendar of future mine action activities that are consistent with this objective . In developing their work plans for the 2000-2001 Standing Committees , Co-Chairs of the various Standing Committees are encouraged to facilitate the implementation of relevant portions of the President=s Action Programme . In addition , States Parties and other parties are urged to consider participating in the implementation of the actions listed in this document and implementing , where relevant , other recommendations contained in the reports of the Standing Committees of Experts . ( See annex IV . Mine clearance and related technologies Revising technical standards for mine action : The SCE recommended that all mine action partners be encouraged to contribute to the process of revising international standards for mine action being undertaken by the Geneva International Centre for Humanitarian Demining ( GICHD ) on behalf of the United Nations Mine Action Service ( UNMAS ) , and that work should be undertaken to support their effective dissemination and implementation . UNMAS , in conjunction with the GICHD , will soon make a final draft of the standards available on its web site and advise interested parties of the site details and request comment . Revising guidelines for mine action : The relevance of mine action guidelines and principles for good practice was recognized by the SCE . To follow-up on this recommendation , preliminary work undertaken by Handicap International ( HI ) , the Mines Advisory Group ( MAG ) , Norwegian Peoples Aid ( NPA ) and the Bad Honnef group will be further revised and disseminated by the ICBL Mine Action Working Group ( MAWG ) . Developing indigenous capacities for mine action : The critical importance of developing indigenous mine action capacities and reinforcing national leadership was highlighted by the SCE . In support of this objective , the United Nations Development Programme ( UNDP ) is providing assistance to 15 mine-affected countries . This assistance includes the establishment of mine action centres and the provision of training and resource mobilization . In addition , UNDP is currently conducting a management training course for senior mine action officials , and further courses are planned . Furthermore , numerous non-governmental organizations are also developing mine action capacities in mine-affected countries . Enhancing transparency in mine action funding : It was recognized by the SCE that the UNMAS database of donor activity , Mine Action Investments , will be effective only if the data is substantially complete and if progress is made towards the database becoming the definitive source for donor activity . UNMAS is continuing to work to encourage donors to enter both data on donor activity and information on donors= policies regarding the provision of mine action funding . Improving the operating environment for mine clearance : It was recommended by the SCE that action be taken to establish best practices with respect to ensuring a conducive operating environment for mine clearance . To this end the ICBL Mine Action Working Group will prepare recommendations which will be brought to the Standing Committee on Mine Clearance . Supporting socio-economic analysis in planning and evaluating mine action : It was recommended by the SCE that the findings of studies on socio-economic impacts and mine action undertaken by the GICHD on behalf of UNDP be widely disseminated . In addition , it was recognized that mine clearance should be integrated , where relevant , into the larger context of reconstruction , development and peace-building . To follow-up on this recommendation , UNDP will widely disseminate their study and produce a socio-economic handbook for mine action managers . Training and workshops may also be conducted in mine-affected countries . In addition , the Survey Working Group , the International Peace Research Institute , Oslo ( PRIO ) and the NPA will make available the standards and protocols that they have developed as well as independent studies that will help to establish socio-economic indicators . Improving the exchange of mine action information : A number of recommendations were made by the SCE with respect to further disseminating information on mine action and enhancing mine action information tools . To this end , UNMAS is working to link its web-based project portfolio with non-governmental organizations= portfolios and is considering adding to its web-site country data-input opportunities and more links to mine-affected sites and mine action centres . ( See : http://www.un.org/Depts/dpko/mine/. ) UNMAS is also undertaking a number of other steps ( e. g. , working with the Spokesman=s Office , contributing content to other mine action information sources , etc. ) within the United Nations system to improve upon the dissemination of information . In addition , the ICBL MAWG will update the NGO portfolios and make them available on the Internet . Reciprocal links will be developed amongst numerous relevant organizations . Improving the quality of mine action information from the field : The SCE endorsed the work of the Survey Action Centre ( SAC ) and recommended that survey findings be disseminated and that further surveys take place . To this end , surveys are being undertaken or planned for Cambodia , Chad , Lebanon , Mozambique and Thailand . Improving the testing and evaluation of demining equipment : The SCE recommended that measures be taken to enhance the testing and evaluation of mine clearance equipment , with a focus on technologies that are affordable , accessible and appropriate . An International Test and Evaluation Program ( ITEP ) for humanitarian demining equipment , processes and methods has been established through a Memorandum of Understanding signed on 17 July 2000 between the European Commission , Canada , the United States , Belgium , the United Kingdom , the Netherlands and Sweden . The ITEP mandate is to develop methods for test and evaluation and to use these methods to evaluate demining equipment before it is deployed to the field . Victim assistance , socio-economic reintegration and mine awareness Disseminating information on victim assistance programmes : A number of actions were proposed by the SCE with respect to the development and distribution of a portfolio of victim assistance programmes in order to highlight the range of victim assistance activities , promote transparency in programming and highlight current gaps in our efforts . The ICBL Working Group on Victim Assistance ( WGVA ) , as the facilitator of the Portfolio Network Group of the Standing Committee of Experts on Victim Assistance , produced the Portfolio of Victims Assistance Programs , which was distributed at the SMSP . The WGVA will make the Portfolio more broadly available via the Internet and other distribution methods and will update it annually if it is deemed to be a useful tool . Enhancing transparency in victim assistance programming : The SCE recommended that further work be undertaken to enhance transparency surrounding the implementation of , and compliance with , Article 6.3 of the Convention regarding the provision of assistance to landmine victims . Consequently , ICBL WGVA will continue its work to provide States Parties with guidance on how to effectively report on implementation of Article 6.3 of the Convention , including providing suggestions on how to use AForm J@ in the amended Article 7 reporting format . Disseminating victim assistance information through national focal points : The SCE recommended that governments establish a focal point on victim assistance from which information such as the global portfolio , guidelines and methodologies could be channelled to relevant actors . The World Health Organization ( WHO ) and the United Nations Children=s Fund ( UNICEF ) together with the ICBL will approach all relevant States by December 2000 to designate these focal points . Coordinating donor activity : The SCE recommended that interested parties further develop more effective methods of donor coordination , at both the country and global levels . Sweden will work with interested parties to facilitate the establishment of mechanisms , which would interact directly with relevant victim assistance coordinating bodies in mine-affected countries . ( Note : Mozambique , Bosnia and Herzegovina and Afghanistan and others have already established coordinating mechanisms . Disseminating and encouraging implementation of all victim assistance guidelines : Relevant parties were encouraged by the SCE to take into account existing victim assistance guidelines when developing and evaluating victim assistance programmes . To this end , the International Committee of the Red Cross ( ICRC ) , WHO , UNICEF , ICBL and UNMAS have distributed the major guidelines on victim assistance to mine action centres , demining institutes , governments and numerous other relevant organizations . These organizations will ensure additional distribution of guidelines as required . In addition , the GICHD will contribute to the collection and dissemination of guidelines through its web site and documentation centre . Disseminating and implementing mine awareness guidelines : Relevant parties were encouraged by the SCE to ensure that the UNICEF Guidelines for Mine Awareness are widely disseminated as a learning tool for programming agencies and integrated into programme development . UNICEF will continue its active dissemination of the Mine Awareness Guidelines . In addition , on 12 September 2000 , UNICEF launched its initiative aimed at training programme managers and mine awareness community facilitators . Improving victim assistance data and information management : The SCE recommended that enhancements be made to the Information Management System for Mine Action ( IMSMA ) to take into consideration data related to mine awareness and mine incidents . To this end , UNMAS and the GICHD are further developing and refining relevant IMSMA modules . In addition , the SCE recommended that WHO further develop its integrated surveillance system on victims and trauma in a gender-disaggregated form . WHO will follow-up on this recommendation . Improving victim assistance information and data collection : A number of actions were proposed by the SCE with respect to obtaining more reliable victim assistance data and more effectively disseminating these data . In addition , Landmine Survivors Network will , with support from UNMAS , expand the Rehab Service Database . Stockpile destruction Providing assistance for stockpile destruction : It was recommended by the SCE that those parties that have completed the destruction of their stockpiles make their expertise available to those in need . To this end , Switzerland will establish a training programme for stockpile destruction management . Furthermore , to assist in fulfilling this objective in the Americas , Argentina and Canada , in cooperation with the Organization of American States ( OAS ) and the United Nations Department for Disarmament Affairs ( UNDDA ) , will host a seminar in Buenos Aires on 6-7 November 2000. Improving the exchange of information on stockpile destruction : It was agreed within the SCE that efforts should be made to collect and exchange more information on the stockpile destruction needs of States Parties and other States , and the assistance available to meet these needs . Accordingly , Canada is assisting UNMAS in developing a web site to facilitate information exchanges on experiences and best practices in stockpile destruction and to enable States that may need technical assistance to make their needs known . In addition , UNDP has compiled a number of case studies on stockpile destruction which it will disseminate . Destroying mines in an efficient and environmentally sound manner : Discussions were held within the SCE on ways and means to ensure that global stocks are destroyed in the fastest , most cost-effective way and with the least harmful effects to the environment . To facilitate exchanges of technical information on these issues , Hungary and Canada will host a seminar in early 2001 on the unique challenges associated with the destruction of PFM mines , which , if not handled properly , can corrode and cause significant damage to individuals and the environment . General status and operation of the Convention Universalizing the Convention : The importance of continuing efforts leading to the universalization of the Convention was highlighted by the SCE . Several States Parties , including Argentina , Australia , Belgium , Canada , Hungary , the Netherlands , Norway , South Africa , Switzerland and the United Kingdom , along with the ICRC and ICBL , have agreed to continue activities of an informal and open-ended Universalization Contact Group to facilitate coordinated action with a view to encouraging additional ratifications and accessions to the Convention . In addition , France and Canada , in cooperation with the Organization of African Unity ( OAU ) , are organizing a conference on the universalization and implementation of the Convention in Africa , to be hosted by Mali in Bamako on 15-16 February 2001. Encouraging compliance with Article 7 : The SCE recommended that joint efforts be undertaken to encourage compliance with Article 7 of the Convention . To this end , Belgium has agreed to continue to coordinate these efforts with the participation of all interested parties . In addition , Belgium will work with interested States , the ICBL and UNDDA to develop a guide to completing Article 7 reports . Continuing dialogue on Article 2 : The SCE welcomed the offer by the ICRC to host discussions to examine the technical characteristics of existing stocks of anti-vehicle mines , as well as those that may be acquired in the future , to ensure that they are designed to minimize the risk to civilians . The ICRC has confirmed that it will host discussions on these matters in March or April 2001 and will provide further details on the structure of and preparations for the meeting in time for the December 2000 Standing Committee meetings . Operationalizing Article 8 : The SCE agreed that expert work should proceed on matters pertaining to operationalization of Article 8. To this end , Canada will host a workshop in Ottawa in November 2000 to prepare detailed recommendations in time for possible review in December 2000 by the Standing Committee on the Status and Operation of the Convention . Clarifying matters pertaining to mines retained under Article 3 : The SCE highlighted the need for greater understanding of matters pertaining to anti-personnel mines retained for training and development under Article 3 of the Convention and received numerous clarifications from States Parties on this matter . To further clarify reasons why mines are retained and used in a manner consistent with Article 3 , the Co-Chairs of the Standing Committee on the General Status and Operation of the Convention , Belgium and Zimbabwe , will continue a dialogue on this topic during future meetings of the Standing Committee . Promoting the establishment of national implementing legislation : The SCE invited States Parties to work with interested organizations to develop a sample package of existing implementation legislation to assist other States Parties in establishing legislation . In response to this suggestion , the ICRC will work with the ICBL , the Co-Chairs of the Standing Committee on the General Status and Operation of the Convention , Belgium and Zimbabwe , and other interested parties on developing and disseminating such a package of legislation . Preparing for meetings of the States Parties : The SCE undertook to prepare for the Second Meeting of the States Parties . To build upon this practice , the Co-Chairs of the Standing Committee on the General Status and Operation of the Convention , Belgium and Zimbabwe , will ensure that work proceeds in preparation for the Third Meeting of the States Parties . As part of this work , the Co-Chairs will review the rules of procedure in consultation with the Coordinating Committee . September 16 : Handicap International Landmines Day . Events in Belgium , France , Germany and Luxembourg . Shoe pyramids in 16 cities throughout France . Contact : Handicap International , sylviebrigotHI@compuserve . com or www . handicap-international . org 19-20 : Varese , Italy . Use of Satellites and Integrated Technologies for Humanitarian Purposes co-organized by EURISY and the European Commission/Joint Research Centre . Contact : Tel +39 0332 789370 ; Fax : +39 0332 782435 ; email : dorit . schlittenhardt@jrc . org 21 : Brussels , Belgium . Landmines Awareness Day in the European Parliament . Contact : sylviebrigotHI@compuserve . com 22 : Queensland , Australia . Exhibition opening at the Queensland Museum on refugees and landmines . Exhibitions throughout Queensland 22 September-19 November organized by Austcare . Contact : qldoffice@austcare . org . au 25 : Bogota , Colombia : Launching of the book , Sembrando minas , cosechando muerte . Contact : cccminas2@cccminas . org 28 : Tokyo , Japan : Symposium on Landmines . Contact : shimizu@jca . ax . apc . org 28-29 : Luanda , Angola . SADC Landmine Victim Assistance Workshop to develop a " SADC Plan of Action for Landmine Victims " organized by SADC 's Regional Mine Action Coordination Office in Gaborone , Botswana . Contact : JML Ndlovu at JMNdlovu@sadc . int October 7-15 : Australia . Refugee Week . Clearing a Safe Path . Events in all states . Contact : qldoffice@austcare . org . au 8 : Spain and France . Cambodian Landmine Dancers with 13 year old survivor Srey Mom tours Spain and France from 8 October-4 December . Contact : camban@camnet . com . kh 11 : Colombia . Conference at the University of Los Andes - AColombia and Anti-Personnel Mines : What you can do . @ Contact : cccminas2@cccminas . org 17 : Azerbaijan . On the occasion of Azerbaijan Republic Day , " Azerbaijan without Mines " meeting with participation of governmental institutes , national NGOs , political parties and journalists . Contact : root@ipd . baku . az 18 : Sydney , Australia . Media event and presentation to Cambodian Para-Olympics Team of mine survivors . Contact : fmorgan@ncca . org . au or AUSAID 25-27 : Djibouti , Republic of Djibouti . Horn of Africa/Gulf of Aden Conference on Landmines hosted by the Ministry of Foreign Affairs of Djibouti in collaboration with the Institute for Practical Research and Training . Contact : Tel/Fax : +252 2 52 3152 or ahesa@rocketmail . com 28 : Djibouti : Landmine Monitor Meeting for Horn of Africa Researchers . Contact : ahesa@rocketmail . com or lm@icbl . org November 4-5 : Buenos Aires , Argentina . Americas Landmine Monitor researchers and ICBL campaigners meeting . Contact : macinfo@web . ca 6-7 : Buenos Aires , Argentina . Regional Seminar on Stockpile Destruction of Antipersonnel Mines co-hosted by the Governments of Argentina and Canada in collaboration with the OAS Mine Action Program and the United Nations Regional Centre for Peace , Disarmament and Development in Latin America and the Caribbean ( UN-Lirec ) . Contact : Mélanie Régimbal , Mine Action Team , Department of Foreign Affairs and International Trade ( Canada ) ; fax : 1 613 944 2501 ; email : melanie . regimbal@dfait-maeci . gc . ca ; or : Santiago Villalba , Division of International Security , Nuclear and Space Affairs , Ministry of Foreign Affairs . Fax : 5411 4819 7828 ; email svi@mrecic . gov . ar 12-13 : Bandar Seri Begawan , Brunei Darussalam : APEC Summit . 13 : Melbourne , Australia . World Vision Australia International Landmines Seminar . Objectives : a forum for exchange between NGOs , interested members of the public and landmine sectoral specialists , on current issues for advocacy and programming . Contact : Heather Elliott , World Vision Australia : Fax : +61 3 9287 2315 , email : elliotth@wva . org . au X : Ottawa , Canada . Workshop on the operationalization of Article 8. Contact : kerry . brinkert@dfait-maeci . gc . ca X : Kiribati . South Pacific Forum . Contact : http://www.forumsec.org.fj/ X : International Landmines Conference hosted by World Vision Australia . Contact : Rob Lutton , World Vision Australia , luttonr@wva . org . au December 3 : International . Third Anniversary of the Opening for Signature of the 1997 Landmines Convention and International Day for Disabled Persons . 4-8 Geneva , Switzerland . Meetings of the Standing Committees established by the SMSP to the Convention . Contact : GICHD . Tel : 41 22 906 1662/63 ; Fax : 41 22 906 1690 ; email : gichd@gichd . ch ; web site : http://www.gichd.ch 4-8 : St. Petersburg , Russia . First Hockey-on-Prostheses Championship . Contact : International Institute for Prosthetic Rehabilitation of Landmine Survivors , Tel : 781-297-1204 ; email : mpitkin@lifespan . org 11-15 : Geneva , Switzerland . Meeting of States Parties to the Amended Protocol II of the Convention on Certain Conventional Weapons . X : Paris : European Union Summit . February 15-16 : Bamako , Mali . Seminar on Universalization and Implementation of the Ottawa Convention in Africa organized by France , Canada and the OAU . Contact : Sébastien Carrière , Mine Action Team , Department of Foreign Affairs and International Trade ( Canada ) ; fax : 1 613 944 2501 ; email : sebastien . carriere@dfait-maeci . gc . ca May 7-11 Geneva , Switzerland . Meetings of the Standing Committees established by the SMSP to the Convention . Contact : GICHD . Tel : 41 22 906 1662/63 ; Fax : 41 22 906 1690 ; email : gichd@gichd . ch ; web site : http://www.gichd.ch While the President 's Action Programme is designed to build upon the work undertaken by the SCEs during 1999-2000 , this document is forward looking . Therefore , the President 's Action Programme has been divided into sections that reflect the 2000-2001 Committee structure . 