
Twenty-fourth session of the Governing Council/ Global Ministerial Environment Forum Nairobi , 5-9 February 2007 Policy Statement by Mr. Achim Steiner , United Nations Under-Secretary General and Executive Director of the United Nations Environment Programme at the twenty-fourth session of the Governing Council/Global Ministerial Environment Forum ( GC/GMEF ) The annex to the present note contains the transcript of a speech in which Mr. Achim Steiner , United Nations Under-Secretary General and Executive Director of the United Nations Environment Programme , delivered his policy statement on the occasion of the twenty-fourth session of the Governing Council/Global Ministerial Environment Forum ( GC/GMEF ) . The transcript is presented without formal editing . Policy Statement by Achim Steiner , UN Under-Secretary General and UNEP Executive Director at the 24th Session of the UNEP Governing Council/Global Ministerial Environment Forum ( GC/GMEF ) President of the Governing Council , Excellencies , Ladies and Gentlemen , Dear Colleagues , I would like to make this statement a policy statement of major issues and priorities alongside reporting back to you on our activities at UNEP since taking up the post of Executive Director seven months ago . However let me begin by stating something referred to a number of times this morning-- this Governing Council may just be a Governing Council like others before it , some times interesting , some times important and some times controversial . But all too often the GC and the GMEF have not been moments when the world 's environment ministers met and the world listened . In fact , very often we meet in the context of GCs and GMEFs and talk about some of the most pressing issues of our time . Yet apart from documents to the UN committees that report on our work , can we truly say that we are being heard in the world ? Can we truly say that we are making the most of this extraordinary opportunity , indeed this responsibility when we gather the world 's environment ministers from over 140 nations ? The Secretary-General 's High Level Panel described the Global Ministerial Environment Forum as the most important policy platform that the world has to address environment issues . The question that many of you and many outside ask is how can member states and ministers of the environment-- as custodians of the environmental sustainability concerns of our societies-- truly make a difference ? I believe that we are meeting here in the first week of February 2007at a moment unlike any other that we have seen perhaps for 20 years . A moment in which one environmental issue has graduated from being seen as primarily or purely an environmental concern to an economic , a security and an energy policy and ultimately a livelihood issue . I am of course talking about climate change . Twenty five years ago , when the first scientific hypotheses and models on climate change were being put into the broader public arena , the world in some ways turned away and said : “ Oh , here we have another doomsday scenario . " And then a few years later it is equally remarkable that we moved forward and actually agreed , in Rio at the 1992 Earth Summit on a global Convention to combat climate change . It was , and remains a pioneering instrument because for the first time in the history of this planet 190 nations agreed to work together on tackling something that they were just beginning to recognize as a major issue . A few years later negotiations were initiated on the Kyoto Protocol . Kyoto is acknowledged by all to be imperfect . Yet it represented the most tangible step by most of the nations of this Earth towards dealing with this emerging crisis . Kyoto established new and completely novel instruments to try and deal with the question of how to tackle CO2 emissions . Here we are today in Nairobi , Kenya just one week after the press conference of the Intergovernmental Panel on Climate Change ( IPCC ) held at the headquarters of UNESCO in Paris . The measure of public interest in the issue was manifest in Paris . Last week there was a hall full of 400 or 500 journalists , dozens of TV cameras and channels reporting live about a scientific report using language that is probably to this day difficult for most of us to follow . Honorable ministers , The world is therefore expecting the UN and governments to pay attention to an issue—an issue that is on the one hand an environment issue and on the other hand one that is truly an issue about the future of humanity on this planet . Ultimately it is also a question of how nations on this planet can come together to address these kinds of pressing issues . Environment in the 20th century was largely an issue of awakening—an awakening still to a large extent based upon imperfect science . We struggled to understand the phenomena of environmental change being observed . Environment was also often focused on local environmental issues , for example lakes , river basins , forests and threatened species . The great difference of the environmental sustainability agenda of the 21st century is a very simple fact—namely that we have moved from focusing on the degradation of local environmental assets to fundamentally affecting the systems that support life on this planet . Climate change is the ultimate illustration of how everyone on this planet will be affected by the actions of others--of how we have succeeded with our rapid industrial and economic development to compromise the capacity of nature and of our natural systems to ultimately sustain life as we know it today . There are still some that will argue that global warming does not matter—that melting ice caps do not matter because they think they can take care of themselves . Well this is another harsh reality of the 21st century . Two or three decades ago environment was often seen as a preoccupation of the rich , or indeed the privilege of the rich . Climate change has turned that upside down . The environmental phenomenon of global warming is first and foremost going to affect the poorest , the most vulnerable and least prepared on this planet . That fundamentally changes , or must begin to change , the discourse with which we tackle the issue of environmental sustainability as an integral part of the economic development process . The atmosphere , the ecosystems , the kinds of data and figures that you will find this week- and here in the new Global Environment Outlook Year Book 2007 that we are launching today-- are no longer just warnings . They are actually giving us end points , and some of these end points come in our lifetimes . Amongst the most frightening of these is research that says that in the lifetime of many of the younger people in this room—in 2050-- we will no longer have any commercial fisheries in our oceans . Imagine for a moment the implication of what we are saying here . Take a world map and think for a moment . How is it possible that we , as humanity , have managed in less than 100 years to drive a natural resource to a point where we may in fact no longer have commercial fisheries ? This is one example of the kinds of boundaries that we are hitting , and we are beginning to hit , within our lifetimes and not any longer in an inter-generational context . So the environmental agenda that UNEP has to capture and reflect—that indeed the multilateral system as a whole has to reflect-- has evolved even though the politics of the day is struggling to keep up with the science of yesterday . This is in many ways the most striking feature of the IPCC report--we have the evidence before us yet our political mechanisms , tools and processes for working together as a global community are lagging far behind this scientific information . The question that many pose now is : “ What has UNEP , what have ministers of environment and what has the GMEF to offer in the way of leadership on the issue of climate change and on the broader issue of environmental sustainability ? ” Ministers and distinguished delegates , I would urge you to make these days in Nairobi , as days when you as the Ministers and Deputy Ministers of environment- representing over 140 nations- provided our international community with a sense of direction and of collective purpose . Because one can blame many things on institutions and on individuals , but ultimately we have to come back to the fact that the United Nations-- and thus also the United Nations Environment Programme-- is a product of what its member states would like it to be . Ministers of the environment , just like ministers of trade , of finance or of health have a particular responsibility and agenda . The question is why , in the year 2007 is the portfolio of environment all too often regarded as the least influential and the least powerful ? Why is this the case when the whole world right now is looking at environmental issues as among the most dramatic challenges to our future on this planet ? It again begs the question as to why a meeting of the GC/GMEF largely leaves very few ripples in the rest of the world ? So I would urge ministers to reinvent the power and to rediscover the voice of this forum . Because this GC and this Ministerial Forum has in the past triggered initiatives on a global scale that made a difference-- and without which we would be a great deal poorer today . One way to achieve this is for us all to take a step back from the current impasses that so often characterize contemporary international negotiations—impasses of the kind touched upon earlier in the side event on trade and environment . I think we have reached a point where environment must be viewed as an issue of collective and joint responsibility where the imperfection of the international system and the unfairness of some of the economic frameworks—particularly as they relate to developing countries--is something we address openly . We also have debates that must seem bizarre to an outsider because we are essentially moving the agenda of the environment like pawns on a chess board—while at the same time , our citizens , our colleagues and our youth see a different reality of a world undergoing dramatic change of the kind reflected in the harrowing images of the film which opened this GC/GMEF . Honorable Ministers , As Executive Director for 7 months now , I also report to you today about UNEP in 2006. I want to begin by acknowledging the work and the extraordinary contribution that my predecessor , Klaus Toepfer , made . Among his many contributions was , with your support , to give UNEP an identity and a sense of direction that I am continuing with as Executive Director today . This direction I speak of is the bringing to an end the mythology that environment and development are two separate issues . We can use different terminology such as environment for development , or sustainable development or environmentally sustainable development . But the fact of the matter is that there will ultimately be no development without a sustainably managed environment . Equally , the environment cannot be protected and managed in a nation or in a world of 6 , 7 , 8 billion people without development , economic opportunity and economic growth taking place . I think it is part of this forum 's role and its responsibility to develop the next generation of sustainable development thinking--just as you have done in the past . Honorable ministers , We have today an institution , the United Nations Environment Programme that in many ways surprised me when I arrived . Surprised me because of the immense array of activities it undertakes and also because of the high regard in which the organization is held by so many government ministries around the world . UNEP also surprised me in terms of the competence , the talent and the dedication of many of the staff that work within the organization . However , UNEP also confirms something that I saw before and something that I see now that I am inside this institution . Namely that we have , to some extent , a washing line along which we hang many activities but question marks hang over the overall impact that UNEP makes on the broader development questions facing this planet . The other question mark is , above all , what kind of institutions do governments really want in the 21st century when they look at UNEP today ? I believe we have enormous challenges . Some of these challenges fall within the purview of the management , the Executive Director and his staff . I will report in a moment on how I have begun to tackle them in the hope of receiving your backing and support . But many of them also relate equally to you as our Governing Council and how you empower this institution--indeed how you empower us as staff in the Secretariat and also how you empower the United Nations to tackle the great questions of environmental sustainability in our time . 2006 was not always an easy year . Many crises , many conflicts and many tragedies were in the news and UNEP struggled to keep up with them . However , we have continued to implement the programme of work that you approved two years ago . I believe that we are making significant progress , even though the bigger question of where the ultimate destination is still hangs in the air . We also expanded- and I think that is an important part of the legacy of my predecessor-the constituencies that understand environment not as a threat , but actually as an ally and as perhaps their greatest potential partner in the future . Let me use as an example the Labour and Environment Summit that was organized in Nairobi last year . It has led has led to a very intense dialogue with the trade unions around the world . The summit addressed the question of whether the environment means job losses or can jobs actually be created through a more environmentally sustainable approach to development decisions . Honorable Ministers let me here also mention the Deputy Executive Director . The smooth transition between the previous Executive Director and myself owes a great deal to my colleague and deputy Shafqat Kakakhel . He held the fort for three months and he has been an incredible ally and support in helping me to find my way into and around this institution during these first few months . Here and I would like to thank him for his dedication to this institution which he has served for many years . Please will you join me in a round of applause for Shafqat . Together , the Deputy Executive Director and I have set out with our staff on a process of reviewing , rethinking and also reforming UNEP along the lines that many of you have requested . I think the strategic challenge that we face essentially falls into two categories : a programmatic one and a managerial one . The programmatic one is the phenomenon I referred to earlier-- many dispersed and under resourced activities , often spread too thinly and not necessarily following a cohesive purpose . Also ones that ultimately fail to answer the question of where does UNEP have the greatest opportunity to make a difference rather than just being present . This is a question where I look to you for guidance in this GC and in future ones . Honorable ministers , I set out initially by looking not outside the institution but essentially inside the institution for some of these answers . There have also been discussions with the Committee of Permanent Representatives ( CPR ) and we have the also the report by Dahlberg that was commissioned by my predecessor . The upshot of all this was the identification of a number of task teams , drawn from within my team at UNEP , to address questions within the institution and they fall broadly into three areas . The first one falls into the programmatic , cohesion and coordination theme and the question of how the Bali Strategic Plan fundamentally influences the way UNEP does business . We had to do this in less than six weeks after my arrival because of the deadlines that were put in place at the time by the UN planning processes and in order to be ready for this Governing Council . The 2008-2009 programme does not yet capture the full logic of trying to make Bali part and parcel of the way we do business . However , I think you can see in the programme significant efforts to take the strategic guidance that you as member states have given to UNEP—in other words to be more responsive in terms of country and regional needs and to be more effective in capacity building and in technology support . In a nutshell , this path is aimed at truly developing the resources inside the institution to respond to the needs of many more governments than we have done in the past rather than UNEP exhausting itself in say five years of pilot projects implemented in three countries . Some have looked at the Bali Strategic Plan as somehow a separate programme within UNEP . I have come back to you through the CPR , and also now through the Governing Council , to argue that if we try and follow that path there are two fundamental problems . The Bali Strategic Plan has a menu of issues and areas of work that overlaps with close to 70 % of the entire UNEP programme of work . It is thus very difficult to distinguish when , for example , you are doing biodiversity capacity-building or chemicals work if this falls under the so-called Bali mandate or is part of the programme of work . So to think of Bali and the programme of work as separate would to my mind create an artificial sense of parallel activities that ultimately would not add value to what we are trying to do . It is equally important to note that the Bali Strategic Plan will not translate into 50 million dollars of extra funding for UNEP , at least right now . So I would propose to you that the programme of work for 2008-2009 needs to prove that everything we do in this institution ultimately echoes to the intent and the directions that you set out in the Bali Strategic Plan . Therefore let me underline my commitment to Bali , not in the context of a shopping list . But in a way that reflects the intentions you had when you requested this direction UNEP at the time-- when governments requested a different response from the programme of this institution . I will also do this to the best of UNEP 's abilities and subject to ( and this is not an excuse ) resources being made available . There are discussions to be had on this subject because so far this plan has not translated into any additional resources . Honorable ministers , I also approached the issue of management by looking at the financial and administrative and organizational aspects of the institution with another task team . We have identified significant potential for reforming the business processes , the administration of this institution and the financial management . I believe there are significant gains to be made here--gains in terms of the efficiency of our own management , but ultimately also in terms of our accountability to you as member states . I view some of the reports that we provide you currently as being of very little analytical value to member states . There are lists and there are long reports of inputs and activities that UNEP has implemented . However , the question remains as to whether they really deliver clarity on whether this institution is being effective in implementing its mandate ? I personally do not believe that this is the case . So I have initiated a number of reforms that will begin in the next few weeks . Some however have already begun in terms of looking at how we can improve the transparency and accountability of this institution and , through that also to improve the capacity of managers to manage effectively . Efficiency and effectiveness are a primary issue here . Another related area is the Information and Communication Technology framework of this institution . You would be surprised at the level of ICT development we have in UNEP today--I consider it to be between 15 and 20 years behind . I do not say this to offend my colleagues in the UN Office at Nairobi ( UNON ) who have tried in the last couple of years to make significant progress on these issues . But we are an institution that operates far below the threshold of the horizons of what modern technology can offer ( including the difficulties of me sending an email to all my staff ) . This is the reality in 2007. We have no knowledge network , we have no intranet and we do not have some of the most basic modern management and analytical tools that could boost the efficiency of this institution and the productivity of its staff . Equally on human resources I also put a task team together . One , because on my arrival I found that there was a major backlog in recruitment terms and two , to take the opportunity to look at the possibility for recruiting fresh blood into the institution . We advertised positions that were in the recruitment pipeline and I 'm pleased to say that for 46 of the P and D level positions we received 13,000 applications . I only want you to know about this because of the work and effort that goes into screening these applications and identifying candidates . It also goes to show that in terms of diversity and professional competence , UNEP in Nairobi does not have problems in recruitment . However , in terms of gender we do have problems . In terms of the D positions in particular only one out of nine applicants was a woman . This is a major problem for this institution in terms of gender equity as well as for the whole question of gender in the context of our environmental work . I am therefore also addressing the issue of human resources management by putting in place a human resources management strategy . UNON is contracted to administer our human resources . But within the institution we really have no planning in terms of future career development and for identifying the skills we need . We also need to look at people within the institution who , with particular training , could be promoted or rise through the ranks . This also responds to the call of the Secretary-General Ban Ki-Moon for greater mobility . I will not go into the details of the new appointments I 've made as I think you all have received the information . However I am pleased to say that in 7 months , and that is unfortunately the time it took me , I have virtually a full senior management team in place . In addition , I will complete in a few weeks time the formation of a strategic implementation team . I mention this to you because I want to underline the seriousness with which I take our capacity to reform the institution and in the way it manages itself . This implementation team will have 5 senior advisors for a limited time of three years working under Shafqat and myself and in cooperation with the Divisional Directors . The team will be tasked with moving reforms forward in five areas — these are programme coordination and cohesion . resource mobilization , financial management and budgeting . human resources management implementation of the gender action plan reform of the information and communication technology infrastructure and processes of the institution . All of this has been developed in what for reference purposes I have called the 3 , 12 , 24-month framework . By the end of 2007 , the 12 month part of this initiative will be completed so that the process of change management is not an open-ended affair but has a clear end point . We will implement our activities with these new arrangements so that by the end of 24 months we should be able to account to you whether they have made a difference . Honorable Ministers , I would like to mention 4 filters as I have called them that also encapsulate my priorities and will also guide my future direction of this institution . The first is my avowed belief that the nexus between the economy and the environment is one that must be central to UNEP 's work now and over the coming years . We are at a point in time where environmental considerations have very powerful economic rationales . We do not simply have to argue from a biological , ethical or other point of view . What happens to the environment matters to the economy and visa versa . The return on investment in environmental assets and sustainable management of our resources has immediate and direct impacts on our economies . I believe that is an area of work where UNEP truly can provide the kind of nexus that we are looking for . Secondly , UNEP must first and foremost be clearly understood and defined as the environment programme of the United Nations . Environmental activities happen elsewhere within the UN family—for example work on sustainable fisheries or sustainable health policies or sustainable industrialization rests with other agencies and organizations too . This then begs the question of where UNEP fits within the context of a family of institutions that make up the multilateral system . Therefore a first priority is to rethink and revisit the issue of how we best work together with our fellow agencies and also how we use the Environmental Management Group effectively and successfully . In other words , how do we make the EMG truly a platform able to respond to the Secretary-General 's call to make the UN family work together on these issues ? I 'm sure it will not come as a surprise when I tell you that UNEP to this day does not offset its CO2 emissions . Indeed across the UN we have less in place in these good environmental housekeeping areas than most medium-scale businesses in many economies . It is really not a shining example to those we exhort to do better—be they countries , or entrepreneurs or industry or civil society or consumer . So we have many things to do together as a UN family . In terms of UNEP , I believe that we have to prove through example and leadership that we truly are the environment programme first and foremost-- and only secondly as an institution that thinks about its own place and its own funding in that system as a whole . This will not be easy , but I believe that the whole UN reform momentum that is now in place will help us to move forward on this front . I think the fact that our colleagues are here today from UNDP , UNIDO , WTO , UNWTO , and UN-Habitat is proof that the message of cohesion and cooperation is alive and well and moving in that direction . I had planned some more substantive elements of my presentation but time flies . So I would like to end by touching again and expanding on my theme at the outset . Why does this Governing Council matter ? I touched upon some of the context and the extraordinary times within which this meeting is taking place , not least in respect to climate change . However , we also have two topics on our agenda in the GMEF as well as a number of decisions in the Committee of the Whole that are potentially far-reaching . The discussion about globalization and the environment is not meant to be a philosophical discourse . It is to take seriously the notion that environment and economics are inextricably linked in the 21st century and that UNEP , the GC and environment ministers must find a clearer voice on how that linkage can be made reality . We have looked at the discussions around globalization and environment as a possibility for ministers of the environment to engage with one another on how to maximize the opportunities and minimize the risks of globalization . This is inextricably linked too with the question of UN reform and how , in a globalized economy the future of global environmental governance will evolve . We have today a situation where the economic instruments are at the centre stage of negotiations at the WTO and many other multilateral fora . However the truth is that global environmental governance-- the elements that ensure sustainability- are lagging far behind . You only have to look at the Probo Koala toxic dumping incident in Cote d'Ivoire or the accumulating levels of electronic waste to witness this gap . Cases like the Probo Koala are some of the darker sides or what one might call the underbelly of this enormous machine called globalization that is affecting people in many places across the globe . Honorable Ministers , We have with us this week Ambassadors Maura and Beruga of Switzerland and Mexico in New York They , as you know , have been asked by the General Assembly to facilitate the discussions on the future of global environmental governance . They will be joining us to receive from you , as ministers of the environment , a sense of direction and purpose from this week 's dialogue . I hope it will inform them and take us further forward in addressing the question of what kind of UNEP the world needs now and in the future ; what kind of global environmental governance framework is needed ; how do we bring some cohesion and also bring about the synergies that so many of you have looked for . These are discussions and debates that may not be answered in one meeting but I think leadership , guidance and direction needs to emerge from a meeting of the world 's environment ministers in order to provide impetus to these processes . Ladies and gentlemen , I will conclude my remarks by saying that as a new Executive Director I am deeply committed to this institution for a very simple reason and the same reason I became a candidate for this post . I believe that unless governments can , in the years ahead find a different , a better and a more collective approach to working together on environmental issues , all other efforts - by NGOs , in the market place and within the private sector - will ultimately be constrained . Citizens , but also companies in the global marketplace , look to the intergovernmental process to provide the frameworks within which to operate . For it is within these frameworks that nations and regions of the world have the greatest possibility to shape the future direction of our economic , social and ultimately our cultural developments . UNEP is perceived as weak by some , criticized as perhaps ineffectual by others within the multilateral system and sometimes held up in the media as a talk shop where real action rarely materializes . But I have already found in UNEP so many examples of what can be done when nations agree . Thus it would be a tragedy to not give this institution the lease of life it deserves at the beginning of the 21st century . There are many who are involved in giving that lease of life to the environmental sustainability agenda--but it begins with you , as ministers of the environment . No one else will take that responsibility . It is not for the sake of the United Nations Environment Programme that either I or you are here . It is for the sake of humanity and for the sake of sustainable development on this planet . For let us not forget that this planet is indeed in deep trouble . So I appeal to you , this week in Nairobi , to give voice to the sentiment that we have the possibility of making a different future . I am committed to working with you in the next four years because I believe we truly have the possibility of making a difference . Thank you . 