
International Conference on Chemicals Management Second session Geneva , 11-15 May 2009 Item 4 ( a ) of the provisional agenda∗ Implementation of the Strategic Approach to International Chemicals Management : evaluation of and guidance on implementation and review and update of the Strategic Approach Thought-starter on possible guidelines for the identification of new activities for inclusion in the Global Plan of Action of the Strategic Approach Note by the Secretariat The secretariat has the honour to circulate , in the annex to the present note , a thought-starter on possible guidelines for the identification of new activities for inclusion in the Global Plan of Action of the Strategic Approach . The thought-starter was prepared by a drafting group established by the European Union and and what is known as the JUSSCANNZ group of countries , following their second meeting , held in Paris on 12 June 2007 , and revised in the light of comments made during their third meeting , held in Paris on 12 February 2008. Further amendments were made in the course of the informal discussions held in Rome on 23 and 24 October 2008 on preparations for the second session of the Conference . The drafting group was coordinated by the Government of Spain . The thought-starter is presented for consideration by the Conference . Annex Thought-starter on possible guidelines for the identification of new activities for inclusion in the Global Plan of Action of the Strategic Approach Summary The present thought-starter , submitted by the Government of Spain on behalf of the drafting group comprising some European Union and JUSSCANNZ countries , proposes guidelines for the identification and introduction of new activities in the Global Plan of Action of the Strategic Approach . The activities could relate to those contained in table C of the draft Global Plan of Action set out in annex I to the note by the Secretariat on a draft global plan of action ( SAICM/ICCM.1/4 ) , which were considered by the International Conference on Chemicals Management at its first session held in Dubai from 4 to 6 February 2006 , but which were not agreed upon for inclusion in the Global Plan of Action at that time . Introduction At its first session , the Conference held lengthy discussions on the status of the activities of the Global Plan of Action . The executive summary of the Global Plan of Action indicates that the Conference was unable to conclude its discussions on a number of activities , as reflected in table C , and that stakeholders might wish to discuss those activities intersessionally . As expressed in the report of Conference on the work of its first session ( SAICM/ICCM.1/7 ) , the Committee of the Whole agreed that table C should be removed from the Global Plan of Action , but that its importance should be reflected in the executive summary as a source of potential new activities for the Global Plan of Action . In the executive summary , it is also suggested that stakeholders may wish to discuss the contents of table C in the period between the first and second sessions of the Conference , for example in regional meetings . The executive summary further indicates that the Global Plan of Action should be regarded as a guidance document to be reviewed as appropriate . The review and further development of the Global Plan of Action were on the agenda for each of the first round of regional meetings held following the first session of the Conference . Participants in the first meeting of European Union and JUSSCANNZ countries , held in Barcelona from 20 to 22 November 2006 , concluded that the Global Plan of Action could be a mechanism for responding to priority needs expressed by developing countries and could be reviewed at a later date in the light of experience acquired . At the second meeting of European Union and JUSSCANNZ countries , held in Paris on 12 June 2007 , participants also discussed the need to review the Global Plan of Action , particularly in the light of the views expressed by other regional groups that they would prefer to gain experience of working with the Global Plan of Action before modifying it , and the fact that no mechanism was in place to carry out such a review . Participants recalled that the Global Plan of Action represented a toolkit from which participants were able to select their own priorities . The absence of an activity from the list would not prevent it from being pursued . Recognizing that the Global Plan of Action represented a snapshot in time , participants suggested that , rather than review the Global Plan of Action , it would be better to identify how to add to the list . Participants agreed to the establishment of a small drafting group to consider some simple guidelines on how this might be done . Following the above-mentioned request , the regional focal point for the Western European and others group established a small drafting group , led by the Government of Spain , to undertake this work . The present thought-starter has been influenced strongly by the comments of members of the drafting group and proposes guidelines for further discussion and elaboration . It suggests a procedure and a justification document to support the inclusion of new activities in the Global Plan of Action . It does not intend to change the status of table C or activities therein . It also includes , in the appendix , an outline of possible supplementary information to be submitted on a voluntary basis . Proposed procedure Proposals for additional activities for inclusion in the Global Plan of Action could be presented by a stakeholder or a group of stakeholders . The mechanism for the discussion and endorsement of proposals for new activities to be included in the Global Plan of Action could comprise the following steps : ( a ) The stakeholder(s ) making the proposal would prepare a justification document ( an outline of its possible contents is referenced in the next section ) ; ( b ) The stakeholder(s ) would send the document to the secretariat and might also send a copy to the regional focal point for discussion at the regional level . The regional focal point(s ) would propose the inclusion of an agenda item to allow such discussion at the following regional meeting(s ) ; ( c ) The secretariat would post proposals received on the Strategic Approach website inviting comments from other stakeholders . Comments received by the secretariat would be posted on the website . Such comments might be in support of or against the proposal and should set out clear justification of the position taken ; ( d ) The comments would be considered by the stakeholder(s ) who made the submission for further amendments as appropriate . The revised document would then be sent to the secretariat for posting on the Strategic Approach website with other documents for the following session of the Conference ; ( e ) The proposal would be presented to the Conference by the stakeholder(s ) , who would provide justification of their position ; ( f ) The Conference would discuss and consider the document for endorsement or other action as appropriate . Proposed contents of the justification document The justification document would consist of at least the following information : ( a ) Synopsis of background information , including the relevance of the activity to protecting human health or the environment ; ( b ) Ways in which the activity would contribute to achieving national , regional or global commitments , objectives , priorities and needs ; ( c ) Information about the means of implementation of the activity at the country or participant level ( setting out examples ) ; ( d ) Conclusions and specific proposal . As a general rule , the justification document should include a description of the activity itself , including the scale of the activity ( national , regional or global level ) , the work area of the Global Plan of Action in which the activity would be included and a summary of its relevance to protecting human health or the environment . It should also identify suggested actors , targets and timeframes , indicators of progress and implementation aspects related to the activity proposed . When proposing a specific activity , the lead proposer should endeavour to avoid duplication with other activities already included in tables A and B of the Global Plan of Action . For further justification , the lead proposer might consider supplementing the proposal with more information where available . The appendix to the present paper describes supplementary information that might be provided . The list set out in the appendix is not intended to be exhaustive or exclusive of other data considered relevant by the lead proposer . The justification document could include a brief description of how the activity proposed could contribute to achieving commitments made under the Dubai Declaration , the objectives included in part IV of the Overarching Policy Strategy and general priorities reflected in paragraphs 7 and 8 of the Global Plan of Action . The justification document should not exceed five pages in length , excluding external references and annexes . Action requested Participants in the informal discussions are invited : ( a ) To consider the proposal contained in the thought-starter for guidelines for the addition of new activities to the Global Plan of Action ; ( b ) To comment as they deem appropriate : ( i ) On the document in general ; ( ii ) On the procedural mechanism proposed for the discussion and adoption of activities ; ( iii ) On the contents proposed for the justification document and the appendix . Appendix Supplementary information For activities related to substances , products and articles , supplementary information could be submitted on : ( a ) Properties of the substances or groups of substances , products and articles in question ; ( b ) Mechanisms by which they may cause adverse effects on human health and the environment ; ( c ) Sources of pollution and activities which may affect human health and the environment ; ( d ) Main pathways , such as water , atmosphere , product , waste , for the introduction of contaminants to the environment and the loads from those different pathways . For processes or human activities affecting human health or the environment , supplementary information could be submitted on : ( a ) Extent , intensity and duration of the human activity under consideration ; ( b ) Actual and potential adverse effects of the activity on human health and specific species , communities and habitats ; ( c ) Actual and potential adverse effects of the human activity on specific ecological processes ; ( d ) Irreversibility or durability of the effects . For any kind of activity , supplementary information could include an assessment of the consequences of the implementation of the activity proposed , including a cost and benefit analysis where available . For any kind of activity with existing and potential obligations within the framework of other international organizations , supplementary information could include an assessment of the added value of the proposed activity to the Global Plan of Action . The supplementary information could also include an assessment of ways in which the activity could contribute to the fulfilment of national , subregional , regional or global commitments , objectives , priorities and needs . ∗ SAICM/ICCM.2/1 Japan , United States of America , Switzerland , Canada , Australia , Norway and New Zealand . 